コード例 #1
0
        public void Test_Large_Coordinates_Reduction()
        {
            XbimGeometryType tp = Xbim.Common.Geometry.XbimGeometryType.PolyhedronBinary;

            using (var model = IfcStore.Open("TestFiles\\LargeTriangulatedCoordinates.ifc"))
            {
                var xbimTessellator = new XbimTessellator(model, tp);
                var representation  = model.Instances.FirstOrDefault <IIfcFacetedBrep>();
                var shape           = xbimTessellator.Mesh(representation);

                // geometry should have a local displacement
                Assert.IsTrue(shape.LocalShapeDisplacement.HasValue);

                // it should be more than 6 200 000
                var distance = shape.LocalShapeDisplacement.Value.Length;
                Assert.IsTrue(distance > 6200000);

                var ms       = new MemoryStream(((IXbimShapeGeometryData)shape).ShapeData);
                var br       = new BinaryReader(ms);
                var geometry = br.ReadShapeTriangulation();

                // vertex geometry should be small
                var vertex = geometry.Vertices.First();
                Assert.IsTrue(vertex.X < 1000);
                Assert.IsTrue(vertex.Y < 1000);
                Assert.IsTrue(vertex.Z < 1000);

                // bounding box should be at [0,0,0] position
                var bb   = shape.BoundingBox;
                var pos  = bb.Location;
                var test = Math.Abs(pos.X + pos.Y + pos.Z);
                Assert.IsTrue(test < 0.1)
                ;
            }
        }
コード例 #2
0
        public void Test_Large_Coordinates_Reduction()
        {
            XbimGeometryType tp = Xbim.Common.Geometry.XbimGeometryType.PolyhedronBinary;

            using (var model = IfcStore.Open("LargeTriangulatedCoordinates.ifc"))
            {
                var xbimTessellator = new XbimTessellator(model, tp);
                var shape           = model.Instances.FirstOrDefault <IIfcFacetedBrep>();
                var shapeGeom       = xbimTessellator.Mesh(shape);

                Assert.IsTrue(shapeGeom.LocalShapeDisplacement.HasValue);
            }
        }
コード例 #3
0
        public void IfcTriangulatedFaceSetWithColoursTest()
        {
            using (var store = IfcStore.Open("tessellation-with-individual-colors.ifc"))
            {
                var triangulatedFaceSet = store.Instances.OfType <IfcTriangulatedFaceSet>().FirstOrDefault();

                var tessellator = new XbimTessellator(store, XbimGeometryType.PolyhedronBinary);
                Assert.IsNotNull(triangulatedFaceSet);
                Assert.IsTrue(tessellator.CanMesh(triangulatedFaceSet));
                var geom = tessellator.Mesh(triangulatedFaceSet);
                Assert.IsTrue((int)(geom.BoundingBox.Volume) == 2000000000);
            }
        }
コード例 #4
0
        public void IfcTriangulatedFaceSetWithNormalsTest()
        {
            using (var store = IfcStore.Open("column-straight-rectangle-tessellation.ifc"))
            {
                var columnTess = store.Instances[288] as IIfcTriangulatedFaceSet;

                var tessellator = new XbimTessellator(store, XbimGeometryType.PolyhedronBinary);
                Assert.IsNotNull(columnTess);
                Assert.IsTrue(tessellator.CanMesh(columnTess));
                var geom = tessellator.Mesh(columnTess);
                Assert.IsTrue((int)(geom.BoundingBox.Volume) == 7680);
            }
        }
コード例 #5
0
        public void IfcTriangulatedFaceSetTest()
        {
            using (var store = IfcStore.Open("BasinTessellation.ifc"))
            {
                var basinTess = store.Instances[501] as IIfcTriangulatedFaceSet;

                var tessellator = new XbimTessellator(store, XbimGeometryType.PolyhedronBinary);
                Assert.IsNotNull(basinTess);
                Assert.IsTrue(tessellator.CanMesh(basinTess));
                var geom = tessellator.Mesh(basinTess);
                Assert.IsTrue((int)(geom.BoundingBox.Volume) == 23913892);
            }
        }
コード例 #6
0
        public void TestBoundingBoxSize()
        {
            XbimGeometryType tp = Xbim.Common.Geometry.XbimGeometryType.PolyhedronBinary;

            using (var model = IfcStore.Open("Roof-01_BCAD.ifc"))
            {
                var xbimTessellator         = new XbimTessellator(model, tp);
                XbimShapeGeometry shapeGeom = null;

                var shape = model.Instances[1192] as IIfcGeometricRepresentationItem;
                shapeGeom = xbimTessellator.Mesh(shape);
                Debug.WriteLine(shapeGeom.BoundingBox);
            }
        }
コード例 #7
0
        public void TestPnSize_Add2_Support()
        {
            XbimGeometryType tp = Xbim.Common.Geometry.XbimGeometryType.PolyhedronBinary;

            using (var model = IfcStore.Open("TestFiles\\IfcTriangulatedFaceSet.ifc"))
            {
                var xbimTessellator         = new XbimTessellator(model, tp);
                XbimShapeGeometry shapeGeom = null;

                var shape = model.Instances[48] as IIfcGeometricRepresentationItem;
                shapeGeom = xbimTessellator.Mesh(shape);
                Debug.WriteLine(shapeGeom.BoundingBox);
            }
        }
コード例 #8
0
        public void Test_PolygonalFaceSet_Tessellation()
        {
            XbimGeometryType tp = Xbim.Common.Geometry.XbimGeometryType.PolyhedronBinary;

            using (var model = IfcStore.Open("TestFiles\\polygonal-face-tessellation.ifc"))
            {
                var xbimTessellator         = new XbimTessellator(model, tp);
                XbimShapeGeometry shapeGeom = null;

                var shape = model.Instances.FirstOrDefault <IIfcPolygonalFaceSet>();
                shapeGeom = xbimTessellator.Mesh(shape);
                Assert.AreEqual(8000000000000, shapeGeom.BoundingBox.Volume);
            }
        }
コード例 #9
0
        public void IfcTriangulatedFaceSetComplexBinaryTest()
        {
            using (var store = IfcStore.Open("IFC4TessellationComplex.ifc"))
            {
                var triangulatedFaceSet = store.Instances[4373] as IIfcTriangulatedFaceSet;

                var tessellator = new XbimTessellator(store, XbimGeometryType.PolyhedronBinary);
                Assert.IsNotNull(triangulatedFaceSet);
                Assert.IsTrue(tessellator.CanMesh(triangulatedFaceSet));
                var geom = tessellator.Mesh(triangulatedFaceSet);
                using (var ms = new MemoryStream(((IXbimShapeGeometryData)geom).ShapeData))
                {
                    using (var br = new BinaryReader(ms))
                    {
                        XbimShapeTriangulation myShapeTriangulation = br.ReadShapeTriangulation();
                        Assert.IsTrue(myShapeTriangulation.Faces.Sum(t => t.TriangleCount) == triangulatedFaceSet.NumberOfTriangles);
                    }
                }
            }
        }
コード例 #10
0
        public void BIM_Logo_LetterB_Test()
        {
            var xbimGeometryCreator = new XbimGeometryEngine();

            using (var eventTrace = LoggerFactory.CreateEventTrace())
            {
                using (var m = new XbimModel())
                {
                    m.CreateFrom("SolidTestFiles\\BIM Logo-LetterB.ifc", null, null, true, true);
                    var eas = m.Instances[88] as IfcCsgSolid;
                    Assert.IsTrue(eas != null, "No CSG Solid found");

                    var solid = (IXbimSolid)xbimGeometryCreator.Create(eas);
                    Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call

                    IfcCsgTests.GeneralTest(solid);
                    Assert.IsTrue(solid.Faces.Count() == 15, "Letter B should have 15 faces");
                    var xbimTessellator = new XbimTessellator(m, XbimGeometryType.PolyhedronBinary);
                    // Assert.IsTrue(xbimTessellator.CanMesh(solid));//if we can mesh the shape directly just do it
                    // var shapeGeom = xbimTessellator.Mesh(solid);
                    var shapeGeom = xbimGeometryCreator.CreateShapeGeometry(solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance, m.ModelFactors.DeflectionAngle, XbimGeometryType.PolyhedronBinary);
                }
            }
        }
コード例 #11
0
        public void ReadAndWriteWexBimFile()
        {
            using (var m = IfcStore.Open("SampleHouse4.ifc"))
            {
                var wall = m.Instances[1229] as IIfcWall;
                Assert.IsNotNull(wall, "No IfcWall found in file");
                var brep = m.Instances[1213] as IIfcFacetedBrep;
                Assert.IsNotNull(brep, "No IfcFacetedBrep found in file");
                var styledItem = brep.StyledByItem.FirstOrDefault(); //this is not fast do not do on large models
                Assert.IsNotNull(styledItem, "No StyledItem found in file");



                var repContext = m.Instances[100] as IIfcGeometricRepresentationContext;
                Assert.IsNotNull(repContext, "No context found in file");
                var geomStore = m.GeometryStore;
                using (var txn = geomStore.BeginInit())
                {
                    var tessellator = new XbimTessellator(m, XbimGeometryType.PolyhedronBinary);
                    var geom        = tessellator.Mesh(brep);


                    var geomId = txn.AddShapeGeometry(geom);
                    //ADD A SHAPE INSTANCE
                    var shapeInstance = new XbimShapeInstance()
                    {
                        BoundingBox           = geom.BoundingBox,
                        IfcProductLabel       = wall.EntityLabel,
                        IfcTypeId             = m.Metadata.ExpressTypeId("IFCWALL"),
                        StyleLabel            = m.Metadata.ExpressTypeId("IFCWALL") * -1,
                        RepresentationType    = XbimGeometryRepresentationType.OpeningsAndAdditionsIncluded,
                        ShapeGeometryLabel    = geomId,
                        Transformation        = XbimMatrix3D.Identity,
                        RepresentationContext = repContext.EntityLabel
                    };
                    txn.AddShapeInstance(shapeInstance, geomId);
                    txn.Commit();
                }
                using (var bw = new BinaryWriter(new FileStream("test.wexBIM", FileMode.Create)))
                {
                    m.SaveAsWexBim(bw);
                    bw.Close();
                }
            }
            using (var fs = new FileStream(@"test.wexBIM", FileMode.Open, FileAccess.Read))
            {
                using (var br = new BinaryReader(fs))
                {
                    var magicNumber = br.ReadInt32();
                    Assert.IsTrue(magicNumber == IfcStoreGeometryExtensions.WexBimId);
                    var version       = br.ReadByte();
                    var shapeCount    = br.ReadInt32();
                    var vertexCount   = br.ReadInt32();
                    var triangleCount = br.ReadInt32();
                    var matrixCount   = br.ReadInt32();
                    var productCount  = br.ReadInt32();
                    var styleCount    = br.ReadInt32();
                    var meter         = br.ReadSingle();
                    Assert.IsTrue(meter > 0);
                    var regionCount = br.ReadInt16();
                    for (int i = 0; i < regionCount; i++)
                    {
                        var population  = br.ReadInt32();
                        var centreX     = br.ReadSingle();
                        var centreY     = br.ReadSingle();
                        var centreZ     = br.ReadSingle();
                        var boundsBytes = br.ReadBytes(6 * sizeof(float));
                        var modelBounds = XbimRect3D.FromArray(boundsBytes);
                    }

                    for (int i = 0; i < styleCount; i++)
                    {
                        var styleId = br.ReadInt32();
                        var red     = br.ReadSingle();
                        var green   = br.ReadSingle();
                        var blue    = br.ReadSingle();
                        var alpha   = br.ReadSingle();
                    }
                    for (int i = 0; i < productCount; i++)
                    {
                        var        productLabel = br.ReadInt32();
                        var        productType  = br.ReadInt16();
                        var        boxBytes     = br.ReadBytes(6 * sizeof(float));
                        XbimRect3D bb           = XbimRect3D.FromArray(boxBytes);
                    }
                    for (int i = 0; i < shapeCount; i++)
                    {
                        var shapeRepetition = br.ReadInt32();
                        Assert.IsTrue(shapeRepetition > 0);
                        if (shapeRepetition > 1)
                        {
                            for (int j = 0; j < shapeRepetition; j++)
                            {
                                var ifcProductLabel = br.ReadInt32();
                                var instanceTypeId  = br.ReadInt16();
                                var instanceLabel   = br.ReadInt32();
                                var styleId         = br.ReadInt32();
                                var transform       = XbimMatrix3D.FromArray(br.ReadBytes(sizeof(double) * 16));
                            }
                            var triangulation = br.ReadShapeTriangulation();
                            Assert.IsTrue(triangulation.Vertices.Count > 0, "Number of vertices should be greater than zero");
                        }
                        else if (shapeRepetition == 1)
                        {
                            var ifcProductLabel = br.ReadInt32();
                            var instanceTypeId  = br.ReadInt16();
                            var instanceLabel   = br.ReadInt32();
                            var styleId         = br.ReadInt32();
                            var triangulation   = br.ReadShapeTriangulation();
                            Assert.IsTrue(triangulation.Vertices.Count > 0, "Number of vertices should be greater than zero");
                        }
                    }
                }
            }
        }