コード例 #1
0
        public static ICollection <SemConnectedElements> Retrieve(SemElement assembly)
        {
            var ret = new List <SemConnectedElements>();

            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelConnectsElements")) return null;
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelConnectsElements").Values;

            //if (collection.Count != 1) throw new NotImplementedException();
            foreach (var item in collection)
            {
                var theItem = item as IfcRelConnectsElements;
                if (theItem == null)
                {
                    continue;
                }
                if (theItem.RelatingElement.EIN == assembly.IfcObject.EIN)
                {
                    var connected = theItem as IfcRelConnectsElements;
                    if (connected == null)
                    {
                        continue;
                    }
                    var semConnected = new SemConnectedElements {
                        IfcRelConnectsElements = connected
                    };
                    SemInstanceDB.AddToExport(semConnected);
                    ret.Add(semConnected);
                }
            }
            return(ret);
        }
コード例 #2
0
ファイル: BbPolyline2D.cs プロジェクト: mind-peace/ifctoolkit
        /*
         * public static ICollection<BbPolyline2D> RetrievePolylines(BbElementGeometry surfaceGeometry)
         * {
         *  if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcPolyline")) return null;
         *
         *  var collection = EarlyBindingInstanceModel.TheModel.DataByType["IfcPolyline"].Values;
         *
         *  var ret = new List<BbPolyline2D>();
         *  foreach (var item in collection)
         *  {
         *      if (item.EIN == surfaceGeometry.ifcCurveBoundedPlane.OuterBoundary.EIN)
         *      {
         *          var polyLine = item as IfcPolyline;
         *          if (polyLine == null) continue;
         *          var semPolyLine = new BbPolyline2D { ifcPolyline = polyLine };
         *          BbInstanceDB.Add(semPolyLine);
         *          ret.Add(semPolyLine);
         *      }
         *
         *      var innerBoundries = surfaceGeometry.ifcCurveBoundedPlane.InnerBoundaries;
         *      foreach (var innerBoundry in innerBoundries)
         *      {
         *          if (item.EIN == innerBoundry.EIN)
         *          {
         *              var polyLine = item as IfcPolyline;
         *              if (polyLine == null) continue;
         *              var semPolyLine = new BbPolyline2D { ifcPolyline = polyLine };
         *              BbInstanceDB.Add(semPolyLine);
         *              ret.Add(semPolyLine);
         *          }
         *      }
         *  }
         *  return ret;
         * }
         */


        /// <summary>
        /// wrong implementation, do not use constructor
        /// </summary>
        /// <param name="polyLine"></param>
        /// <returns></returns>
        public static ICollection <BbCoordinate2D> RetrieveCartesianPoints(BbPolyline2D polyLine)
        {
            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcCartesianPoint")) return null;

            var collection = EarlyBindingInstanceModel.GetDataByType("IfcCartesianPoint").Values;

            var ret = new List <BbCoordinate2D>();

            foreach (var item in collection)
            {
                var points = polyLine.ifcPolyline.Points;
                foreach (var point in points)
                {
                    if (item.EIN == point.EIN)
                    {
                        var pt = item as IfcCartesianPoint;
                        if (pt == null)
                        {
                            continue;
                        }
                        //var semPoint = new BbCoordinate2D { ifcCartesianPoint = pt };
                        //BbInstanceDB.AddToExport(semPoint);
                        //ret.Add(semPoint);
                    }
                }
            }
            return(ret);
        }
コード例 #3
0
        public static BbWeldProperties Retrieve(BbWeld weld)
        {
            var ret = new BbWeldProperties();
            // Retrieving PropertySet
            //if (! EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelDefinesByProperties")) return null;
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelDefinesByProperties").Values;

            foreach (var item in collection)
            {
                var theItem = item as IfcRelDefinesByProperties;
                var pSet    = theItem.RelatingPropertyDefinition as IfcPropertySet;
                if (theItem == null)
                {
                    continue;
                }
                var relatedObjects = theItem.RelatedObjects;
                foreach (var relatedObject in relatedObjects)
                {
                    if (relatedObject.EIN == weld.IfcObject.EIN)
                    {
                        throw new NotImplementedException();

                        // wrong implementation
                        //var BbPropertySet = new BbPropertySet { _ifcRelDefinesByProperties = theItem, _ifcPropertySet = pSet };

                        ////Retrieving relevant attributes
                        //BbPropertySet.AssignTo(weld);
                        //ret.BbPropertySet = BbPropertySet;
                        //BbPropertySet.Name = pSet.Name;
                        //BbPropertySet.Description = pSet.Description;

                        //var properties = BbPropertySet._ifcPropertySet.HasProperties;
                        //foreach (var property in properties)
                        //{
                        //    var sProp = property as IfcPropertySingleValue;
                        //    var semSingleProperty = new BbSingleProperty { _ifcPropertySingleValue = sProp };
                        //    //BbInstanceDB.Add(semSingleProperty);
                        //    var iValue = sProp.NominalValue.Value;
                        //    var value = iValue as IfcLengthMeasure;

                        //    if (sProp.Name == "Throat Thickness")
                        //    { ret.ThroatThickness = value.Value; }
                        //    if (sProp.Name == "Leg Length")
                        //    { ret.LegLength = value.Value; }
                        //    BbPropertySet.Properties.Add(semSingleProperty);
                        //}
                        //// Check if this BbPropertySet already exist before adding to DB, if so add weld to its _assignedElements
                        //BbInstanceDB.AddToExport(BbPropertySet);
                    }
                }
            }
            return(ret);
        }
コード例 #4
0
ファイル: BbSitePart02.cs プロジェクト: mind-peace/ifctoolkit
        public static ICollection <BbSite> Retrieve()
        {
            var ifcList = (from p21 in EarlyBindingInstanceModel.GetDataByType("IfcSite").Values
                           select p21 as IfcSite).ToList();

            var sites = (
                from site in ifcList
                select new BbSite(site))
                        .ToList();

            BbInstanceDB.AddToImport(sites);

            return(sites);
        }
コード例 #5
0
ファイル: SemBeamType.cs プロジェクト: mind-peace/ifctoolkit
        public static SemBeamType Retrieve(SemMainPiece mainPiece)
        {
            if (mainPiece.IfcObject.GetType() == typeof(IfcBeam))
            {
                var ret = new SemBeamType();
                //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelDefinesByType")) return null;
                var collection1 = EarlyBindingInstanceModel.GetDataByType("IfcRelDefinesByType").Values;
                //if (collection.Count != 1) throw new NotImplementedException();
                foreach (var item in collection1)
                {
                    var theItem = item as IfcRelDefinesByType;
                    if (theItem == null)
                    {
                        continue;
                    }

                    foreach (var a in theItem.RelatedObjects)
                    {
                        if (a.EIN == mainPiece.IfcObject.EIN)
                        {
                            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcBeamType")) return null;
                            var collection2 = EarlyBindingInstanceModel.GetDataByType("IfcBeamType").Values;
                            foreach (var item2 in collection2)
                            {
                                if (item2.EIN == theItem.RelatingType.EIN)
                                {
                                    var type = item2 as IfcBeamType;
                                    if (type == null)
                                    {
                                        continue;
                                    }
                                    var beamType = new SemBeamType {
                                        IfcTypeProduct = type, IfcRelDefinesByType = theItem
                                    };
                                    beamType.DefinedElements.Add(mainPiece);
                                    SemInstanceDB.AddToExport(beamType);
                                    ret = beamType;
                                }
                            }
                        }
                    }
                }
                return(ret);
            }
            else
            {
                return(null);
            }
        }
コード例 #6
0
        public static BbMaterial Retrieve(BbElement element)
        {
            var ret = new BbMaterial();
            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelAssociatesMaterial")) return null;

            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelAssociatesMaterial").Values;

            //if (collection.Count != 1) throw new NotImplementedException();
            foreach (var item in collection)
            {
                var theItem = item as IfcRelAssociatesMaterial;
                if (theItem == null)
                {
                    continue;
                }
                //if (theItem.RelatingMaterial.AIfcMaterial.EIN == element.IfcElement.EIN)
                foreach (var a in theItem.RelatedObjects)
                {
                    if (a.EIN == element.IfcObject.EIN)
                    {
                        //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcMaterial")) return null;

                        var collection2 = EarlyBindingInstanceModel.GetDataByType("IfcMaterial").Values;
                        foreach (var item2 in collection2)
                        {
                            if (item2.EIN == theItem.RelatingMaterial.AIfcMaterial.EIN)
                            {
                                var material = item as IfcMaterial;
                                if (material == null)
                                {
                                    continue;
                                }
                                var pieceMaterial = new BbMaterial {
                                    IfcMaterial = material
                                };
                                BbInstanceDB.AddToExport(pieceMaterial);
                                ret = pieceMaterial;
                            }
                        }
                    }
                    else
                    {
                        ret = null;
                    }
                }
            }

            return(ret);
        }
コード例 #7
0
        public static ICollection <BbWeld> Retrieve(BbElement mainPiece)
        {
            var ret = new List <BbWeld>();
            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelConnectsWithRealizingElements")) return null;
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelConnectsWithRealizingElements").Values;

            foreach (var theItem in collection)
            {
                var rel = theItem as IfcRelConnectsWithRealizingElements;
                if (rel == null)
                {
                    continue;
                }
                if (rel.RelatingElement.EIN == mainPiece.IfcObject.EIN)
                {
                    //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcFastener")) return null;
                    var collection1 = EarlyBindingInstanceModel.GetDataByType("IfcFastener").Values;
                    foreach (var item in collection1)
                    {
                        var relElements = rel.RealizingElements;
                        foreach (var relElement in relElements)
                        {
                            if (relElement.EIN == item.EIN)
                            {
                                var fastener = item as IfcFastener;
                                if (fastener == null)
                                {
                                    continue;
                                }
                                var weld = new BbWeld {
                                    _ifcElement = fastener, IfcRelConnectsElements = rel
                                };
                                //BbInstanceDB.Add(weld);
                                ret.Add(weld);

                                // Retrieve MainElement
                                weld.MainElement = mainPiece;
                                // Retrieve AttachedElement
                                var relatedElement = weld.IfcRelConnectsElements.RelatedElement as IfcElement;
                                // wrong implementation, need to revise, donghoon 20131205
                                //weld.AttachedElement = new BbElement { IfcElement = relatedElement };
                            }
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #8
0
        public static ICollection <BbFloor> Retrieve()
        {
            var ifcList = (from p21Instance in EarlyBindingInstanceModel.GetDataByType("IfcBuildingStorey").Values
                           select p21Instance).ToList();


            var buildings = (
                from building in ifcList
                let si = building as IfcBuildingStorey
                         where building != null
                         select new BbFloor(si))
                            .ToList();

            BbInstanceDB.AddToImport(buildings);

            return(buildings);
        }
コード例 #9
0
        public static ICollection <BbAssembly> Retrieve()
        {
            var ifcList = (from p21Instance in EarlyBindingInstanceModel.GetDataByType("IfcElementAssembly").Values
                           select p21Instance).ToList();



            var assemblies = (
                from building in ifcList
                let si = building as IfcElementAssembly
                         where building != null
                         select new BbAssembly(si))
                             .ToList();

            BbInstanceDB.AddToImport(assemblies);

            return(assemblies);
        }
コード例 #10
0
        /*
         * public static ICollection<BbSurfaceGeometry> Retrieve(PaintFinish )
         * {
         *  if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcCurveBoundedPlane")) return null;
         *  //IfcShapeRepresentation
         *  //IfcProductDefinitionShape
         *  var collection = EarlyBindingInstanceModel.TheModel.DataByType["IfcCurveBoundedPlane"].Values;
         *
         *  var ret = new List<BbSurfaceGeometry>(); //sem BbSurfaceGeometry list nist
         *  foreach (var item in collection)
         *  {
         *      var curvePlane = item as IfcCurveBoundedPlane;
         *      if (curvePlane == null) continue;
         *      var surfaceGeometry = new BbSurfaceGeometry { ifcCurveBoundedPlane = curvePlane };
         *      BbInstanceDB.Add(surfaceGeometry);
         *      ret.Add(surfaceGeometry); //sem BbSurfaceGeometry list nist
         *  }
         *  return ret;
         * }
         */

        public static ICollection <BbPolyline2D> RetrievePolylines(BbSurfaceGeometry surfaceGeometry)
        {
            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcPolyline")) return null;

            var collection = EarlyBindingInstanceModel.GetDataByType("IfcPolyline").Values;

            var ret = new List <BbPolyline2D>();

            foreach (var item in collection)
            {
                if (item.EIN == surfaceGeometry.ifcCurveBoundedPlane.OuterBoundary.EIN)
                {
                    var polyLine = item as IfcPolyline;
                    if (polyLine == null)
                    {
                        continue;
                    }
                    var semPolyLine = new BbPolyline2D {
                        ifcPolyline = polyLine
                    };
                    BbInstanceDB.AddToExport(semPolyLine);
                    ret.Add(semPolyLine);
                }

                var innerBoundries = surfaceGeometry.ifcCurveBoundedPlane.InnerBoundaries;
                foreach (var innerBoundry in innerBoundries)
                {
                    if (item.EIN == innerBoundry.EIN)
                    {
                        var polyLine = item as IfcPolyline;
                        if (polyLine == null)
                        {
                            continue;
                        }
                        var semPolyLine = new BbPolyline2D {
                            ifcPolyline = polyLine
                        };
                        BbInstanceDB.AddToExport(semPolyLine);
                        ret.Add(semPolyLine);
                    }
                }
            }
            return(ret);
        }
コード例 #11
0
        public static SemAnnotation Retrieve(SemMainPiece mainPiece)
        {
            var ret        = new SemAnnotation();
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelAssignsToProduct").Values;

            //if (collection.Count != 1) throw new NotImplementedException();
            foreach (var item in collection)
            {
                var theItem = item as IfcRelAssignsToProduct;
                if (theItem == null)
                {
                    continue;
                }
                var relatedObjects = theItem.RelatedObjects;
                foreach (var relatedObject in relatedObjects)
                {
                    if (relatedObject.EIN == mainPiece.IfcObject.EIN)
                    {
                        //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcAnnotation")) return null;
                        var annCollection = EarlyBindingInstanceModel.GetDataByType("IfcAnnotation").Values;
                        foreach (var annItem in annCollection)
                        {
                            if (annItem.EIN == theItem.RelatingProduct.EIN)
                            {
                                var annotation = annItem as IfcAnnotation;
                                if (annotation == null)
                                {
                                    continue;
                                }
                                var semAnnotation = new SemAnnotation {
                                    IfcAnnotation = annotation, IfcRelAssignsToProduct = theItem
                                };
                                SemInstanceDB.AddToExport(semAnnotation);
                                ret = semAnnotation;
                                semAnnotation.Element = mainPiece;
                            }
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #12
0
        public static SemWeldType Retrieve(SemFastener weld)
        {
            var ret = new SemWeldType();

            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelDefinesByType")) return null;
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelDefinesByType").Values;

            foreach (var theItem in collection)
            {
                var relType    = theItem as IfcRelDefinesByType;
                var relObjects = relType.RelatedObjects;
                foreach (var relObject in relObjects)
                {
                    if (relObject.EIN == weld.IfcObject.EIN)
                    {
                        //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcFastenerType")) return null;
                        var collection1 = EarlyBindingInstanceModel.GetDataByType("IfcFastenerType").Values;
                        foreach (var item in collection1)
                        {
                            if (relType.RelatingType.EIN == item.EIN)
                            {
                                var weldType = item as IfcFastenerType;
                                if (weldType == null)
                                {
                                    continue;
                                }
                                var semWeldType = new SemWeldType {
                                    IfcTypeProduct = weldType, IfcRelDefinesByType = relType
                                };
                                semWeldType.DefinedElements.Add(weld);

                                // check if this SemWeldSemType exist or not before adding to DB and add weld to its DefinedElements
                                //SemInstanceDB.Add(semWeldType);// Q1
                                ret = semWeldType;
                            }
                        }
                    }
                }
            }
            return(ret);
        }
コード例 #13
0
ファイル: BbDrillHoles.cs プロジェクト: mind-peace/ifctoolkit
        //public static BbDrillHoles Create(BbElement hostElement,
        //                                BbCoordinate2D position,
        //                                double radius,
        //                                SemHoleLocation location,
        //                                bool through,
        //                                BbPropertySet semPropertySet,
        //                                string featureSubType,
        //                                double partialHoleDepth)
        //{
        //    var hole = new BbDrillHoles(hostElement, position, radius, location, through);
        //    hole.AddDrillHoleProperty(semPropertySet, featureSubType, (radius * 2), through, partialHoleDepth);
        //    BbInstanceDB.AddToExport(hole);
        //    return hole;
        //}

        //public void AddDrillHoleProperty(BbPropertySet semPropertySet, string featureSubType,
        //                        double boltHoleDiameter,
        //                        bool partialHoleIndicator,
        //                        double partialHoleDepth)
        //{
        //    semPropertySet.AddProperty(BbPropertyEnumerated.Create("FeatureSubtype", featureSubType, true));
        //    semPropertySet.AddProperty(BbSingleProperty.Create("BoltHoleDiameter", boltHoleDiameter, typeof(IfcPositiveLengthMeasure)));
        //    semPropertySet.AddProperty(BbSingleProperty.Create("PartialHoleIndicator", partialHoleIndicator));
        //    semPropertySet.AddProperty(BbSingleProperty.Create("PartialHoleDepth", partialHoleDepth, typeof(IfcPositiveLengthMeasure)));

        //}


        public static ICollection <BbDrillHoles> Retrieve(BbElement element)
        {
            var ret = new List <BbDrillHoles>();
            //if (!EarlyBindingInstanceModel.TheModel.DataByType.ContainsKey("IfcRelVoidsElement")) return null;
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcRelVoidsElement").Values;

            //if (collection.Count != 1) throw new NotImplementedException();
            foreach (var item in collection)
            {
                var theItem = item as IfcRelVoidsElement;
                if (theItem == null)
                {
                    continue;
                }

                // need modification
                //if (theItem.RelatingBuildingElement.EIN == element.IfcObject.EIN)
                //{
                //    var OpeningElement = theItem.RelatedOpeningElement as IfcOpeningElement;
                //    if (theItem.Name == "Drill Hole")
                //    {
                //        var semDrillHole = new BbDrillHoles { ifcOpeningElement = OpeningElement, ifcRelVoidsElement = theItem };
                //        //BbInstanceDB.Add(semDrillHole);
                //        ret.Add(semDrillHole);

                //        // Retrieve localPlacement of BbDrillHoles
                //        var placement = semDrillHole.ifcOpeningElement.ObjectPlacement as IfcLocalPlacement;
                //        var objectLocalPlacement = new BbLocalPlacement3D { IfcLocalPlacement = placement };
                //        semDrillHole.ObjectBbLocalPlacement = objectLocalPlacement;

                //        // Retrieve related Sems
                //        var semPosition3D = BbFeature.RetrievePosition(semDrillHole);
                //        var semExtrudedGeometry = BbExtrudedGeometry.RetrieveFromFeature(semDrillHole);
                //        var semCircleProfile = BbBbNamedCircleProfile.Retrieve(semExtrudedGeometry);
                //        //BbCoordinate2D
                //    }
                //}
            }
            return(ret);
        }
コード例 #14
0
ファイル: BbProject.cs プロジェクト: mind-peace/ifctoolkit
        public static void Retrieve()
        {
            var collection = EarlyBindingInstanceModel.GetDataByType("IfcProject");

            //if (collection.Count <= 0) throw new InvalidDataException();

            //if (collection.Count != 1)
            //    throw new InvalidDataException();

            //var theItem = collection.First();

            //var proj = theItem.Value as IfcProject;
            //var sProj = new BbProject(proj);
            //BbInstanceDB.Add(sProj);
            //return sProj;


            foreach (var sproject in collection.Select(kvp => kvp.Value).OfType <IfcProject>().Select(project => new BbProject(project)))
            {
                BbInstanceDB.AddToImport(sproject);
            }
        }