Esempio n. 1
0
        /// <summary>
        /// Create a DirectShape, and set its options accordingly.
        /// </summary>
        /// <param name="doc">The document.</param>
        /// <param name="categoryId">The category of the DirectShape.</param>
        /// <param name="dataGUID">The GUID of the data creating the DirectShape.</param>
        /// <param name="geomObjs">The list of geometries to add to the DirectShape.</param>
        /// <param name="id">The id of the IFCEntity object creating the DirectShape.</param>
        /// <returns>The DirectShape.</returns>
        static public DirectShape CreateElement(Document doc, ElementId categoryId, string dataGUID, IList <GeometryObject> geomObjs, int id, IFCEntityType entityType)
        {
            string      appGUID     = Importer.ImportAppGUID();
            DirectShape directShape = DirectShape.CreateElement(doc, GetDSValidCategoryId(doc, categoryId, id));

            directShape.ApplicationId     = appGUID;
            directShape.ApplicationDataId = dataGUID;

            // Note: we use the standard options for the DirectShape that is created.  This includes but is not limited to:
            // Referenceable: true.
            // Room Bounding: if applicable, user settable.

            if (IFCImportFile.TheFile.Options.UseStreamlinedOptions)
            {
                // Disable referencing for performance purposes.
                DirectShapeOptions options = directShape.GetOptions();
                options.ReferencingOption = DirectShapeReferencingOption.NotReferenceable;
                directShape.SetOptions(options);
            }

            // This is used in some places to create something not related to an IFCEntity
            if (!Importer.TheProcessor.CreateOrUpdateElement(id, dataGUID, entityType.ToString(),
                                                             categoryId.IntegerValue, geomObjs))
            {
                if (geomObjs != null)
                {
                    directShape?.SetShape(geomObjs);
                }
            }

            return(directShape);
        }
Esempio n. 2
0
        /// <summary>
        /// Create a DirectShape, and set its options accordingly.
        /// </summary>
        /// <param name="doc">The document.</param>
        /// <param name="categoryId">The category of the DirectShape.</param>
        /// <param name="dataGUID">The GUID of the data creating the DirectShape.</param>
        /// <param name="geomObjs">The list of geometries to add to the DirectShape.</param>
        /// <param name="id">The id of the IFCEntity object creating the DirectShape.</param>
        /// <returns>The DirectShape.</returns>
        static public DirectShape CreateElement(Document doc, ElementId categoryId, string dataGUID, IList <GeometryObject> geomObjs, int id)
        {
            string      appGUID     = Importer.ImportAppGUID();
            DirectShape directShape = DirectShape.CreateElement(doc, GetDSValidCategoryId(doc, categoryId, id));

            directShape.ApplicationId     = appGUID;
            directShape.ApplicationDataId = dataGUID;

            // Note: we use the standard options for the DirectShape that is created.  This includes but is not limited to:
            // Referenceable: true.
            // Room Bounding: if applicable, user settable.

            if (IFCImportFile.TheFile.Options.UseStreamlinedOptions)
            {
                // Disable referencing for performance purposes.
                DirectShapeOptions options = directShape.GetOptions();
                options.ReferencingOption = DirectShapeReferencingOption.NotReferenceable;
                directShape.SetOptions(options);
            }


            if (directShape != null && geomObjs != null)
            {
                directShape.SetShape(geomObjs);
            }

            return(directShape);
        }
Esempio n. 3
0
        public static bool CreateAreaSolid(Document doc, AreaProperties ap, out MassProperties createdMass)
        {
            bool created = false;

            createdMass = null;
            try
            {
                string appGuid = doc.Application.ActiveAddInId.GetGUID().ToString();
                if (null != ap.Linked3dMass)
                {
                    //delete existing mass first
                    MassProperties existingMass = ap.Linked3dMass;
                    doc.Delete(new ElementId(existingMass.MassId));
                }

                IList <GeometryObject> areaGeometries = new List <GeometryObject>();
                if (ap.AreaProfile.Count > 0)
                {
                    XYZ   extrusionDir = new XYZ(0, 0, 1);
                    Solid areaSolid    = GeometryCreationUtilities.CreateExtrusionGeometry(ap.AreaProfile, extrusionDir, ap.UserHeight);
                    if (null != areaSolid)
                    {
                        areaGeometries.Add(areaSolid);
                    }
                }
#if RELEASE2015 || RELEASE2016
                DirectShape createdShape = DirectShape.CreateElement(doc, new ElementId(massCategory), appGuid, ap.AreaId.ToString());
#else
                DirectShape createdShape = DirectShape.CreateElement(doc, new ElementId(massCategory));
                createdShape.ApplicationId     = appGuid;
                createdShape.ApplicationDataId = ap.AreaId.ToString();
#endif


#if RELEASE2016
                DirectShapeOptions options = createdShape.GetOptions();
                options.ReferencingOption = DirectShapeReferencingOption.Referenceable;
                createdShape.SetOptions(options);
#endif
                createdShape.SetShape(areaGeometries);
                createdShape.SetName(ap.AreaName);

                Element massElement = doc.GetElement(createdShape.Id);
                if (null != massElement)
                {
                    createdMass = new MassProperties(massElement);
                    createdMass.SetHostInfo(ap.AreaUniqueId, SourceType.Areas, ap.AreaCenterPoint, ap.UserHeight);
                    bool stored = MassDataStorageUtil.SetLinkedHostInfo(massElement, SourceType.Areas.ToString(), ap.AreaUniqueId, ap.AreaCenterPoint, ap.UserHeight);
                    created = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to create area solid.\n" + ex.Message, "Create Area Solid", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            return(created);
        }
Esempio n. 4
0
        public void ProcessMultipleSAT()
        {
            List <ElementId> importIds = new List <ElementId>();

            // create and set new SAT options
            SATImportOptions satOptions = new SATImportOptions();

            satOptions.Placement = ImportPlacement.Origin;
            satOptions.ColorMode = ImportColorMode.BlackAndWhite;
            satOptions.Unit      = ImportUnit.Millimeter;

            using (Transaction trans = new Transaction(m_doc, "UpdateSAT"))
            {
                trans.Start();

                List <GeometryObject> geoObjList = new List <GeometryObject>();
                DirectShape           ds         = null;
                ElementId             currentId;

                try
                {
                    currentId = m_doc.Import(@"B:\Rhino\OpenNURBS\v5_example_file.sat", satOptions, m_doc.ActiveView);
                    importIds.Add(currentId);
                }
                catch (Exception)
                {
                    currentId = ElementId.InvalidElementId;
                }
                // extract geometry from import instance
                ImportInstance ii       = m_doc.GetElement(currentId) as ImportInstance;
                Options        gOptions = new Options();
                gOptions.ComputeReferences = true;
                GeometryElement geoElement = ii.get_Geometry(gOptions);

                // get solids from geometry element
                List <GeometryObject> tempGeoList = FindElementGeometry(geoElement);
                foreach (GeometryObject go in tempGeoList)
                {
                    geoObjList.Add(go);
                }


                ds = DirectShape.CreateElement(m_doc, new ElementId((int)BuiltInCategory.OST_GenericModel));
                ds.SetShape(geoObjList);

                // set the Direct Shape options
                DirectShapeOptions dsOptions = ds.GetOptions();
                dsOptions.ReferencingOption = DirectShapeReferencingOption.Referenceable;
                ds.SetOptions(dsOptions);

                trans.Commit();

                trans.Start("Delete Elements");
                // clean up imported solids
                m_doc.Delete(importIds);
                trans.Commit();
            }
        }
Esempio n. 5
0
        public static bool CreateFloorFace(Document doc, FloorProperties fp, out MassProperties createdMass)
        {
            bool created = false;

            createdMass = null;
            try
            {
                string appGuid = doc.Application.ActiveAddInId.GetGUID().ToString();
                if (null != fp.Linked2dMass)
                {
                    //delete existing mass first
                    MassProperties existingMass = fp.Linked2dMass;
                    doc.Delete(new ElementId(existingMass.MassId));
                }

                IList <GeometryObject> floorGeometries = GetGeometryObjectsFromFace(fp.TopFace);

#if RELEASE2015 || RELEASE2016
                DirectShape createdShape = DirectShape.CreateElement(doc, new ElementId(massCategory), appGuid, fp.FloorId.ToString());
#else
                DirectShape createdShape = DirectShape.CreateElement(doc, new ElementId(massCategory));
                createdShape.ApplicationId     = appGuid;
                createdShape.ApplicationDataId = fp.FloorId.ToString();
#endif

#if RELEASE2016
                DirectShapeOptions options = createdShape.GetOptions();
                options.ReferencingOption = DirectShapeReferencingOption.Referenceable;
                createdShape.SetOptions(options);
#endif
                createdShape.SetShape(floorGeometries);
                createdShape.SetName(fp.FloorName);

                Element massElement = doc.GetElement(createdShape.Id);
                if (null != massElement)
                {
                    createdMass = new MassProperties(massElement);
                    createdMass.MassElementType = MassType.MASS2D;
                    createdMass.SetHostInfo(fp.FloorUniqueId, SourceType.Floors, fp.FloorSolidCentroid, 0);
                    bool stored = MassDataStorageUtil.SetLinkedHostInfo(massElement, SourceType.Floors.ToString(), fp.FloorUniqueId, fp.FloorSolidCentroid, 0);
                    created = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to create room solid.\n" + ex.Message, "Create Room Solid", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            return(created);
        }
        public static DirectShape CreateDirectShape(Document doc, IList <GeometryObject> resultList)
        {
            DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));

            ds.ApplicationId     = "Application id";
            ds.ApplicationDataId = "Geometry object id";
            ds.Name = "Load area";
            DirectShapeOptions dso = ds.GetOptions();

            dso.ReferencingOption = DirectShapeReferencingOption.Referenceable;
            ds.SetOptions(dso);
            ds.SetShape(resultList);
            doc.Regenerate();
            return(ds);
        }
Esempio n. 7
0
        private static void CreateDirectShape(Document doc, IList <GeometryObject> geometry)
        {
            DirectShapeLibrary directShapeLibrary = DirectShapeLibrary.GetDirectShapeLibrary(doc);
            DirectShapeType    directShapeType    = DirectShapeType.Create(doc, "NavisWorksShape", new ElementId(BuiltInCategory.OST_GenericModel));

            directShapeType.SetShape(geometry);
            directShapeLibrary.AddDefinitionType("NavisWorksShape", directShapeType.Id);

            DirectShape ds = DirectShape.CreateElementInstance(doc, directShapeType.Id, directShapeType.Category.Id, "NavisWorksShape", Transform.Identity);

            ds.SetTypeId(directShapeType.Id);
            ds.ApplicationId     = Assembly.GetExecutingAssembly().GetType().GUID.ToString();
            ds.ApplicationDataId = Guid.NewGuid().ToString();

            DirectShapeOptions dsOptions = ds.GetOptions();

            dsOptions.ReferencingOption = DirectShapeReferencingOption.Referenceable;
            ds.SetOptions(dsOptions);

            ds.SetShape(geometry);
        }