/// <summary> /// get element's support information /// </summary> /// <param name="analyticalModel"> element's analytical model</param> /// <returns></returns> private string[] GetSupportInformation(AnalyticalModel analyticalModel) { // supportInformation[0] store supportType // supportInformation[1] store other informations string[] supportInformations = new string[2] { "", "" }; IList <AnalyticalModelSupport> supports = analyticalModel.GetAnalyticalModelSupports(); // "Supported" flag indicates if the Element is completely supported. // AnalyticalModel Support list keeps track of all supports. if (!analyticalModel.IsElementFullySupported())// judge if supported { if (0 == supports.Count) { supportInformations[0] = "not supported"; } else { foreach (AnalyticalModelSupport support in supports) { supportInformations[0] = supportInformations[0] + support.GetSupportType().ToString() + ", "; } } } else { if (0 == supports.Count) { supportInformations[1] = "supported but no more information"; } else { foreach (AnalyticalModelSupport support in supports) { supportInformations[0] = supportInformations[0] + support.GetSupportType().ToString() + ", "; } } } return(supportInformations); }
Stream(ArrayList data, AnalyticalModel aModel) { data.Add(new Snoop.Data.ClassSeparator(typeof(AnalyticalModel))); try { data.Add(new Snoop.Data.Object("GetCurve", aModel.GetCurve())); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("GetCurve", ex)); } data.Add(new Snoop.Data.Enumerable("GetCurves", aModel.GetCurves(AnalyticalCurveType.ActiveCurves))); try { data.Add(new Snoop.Data.Xyz("GetPoint", aModel.GetPoint())); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("GetPoint", ex)); } data.Add(new Snoop.Data.Enumerable("GetAnalyticalModelSupports", aModel.GetAnalyticalModelSupports())); }
/// <summary> /// get all the required information of selected elements and store them in a data table /// </summary> /// <param name="selectedElements"> /// all selected elements in Revit main program /// </param> /// <returns> /// a data table which store all the required information /// </returns> //private DataTable StoreInformationInDataTable(ElementSet selectedElements) // 2015, jeremy private DataTable StoreInformationInDataTable(Document doc, ICollection <ElementId> selectedElementIds) // 2016, jeremy { DataTable informationTable = CreateDataTable(); informationTable.BeginLoadData(); string typeName = ""; string infoStr1 = ""; string infoStr2 = ""; List <AnalyticalModelSupport> analyticalModelSupports = new List <AnalyticalModelSupport>(); //bool getInformationflag; foreach (ElementId id in selectedElementIds) { Element element = doc.GetElement(id); typeName = string.Empty; //getInformationflag = false; AnalyticalModel am = element.GetAnalyticalModel(); if (null == am) { continue; } analyticalModelSupports = am.GetAnalyticalModelSupports() as List <AnalyticalModelSupport>; GetSupportInformation(analyticalModelSupports, ref infoStr1, ref infoStr2); // Add a new row with the information DataRow newRow = informationTable.NewRow(); newRow["Id"] = element.Id.IntegerValue.ToString(); newRow["Element Type"] = typeName; newRow["Support Type"] = infoStr1; newRow["Remark"] = infoStr2; informationTable.Rows.Add(newRow); } informationTable.EndLoadData(); return(informationTable); }
private void Stream(ArrayList data, AnalyticalModel aModel) { data.Add(new Snoop.Data.ClassSeparator(typeof(AnalyticalModel))); try { data.Add(new Snoop.Data.Object("GetCurve", aModel.GetCurve())); } catch (System.Exception ex){ data.Add(new Snoop.Data.Exception("GetCurve", ex)); } data.Add(new Snoop.Data.Enumerable("GetCurves", aModel.GetCurves(AnalyticalCurveType.ActiveCurves))); try { data.Add(new Snoop.Data.Xyz("GetPoint", aModel.GetPoint())); } catch (System.Exception ex){ data.Add(new Snoop.Data.Exception("GetPoint", ex)); } data.Add(new Snoop.Data.Enumerable("GetAnalyticalModelSupports", aModel.GetAnalyticalModelSupports())); data.Add(new Snoop.Data.Bool("CanApproximate", aModel.CanApproximate())); //data.Add(new Snoop.Data.Bool("CanDisable", aModel.CanDisable())); //data.Add(new Snoop.Data.Bool("CanDisableAutoDetect", aModel.CanDisableAutoDetect())); data.Add(new Snoop.Data.Bool("CanHaveRigidLinks", aModel.CanHaveRigidLinks())); //TF data.Add(new Snoop.Data.Bool("CanSetAnalyticalOffset", aModel.CanSetAnalyticalOffset())); data.Add(new Snoop.Data.Bool("CanUseHardPoints", aModel.CanUseHardPoints())); data.Add(new Snoop.Data.Enumerable("Analytical Model Supports", aModel.GetAnalyticalModelSupports())); data.Add(new Snoop.Data.Object("Analyze As", aModel.GetAnalyzeAs())); try { data.Add(new Snoop.Data.Xyz("Offset EndOrTop", aModel.GetOffset(AnalyticalElementSelector.EndOrTop))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset EndOrTop", ex)); } try { data.Add(new Snoop.Data.Xyz("Offset StartOrBase", aModel.GetOffset(AnalyticalElementSelector.StartOrBase))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset StartOrBase", ex)); } try { data.Add(new Snoop.Data.Xyz("Offset Whole", aModel.GetOffset(AnalyticalElementSelector.Whole))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset Whole", ex)); } /* TF if (aModel.HasSweptProfile()) data.Add(new Snoop.Data.Object("Swept profile", aModel.GetSweptProfile())); else data.Add(new Snoop.Data.String("Swept profile", "No swept profile.")); */ if (aModel is AnalyticalModelSurface) Stream(data, (AnalyticalModelSurface)aModel); if (aModel is AnalyticalModelStick) Stream(data, (AnalyticalModelStick)aModel); }
/// <summary> /// Calculates span value for a beam. /// </summary> /// <param name="exporterIFC"> /// The ExporterIFC object. /// </param> /// <param name="extrusionCreationData"> /// The IFCExtrusionCreationData. /// </param> /// <param name="element"> /// The element to calculate the value. /// </param> /// <param name="elementType"> /// The element type. /// </param> /// <returns> /// True if the operation succeed, false otherwise. /// </returns> public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType) { // Check the override first from "IfcSpan" parameter, if not overriden use the geometry data from extrusion double spanVal; if (ParameterUtil.GetDoubleValueFromElementOrSymbol(element, "IfcSpan", out spanVal) != null) { m_Span = UnitUtil.ScaleLength(spanVal); return(true); } if (extrusionCreationData == null || MathUtil.IsAlmostZero(extrusionCreationData.ScaledLength)) { return(false); } m_Span = extrusionCreationData.ScaledLength; AnalyticalModel elemAnalyticalModel = element.GetAnalyticalModel(); if (elemAnalyticalModel != null) { IList <AnalyticalModelSupport> supports = elemAnalyticalModel.GetAnalyticalModelSupports(); if (supports != null && supports.Count > 0) { if (supports.Count == 2) { AnalyticalSupportType supportType1 = supports[0].GetSupportType(); AnalyticalSupportType supportType2 = supports[1].GetSupportType(); // If there are exactly 2 supports, calculate the distance between the supports for Span (if the type is PointSupport) if (supportType1 == AnalyticalSupportType.PointSupport && supportType2 == AnalyticalSupportType.PointSupport) { XYZ support1 = supports[0].GetPoint(); XYZ support2 = supports[1].GetPoint(); m_Span = UnitUtil.ScaleLength(support1.DistanceTo(support2)); } // CurveSUpport or SurfaceSupport?? else { if (supportType1 == AnalyticalSupportType.PointSupport) { XYZ supportP = supports[0].GetPoint(); if (supportType2 == AnalyticalSupportType.CurveSupport) { Curve supportC = supports[1].GetCurve(); m_Span = UnitUtil.ScaleLength(supportC.Distance(supportP)); } else if (supportType2 == AnalyticalSupportType.SurfaceSupport) { Face supportF = supports[1].GetFace(); m_Span = UnitUtil.ScaleLength(supportF.Project(supportP).Distance); } } else if (supportType1 == AnalyticalSupportType.CurveSupport) { Curve supportC = supports[0].GetCurve(); if (supportType2 == AnalyticalSupportType.PointSupport) { XYZ supportP = supports[1].GetPoint(); m_Span = UnitUtil.ScaleLength(supportC.Distance(supportP)); } else if (supportType2 == AnalyticalSupportType.SurfaceSupport) { Face supportF = supports[1].GetFace(); // TODO, how to calculate a distance from a Curve to a Face? } } else if (supportType1 == AnalyticalSupportType.SurfaceSupport) { Face supportF = supports[0].GetFace(); if (supportType2 == AnalyticalSupportType.PointSupport) { XYZ supportP = supports[1].GetPoint(); m_Span = UnitUtil.ScaleLength(supportF.Project(supportP).Distance); } else if (supportType2 == AnalyticalSupportType.CurveSupport) { Curve supportC = supports[1].GetCurve(); // TODO, how to calculate a distance from a Curve to a Face? } } } } else if (supports.Count > 2) { // If there are more than 2 supports, which Span to take?? } else { // If only one or less support // Otherwise do nothing, leave it to the extrusion length } } else { // No support, do nothing. Leave the Span to be the length of the entire beam } } return(true); }
Stream(ArrayList data, AnalyticalModel aModel) { data.Add(new Snoop.Data.ClassSeparator(typeof(AnalyticalModel))); try { data.Add(new Snoop.Data.Object("GetCurve", aModel.GetCurve())); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("GetCurve", ex)); } data.Add(new Snoop.Data.Enumerable("GetCurves", aModel.GetCurves(AnalyticalCurveType.ActiveCurves))); try { data.Add(new Snoop.Data.Xyz("GetPoint", aModel.GetPoint())); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("GetPoint", ex)); } data.Add(new Snoop.Data.Enumerable("GetAnalyticalModelSupports", aModel.GetAnalyticalModelSupports())); data.Add(new Snoop.Data.Bool("CanApproximate", aModel.CanApproximate())); //data.Add(new Snoop.Data.Bool("CanDisable", aModel.CanDisable())); //data.Add(new Snoop.Data.Bool("CanDisableAutoDetect", aModel.CanDisableAutoDetect())); data.Add(new Snoop.Data.Bool("CanHaveRigidLinks", aModel.CanHaveRigidLinks())); //TF data.Add(new Snoop.Data.Bool("CanSetAnalyticalOffset", aModel.CanSetAnalyticalOffset())); data.Add(new Snoop.Data.Bool("CanUseHardPoints", aModel.CanUseHardPoints())); data.Add(new Snoop.Data.Enumerable("Analytical Model Supports", aModel.GetAnalyticalModelSupports())); data.Add(new Snoop.Data.Object("Analyze As", aModel.GetAnalyzeAs())); try { data.Add(new Snoop.Data.Xyz("Offset EndOrTop", aModel.GetOffset(AnalyticalElementSelector.EndOrTop))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset EndOrTop", ex)); } try { data.Add(new Snoop.Data.Xyz("Offset StartOrBase", aModel.GetOffset(AnalyticalElementSelector.StartOrBase))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset StartOrBase", ex)); } try { data.Add(new Snoop.Data.Xyz("Offset Whole", aModel.GetOffset(AnalyticalElementSelector.Whole))); } catch (System.Exception ex) { data.Add(new Snoop.Data.Exception("Offset Whole", ex)); } /* TF * if (aModel.HasSweptProfile()) * data.Add(new Snoop.Data.Object("Swept profile", aModel.GetSweptProfile())); * else * data.Add(new Snoop.Data.String("Swept profile", "No swept profile.")); */ if (aModel is AnalyticalModelSurface) { Stream(data, (AnalyticalModelSurface)aModel); } if (aModel is AnalyticalModelStick) { Stream(data, (AnalyticalModelStick)aModel); } }
/// <summary> /// get element's support information /// </summary> /// <param name="analyticalModel"> element's analytical model</param> /// <returns></returns> private string[] GetSupportInformation(AnalyticalModel analyticalModel) { // supportInformation[0] store supportType // supportInformation[1] store other informations string[] supportInformations = new string[2] { "", "" }; IList<AnalyticalModelSupport> supports = analyticalModel.GetAnalyticalModelSupports(); // "Supported" flag indicates if the Element is completely supported. // AnalyticalModel Support list keeps track of all supports. if (!analyticalModel.IsElementFullySupported())// judge if supported { if (0 == supports.Count) { supportInformations[0] = "not supported"; } else { foreach (AnalyticalModelSupport support in supports) { supportInformations[0] = supportInformations[0] + support.GetSupportType().ToString() + ", "; } } } else { if (0 == supports.Count) { supportInformations[1] = "supported but no more information"; } else { foreach (AnalyticalModelSupport support in supports) { supportInformations[0] = supportInformations[0] + support.GetSupportType().ToString() + ", "; } } } return supportInformations; }
Stream(ArrayList data, AnalyticalModel aModel) { data.Add(new Snoop.Data.ClassSeparator(typeof(AnalyticalModel))); try { data.Add(new Snoop.Data.Object("GetCurve", aModel.GetCurve())); } catch (System.Exception ex){ data.Add(new Snoop.Data.Exception("GetCurve", ex)); } data.Add(new Snoop.Data.Enumerable("GetCurves", aModel.GetCurves(AnalyticalCurveType.ActiveCurves))); try { data.Add(new Snoop.Data.Xyz("GetPoint", aModel.GetPoint())); } catch (System.Exception ex){ data.Add(new Snoop.Data.Exception("GetPoint", ex)); } data.Add(new Snoop.Data.Enumerable("GetAnalyticalModelSupports", aModel.GetAnalyticalModelSupports())); }