public void RectangleProfileDefTest() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\1- IfcExtrudedAreaSolid-IfcProfileDef-Parameterised.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcRectangleProfileDef && !(e.SweptArea is IIfcRectangleHollowProfileDef)); Assert.IsTrue(eas != null, "No Extruded Solid found"); Assert.IsTrue(eas.SweptArea is IIfcRectangleProfileDef, "Incorrect profiledef found"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 6, "Rectangular profiles should have six faces"); ////now make the extrusion invalid //eas.Depth = 0; //solid = XbimGeometryCreator.CreateSolid(eas); //Assert.IsTrue(eventTrace.Events.Count == 1); //we should have an event here //Assert.IsTrue(Math.Abs(solid.Volume) < m.ModelFactors.Precision); //Assert.IsTrue(solid.BoundingBox.IsEmpty); //Assert.IsFalse(solid.IsValid); } } }
public void ExtrudedCircularProfilesTest() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\15 - Swept pipes.ifc")) { foreach ( var cp in m.Instances.OfType <IfcExtrudedAreaSolid>().Where(e => e.SweptArea is IfcCircleProfileDef)) { Assert.IsTrue(cp != null, "No Extruded Solid found"); Assert.IsTrue(cp.SweptArea is IfcCircleProfileDef, "Incorrect profiledef found"); var solid = xbimGeometryCreator.CreateSolid(cp); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); } //Assert.IsTrue(solid.Faces.Count() == 10, "T Shaped profiles should have 10 faces"); } } }
public void IfcFacetedBRepWithMultipleSolids() { using (var m = IfcStore.Open("SolidTestFiles\\12 - Multiple FacetedBrep.ifc")) { var fbr = m.Instances[25] as IIfcFacetedBrep; Assert.IsTrue(fbr != null, "No IfcFacetedBRep found"); var solids = _xbimGeometryCreator.CreateSolidSet(fbr); Assert.IsTrue(solids.Count == 11, "Expected 11 solids"); foreach (var solid in solids) { IfcCsgTests.GeneralTest(solid, true); } } }
public void IfcSweptDisk_With_IfcCompositeCurveNegativeDirection() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\SweptExtrusion.ifc")) { var ss = m.Instances.OfType <IIfcSweptDiskSolid>().FirstOrDefault(e => e.Directrix is IIfcCompositeCurve); Assert.IsTrue(ss != null, "No Swept Disk found"); Assert.IsTrue(ss.Directrix is IIfcCompositeCurve, "Incorrect sweep found"); var solid = _xbimGeometryCreator.CreateSolid(ss); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 9, "Swept disk should have 9 faces"); } } }
public void IIfcFaceBasedSurfaceModelAsSolid() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\FacebasedModelWithMissingFace.ifc")) { var fbsm = m.Instances[154529] as IIfcFaceBasedSurfaceModel; Assert.IsTrue(fbsm != null, "No IIfcFaceBasedSurfaceModel found"); int faceCount = fbsm.FbsmFaces.Count(); var surface = _xbimGeometryCreator.CreateSurfaceModel(fbsm); var solid = _xbimGeometryCreator.CreateSolidSet(); solid.Add(surface); Assert.IsTrue(eventTrace.Events.Count == 0, "Warning or Error events were raised"); //we should have no warnings Assert.IsTrue(solid.FirstOrDefault() != null); IfcCsgTests.GeneralTest(solid.First); } } }
public void IfcRevolvedArea_With_IfcCircleHollowProfileDef() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\5- IfcRevolvedAreaSolid-IfcCircularHollowProfileDef.ifc")) { var ss = m.Instances.OfType <IIfcRevolvedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcCircleHollowProfileDef); Assert.IsTrue(ss != null, "No Revolved Area found"); Assert.IsTrue(ss.SweptArea is IIfcCircleHollowProfileDef, "Incorrect profiledef found"); var solid = _xbimGeometryCreator.CreateSolid(ss); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 4, "Circle Hollow profiles should have 4 faces"); } } }
public void IfcSurfaceCurveSweptAreaSolid() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\11- IfcSurfaceCurveSweptAreaSolid.ifc")) { var ss = m.Instances.OfType <IIfcSurfaceCurveSweptAreaSolid>().FirstOrDefault(); Assert.IsTrue(ss != null, "No Swept Disk found"); var solid = _xbimGeometryCreator.CreateSolid(ss); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 6, "This IfcSurfaceCurveSweptAreaSolid with hollow circular profile def should have 6 faces"); } } }
public void IfcExtrudedArea_With_IfcArbritraryClosedProfileDef_And_IfcCompositeCurve() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\2- IfcExtrudedAreaSolid-IfcArbitraryClosedProfileDef-IfcCompositeCurve.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(); Assert.IsTrue(eas != null); Assert.IsTrue(eas.SweptArea is IIfcArbitraryClosedProfileDef, "Incorrect profile definition"); Assert.IsTrue(((IIfcArbitraryClosedProfileDef)eas.SweptArea).OuterCurve is IIfcCompositeCurve, "Incorrect SweptArea type"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0, "Warnings or errors raised in geometry conversion"); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); } } }
public void CompositeProfileDefTest() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\IfcCompositeProfileDefTest.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcCompositeProfileDef); Assert.IsTrue(eas != null, "No Extruded Solid found"); Assert.IsTrue(eas.SweptArea is IIfcCompositeProfileDef, "Incorrect profiledef found"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 40, "IfcCompositeProfileDef profile should have six faces"); } } }
public void IfcSweptDisk_With_IfcPolyline() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\6- IfcSweptDiskSolid_With_BooleanResult.ifc")) { var ss = m.Instances.OfType <IIfcSweptDiskSolid>().FirstOrDefault(e => e.Directrix is IIfcPolyline); Assert.IsTrue(ss != null, "No Swept Disk found"); Assert.IsTrue(ss.Directrix is IIfcPolyline, "Incorrect sweep found"); var solid = _xbimGeometryCreator.CreateSolid(ss); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 4, "Swept disk solids along a single polyline with inner radius should have 4 faces"); } } }
public void IfcFacetedBRepTest() { using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\12 - Multiple FacetedBrep.ifc")) { var fbr = m.Instances[780] as IIfcFacetedBrep; Assert.IsTrue(fbr != null, "No IfcFacetedBRep found"); int faceCount = fbr.Outer.CfsFaces.Count(); var solids = _xbimGeometryCreator.CreateSolidSet(fbr); Assert.IsTrue(eventTrace.Events.Count == 0, "Warning or Error events were raised"); //we should have no warnings Assert.IsTrue(solids.Count == 1, "Expected 11 solids"); IfcCsgTests.GeneralTest(solids.First); Assert.IsTrue(solids.First.Faces.Count() == 26, "Failed to convert all faces"); //faces are reduced due to domain unification now implemented } } }
public void TestDerivedProfileDefWithTShapedParent() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\1- IfcExtrudedAreaSolid-IfcProfileDef-Parameterised.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcDerivedProfileDef && ((IIfcDerivedProfileDef)e.SweptArea).ParentProfile is IIfcTShapeProfileDef); Assert.IsTrue(eas != null, "No Extruded Solid found"); Assert.IsTrue(eas.SweptArea is IIfcDerivedProfileDef, "Incorrect profiledef found"); Assert.IsTrue(((IIfcDerivedProfileDef)eas.SweptArea).ParentProfile is IIfcTShapeProfileDef, "Incorrect parent profiledef found"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); Assert.IsTrue(solid.Faces.Count() == 10, "T Shaped profiles should have 10 faces"); } } }
public void IfcExtrudedArea_With_IfcArbritraryProfileDefWithVoids() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\18 - IfcArbritaryClosedProfileDefWithVoids.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcArbitraryProfileDefWithVoids); Assert.IsTrue(eas != null); Assert.IsTrue(eas.SweptArea is IIfcArbitraryProfileDefWithVoids, "Incorrect profile definition"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0, "Warnings or errors raised in geometry conversion"); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); //Assert.IsTrue(solid.Faces.Count() == 6, "IfcPolyline profiles should have (number of polyline egdes + 2) faces"); } } }
public void IfcExtrudedArea_With_IfcArbritraryClosedProfileDef_And_IfcPolyline() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\1- IfcExtrudedAreaSolid-IfcProfileDef-Parameterised.ifc")) { var eas = m.Instances.OfType <IIfcExtrudedAreaSolid>().FirstOrDefault(e => e.SweptArea is IIfcArbitraryClosedProfileDef && ((IIfcArbitraryClosedProfileDef)e.SweptArea).OuterCurve is IIfcPolyline); Assert.IsTrue(eas != null); Assert.IsTrue(eas.SweptArea is IIfcArbitraryClosedProfileDef, "Incorrect profile definition"); Assert.IsTrue(((IIfcArbitraryClosedProfileDef)eas.SweptArea).OuterCurve is IIfcPolyline, "Incorrect SweptArea outer curve type"); var solid = xbimGeometryCreator.CreateSolid(eas); Assert.IsTrue(eventTrace.Events.Count == 0, "Warnings or errors raised in geometry conversion"); //no events should have been raised from this call IfcCsgTests.GeneralTest(solid); var plineCount = ((IIfcPolyline)((IIfcArbitraryClosedProfileDef)eas.SweptArea).OuterCurve).Points.Count() - 1; Assert.IsTrue(solid.Faces.Count() == plineCount + 2, "IfcPolyline profiles should have (number of polyline egdes + 2) faces"); } } }
public void BIM_Logo_LetterM_Test() { var xbimGeometryCreator = new XbimGeometryEngine(); using (var eventTrace = LoggerFactory.CreateEventTrace()) { using (var m = IfcStore.Open("SolidTestFiles\\BIM Logo-LetterM.ifc")) { var eas = m.Instances[57] as IIfcSurfaceCurveSweptAreaSolid; Assert.IsTrue(eas != null, "No IfcSurfaceCurveSweptArea 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() == 26, "Letter M should have 26 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 geom = xbimGeometryCreator.CreateShapeGeometry(solid, m.ModelFactors.Precision, m.ModelFactors.DeflectionTolerance, m.ModelFactors.DeflectionAngle, XbimGeometryType.PolyhedronBinary); Assert.IsTrue(geom.BoundingBox.Volume > 0); } } }