public void IfcRectangularPyramidTest() { using (var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel)) { using (var txn = m.BeginTransaction()) { var pyramid = m.Instances.New <IfcRectangularPyramid>(); var p = m.Instances.New <IfcAxis2Placement3D>(); p.Axis = m.Instances.New <IfcDirection>(d => d.SetXYZ(1, 0, 0)); p.Location = m.Instances.New <IfcCartesianPoint>(c => c.SetXYZ(10, 10, 0)); pyramid.Position = p; pyramid.Height = 20; pyramid.XLength = 10; pyramid.YLength = 15; var solid = _xbimGeometryCreator.CreateSolid(pyramid); Assert.IsTrue(solid.Faces.Count == 5, "5 faces are required of a pyramid"); Assert.IsTrue(solid.Vertices.Count == 5, "5 vertices are required of a pyramid"); var meshRec = new MeshHelper(); _xbimGeometryCreator.Mesh(meshRec, solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance * 10); Assert.IsTrue(meshRec.FaceCount == 5, "5 mesh faces are required of a pyramid"); Assert.IsTrue(meshRec.PointCount == 16, "16 mesh points are required of a pyramid"); txn.Commit(); } } }
public void ObjectPlacementTest() { //this test checks that a object is correctly copied and moved //create a box using ( var m = IfcStore.Create(new XbimEditorCredentials(), IfcSchemaVersion.Ifc4, XbimStoreType.InMemoryModel) ) { using (var txn = m.BeginTransaction()) { var block = IfcModelBuilder.MakeBlock(m, 50, 10, 10); var solid = _geomEngine.CreateSolid(block); var placement = IfcModelBuilder.MakeLocalPlacement(m); ((IfcAxis2Placement3D)placement.RelativePlacement).Location.X = 100; var bb = solid.BoundingBox; var solidA = _geomEngine.Moved(solid, placement) as IXbimSolid; Assert.IsNotNull(solidA, "Should be the same type as the master"); var displacement = solidA.BoundingBox.Centroid() - solid.BoundingBox.Centroid(); Assert.IsTrue(displacement == new XbimVector3D(100, 0, 0)); var placementRelTo = ((IfcLocalPlacement)placement.PlacementRelTo); var zDir = m.Instances.New <IfcDirection>(d => d.SetXYZ(0, 0, 1)); ((IfcAxis2Placement3D)placementRelTo.RelativePlacement).Axis = zDir; var yDir = m.Instances.New <IfcDirection>(d => d.SetXYZ(0, 1, 0)); ((IfcAxis2Placement3D)placementRelTo.RelativePlacement).RefDirection = yDir; //point in Y ((IfcAxis2Placement3D)placementRelTo.RelativePlacement).Location.X = 2000; var solidB = _geomEngine.Moved(solid, placement) as IXbimSolid; displacement = solidB.BoundingBox.Centroid() - solid.BoundingBox.Centroid(); var meshbuilder = new MeshHelper(); _geomEngine.Mesh(meshbuilder, solidB, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance); var box = meshbuilder.BoundingBox; Assert.IsTrue(displacement == new XbimVector3D(1970, 120, 0)); } } }