public void IfcSphereTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { const double r = 0.5; var sphere = IfcModelBuilder.MakeSphere(m, r); var solid = _xbimGeometryCreator.CreateSolid(sphere); Assert.IsTrue(solid.Faces.Count == 1, "1 face is required of a sphere"); Assert.IsTrue(solid.Vertices.Count == 2, "2 vertices are required of a sphere"); var meshRec = new MeshHelper(); meshRec.BeginUpdate(); _xbimGeometryCreator.Mesh(meshRec, solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance * 10); meshRec.EndUpdate(); Assert.IsTrue(meshRec.FaceCount == 1, "1 mesh face is required of a sphere"); Assert.IsTrue(meshRec.PointCount == 195, "195 mesh points are required of a sphere"); Assert.IsTrue(meshRec.TriangleCount == 360, "360 triangles are required of a sphere"); Assert.IsTrue(meshRec.TriangleCount * 3 == meshRec.TriangleIndicesCount, "Incorrect triangulation"); txn.Commit(); } } }
public void RectangleHollowProfileDefTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var prof = IfcModelBuilder.MakeRectangleHollowProfileDef(m, 20, 30, 5); var face = _xbimGeometryCreator.CreateFace(prof); Assert.IsTrue(face.Area > 0); txn.Commit(); } } }
public void IfcCenterLineProfileDefTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var semiCircle = IfcModelBuilder.MakeSemiCircle(m, 20); var cl = IfcModelBuilder.MakeCenterLineProfileDef(m, semiCircle, 5); var face = _xbimGeometryCreator.CreateFace(cl); Assert.IsNotNull(face as IXbimFace, "Wrong type returned"); Assert.IsTrue(((IXbimFace)face).IsValid, "Invalid face returned"); } } }
public void IfcSurfaceOfRevolutionTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var cc = IfcModelBuilder.MakeRationalBSplineCurveWithKnots(m); var def = IfcModelBuilder.MakeArbitraryOpenProfileDef(m, cc); var rev = IfcModelBuilder.MakeSurfaceOfRevolution(m, def); var face = _xbimGeometryCreator.CreateFace(rev); Assert.IsNotNull(face as IXbimFace, "Wrong type returned"); Assert.IsTrue(((IXbimFace)face).IsValid, "Invalid face returned"); } } }
public void IfcSurfaceOfLinearExtrusionTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var semiCircle = IfcModelBuilder.MakeSemiCircle(m, 20); var def = IfcModelBuilder.MakeArbitraryOpenProfileDef(m, semiCircle); var cl = IfcModelBuilder.MakeSurfaceOfLinearExtrusion(m, def, 50, new XbimVector3D(0, 0, 1)); var face = _xbimGeometryCreator.CreateFace(cl); Assert.IsNotNull(face as IXbimFace, "Wrong type returned"); Assert.IsTrue(((IXbimFace)face).IsValid, "Invalid face returned"); } } }
public void CShapeProfileDefTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (m.BeginTransaction()) { var prof = IfcModelBuilder.MakeCShapeProfileDef(m, 150, 90, 3, 10, 3); var face = _xbimGeometryCreator.CreateFace(prof); double area = face.Area; Assert.IsTrue(face.Area > 0); m.ModelFactors.ProfileDefLevelOfDetail = 1; face = _xbimGeometryCreator.CreateFace(prof); Assert.IsTrue(face.Area > 0); Assert.IsTrue(face.OuterBound.Edges.Count == 20, "Incorrect edge count"); Assert.IsTrue(face.Area < area, "Detailed profile should be less than normal"); } } }
public void IfcBlockTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var block = IfcModelBuilder.MakeBlock(m, 10, 15, 20); var solid = _xbimGeometryCreator.CreateSolid(block); Assert.IsTrue(solid.Faces.Count == 6, "6 faces are required of a block"); Assert.IsTrue(solid.Vertices.Count == 8, "8 vertices are required of a block"); var meshRec = new MeshHelper(); _xbimGeometryCreator.Mesh(meshRec, solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance * 10); Assert.IsTrue(meshRec.FaceCount == 6, "6 mesh faces are required of a block"); Assert.IsTrue(meshRec.PointCount == 24, "24 mesh points are required of a block"); txn.Commit(); } } }
public void IfcRightCircularCylinderTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { const double h = 2; const double r = 0.5; var cylinder = IfcModelBuilder.MakeRightCircularCylinder(m, r, h); var solid = _xbimGeometryCreator.CreateSolid(cylinder); Assert.IsTrue(solid.Faces.Count == 3, "3 faces are required of a cylinder"); Assert.IsTrue(solid.Vertices.Count == 2, "2 vertices are required of a cylinder"); var meshRec = new MeshHelper(); _xbimGeometryCreator.Mesh(meshRec, solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance * 10); Assert.IsTrue(meshRec.FaceCount == 3, "3 mesh faces are required of a cylinder"); Assert.IsTrue(meshRec.PointCount == 106, "106 mesh points are required of a cylinder"); txn.Commit(); } } }
public void TransformFacetedSolidRectangularProfileDef() { using (var m = XbimModel.CreateTemporaryModel()) { using (var txn = m.BeginTransaction()) { var profile = IfcModelBuilder.MakeRectangleHollowProfileDef(m, 20, 10, 1); var extrude = IfcModelBuilder.MakeExtrudedAreaSolid(m, profile, 40); var solid = XbimGeometryCreator.CreateSolid(extrude); solid = XbimGeometryCreator.CreateFacetedSolid(solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance, 0.5); var transform = new XbimMatrix3D(); //test first with identity var solid2 = solid.Transform(transform); var s1Verts = solid.Vertices.ToList(); var s2Verts = solid2.Vertices.ToList(); for (int i = 0; i < s1Verts.Count; i++) { XbimVector3D v = s1Verts[i].VertexGeometry - s2Verts[i].VertexGeometry; Assert.IsTrue(v.Length < m.ModelFactors.Precision, "vertices not the same"); } transform.RotateAroundXAxis(Math.PI / 2); transform.RotateAroundYAxis(Math.PI / 4); transform.RotateAroundZAxis(Math.PI); transform.OffsetX += 100; transform.OffsetY += 200; transform.OffsetZ += 300; solid2 = solid.Transform(transform); Assert.IsTrue(Math.Abs(solid.Volume - solid2.Volume) < 0.001, "Volume differs"); transform.Invert(); solid2 = solid2.Transform(transform); s1Verts = solid.Vertices.ToList(); s2Verts = solid2.Vertices.ToList(); for (int i = 0; i < s1Verts.Count; i++) { XbimVector3D v = s1Verts[i].VertexGeometry - s2Verts[i].VertexGeometry; Assert.IsTrue(v.Length < m.ModelFactors.Precision, "vertices not the same"); } } } }
public void TransformSolidRectangularProfileDef() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var profile = IfcModelBuilder.MakeRectangleHollowProfileDef(m, 20, 10, 1); var extrude = IfcModelBuilder.MakeExtrudedAreaSolid(m, profile, 40); var solid = _xbimGeometryCreator.CreateSolid(extrude); var transform = new XbimMatrix3D(); //test first with identity var solid2 = (IXbimSolid)solid.Transform(transform); var s1Verts = solid.Vertices.ToList(); var s2Verts = solid2.Vertices.ToList(); for (int i = 0; i < s1Verts.Count; i++) { XbimVector3D v = s1Verts[i].VertexGeometry - s2Verts[i].VertexGeometry; Assert.IsTrue(v.Length < m.ModelFactors.Precision, "vertices not the same"); } transform.RotateAroundXAxis(Math.PI / 2); transform.RotateAroundYAxis(Math.PI / 4); transform.RotateAroundZAxis(Math.PI); transform.OffsetX += 100; transform.OffsetY += 200; transform.OffsetZ += 300; solid2 = (IXbimSolid)solid.Transform(transform); Assert.IsTrue(Math.Abs(solid.Volume - solid2.Volume) < 0.001, "Volume differs"); transform.Invert(); solid2 = (IXbimSolid)solid2.Transform(transform); s1Verts = solid.Vertices.ToList(); s2Verts = solid2.Vertices.ToList(); for (int i = 0; i < s1Verts.Count; i++) { XbimVector3D v = s1Verts[i].VertexGeometry - s2Verts[i].VertexGeometry; Assert.IsTrue(v.Length < m.ModelFactors.Precision, "vertices not the same"); } txn.Commit(); } } }
public void ZShapeProfileDefTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var prof = IfcModelBuilder.MakeZShapeProfileDef(m, 150, 90, 13, 20, 6, 3); var face = _xbimGeometryCreator.CreateFace(prof); double area = face.Area; Assert.IsTrue(face.Area > 0); m.ModelFactors.ProfileDefLevelOfDetail = 1; face = _xbimGeometryCreator.CreateFace(prof); //var w = new XbimOccWriter(); //w.Write(face, "d:\\xbim\\f"); Assert.IsTrue(face.Area > 0); Assert.IsTrue(face.OuterBound.Edges.Count == 12, "Incorrect edge count"); Assert.IsTrue(face.Area > area, "Detailed profile should be bigger than normal profile"); txn.Commit(); } } }