Exemple #1
0
        /// <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()));
        }
Exemple #3
0
        /// <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);
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        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()));
      }