diff --git a/src/ifcgeom/IfcAdvancedBrep.cpp b/src/ifcgeom/IfcAdvancedBrep.cpp index 50f5ff6fe1..a165bc7ee4 100644 --- a/src/ifcgeom/IfcAdvancedBrep.cpp +++ b/src/ifcgeom/IfcAdvancedBrep.cpp @@ -17,76 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcAnnotationFillArea.cpp b/src/ifcgeom/IfcAnnotationFillArea.cpp index 1f51c569a7..1fd33ba896 100644 --- a/src/ifcgeom/IfcAnnotationFillArea.cpp +++ b/src/ifcgeom/IfcAnnotationFillArea.cpp @@ -17,75 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp b/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp index cdf21ae827..fb4955164e 100644 --- a/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp +++ b/src/ifcgeom/IfcArbitraryClosedProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp b/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp index 3ee45d751e..a68ab93085 100644 --- a/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp +++ b/src/ifcgeom/IfcArbitraryOpenProfileDef.cpp @@ -17,67 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcArbitraryProfileDefWithVoids.cpp b/src/ifcgeom/IfcArbitraryProfileDefWithVoids.cpp index 8b771de210..c418edf369 100644 --- a/src/ifcgeom/IfcArbitraryProfileDefWithVoids.cpp +++ b/src/ifcgeom/IfcArbitraryProfileDefWithVoids.cpp @@ -17,75 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcAxis1Placement.cpp b/src/ifcgeom/IfcAxis1Placement.cpp index 7d02d0fbad..55973e2de3 100644 --- a/src/ifcgeom/IfcAxis1Placement.cpp +++ b/src/ifcgeom/IfcAxis1Placement.cpp @@ -18,49 +18,7 @@ ********************************************************************************/ #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcAxis2Placement2D.cpp b/src/ifcgeom/IfcAxis2Placement2D.cpp index 0eb968d287..fe8a849a59 100644 --- a/src/ifcgeom/IfcAxis2Placement2D.cpp +++ b/src/ifcgeom/IfcAxis2Placement2D.cpp @@ -18,49 +18,11 @@ ********************************************************************************/ #include -#include #include #include -#include #include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcAxis2Placement3D.cpp b/src/ifcgeom/IfcAxis2Placement3D.cpp index fd9abd2779..8b41e67cf2 100644 --- a/src/ifcgeom/IfcAxis2Placement3D.cpp +++ b/src/ifcgeom/IfcAxis2Placement3D.cpp @@ -20,47 +20,8 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcBSplineCurveWithKnots.cpp b/src/ifcgeom/IfcBSplineCurveWithKnots.cpp index aacbdcc484..b6f536606f 100644 --- a/src/ifcgeom/IfcBSplineCurveWithKnots.cpp +++ b/src/ifcgeom/IfcBSplineCurveWithKnots.cpp @@ -17,51 +17,10 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include diff --git a/src/ifcgeom/IfcBSplineSurfaceWithKnots.cpp b/src/ifcgeom/IfcBSplineSurfaceWithKnots.cpp index 70db779d46..910e713939 100644 --- a/src/ifcgeom/IfcBSplineSurfaceWithKnots.cpp +++ b/src/ifcgeom/IfcBSplineSurfaceWithKnots.cpp @@ -17,75 +17,14 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include #include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcBlock.cpp b/src/ifcgeom/IfcBlock.cpp index 5a546fe9d5..0007b97729 100644 --- a/src/ifcgeom/IfcBlock.cpp +++ b/src/ifcgeom/IfcBlock.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcBooleanResult.cpp b/src/ifcgeom/IfcBooleanResult.cpp index 72351e6c24..046c5d647a 100644 --- a/src/ifcgeom/IfcBooleanResult.cpp +++ b/src/ifcgeom/IfcBooleanResult.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcBoundingBox.cpp b/src/ifcgeom/IfcBoundingBox.cpp index 435a450560..5c164f5d91 100644 --- a/src/ifcgeom/IfcBoundingBox.cpp +++ b/src/ifcgeom/IfcBoundingBox.cpp @@ -18,75 +18,8 @@ ********************************************************************************/ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCShapeProfileDef.cpp b/src/ifcgeom/IfcCShapeProfileDef.cpp index e0c0a43207..cab56aae3e 100644 --- a/src/ifcgeom/IfcCShapeProfileDef.cpp +++ b/src/ifcgeom/IfcCShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCartesianPoint.cpp b/src/ifcgeom/IfcCartesianPoint.cpp index a571752b0c..93a6ae50ba 100644 --- a/src/ifcgeom/IfcCartesianPoint.cpp +++ b/src/ifcgeom/IfcCartesianPoint.cpp @@ -18,49 +18,6 @@ ********************************************************************************/ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCartesianTransformationOperator2D.cpp b/src/ifcgeom/IfcCartesianTransformationOperator2D.cpp index 5056701f7c..d91e0c707f 100644 --- a/src/ifcgeom/IfcCartesianTransformationOperator2D.cpp +++ b/src/ifcgeom/IfcCartesianTransformationOperator2D.cpp @@ -18,49 +18,11 @@ ********************************************************************************/ #include -#include #include #include -#include #include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCartesianTransformationOperator2DnonUniform.cpp b/src/ifcgeom/IfcCartesianTransformationOperator2DnonUniform.cpp index c2716a831c..c1735399c4 100644 --- a/src/ifcgeom/IfcCartesianTransformationOperator2DnonUniform.cpp +++ b/src/ifcgeom/IfcCartesianTransformationOperator2DnonUniform.cpp @@ -18,49 +18,12 @@ ********************************************************************************/ #include -#include #include #include -#include #include -#include -#include -#include #include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCartesianTransformationOperator3D.cpp b/src/ifcgeom/IfcCartesianTransformationOperator3D.cpp index 8319a7090f..730a2e9960 100644 --- a/src/ifcgeom/IfcCartesianTransformationOperator3D.cpp +++ b/src/ifcgeom/IfcCartesianTransformationOperator3D.cpp @@ -18,49 +18,9 @@ ********************************************************************************/ #include -#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCartesianTransformationOperator3DnonUniform.cpp b/src/ifcgeom/IfcCartesianTransformationOperator3DnonUniform.cpp index 75e8f9f28d..9bedf1c115 100644 --- a/src/ifcgeom/IfcCartesianTransformationOperator3DnonUniform.cpp +++ b/src/ifcgeom/IfcCartesianTransformationOperator3DnonUniform.cpp @@ -18,49 +18,10 @@ ********************************************************************************/ #include -#include #include -#include -#include -#include -#include -#include #include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCenterLineProfileDef.cpp b/src/ifcgeom/IfcCenterLineProfileDef.cpp index 688137d268..03f701a3ee 100644 --- a/src/ifcgeom/IfcCenterLineProfileDef.cpp +++ b/src/ifcgeom/IfcCenterLineProfileDef.cpp @@ -17,75 +17,20 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include #include #include #include #include -#include -#include -#include -#include -#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCircle.cpp b/src/ifcgeom/IfcCircle.cpp index fdb933e30a..731fa13130 100644 --- a/src/ifcgeom/IfcCircle.cpp +++ b/src/ifcgeom/IfcCircle.cpp @@ -17,53 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCircleHollowProfileDef.cpp b/src/ifcgeom/IfcCircleHollowProfileDef.cpp index b093d47801..6a9e7fbf3e 100644 --- a/src/ifcgeom/IfcCircleHollowProfileDef.cpp +++ b/src/ifcgeom/IfcCircleHollowProfileDef.cpp @@ -17,75 +17,16 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include #include #include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCircleProfileDef.cpp b/src/ifcgeom/IfcCircleProfileDef.cpp index c1d415f49e..d97ff05041 100644 --- a/src/ifcgeom/IfcCircleProfileDef.cpp +++ b/src/ifcgeom/IfcCircleProfileDef.cpp @@ -17,75 +17,13 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCompositeCurve.cpp b/src/ifcgeom/IfcCompositeCurve.cpp index 432e6dcda4..a6345c3b02 100644 --- a/src/ifcgeom/IfcCompositeCurve.cpp +++ b/src/ifcgeom/IfcCompositeCurve.cpp @@ -17,67 +17,12 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #include "../ifcgeom_schema_agnostic/wire_builder.h" diff --git a/src/ifcgeom/IfcCompositeProfileDef.cpp b/src/ifcgeom/IfcCompositeProfileDef.cpp index 3e4ba1de71..4c3ae3ea57 100644 --- a/src/ifcgeom/IfcCompositeProfileDef.cpp +++ b/src/ifcgeom/IfcCompositeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcConnectedFaceSet.cpp b/src/ifcgeom/IfcConnectedFaceSet.cpp index 2b4c450683..b9a419c990 100644 --- a/src/ifcgeom/IfcConnectedFaceSet.cpp +++ b/src/ifcgeom/IfcConnectedFaceSet.cpp @@ -17,76 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCraneRailAShapeProfileDef.cpp b/src/ifcgeom/IfcCraneRailAShapeProfileDef.cpp index b9b87b0497..95d2306616 100644 --- a/src/ifcgeom/IfcCraneRailAShapeProfileDef.cpp +++ b/src/ifcgeom/IfcCraneRailAShapeProfileDef.cpp @@ -17,75 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCsgSolid.cpp b/src/ifcgeom/IfcCsgSolid.cpp index 614bcb4e3d..1a53a25509 100644 --- a/src/ifcgeom/IfcCsgSolid.cpp +++ b/src/ifcgeom/IfcCsgSolid.cpp @@ -17,76 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCurveBoundedPlane.cpp b/src/ifcgeom/IfcCurveBoundedPlane.cpp index c6858f6edc..07f25981c6 100644 --- a/src/ifcgeom/IfcCurveBoundedPlane.cpp +++ b/src/ifcgeom/IfcCurveBoundedPlane.cpp @@ -17,76 +17,15 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcCylindricalSurface.cpp b/src/ifcgeom/IfcCylindricalSurface.cpp index 8e1dc716a5..a74fc41f1b 100644 --- a/src/ifcgeom/IfcCylindricalSurface.cpp +++ b/src/ifcgeom/IfcCylindricalSurface.cpp @@ -17,76 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcDerivedProfileDef.cpp b/src/ifcgeom/IfcDerivedProfileDef.cpp index 036e51b482..1bf666540a 100644 --- a/src/ifcgeom/IfcDerivedProfileDef.cpp +++ b/src/ifcgeom/IfcDerivedProfileDef.cpp @@ -17,75 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcDirection.cpp b/src/ifcgeom/IfcDirection.cpp index 31fae2b16b..21e84df886 100644 --- a/src/ifcgeom/IfcDirection.cpp +++ b/src/ifcgeom/IfcDirection.cpp @@ -17,50 +17,7 @@ * * ********************************************************************************/ -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcEdge.cpp b/src/ifcgeom/IfcEdge.cpp index a2be514d4a..ea119ca2ad 100644 --- a/src/ifcgeom/IfcEdge.cpp +++ b/src/ifcgeom/IfcEdge.cpp @@ -17,67 +17,11 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcEdgeCurve.cpp b/src/ifcgeom/IfcEdgeCurve.cpp index 01fefa8d0b..7cf5a34452 100644 --- a/src/ifcgeom/IfcEdgeCurve.cpp +++ b/src/ifcgeom/IfcEdgeCurve.cpp @@ -17,67 +17,14 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include #include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #include "../ifcgeom_schema_agnostic/wire_builder.h" diff --git a/src/ifcgeom/IfcEdgeLoop.cpp b/src/ifcgeom/IfcEdgeLoop.cpp index 30efd11aa3..b3c49d933a 100644 --- a/src/ifcgeom/IfcEdgeLoop.cpp +++ b/src/ifcgeom/IfcEdgeLoop.cpp @@ -17,67 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcEllipse.cpp b/src/ifcgeom/IfcEllipse.cpp index 1a9433c738..c76cc9d118 100644 --- a/src/ifcgeom/IfcEllipse.cpp +++ b/src/ifcgeom/IfcEllipse.cpp @@ -17,53 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcEllipseProfileDef.cpp b/src/ifcgeom/IfcEllipseProfileDef.cpp index 52805e8b99..77de9babc5 100644 --- a/src/ifcgeom/IfcEllipseProfileDef.cpp +++ b/src/ifcgeom/IfcEllipseProfileDef.cpp @@ -17,75 +17,13 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcExtrudedAreaSolid.cpp b/src/ifcgeom/IfcExtrudedAreaSolid.cpp index 3f9f1f51e8..0f354d5de8 100644 --- a/src/ifcgeom/IfcExtrudedAreaSolid.cpp +++ b/src/ifcgeom/IfcExtrudedAreaSolid.cpp @@ -17,76 +17,11 @@ * * ********************************************************************************/ -#include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include // uncomment if you'd like negative or close to zero extrusion depths to succeed // #define PERMISSIVE_EXTRUSION diff --git a/src/ifcgeom/IfcExtrudedAreaSolidTapered.cpp b/src/ifcgeom/IfcExtrudedAreaSolidTapered.cpp index b2729650ed..bcf0dc6d5e 100644 --- a/src/ifcgeom/IfcExtrudedAreaSolidTapered.cpp +++ b/src/ifcgeom/IfcExtrudedAreaSolidTapered.cpp @@ -20,73 +20,18 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include #include -#include -#include -#include -#include #include #include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcFace.cpp b/src/ifcgeom/IfcFace.cpp index 959132fe6b..1c615d032d 100644 --- a/src/ifcgeom/IfcFace.cpp +++ b/src/ifcgeom/IfcFace.cpp @@ -17,75 +17,25 @@ * * ********************************************************************************/ -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include #include #include -#include -#include #include #include -#include -#include -#include -#include #include -#include -#include -#include #include -#include #include -#include -#include -#include #include #include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #include "../ifcgeom_schema_agnostic/face_definition.h" diff --git a/src/ifcgeom/IfcFaceBasedSurfaceModel.cpp b/src/ifcgeom/IfcFaceBasedSurfaceModel.cpp index 71ae4d2068..760a860d6f 100644 --- a/src/ifcgeom/IfcFaceBasedSurfaceModel.cpp +++ b/src/ifcgeom/IfcFaceBasedSurfaceModel.cpp @@ -17,76 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcGeom.cpp b/src/ifcgeom/IfcGeom.cpp index ecd901eb1e..d2959f2ff7 100644 --- a/src/ifcgeom/IfcGeom.cpp +++ b/src/ifcgeom/IfcGeom.cpp @@ -24,7 +24,6 @@ ********************************************************************************/ #include -#include #include #include @@ -34,32 +33,19 @@ #include #include #include -#include -#include -#include -#include #include #include #include #include #include -#include #include -#include #include #include -#include -#include -#include -#include #include #include -#include -#include -#include #include #include @@ -107,9 +93,7 @@ #include #include -#include -#include #include @@ -118,7 +102,6 @@ #include #include -#include #include #include @@ -135,25 +118,18 @@ #include #include -#include -#include #include -#include #include -#include #include #include #include -#include -#include #include -#include #if OCC_VERSION_HEX >= 0x70200 #include @@ -161,9 +137,11 @@ #include "../ifcparse/macros.h" #include "../ifcparse/IfcSIPrefix.h" + #include "../ifcparse/IfcFile.h" #include "../ifcgeom/IfcGeom.h" -#include "../ifcgeom/IfcGeomTree.h" + +#include "../ifcgeom_schema_agnostic/IfcGeomTree.h" #include "../ifcgeom_schema_agnostic/boolean_utils.h" #include @@ -4925,3 +4903,128 @@ void IfcGeom::Kernel::set_conversion_placement_rel_to_type(const IfcParse::decla void IfcGeom::Kernel::set_conversion_placement_rel_to_instance(const IfcUtil::IfcBaseEntity* instance) { placement_rel_to_instance_ = instance; } + + +namespace { + + bool process_colour(IfcSchema::IfcColourRgb* colour, double* rgb) { + if (colour != 0) { + rgb[0] = colour->Red(); + rgb[1] = colour->Green(); + rgb[2] = colour->Blue(); + } + return colour != 0; + } + + bool process_colour(IfcSchema::IfcNormalisedRatioMeasure* factor, double* rgb) { + if (factor != 0) { + const double f = *factor; + rgb[0] = rgb[1] = rgb[2] = f; + } + return factor != 0; + } + + bool process_colour(IfcSchema::IfcColourOrFactor* colour_or_factor, double* rgb) { + if (colour_or_factor == 0) { + return false; + } else if (colour_or_factor->declaration().is(IfcSchema::IfcColourRgb::Class())) { + return process_colour(static_cast(colour_or_factor), rgb); + } else if (colour_or_factor->declaration().is(IfcSchema::IfcNormalisedRatioMeasure::Class())) { + return process_colour(static_cast(colour_or_factor), rgb); + } else { + return false; + } + } + +} + +#define Kernel MAKE_TYPE_NAME(Kernel) + +std::shared_ptr IfcGeom::Kernel::internalize_surface_style(const std::pair& shading_styles) { + if (shading_styles.second == 0) { + return 0; + } + int surface_style_id = shading_styles.first->data().id(); + auto it = style_cache.find(surface_style_id); + if (it != style_cache.end()) { + return it->second; + } + + + IfcSchema::IfcSurfaceStyle* style = shading_styles.first->as(); + IfcSchema::IfcSurfaceStyleShading* shading = shading_styles.second->as(); + + std::shared_ptr surface_style_ptr; + + if (style->Name()) { + surface_style_ptr.reset(new SurfaceStyle(surface_style_id, *style->Name())); + } else { + surface_style_ptr.reset(new SurfaceStyle(surface_style_id)); + } + + std::shared_ptr surface_style_ptr_const = std::const_pointer_cast(surface_style_ptr); + SurfaceStyle& surface_style = *surface_style_ptr; + + double rgb[3]; + if (process_colour(shading->SurfaceColour(), rgb)) { + surface_style.Diffuse().reset(SurfaceStyle::ColorComponent(rgb[0], rgb[1], rgb[2])); + } + if (shading_styles.second->declaration().is(IfcSchema::IfcSurfaceStyleRendering::Class())) { + IfcSchema::IfcSurfaceStyleRendering* rendering_style = static_cast(shading_styles.second); + if (rendering_style->DiffuseColour() && process_colour(rendering_style->DiffuseColour(), rgb)) { + SurfaceStyle::ColorComponent diffuse = surface_style.Diffuse().get_value_or(SurfaceStyle::ColorComponent(1, 1, 1)); + surface_style.Diffuse().reset(SurfaceStyle::ColorComponent(diffuse.R() * rgb[0], diffuse.G() * rgb[1], diffuse.B() * rgb[2])); + } + if (rendering_style->DiffuseTransmissionColour()) { + // Not supported + } + if (rendering_style->ReflectionColour()) { + // Not supported + } + if (rendering_style->SpecularColour() && process_colour(rendering_style->SpecularColour(), rgb)) { + surface_style.Specular().reset(SurfaceStyle::ColorComponent(rgb[0], rgb[1], rgb[2])); + } + if (rendering_style->SpecularHighlight()) { + IfcSchema::IfcSpecularHighlightSelect* highlight = rendering_style->SpecularHighlight(); + if (highlight->declaration().is(IfcSchema::IfcSpecularRoughness::Class())) { + double roughness = *((IfcSchema::IfcSpecularRoughness*)highlight); + if (roughness >= 1e-9) { + surface_style.Specularity().reset(1.0 / roughness); + } + } else if (highlight->declaration().is(IfcSchema::IfcSpecularExponent::Class())) { + surface_style.Specularity().reset(*((IfcSchema::IfcSpecularExponent*)highlight)); + } + } + if (rendering_style->TransmissionColour()) { + // Not supported + } + if (rendering_style->Transparency()) { + const double d = *rendering_style->Transparency(); + surface_style.Transparency().reset(d); + } + } + return style_cache[surface_style_id] = surface_style_ptr_const; +} + +std::shared_ptr IfcGeom::Kernel::get_style(const IfcSchema::IfcRepresentationItem* item) { + return internalize_surface_style(get_surface_style(item)); +} + +std::shared_ptr IfcGeom::Kernel::get_style(const IfcSchema::IfcMaterial* material) { + IfcSchema::IfcMaterialDefinitionRepresentation::list::ptr defs = material->HasRepresentation(); + for (IfcSchema::IfcMaterialDefinitionRepresentation::list::it jt = defs->begin(); jt != defs->end(); ++jt) { + IfcSchema::IfcRepresentation::list::ptr reps = (*jt)->Representations(); + IfcSchema::IfcStyledItem::list::ptr styles(new IfcSchema::IfcStyledItem::list); + for (IfcSchema::IfcRepresentation::list::it it = reps->begin(); it != reps->end(); ++it) { + styles->push((**it).Items()->as()); + } + for (IfcSchema::IfcStyledItem::list::it it = styles->begin(); it != styles->end(); ++it) { + const std::pair ss = get_surface_style(*it); + if (ss.second) { + return internalize_surface_style(ss); + } + } + } + auto material_style = std::make_shared(material->data().id(), material->Name()); + return style_cache[material->data().id()] = material_style; +} diff --git a/src/ifcgeom/IfcGeom.h b/src/ifcgeom/IfcGeom.h index 99f6a87c13..ae0ec58d06 100644 --- a/src/ifcgeom/IfcGeom.h +++ b/src/ifcgeom/IfcGeom.h @@ -23,13 +23,6 @@ #include #include -static const double ALMOST_ZERO = 1.e-9; - -template -inline static bool ALMOST_THE_SAME(const T& a, const T& b, double tolerance=ALMOST_ZERO) { - return fabs(a-b) < tolerance; -} - #include #include #include @@ -54,14 +47,12 @@ inline static bool ALMOST_THE_SAME(const T& a, const T& b, double tolerance=ALMO #include "../ifcparse/IfcParse.h" #include "../ifcparse/IfcBaseClass.h" -#include "../ifcgeom/IfcGeomElement.h" -#include "../ifcgeom/IfcGeomRepresentation.h" -#include "../ifcgeom/IfcRepresentationShapeItem.h" -#include "../ifcgeom/IfcGeomShapeType.h" - +#include "../ifcgeom_schema_agnostic/IfcGeomElement.h" +#include "../ifcgeom_schema_agnostic/IfcGeomRepresentation.h" +#include "../ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h" +#include "../ifcgeom_schema_agnostic/IfcGeomShapeType.h" #include "../ifcgeom_schema_agnostic/Kernel.h" - -#include "ifc_geom_api.h" +#include "../ifcgeom_schema_agnostic/ifc_geom_api.h" // Define this in case you want to conserve memory usage at all cost. This has been // benchmarked extensively: https://github.com/IfcOpenShell/IfcOpenShell/pull/47 diff --git a/src/ifcgeom/IfcGeomIteratorImplementation.h b/src/ifcgeom/IfcGeomIteratorImplementation.h index d809383325..7746fa13f9 100644 --- a/src/ifcgeom/IfcGeomIteratorImplementation.h +++ b/src/ifcgeom/IfcGeomIteratorImplementation.h @@ -81,11 +81,11 @@ #include "../ifcparse/IfcFile.h" #include "../ifcgeom/IfcGeom.h" -#include "../ifcgeom/IfcGeomElement.h" -#include "../ifcgeom_schema_agnostic/IfcGeomMaterial.h" -#include "../ifcgeom/IfcGeomIteratorSettings.h" -#include "../ifcgeom/IfcRepresentationShapeItem.h" +#include "../ifcgeom_schema_agnostic/IfcGeomElement.h" +#include "../ifcgeom_schema_agnostic/IfcGeomMaterial.h" +#include "../ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h" +#include "../ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h" #include "../ifcgeom_schema_agnostic/IfcGeomFilter.h" #include "../ifcgeom_schema_agnostic/IteratorImplementation.h" diff --git a/src/ifcgeom/IfcGeomRenderStyles.cpp b/src/ifcgeom/IfcGeomRenderStyles.cpp deleted file mode 100644 index 0644ca1cc6..0000000000 --- a/src/ifcgeom/IfcGeomRenderStyles.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************** - * * - * This file is part of IfcOpenShell. * - * * - * IfcOpenShell is free software: you can redistribute it and/or modify * - * it under the terms of the Lesser GNU General Public License as published by * - * the Free Software Foundation, either version 3.0 of the License, or * - * (at your option) any later version. * - * * - * IfcOpenShell is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * Lesser GNU General Public License for more details. * - * * - * You should have received a copy of the Lesser GNU General Public License * - * along with this program. If not, see . * - * * - ********************************************************************************/ - -#include - -#include "IfcGeom.h" - -namespace { - - bool process_colour(IfcSchema::IfcColourRgb* colour, double* rgb) { - if (colour != 0) { - rgb[0] = colour->Red(); - rgb[1] = colour->Green(); - rgb[2] = colour->Blue(); - } - return colour != 0; - } - - bool process_colour(IfcSchema::IfcNormalisedRatioMeasure* factor, double* rgb) { - if (factor != 0) { - const double f = *factor; - rgb[0] = rgb[1] = rgb[2] = f; - } - return factor != 0; - } - - bool process_colour(IfcSchema::IfcColourOrFactor* colour_or_factor, double* rgb) { - if (colour_or_factor == 0) { - return false; - } else if (colour_or_factor->declaration().is(IfcSchema::IfcColourRgb::Class())) { - return process_colour(static_cast(colour_or_factor), rgb); - } else if (colour_or_factor->declaration().is(IfcSchema::IfcNormalisedRatioMeasure::Class())) { - return process_colour(static_cast(colour_or_factor), rgb); - } else { - return false; - } - } - -} - -#define Kernel MAKE_TYPE_NAME(Kernel) - -std::shared_ptr IfcGeom::Kernel::internalize_surface_style(const std::pair& shading_styles) { - if (shading_styles.second == 0) { - return 0; - } - int surface_style_id = shading_styles.first->data().id(); - auto it = style_cache.find(surface_style_id); - if (it != style_cache.end()) { - return it->second; - } - - - IfcSchema::IfcSurfaceStyle* style = shading_styles.first->as(); - IfcSchema::IfcSurfaceStyleShading* shading = shading_styles.second->as(); - - std::shared_ptr surface_style_ptr; - - if (style->Name()) { - surface_style_ptr.reset(new SurfaceStyle(surface_style_id, *style->Name())); - } else { - surface_style_ptr.reset(new SurfaceStyle(surface_style_id)); - } - - std::shared_ptr surface_style_ptr_const = std::const_pointer_cast(surface_style_ptr); - SurfaceStyle& surface_style = *surface_style_ptr; - - double rgb[3]; - if (process_colour(shading->SurfaceColour(), rgb)) { - surface_style.Diffuse().reset(SurfaceStyle::ColorComponent(rgb[0], rgb[1], rgb[2])); - } - if (shading_styles.second->declaration().is(IfcSchema::IfcSurfaceStyleRendering::Class())) { - IfcSchema::IfcSurfaceStyleRendering* rendering_style = static_cast(shading_styles.second); - if (rendering_style->DiffuseColour() && process_colour(rendering_style->DiffuseColour(), rgb)) { - SurfaceStyle::ColorComponent diffuse = surface_style.Diffuse().get_value_or(SurfaceStyle::ColorComponent(1,1,1)); - surface_style.Diffuse().reset(SurfaceStyle::ColorComponent(diffuse.R() * rgb[0], diffuse.G() * rgb[1], diffuse.B() * rgb[2])); - } - if (rendering_style->DiffuseTransmissionColour()) { - // Not supported - } - if (rendering_style->ReflectionColour()) { - // Not supported - } - if (rendering_style->SpecularColour() && process_colour(rendering_style->SpecularColour(), rgb)) { - surface_style.Specular().reset(SurfaceStyle::ColorComponent(rgb[0], rgb[1], rgb[2])); - } - if (rendering_style->SpecularHighlight()) { - IfcSchema::IfcSpecularHighlightSelect* highlight = rendering_style->SpecularHighlight(); - if (highlight->declaration().is(IfcSchema::IfcSpecularRoughness::Class())) { - double roughness = *((IfcSchema::IfcSpecularRoughness*)highlight); - if (roughness >= 1e-9) { - surface_style.Specularity().reset(1.0 / roughness); - } - } else if (highlight->declaration().is(IfcSchema::IfcSpecularExponent::Class())) { - surface_style.Specularity().reset(*((IfcSchema::IfcSpecularExponent*)highlight)); - } - } - if (rendering_style->TransmissionColour()) { - // Not supported - } - if (rendering_style->Transparency()) { - const double d = *rendering_style->Transparency(); - surface_style.Transparency().reset(d); - } - } - return style_cache[surface_style_id] = surface_style_ptr_const; -} - -std::shared_ptr IfcGeom::Kernel::get_style(const IfcSchema::IfcRepresentationItem* item) { - return internalize_surface_style(get_surface_style(item)); -} - -std::shared_ptr IfcGeom::Kernel::get_style(const IfcSchema::IfcMaterial* material) { - IfcSchema::IfcMaterialDefinitionRepresentation::list::ptr defs = material->HasRepresentation(); - for (IfcSchema::IfcMaterialDefinitionRepresentation::list::it jt = defs->begin(); jt != defs->end(); ++jt) { - IfcSchema::IfcRepresentation::list::ptr reps = (*jt)->Representations(); - IfcSchema::IfcStyledItem::list::ptr styles(new IfcSchema::IfcStyledItem::list); - for (IfcSchema::IfcRepresentation::list::it it = reps->begin(); it != reps->end(); ++it) { - styles->push((**it).Items()->as()); - } - for (IfcSchema::IfcStyledItem::list::it it = styles->begin(); it != styles->end(); ++it) { - const std::pair ss = get_surface_style(*it); - if (ss.second) { - return internalize_surface_style(ss); - } - } - } - auto material_style = std::make_shared(material->data().id(), material->Name()); - return style_cache[material->data().id()] = material_style; -} diff --git a/src/ifcgeom/IfcGeomRepresentation.cpp b/src/ifcgeom/IfcGeomRepresentation.cpp deleted file mode 100644 index c346471aa4..0000000000 --- a/src/ifcgeom/IfcGeomRepresentation.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/******************************************************************************** - * * - * This file is part of IfcOpenShell. * - * * - * IfcOpenShell is free software: you can redistribute it and/or modify * - * it under the terms of the Lesser GNU General Public License as published by * - * the Free Software Foundation, either version 3.0 of the License, or * - * (at your option) any later version. * - * * - * IfcOpenShell is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * Lesser GNU General Public License for more details. * - * * - * You should have received a copy of the Lesser GNU General Public License * - * along with this program. If not, see . * - * * - ********************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include - -#include "../ifcgeom/IfcGeom.h" - -#include "IfcGeomRepresentation.h" - -IfcGeom::Representation::Serialization::Serialization(const BRep& brep) - : Representation(brep.settings()) - , id_(brep.id()) -{ - TopoDS_Compound compound = brep.as_compound(); - for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = brep.begin(); it != brep.end(); ++ it) { - int sid = -1; - - if (it->hasStyle() && it->Style().Diffuse()) { - const IfcGeom::SurfaceStyle::ColorComponent& clr = *it->Style().Diffuse(); - surface_styles_.push_back(clr.R()); - surface_styles_.push_back(clr.G()); - surface_styles_.push_back(clr.B()); - - sid = it->Style().Id().get_value_or(-1); - } else { - surface_styles_.push_back(-1.); - surface_styles_.push_back(-1.); - surface_styles_.push_back(-1.); - } - - if (it->hasStyle() && it->Style().Transparency()) { - surface_styles_.push_back(1. - *it->Style().Transparency()); - } else { - surface_styles_.push_back(1.); - } - - surface_style_ids_.push_back(sid); - } - std::stringstream sstream; - BRepTools::Write(compound,sstream); - brep_data_ = sstream.str(); -} - -// todo copied from kernel -#include -#include - -TopoDS_Shape apply_transformation(const TopoDS_Shape& s, const gp_Trsf& t) { - if (t.Form() == gp_Identity) { - return s; - } else { - /// @todo set to 1. and exactly 1. or use epsilon? - if (t.ScaleFactor() != 1.) { - return BRepBuilderAPI_Transform(s, t, true); - } else { - return s.Moved(t); - } - } -} - -TopoDS_Shape apply_transformation(const TopoDS_Shape& s, const gp_GTrsf& t) { - if (t.Form() == gp_Other) { - return BRepBuilderAPI_GTransform(s, t, true); - } else { - return apply_transformation(s, t.Trsf()); - } -} - -TopoDS_Compound IfcGeom::Representation::BRep::as_compound(bool force_meters) const { - TopoDS_Compound compound; - BRep_Builder builder; - builder.MakeCompound(compound); - for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { - const TopoDS_Shape& s = it->Shape(); - gp_GTrsf trsf = it->Placement(); - - if (!force_meters && settings().get(IteratorSettings::CONVERT_BACK_UNITS)) { - gp_Trsf scale; - scale.SetScaleFactor(1.0 / settings().unit_magnitude()); - trsf.PreMultiply(scale); - } - - const TopoDS_Shape moved_shape = apply_transformation(s, trsf); - builder.Add(compound, moved_shape); - } - return compound; -} - -namespace { - void accumulate(const gp_Ax3& ax, const gp_Dir& normal, double area, double& along_x, double& along_y, double& along_z) { - along_x += area * fabs(ax.XDirection().Dot(normal)); - along_y += area * fabs(ax.YDirection().Dot(normal)); - along_z += area * fabs(ax.Direction().Dot(normal)); - } - - void surface_area_along_direction(double tol, const TopoDS_Shape& s, const gp_Ax3& ax, double& along_x, double& along_y, double& along_z) { - along_x = along_y = along_z = 0.; - - bool meshed = false; - - TopExp_Explorer exp(s, TopAbs_FACE); - for (; exp.More(); exp.Next()) { - const TopoDS_Face& face = TopoDS::Face(exp.Current()); - Handle(Geom_Surface) surf = BRep_Tool::Surface(face); - Handle(Geom_Plane) plane = Handle(Geom_Plane)::DownCast(surf); - - if (surf->DynamicType() == STANDARD_TYPE(Geom_Plane)) { - GProp_GProps prop_area; - BRepGProp::SurfaceProperties(face, prop_area); - const double area = prop_area.Mass(); - - accumulate(ax, plane->Position().Direction(), area, along_x, along_y, along_z); - } else { - - if (!meshed) { - try { - BRepMesh_IncrementalMesh(s, tol); - } catch (...) { - Logger::Message(Logger::LOG_ERROR, "Failed to triangulate shape"); - return; - } - meshed = true; - } - - TopLoc_Location loc; - Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(face, loc); - if (!tri.IsNull()) { - std::vector coords; - coords.reserve(tri->NbNodes()); - - for (int i = 1; i <= tri->NbNodes(); ++i) { - coords.push_back(tri->Node(i).Transformed(loc).XYZ()); - } - - const Poly_Array1OfTriangle& triangles = tri->Triangles(); - for (int i = 1; i <= triangles.Length(); ++i) { - int n1, n2, n3; - - if (face.Orientation() == TopAbs_REVERSED) { - triangles(i).Get(n3, n2, n1); - } else { - triangles(i).Get(n1, n2, n3); - } - - const gp_XYZ& pt1 = coords[n1 - 1]; - const gp_XYZ& pt2 = coords[n2 - 1]; - const gp_XYZ& pt3 = coords[n3 - 1]; - const gp_Vec v1 = pt2 - pt1; - const gp_Vec v2 = pt3 - pt2; - const gp_Vec v3 = pt1 - pt3; - const gp_Vec normal_vector = v1 ^ v2; - if (normal_vector.Magnitude() > ALMOST_ZERO) { - gp_Dir normal = gp_Dir(); - - double edge_lengths[3] = { v1.Magnitude(), v2.Magnitude(), v3.Magnitude() }; - std::sort(&edge_lengths[0], &edge_lengths[2]); - - const double& a = edge_lengths[0]; - const double& b = edge_lengths[1]; - const double& c = edge_lengths[2]; - - const double area = 0.25 * sqrt((a + (b + c))*(c - (a - b))*(c + (a - b))*(a + (b - c))); - accumulate(ax, normal, area, along_x, along_y, along_z); - } - } - } - } - } - } -} - -bool IfcGeom::Representation::BRep::calculate_surface_area(double& area) const { - try { - area = 0.; - - for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { - GProp_GProps prop; - BRepGProp::SurfaceProperties(it->Shape(), prop); - area += prop.Mass(); - } - - return true; - } catch (...) { - Logger::Error("Error during calculation of surface area"); - return false; - } -} - -bool IfcGeom::Representation::BRep::calculate_volume(double& volume) const { - try { - volume = 0.; - - for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { - if (Kernel::is_manifold(it->Shape())) { - GProp_GProps prop; - BRepGProp::VolumeProperties(it->Shape(), prop); - volume += prop.Mass(); - } else { - return false; - } - } - - return true; - } catch (...) { - Logger::Error("Error during calculation of volume"); - return false; - } -} - -bool IfcGeom::Representation::BRep::calculate_projected_surface_area(const gp_Ax3 & ax, double & along_x, double & along_y, double & along_z) const { - try { - along_x = along_y = along_z = 0.; - - for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { - double x, y, z; - surface_area_along_direction(settings().deflection_tolerance(), it->Shape(), ax, x, y, z); - - if (Kernel::is_manifold(it->Shape())) { - x /= 2.; - y /= 2.; - z /= 2.; - } - - along_x += x; - along_y += y; - along_z += z; - } - - return true; - } catch (...) { - Logger::Error("Error during calculation of projected surface area"); - return false; - } -} diff --git a/src/ifcgeom/IfcGeomRepresentation.h b/src/ifcgeom/IfcGeomRepresentation.h deleted file mode 100644 index 40f6718c59..0000000000 --- a/src/ifcgeom/IfcGeomRepresentation.h +++ /dev/null @@ -1,447 +0,0 @@ -/******************************************************************************** - * * - * This file is part of IfcOpenShell. * - * * - * IfcOpenShell is free software: you can redistribute it and/or modify * - * it under the terms of the Lesser GNU General Public License as published by * - * the Free Software Foundation, either version 3.0 of the License, or * - * (at your option) any later version. * - * * - * IfcOpenShell is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * Lesser GNU General Public License for more details. * - * * - * You should have received a copy of the Lesser GNU General Public License * - * along with this program. If not, see . * - * * - ********************************************************************************/ - -#ifndef IFCGEOMREPRESENTATION_H -#define IFCGEOMREPRESENTATION_H - -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include "../ifcgeom/IfcGeomIteratorSettings.h" -#include "../ifcgeom_schema_agnostic/IfcGeomMaterial.h" -#include "../ifcgeom/IfcRepresentationShapeItem.h" - -#include - -namespace IfcGeom { - - namespace Representation { - - class IFC_GEOM_API Representation { - Representation(const Representation&); //N/A - Representation& operator =(const Representation&); //N/A - protected: - const ElementSettings settings_; - public: - explicit Representation(const ElementSettings& settings) - : settings_(settings) - {} - const ElementSettings& settings() const { return settings_; } - virtual ~Representation() {} - }; - - class IFC_GEOM_API BRep : public Representation { - private: - std::string id_; - const IfcGeom::IfcRepresentationShapeItems shapes_; - BRep(const BRep& other); - BRep& operator=(const BRep& other); - public: - BRep(const ElementSettings& settings, const std::string& id, const IfcGeom::IfcRepresentationShapeItems& shapes) - : Representation(settings) - , id_(id) - , shapes_(shapes) - {} - virtual ~BRep() {} - IfcGeom::IfcRepresentationShapeItems::const_iterator begin() const { return shapes_.begin(); } - IfcGeom::IfcRepresentationShapeItems::const_iterator end() const { return shapes_.end(); } - const IfcGeom::IfcRepresentationShapeItems& shapes() const { return shapes_; } - const std::string& id() const { return id_; } - TopoDS_Compound as_compound(bool force_meters = false) const; - - bool calculate_volume(double&) const; - bool calculate_surface_area(double&) const; - bool calculate_projected_surface_area(const gp_Ax3& ax, double& along_x, double& along_y, double& along_z) const; - }; - - class IFC_GEOM_API Serialization : public Representation { - private: - std::string id_; - std::string brep_data_; - std::vector surface_styles_; - std::vector surface_style_ids_; - public: - const std::string& brep_data() const { return brep_data_; } - const std::vector& surface_styles() const { return surface_styles_; } - const std::vector& surface_style_ids() const { return surface_style_ids_; } - Serialization(const BRep& brep); - virtual ~Serialization() {} - const std::string& id() const { return id_; } - private: - Serialization(); - Serialization(const Serialization&); - Serialization& operator=(const Serialization&); - }; - - class Triangulation : public Representation { - private: - // A nested pair of floats and a material index to be able to store an XYZ coordinate in a map. - // TODO: Make this a std::tuple when compilers add support for that. - typedef typename std::pair > Coordinate; - typedef typename std::pair VertexKey; - typedef std::map VertexKeyMap; - typedef std::pair Edge; - - std::string id_; - std::vector _verts; - std::vector _faces; - std::vector _edges; - std::vector _normals; - std::vector uvs_; - std::vector _material_ids; - std::vector _materials; - size_t weld_offset_; - VertexKeyMap welds; - - // when read from serialization, the element needs to take ownership of the styles, - // the material vector is constructor off of this. - // @todo this can be improved - std::vector> styles_; - - public: - const std::string& id() const { return id_; } - const std::vector& verts() const { return _verts; } - const std::vector& faces() const { return _faces; } - const std::vector& edges() const { return _edges; } - const std::vector& normals() const { return _normals; } - const std::vector& uvs() const { return uvs_; } - const std::vector& material_ids() const { return _material_ids; } - const std::vector& materials() const { return _materials; } - - Triangulation(const BRep& shape_model) - : Representation(shape_model.settings()) - , id_(shape_model.id()) - , weld_offset_(0) - { - for ( IfcGeom::IfcRepresentationShapeItems::const_iterator iit = shape_model.begin(); iit != shape_model.end(); ++ iit ) { - - // Don't weld vertices that belong to different items to prevent non-manifold situations. - weld_offset_ += welds.size(); - welds.clear(); - - int surface_style_id = -1; - if (iit->hasStyle()) { - Material adapter(iit->StylePtr()); - std::vector::const_iterator jt = std::find(_materials.begin(), _materials.end(), adapter); - if (jt == _materials.end()) { - surface_style_id = (int)_materials.size(); - _materials.push_back(adapter); - } else { - surface_style_id = (int)(jt - _materials.begin()); - } - } - - if (settings().get(IteratorSettings::APPLY_DEFAULT_MATERIALS) && surface_style_id == -1) { - Material material(IfcGeom::get_default_style(settings().element_type())); - std::vector::const_iterator mit = std::find(_materials.begin(), _materials.end(), material); - if (mit == _materials.end()) { - surface_style_id = (int)_materials.size(); - _materials.push_back(material); - } else { - surface_style_id = (int)(mit - _materials.begin()); - } - } - - const TopoDS_Shape& s = iit->Shape(); - const gp_GTrsf& trsf = iit->Placement(); - - // Triangulate the shape - try { - BRepMesh_IncrementalMesh(s, settings().deflection_tolerance(), false, settings().angular_tolerance()); - } catch(...) { - Logger::Message(Logger::LOG_ERROR, "Failed to triangulate shape"); - continue; - } - - // Iterates over the faces of the shape - int num_faces = 0; - TopExp_Explorer exp; - for ( exp.Init(s,TopAbs_FACE); exp.More(); exp.Next(), ++num_faces ) { - TopoDS_Face face = TopoDS::Face(exp.Current()); - TopLoc_Location loc; - Handle_Poly_Triangulation tri = BRep_Tool::Triangulation(face,loc); - - if (tri.IsNull()) { - Logger::Message(Logger::LOG_ERROR, "Triangulation missing for face"); - } else { - // A 3x3 matrix to rotate the vertex normals - const gp_Mat rotation_matrix = trsf.VectorialPart(); - - // Keep track of the number of times an edge is used - // Manifold edges (i.e. edges used twice) are deemed invisible - std::map,int> edgecount; - std::vector > edges_temp; - - std::vector coords; - BRepGProp_Face prop(face); - std::map dict; - - // Vertex normals are only calculated if vertices are not welded and calculation is not disable explicitly. - const bool calculate_normals = !settings().get(IteratorSettings::WELD_VERTICES) && - !settings().get(IteratorSettings::NO_NORMALS); - - for( int i = 1; i <= tri->NbNodes(); ++ i ) { - coords.push_back(tri->Node(i).Transformed(loc).XYZ()); - trsf.Transforms(*coords.rbegin()); - dict[i] = addVertex(surface_style_id, *coords.rbegin()); - - if ( calculate_normals ) { - const gp_Pnt2d& uv = tri->UVNode(i); - gp_Pnt p; - gp_Vec normal_direction; - prop.Normal(uv.X(),uv.Y(),p,normal_direction); - gp_Vec normal(0., 0., 0.); - if (normal_direction.Magnitude() > 1.e-9) { - normal = gp_Dir(normal_direction.XYZ() * rotation_matrix); - } else { - Handle_Geom_Surface surf = BRep_Tool::Surface(face); - // Special case the normal at the poles of a spherical surface - if (surf->DynamicType() == STANDARD_TYPE(Geom_SphericalSurface)) { - if (fabs(fabs(uv.Y()) - M_PI / 2.) < 1.e-9) { - const bool is_top = uv.Y() > 0; - const bool is_forward = face.Orientation() == TopAbs_FORWARD; - const double z = (is_top == is_forward) ? 1. : -1.; - normal = gp_Dir(gp_XYZ(0, 0, z) * rotation_matrix); - } - } - // TODO: Do the same for conical surfaces, but they are rare in IFC. - } - _normals.push_back(normal.X()); - _normals.push_back(normal.Y()); - _normals.push_back(normal.Z()); - } - } - - const Poly_Array1OfTriangle& triangles = tri->Triangles(); - for( int i = 1; i <= triangles.Length(); ++ i ) { - int n1,n2,n3; - if ( face.Orientation() == TopAbs_REVERSED ) - triangles(i).Get(n3,n2,n1); - else triangles(i).Get(n1,n2,n3); - - /* An alternative would be to calculate normals based - * on the coordinates of the mesh vertices */ - /* - const gp_XYZ pt1 = coords[n1-1]; - const gp_XYZ pt2 = coords[n2-1]; - const gp_XYZ pt3 = coords[n3-1]; - const gp_XYZ v1 = pt2-pt1; - const gp_XYZ v2 = pt3-pt2; - gp_Dir normal = gp_Dir(v1^v2); - _normals.push_back((float)normal.X()); - _normals.push_back((float)normal.Y()); - _normals.push_back((float)normal.Z()); - */ - - _faces.push_back(dict[n1]); - _faces.push_back(dict[n2]); - _faces.push_back(dict[n3]); - - _material_ids.push_back(surface_style_id); - - addEdge(dict[n1], dict[n2], edgecount, edges_temp); - addEdge(dict[n2], dict[n3], edgecount, edges_temp); - addEdge(dict[n3], dict[n1], edgecount, edges_temp); - } - for ( std::vector >::const_iterator jt = edges_temp.begin(); jt != edges_temp.end(); ++jt ) { - if (edgecount[*jt] == 1) { - // non manifold edge, face boundary - _edges.push_back(jt->first); - _edges.push_back(jt->second); - } - } - } - } - - if (!_normals.empty() && settings().get(IfcGeom::IteratorSettings::GENERATE_UVS)) { - uvs_ = box_project_uvs(_verts, _normals); - } - - if (num_faces == 0) { - // Edges are only emitted if there are no faces. A mixed representation of faces - // and loose edges is discouraged by the standard. An alternative would be to use - // TopExp_Explorer texp(s, TopAbs_EDGE, TopAbs_FACE) to find edges that do not - // belong to any face. - for (TopExp_Explorer texp(s, TopAbs_EDGE); texp.More(); texp.Next()) { - BRepAdaptor_Curve crv(TopoDS::Edge(texp.Current())); - GCPnts_QuasiUniformDeflection tessellater(crv, settings().deflection_tolerance()); - int n = tessellater.NbPoints(); - int previous = -1; - - for (int i = 1; i <= n; ++i) { - gp_XYZ p = tessellater.Value(i).XYZ(); - - int current = addVertex(surface_style_id, p); - - std::vector> segments; - if (i > 1) { - segments.push_back(std::make_pair(previous, current)); - } - - if (settings().get(IfcGeom::IteratorSettings::EDGE_ARROWS)) { - // In case you want direction arrows on your edges - double u = tessellater.Parameter(i); - gp_XYZ p2, p3; - gp_Pnt tmp; - gp_Vec tmp2; - crv.D1(u, tmp, tmp2); - gp_Dir d1, d2, d3, d4; - d1 = tmp2; - if (texp.Current().Orientation() == TopAbs_REVERSED) { - d1 = -d1; - } - if (fabs(d1.Z()) < 0.5) { - d2 = d1.Crossed(gp::DZ()); - } else { - d2 = d1.Crossed(gp::DY()); - } - d3 = d1.XYZ() + d2.XYZ(); - d4 = d1.XYZ() - d2.XYZ(); - p2 = p - d3.XYZ() / 10.; - p3 = p - d4.XYZ() / 10.; - trsf.Transforms(p2); - trsf.Transforms(p3); - trsf.Transforms(p); - - int left = addVertex(surface_style_id, p2); - int right = addVertex(surface_style_id, p3); - - segments.push_back(std::make_pair(left, current)); - segments.push_back(std::make_pair(right, current)); - } - - for (auto& sgmt : segments) { - _edges.push_back(sgmt.first); - _edges.push_back(sgmt.second); - _material_ids.push_back(surface_style_id); - } - - previous = current; - } - } - } - - BRepTools::Clean(s); - } - } - - Triangulation( - ElementSettings settings, - const std::string& id, - const std::vector& verts, - const std::vector& faces, - const std::vector& edges, - const std::vector& normals, - const std::vector& uvs, - const std::vector& material_ids, - const std::vector>& styles) - : Representation(settings) - , id_(id) - , _verts(verts) - , _faces(faces) - , _edges(edges) - , _normals(normals) - , uvs_(uvs) - , _material_ids(material_ids) - , styles_(styles) - { - for (auto& s : styles_) { - _materials.push_back(IfcGeom::Material(s)); - } - } - - virtual ~Triangulation() {} - - /// Generates UVs for a single mesh using box projection. - /// @todo Very simple impl. Assumes that input vertices and normals match 1:1. - static std::vector box_project_uvs(const std::vector &vertices, const std::vector &normals) - { - std::vector uvs; - uvs.resize(vertices.size() / 3 * 2); - for (size_t uv_idx = 0, v_idx = 0; - uv_idx < uvs.size() && v_idx < vertices.size() && v_idx < normals.size(); - uv_idx += 2, v_idx += 3) { - - double n_x = normals[v_idx], n_y = normals[v_idx + 1], n_z = normals[v_idx + 2]; - double v_x = vertices[v_idx], v_y = vertices[v_idx + 1], v_z = vertices[v_idx + 2]; - - if (std::abs(n_x) > std::abs(n_y) && std::abs(n_x) > std::abs(n_z)) { - uvs[uv_idx] = v_z; - uvs[uv_idx + 1] = v_y; - } - if (std::abs(n_y) > std::abs(n_x) && std::abs(n_y) > std::abs(n_z)) { - uvs[uv_idx] = v_x; - uvs[uv_idx + 1] = v_z; - } - if (std::abs(n_z) > std::abs(n_x) && std::abs(n_z) > std::abs(n_y)) { - uvs[uv_idx] = v_x; - uvs[uv_idx + 1] = v_y; - } - } - - return uvs; - } - - private: - // Welds vertices that belong to different faces - int addVertex(int material_index, const gp_XYZ& p) { - const bool convert = settings().get(IteratorSettings::CONVERT_BACK_UNITS); - const double X = convert ? (p.X() / settings().unit_magnitude()) : p.X(); - const double Y = convert ? (p.Y() / settings().unit_magnitude()) : p.Y(); - const double Z = convert ? (p.Z() / settings().unit_magnitude()) : p.Z(); - int i = (int) _verts.size() / 3; - if (settings().get(IteratorSettings::WELD_VERTICES)) { - const VertexKey key = std::make_pair(material_index, std::make_pair(X, std::make_pair(Y, Z))); - typename VertexKeyMap::const_iterator it = welds.find(key); - if ( it != welds.end() ) return it->second; - i = (int) (welds.size() + weld_offset_); - welds[key] = i; - } - _verts.push_back(X); - _verts.push_back(Y); - _verts.push_back(Z); - return i; - } - inline void addEdge(int n1, int n2, std::map,int>& edgecount, std::vector >& edges_temp) { - const Edge e = Edge( (std::min)(n1,n2),(std::max)(n1,n2) ); - if ( edgecount.find(e) == edgecount.end() ) edgecount[e] = 1; - else edgecount[e] ++; - edges_temp.push_back(e); - } - Triangulation(); - Triangulation(const Triangulation&); - Triangulation& operator=(const Triangulation&); - }; - - } -} - -#endif diff --git a/src/ifcgeom/IfcGeometricSet.cpp b/src/ifcgeom/IfcGeometricSet.cpp index 5e4c56270f..5c121f1c10 100644 --- a/src/ifcgeom/IfcGeometricSet.cpp +++ b/src/ifcgeom/IfcGeometricSet.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcHalfSpaceSolid.cpp b/src/ifcgeom/IfcHalfSpaceSolid.cpp index d196b37d4c..a77210dcc8 100644 --- a/src/ifcgeom/IfcHalfSpaceSolid.cpp +++ b/src/ifcgeom/IfcHalfSpaceSolid.cpp @@ -18,75 +18,13 @@ ********************************************************************************/ #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcIShapeProfileDef.cpp b/src/ifcgeom/IfcIShapeProfileDef.cpp index 93b61a9387..37affbce91 100644 --- a/src/ifcgeom/IfcIShapeProfileDef.cpp +++ b/src/ifcgeom/IfcIShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcIndexedPolyCurve.cpp b/src/ifcgeom/IfcIndexedPolyCurve.cpp index 889b1e0ed4..35886a34db 100644 --- a/src/ifcgeom/IfcIndexedPolyCurve.cpp +++ b/src/ifcgeom/IfcIndexedPolyCurve.cpp @@ -17,67 +17,13 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcLShapeProfileDef.cpp b/src/ifcgeom/IfcLShapeProfileDef.cpp index edaaf1551a..c006e41835 100644 --- a/src/ifcgeom/IfcLShapeProfileDef.cpp +++ b/src/ifcgeom/IfcLShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcLine.cpp b/src/ifcgeom/IfcLine.cpp index 53aedc57c2..a21bf8ae37 100644 --- a/src/ifcgeom/IfcLine.cpp +++ b/src/ifcgeom/IfcLine.cpp @@ -17,53 +17,10 @@ * * ********************************************************************************/ -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcManifoldSolidBrep.cpp b/src/ifcgeom/IfcManifoldSolidBrep.cpp index 5e623b8c8b..b278997b4b 100644 --- a/src/ifcgeom/IfcManifoldSolidBrep.cpp +++ b/src/ifcgeom/IfcManifoldSolidBrep.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcMappedItem.cpp b/src/ifcgeom/IfcMappedItem.cpp index 554f8df596..751a8dbd23 100644 --- a/src/ifcgeom/IfcMappedItem.cpp +++ b/src/ifcgeom/IfcMappedItem.cpp @@ -17,76 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcObjectPlacement.cpp b/src/ifcgeom/IfcObjectPlacement.cpp index 096b79419b..ab3605aae5 100644 --- a/src/ifcgeom/IfcObjectPlacement.cpp +++ b/src/ifcgeom/IfcObjectPlacement.cpp @@ -17,50 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcOrientedEdge.cpp b/src/ifcgeom/IfcOrientedEdge.cpp index ffa3b9d0b6..8475d7a957 100644 --- a/src/ifcgeom/IfcOrientedEdge.cpp +++ b/src/ifcgeom/IfcOrientedEdge.cpp @@ -17,67 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcPlane.cpp b/src/ifcgeom/IfcPlane.cpp index dde9f45893..1d635afc50 100644 --- a/src/ifcgeom/IfcPlane.cpp +++ b/src/ifcgeom/IfcPlane.cpp @@ -17,76 +17,14 @@ * * ********************************************************************************/ -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcPolyLoop.cpp b/src/ifcgeom/IfcPolyLoop.cpp index a8320998f7..7a1b5b4deb 100644 --- a/src/ifcgeom/IfcPolyLoop.cpp +++ b/src/ifcgeom/IfcPolyLoop.cpp @@ -17,67 +17,11 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcPolygonalBoundedHalfSpace.cpp b/src/ifcgeom/IfcPolygonalBoundedHalfSpace.cpp index 5af0aa011b..002e323bb5 100644 --- a/src/ifcgeom/IfcPolygonalBoundedHalfSpace.cpp +++ b/src/ifcgeom/IfcPolygonalBoundedHalfSpace.cpp @@ -17,76 +17,13 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcPolygonalFaceSet.cpp b/src/ifcgeom/IfcPolygonalFaceSet.cpp index 80f55e3214..1ef9e99c2b 100644 --- a/src/ifcgeom/IfcPolygonalFaceSet.cpp +++ b/src/ifcgeom/IfcPolygonalFaceSet.cpp @@ -17,76 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcPolyline.cpp b/src/ifcgeom/IfcPolyline.cpp index bcb57a1c47..49dc05fcc4 100644 --- a/src/ifcgeom/IfcPolyline.cpp +++ b/src/ifcgeom/IfcPolyline.cpp @@ -17,67 +17,10 @@ * * ********************************************************************************/ -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRectangleHollowProfileDef.cpp b/src/ifcgeom/IfcRectangleHollowProfileDef.cpp index 95dba8fc22..77f6084b97 100644 --- a/src/ifcgeom/IfcRectangleHollowProfileDef.cpp +++ b/src/ifcgeom/IfcRectangleHollowProfileDef.cpp @@ -17,75 +17,14 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRectangleProfileDef.cpp b/src/ifcgeom/IfcRectangleProfileDef.cpp index fe352089a8..13b79df195 100644 --- a/src/ifcgeom/IfcRectangleProfileDef.cpp +++ b/src/ifcgeom/IfcRectangleProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRectangularPyramid.cpp b/src/ifcgeom/IfcRectangularPyramid.cpp index b1dce67d1b..c82dd96fe7 100644 --- a/src/ifcgeom/IfcRectangularPyramid.cpp +++ b/src/ifcgeom/IfcRectangularPyramid.cpp @@ -17,76 +17,11 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRectangularTrimmedSurface.cpp b/src/ifcgeom/IfcRectangularTrimmedSurface.cpp index 760b8cf924..3bd1d7902f 100644 --- a/src/ifcgeom/IfcRectangularTrimmedSurface.cpp +++ b/src/ifcgeom/IfcRectangularTrimmedSurface.cpp @@ -17,76 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRepresentation.cpp b/src/ifcgeom/IfcRepresentation.cpp index e29d0b413d..e4ca45d5e0 100644 --- a/src/ifcgeom/IfcRepresentation.cpp +++ b/src/ifcgeom/IfcRepresentation.cpp @@ -17,76 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRevolvedAreaSolid.cpp b/src/ifcgeom/IfcRevolvedAreaSolid.cpp index 16606276b7..4e3b4d94d8 100644 --- a/src/ifcgeom/IfcRevolvedAreaSolid.cpp +++ b/src/ifcgeom/IfcRevolvedAreaSolid.cpp @@ -18,75 +18,13 @@ ********************************************************************************/ #include -#include #include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRightCircularCone.cpp b/src/ifcgeom/IfcRightCircularCone.cpp index 690d28d205..c4164a2c08 100644 --- a/src/ifcgeom/IfcRightCircularCone.cpp +++ b/src/ifcgeom/IfcRightCircularCone.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRightCircularCylinder.cpp b/src/ifcgeom/IfcRightCircularCylinder.cpp index 307327abec..eb541b167b 100644 --- a/src/ifcgeom/IfcRightCircularCylinder.cpp +++ b/src/ifcgeom/IfcRightCircularCylinder.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcRoundedRectangleProfileDef.cpp b/src/ifcgeom/IfcRoundedRectangleProfileDef.cpp index ecb71e38f4..61a3037fa0 100644 --- a/src/ifcgeom/IfcRoundedRectangleProfileDef.cpp +++ b/src/ifcgeom/IfcRoundedRectangleProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcShellBasedSurfaceModel.cpp b/src/ifcgeom/IfcShellBasedSurfaceModel.cpp index bfc970b8f4..8430601d6d 100644 --- a/src/ifcgeom/IfcShellBasedSurfaceModel.cpp +++ b/src/ifcgeom/IfcShellBasedSurfaceModel.cpp @@ -17,76 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSphere.cpp b/src/ifcgeom/IfcSphere.cpp index 7e9bde719a..5ef4f40905 100644 --- a/src/ifcgeom/IfcSphere.cpp +++ b/src/ifcgeom/IfcSphere.cpp @@ -17,76 +17,9 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSphericalSurface.cpp b/src/ifcgeom/IfcSphericalSurface.cpp index a93b90acd6..31573fe51c 100644 --- a/src/ifcgeom/IfcSphericalSurface.cpp +++ b/src/ifcgeom/IfcSphericalSurface.cpp @@ -17,76 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSubedge.cpp b/src/ifcgeom/IfcSubedge.cpp index be3459fcb1..58509dd1b5 100644 --- a/src/ifcgeom/IfcSubedge.cpp +++ b/src/ifcgeom/IfcSubedge.cpp @@ -17,67 +17,14 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include #include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define _USE_MATH_DEFINES #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSurfaceCurve.cpp b/src/ifcgeom/IfcSurfaceCurve.cpp index b444aa2eae..6c00a42c60 100644 --- a/src/ifcgeom/IfcSurfaceCurve.cpp +++ b/src/ifcgeom/IfcSurfaceCurve.cpp @@ -17,53 +17,7 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSurfaceCurveSweptAreaSolid.cpp b/src/ifcgeom/IfcSurfaceCurveSweptAreaSolid.cpp index ca7c321e1a..7837b4f8a5 100644 --- a/src/ifcgeom/IfcSurfaceCurveSweptAreaSolid.cpp +++ b/src/ifcgeom/IfcSurfaceCurveSweptAreaSolid.cpp @@ -21,72 +21,19 @@ #include #include #include -#include -#include -#include -#include -#include -#include #include -#include #include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSurfaceOfLinearExtrusion.cpp b/src/ifcgeom/IfcSurfaceOfLinearExtrusion.cpp index 9efcf31919..04c71e6224 100644 --- a/src/ifcgeom/IfcSurfaceOfLinearExtrusion.cpp +++ b/src/ifcgeom/IfcSurfaceOfLinearExtrusion.cpp @@ -17,76 +17,15 @@ * * ********************************************************************************/ -#include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSurfaceOfRevolution.cpp b/src/ifcgeom/IfcSurfaceOfRevolution.cpp index d06c04e11a..50adda19c3 100644 --- a/src/ifcgeom/IfcSurfaceOfRevolution.cpp +++ b/src/ifcgeom/IfcSurfaceOfRevolution.cpp @@ -17,76 +17,14 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcSweptDiskSolid.cpp b/src/ifcgeom/IfcSweptDiskSolid.cpp index 520d3c6c38..533dff7381 100644 --- a/src/ifcgeom/IfcSweptDiskSolid.cpp +++ b/src/ifcgeom/IfcSweptDiskSolid.cpp @@ -17,76 +17,17 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include #include #include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include #include -#include -#include -#include #include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #include "../ifcgeom_schema_agnostic/sweep_utils.h" diff --git a/src/ifcgeom/IfcTShapeProfileDef.cpp b/src/ifcgeom/IfcTShapeProfileDef.cpp index a4b752d55a..3143182863 100644 --- a/src/ifcgeom/IfcTShapeProfileDef.cpp +++ b/src/ifcgeom/IfcTShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcToroidalSurface.cpp b/src/ifcgeom/IfcToroidalSurface.cpp index eaa55f91f7..0b37ea6c09 100644 --- a/src/ifcgeom/IfcToroidalSurface.cpp +++ b/src/ifcgeom/IfcToroidalSurface.cpp @@ -17,75 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include #include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcTrapeziumProfileDef.cpp b/src/ifcgeom/IfcTrapeziumProfileDef.cpp index 4960f31e60..300cff3ef6 100644 --- a/src/ifcgeom/IfcTrapeziumProfileDef.cpp +++ b/src/ifcgeom/IfcTrapeziumProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcTriangulatedFaceSet.cpp b/src/ifcgeom/IfcTriangulatedFaceSet.cpp index 5935695b76..cc1a7d0b62 100644 --- a/src/ifcgeom/IfcTriangulatedFaceSet.cpp +++ b/src/ifcgeom/IfcTriangulatedFaceSet.cpp @@ -17,76 +17,10 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcTrimmedCurve.cpp b/src/ifcgeom/IfcTrimmedCurve.cpp index 73b56f4d75..e60a4ded90 100644 --- a/src/ifcgeom/IfcTrimmedCurve.cpp +++ b/src/ifcgeom/IfcTrimmedCurve.cpp @@ -19,65 +19,21 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include #include -#include #include #include -#include -#include -#include -#include #include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include #include #include #include #include #include "../ifcgeom/IfcGeom.h" -#include #include "../ifcgeom_schema_agnostic/wire_builder.h" diff --git a/src/ifcgeom/IfcUShapeProfileDef.cpp b/src/ifcgeom/IfcUShapeProfileDef.cpp index 68baa93a16..64a15b6ced 100644 --- a/src/ifcgeom/IfcUShapeProfileDef.cpp +++ b/src/ifcgeom/IfcUShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcVector.cpp b/src/ifcgeom/IfcVector.cpp index 585659f67f..09daa295b1 100644 --- a/src/ifcgeom/IfcVector.cpp +++ b/src/ifcgeom/IfcVector.cpp @@ -17,50 +17,8 @@ * * ********************************************************************************/ -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcZShapeProfileDef.cpp b/src/ifcgeom/IfcZShapeProfileDef.cpp index 2b66344919..d39f9083d1 100644 --- a/src/ifcgeom/IfcZShapeProfileDef.cpp +++ b/src/ifcgeom/IfcZShapeProfileDef.cpp @@ -17,75 +17,8 @@ * * ********************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "../ifcgeom/IfcGeom.h" -#include -#include -#include -#include #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcGeomSerialisation.cpp b/src/ifcgeom/Serialization.cpp similarity index 100% rename from src/ifcgeom/IfcGeomSerialisation.cpp rename to src/ifcgeom/Serialization.cpp diff --git a/src/ifcgeom/mapping.cpp b/src/ifcgeom/mapping.cpp index 725301d8bd..8e09756330 100644 --- a/src/ifcgeom/mapping.cpp +++ b/src/ifcgeom/mapping.cpp @@ -18,7 +18,7 @@ ********************************************************************************/ #include "IfcGeom.h" -#include "IfcGeomShapeType.h" +#include "../ifcgeom_schema_agnostic/IfcGeomShapeType.h" #include diff --git a/src/ifcgeom_schema_agnostic/GeometrySerializer.h b/src/ifcgeom_schema_agnostic/GeometrySerializer.h index 56f8cd9eed..58fb7c4d64 100644 --- a/src/ifcgeom_schema_agnostic/GeometrySerializer.h +++ b/src/ifcgeom_schema_agnostic/GeometrySerializer.h @@ -21,7 +21,7 @@ #define GEOMETRYSERIALIZER_H #include "../ifcgeom_schema_agnostic/Serializer.h" -#include "../ifcgeom/IfcGeomElement.h" +#include "../ifcgeom_schema_agnostic/IfcGeomElement.h" class SerializerSettings : public IfcGeom::IteratorSettings { diff --git a/src/ifcgeom/IfcGeomElement.h b/src/ifcgeom_schema_agnostic/IfcGeomElement.h similarity index 97% rename from src/ifcgeom/IfcGeomElement.h rename to src/ifcgeom_schema_agnostic/IfcGeomElement.h index c9829d8ef3..e924da8b58 100644 --- a/src/ifcgeom/IfcGeomElement.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomElement.h @@ -26,9 +26,9 @@ #include "../ifcparse/Argument.h" #include "../ifcparse/IfcGlobalId.h" -#include "../ifcgeom/IfcGeomRepresentation.h" -#include "../ifcgeom/IfcGeomIteratorSettings.h" -#include "ifc_geom_api.h" +#include "../ifcgeom_schema_agnostic/IfcGeomRepresentation.h" +#include "../ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h" +#include "../ifcgeom_schema_agnostic/ifc_geom_api.h" namespace IfcGeom { diff --git a/src/ifcgeom/IfcGeomIteratorSettings.h b/src/ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h similarity index 94% rename from src/ifcgeom/IfcGeomIteratorSettings.h rename to src/ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h index 0211fc5758..814fc4ddcd 100644 --- a/src/ifcgeom/IfcGeomIteratorSettings.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h @@ -20,12 +20,14 @@ #ifndef IFCGEOMITERATORSETTINGS_H #define IFCGEOMITERATORSETTINGS_H -#include - #include "ifc_geom_api.h" + #include "../ifcparse/IfcException.h" #include "../ifcparse/IfcBaseClass.h" +#include +#include + namespace IfcGeom { class IFC_GEOM_API IteratorSettings @@ -132,16 +134,9 @@ namespace IfcGeom double force_space_transparency() const { return force_space_transparency_; } std::set context_ids() const { return context_ids_; } - void set_deflection_tolerance(double value) - { - /// @todo Using deflection tolerance of 1e-6 or smaller hangs the conversion, research more in-depth. - /// This bug can be reproduced e.g. with the Duplex model that can be found from http://www.nibs.org/?page=bsa_commonbimfiles#project1 - deflection_tolerance_ = value; - if (deflection_tolerance_ <= 1e-6) { - Logger::Message(Logger::LOG_WARNING, "Deflection tolerance cannot be set to <= 1e-6; using the default value 1e-3"); - deflection_tolerance_ = 1e-3; - } - } + /// @todo Using deflection tolerance of 1e-6 or smaller hangs the conversion, research more in-depth. + /// This bug can be reproduced e.g. with the Duplex model that can be found from http://www.nibs.org/?page=bsa_commonbimfiles#project1 + void set_deflection_tolerance(double value); void set_angular_tolerance(double value) { angular_tolerance_ = value; diff --git a/src/ifcgeom_schema_agnostic/IfcGeomRenderStyles.h b/src/ifcgeom_schema_agnostic/IfcGeomRenderStyles.h index b6d57dc42d..8200cf0529 100644 --- a/src/ifcgeom_schema_agnostic/IfcGeomRenderStyles.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomRenderStyles.h @@ -20,7 +20,7 @@ #ifndef IFCGEOMRENDERSTYLES_H #define IFCGEOMRENDERSTYLES_H -#include "../ifcgeom/ifc_geom_api.h" +#include "../ifcgeom_schema_agnostic/ifc_geom_api.h" #include #include diff --git a/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.cpp b/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.cpp new file mode 100644 index 0000000000..5e5b64b233 --- /dev/null +++ b/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.cpp @@ -0,0 +1,533 @@ +/******************************************************************************** + * * + * This file is part of IfcOpenShell. * + * * + * IfcOpenShell is free software: you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public License as published by * + * the Free Software Foundation, either version 3.0 of the License, or * + * (at your option) any later version. * + * * + * IfcOpenShell is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * Lesser GNU General Public License for more details. * + * * + * You should have received a copy of the Lesser GNU General Public License * + * along with this program. If not, see . * + * * + ********************************************************************************/ + +#include "IfcGeomRepresentation.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "../ifcparse/IfcLogger.h" +#include "../ifcgeom_schema_agnostic/Kernel.h" + +IfcGeom::Representation::Serialization::Serialization(const BRep& brep) + : Representation(brep.settings()) + , id_(brep.id()) +{ + TopoDS_Compound compound = brep.as_compound(); + for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = brep.begin(); it != brep.end(); ++ it) { + int sid = -1; + + if (it->hasStyle() && it->Style().Diffuse()) { + const IfcGeom::SurfaceStyle::ColorComponent& clr = *it->Style().Diffuse(); + surface_styles_.push_back(clr.R()); + surface_styles_.push_back(clr.G()); + surface_styles_.push_back(clr.B()); + + sid = it->Style().Id().get_value_or(-1); + } else { + surface_styles_.push_back(-1.); + surface_styles_.push_back(-1.); + surface_styles_.push_back(-1.); + } + + if (it->hasStyle() && it->Style().Transparency()) { + surface_styles_.push_back(1. - *it->Style().Transparency()); + } else { + surface_styles_.push_back(1.); + } + + surface_style_ids_.push_back(sid); + } + std::stringstream sstream; + BRepTools::Write(compound,sstream); + brep_data_ = sstream.str(); +} + +// todo copied from kernel +#include +#include + +TopoDS_Shape apply_transformation(const TopoDS_Shape& s, const gp_Trsf& t) { + if (t.Form() == gp_Identity) { + return s; + } else { + /// @todo set to 1. and exactly 1. or use epsilon? + if (t.ScaleFactor() != 1.) { + return BRepBuilderAPI_Transform(s, t, true); + } else { + return s.Moved(t); + } + } +} + +TopoDS_Shape apply_transformation(const TopoDS_Shape& s, const gp_GTrsf& t) { + if (t.Form() == gp_Other) { + return BRepBuilderAPI_GTransform(s, t, true); + } else { + return apply_transformation(s, t.Trsf()); + } +} + +TopoDS_Compound IfcGeom::Representation::BRep::as_compound(bool force_meters) const { + TopoDS_Compound compound; + BRep_Builder builder; + builder.MakeCompound(compound); + for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { + const TopoDS_Shape& s = it->Shape(); + gp_GTrsf trsf = it->Placement(); + + if (!force_meters && settings().get(IteratorSettings::CONVERT_BACK_UNITS)) { + gp_Trsf scale; + scale.SetScaleFactor(1.0 / settings().unit_magnitude()); + trsf.PreMultiply(scale); + } + + const TopoDS_Shape moved_shape = apply_transformation(s, trsf); + builder.Add(compound, moved_shape); + } + return compound; +} + +namespace { + void accumulate(const gp_Ax3& ax, const gp_Dir& normal, double area, double& along_x, double& along_y, double& along_z) { + along_x += area * fabs(ax.XDirection().Dot(normal)); + along_y += area * fabs(ax.YDirection().Dot(normal)); + along_z += area * fabs(ax.Direction().Dot(normal)); + } + + void surface_area_along_direction(double tol, const TopoDS_Shape& s, const gp_Ax3& ax, double& along_x, double& along_y, double& along_z) { + along_x = along_y = along_z = 0.; + + bool meshed = false; + + TopExp_Explorer exp(s, TopAbs_FACE); + for (; exp.More(); exp.Next()) { + const TopoDS_Face& face = TopoDS::Face(exp.Current()); + Handle(Geom_Surface) surf = BRep_Tool::Surface(face); + Handle(Geom_Plane) plane = Handle(Geom_Plane)::DownCast(surf); + + if (surf->DynamicType() == STANDARD_TYPE(Geom_Plane)) { + GProp_GProps prop_area; + BRepGProp::SurfaceProperties(face, prop_area); + const double area = prop_area.Mass(); + + accumulate(ax, plane->Position().Direction(), area, along_x, along_y, along_z); + } else { + + if (!meshed) { + try { + BRepMesh_IncrementalMesh(s, tol); + } catch (...) { + Logger::Message(Logger::LOG_ERROR, "Failed to triangulate shape"); + return; + } + meshed = true; + } + + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(face, loc); + if (!tri.IsNull()) { + std::vector coords; + coords.reserve(tri->NbNodes()); + + for (int i = 1; i <= tri->NbNodes(); ++i) { + coords.push_back(tri->Node(i).Transformed(loc).XYZ()); + } + + const Poly_Array1OfTriangle& triangles = tri->Triangles(); + for (int i = 1; i <= triangles.Length(); ++i) { + int n1, n2, n3; + + if (face.Orientation() == TopAbs_REVERSED) { + triangles(i).Get(n3, n2, n1); + } else { + triangles(i).Get(n1, n2, n3); + } + + const gp_XYZ& pt1 = coords[n1 - 1]; + const gp_XYZ& pt2 = coords[n2 - 1]; + const gp_XYZ& pt3 = coords[n3 - 1]; + const gp_Vec v1 = pt2 - pt1; + const gp_Vec v2 = pt3 - pt2; + const gp_Vec v3 = pt1 - pt3; + const gp_Vec normal_vector = v1 ^ v2; + if (normal_vector.Magnitude() > ALMOST_ZERO) { + gp_Dir normal = gp_Dir(); + + double edge_lengths[3] = { v1.Magnitude(), v2.Magnitude(), v3.Magnitude() }; + std::sort(&edge_lengths[0], &edge_lengths[2]); + + const double& a = edge_lengths[0]; + const double& b = edge_lengths[1]; + const double& c = edge_lengths[2]; + + const double area = 0.25 * sqrt((a + (b + c))*(c - (a - b))*(c + (a - b))*(a + (b - c))); + accumulate(ax, normal, area, along_x, along_y, along_z); + } + } + } + } + } + } +} + +bool IfcGeom::Representation::BRep::calculate_surface_area(double& area) const { + try { + area = 0.; + + for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { + GProp_GProps prop; + BRepGProp::SurfaceProperties(it->Shape(), prop); + area += prop.Mass(); + } + + return true; + } catch (...) { + Logger::Error("Error during calculation of surface area"); + return false; + } +} + +bool IfcGeom::Representation::BRep::calculate_volume(double& volume) const { + try { + volume = 0.; + + for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { + if (Kernel::is_manifold(it->Shape())) { + GProp_GProps prop; + BRepGProp::VolumeProperties(it->Shape(), prop); + volume += prop.Mass(); + } else { + return false; + } + } + + return true; + } catch (...) { + Logger::Error("Error during calculation of volume"); + return false; + } +} + +bool IfcGeom::Representation::BRep::calculate_projected_surface_area(const gp_Ax3 & ax, double & along_x, double & along_y, double & along_z) const { + try { + along_x = along_y = along_z = 0.; + + for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = begin(); it != end(); ++it) { + double x, y, z; + surface_area_along_direction(settings().deflection_tolerance(), it->Shape(), ax, x, y, z); + + if (Kernel::is_manifold(it->Shape())) { + x /= 2.; + y /= 2.; + z /= 2.; + } + + along_x += x; + along_y += y; + along_z += z; + } + + return true; + } catch (...) { + Logger::Error("Error during calculation of projected surface area"); + return false; + } +} + +IfcGeom::Representation::Triangulation::Triangulation(const BRep& shape_model) + : Representation(shape_model.settings()) + , id_(shape_model.id()) + , weld_offset_(0) +{ + for (IfcGeom::IfcRepresentationShapeItems::const_iterator iit = shape_model.begin(); iit != shape_model.end(); ++iit) { + + // Don't weld vertices that belong to different items to prevent non-manifold situations. + weld_offset_ += welds.size(); + welds.clear(); + + int surface_style_id = -1; + if (iit->hasStyle()) { + Material adapter(iit->StylePtr()); + std::vector::const_iterator jt = std::find(_materials.begin(), _materials.end(), adapter); + if (jt == _materials.end()) { + surface_style_id = (int)_materials.size(); + _materials.push_back(adapter); + } else { + surface_style_id = (int)(jt - _materials.begin()); + } + } + + if (settings().get(IteratorSettings::APPLY_DEFAULT_MATERIALS) && surface_style_id == -1) { + Material material(IfcGeom::get_default_style(settings().element_type())); + std::vector::const_iterator mit = std::find(_materials.begin(), _materials.end(), material); + if (mit == _materials.end()) { + surface_style_id = (int)_materials.size(); + _materials.push_back(material); + } else { + surface_style_id = (int)(mit - _materials.begin()); + } + } + + const TopoDS_Shape& s = iit->Shape(); + const gp_GTrsf& trsf = iit->Placement(); + + // Triangulate the shape + try { + BRepMesh_IncrementalMesh(s, settings().deflection_tolerance(), false, settings().angular_tolerance()); + } catch (...) { + Logger::Message(Logger::LOG_ERROR, "Failed to triangulate shape"); + continue; + } + + // Iterates over the faces of the shape + int num_faces = 0; + TopExp_Explorer exp; + for (exp.Init(s, TopAbs_FACE); exp.More(); exp.Next(), ++num_faces) { + TopoDS_Face face = TopoDS::Face(exp.Current()); + TopLoc_Location loc; + Handle_Poly_Triangulation tri = BRep_Tool::Triangulation(face, loc); + + if (tri.IsNull()) { + Logger::Message(Logger::LOG_ERROR, "Triangulation missing for face"); + } else { + // A 3x3 matrix to rotate the vertex normals + const gp_Mat rotation_matrix = trsf.VectorialPart(); + + // Keep track of the number of times an edge is used + // Manifold edges (i.e. edges used twice) are deemed invisible + std::map, int> edgecount; + std::vector > edges_temp; + + std::vector coords; + BRepGProp_Face prop(face); + std::map dict; + + // Vertex normals are only calculated if vertices are not welded and calculation is not disable explicitly. + const bool calculate_normals = !settings().get(IteratorSettings::WELD_VERTICES) && + !settings().get(IteratorSettings::NO_NORMALS); + + for (int i = 1; i <= tri->NbNodes(); ++i) { + coords.push_back(tri->Node(i).Transformed(loc).XYZ()); + trsf.Transforms(*coords.rbegin()); + dict[i] = addVertex(surface_style_id, *coords.rbegin()); + + if (calculate_normals) { + const gp_Pnt2d& uv = tri->UVNode(i); + gp_Pnt p; + gp_Vec normal_direction; + prop.Normal(uv.X(), uv.Y(), p, normal_direction); + gp_Vec normal(0., 0., 0.); + if (normal_direction.Magnitude() > 1.e-9) { + normal = gp_Dir(normal_direction.XYZ() * rotation_matrix); + } else { + Handle_Geom_Surface surf = BRep_Tool::Surface(face); + // Special case the normal at the poles of a spherical surface + if (surf->DynamicType() == STANDARD_TYPE(Geom_SphericalSurface)) { + if (fabs(fabs(uv.Y()) - M_PI / 2.) < 1.e-9) { + const bool is_top = uv.Y() > 0; + const bool is_forward = face.Orientation() == TopAbs_FORWARD; + const double z = (is_top == is_forward) ? 1. : -1.; + normal = gp_Dir(gp_XYZ(0, 0, z) * rotation_matrix); + } + } + // TODO: Do the same for conical surfaces, but they are rare in IFC. + } + _normals.push_back(normal.X()); + _normals.push_back(normal.Y()); + _normals.push_back(normal.Z()); + } + } + + const Poly_Array1OfTriangle& triangles = tri->Triangles(); + for (int i = 1; i <= triangles.Length(); ++i) { + int n1, n2, n3; + if (face.Orientation() == TopAbs_REVERSED) + triangles(i).Get(n3, n2, n1); + else triangles(i).Get(n1, n2, n3); + + /* An alternative would be to calculate normals based + * on the coordinates of the mesh vertices */ + /* + const gp_XYZ pt1 = coords[n1-1]; + const gp_XYZ pt2 = coords[n2-1]; + const gp_XYZ pt3 = coords[n3-1]; + const gp_XYZ v1 = pt2-pt1; + const gp_XYZ v2 = pt3-pt2; + gp_Dir normal = gp_Dir(v1^v2); + _normals.push_back((float)normal.X()); + _normals.push_back((float)normal.Y()); + _normals.push_back((float)normal.Z()); + */ + + _faces.push_back(dict[n1]); + _faces.push_back(dict[n2]); + _faces.push_back(dict[n3]); + + _material_ids.push_back(surface_style_id); + + addEdge(dict[n1], dict[n2], edgecount, edges_temp); + addEdge(dict[n2], dict[n3], edgecount, edges_temp); + addEdge(dict[n3], dict[n1], edgecount, edges_temp); + } + for (std::vector >::const_iterator jt = edges_temp.begin(); jt != edges_temp.end(); ++jt) { + if (edgecount[*jt] == 1) { + // non manifold edge, face boundary + _edges.push_back(jt->first); + _edges.push_back(jt->second); + } + } + } + } + + if (!_normals.empty() && settings().get(IfcGeom::IteratorSettings::GENERATE_UVS)) { + uvs_ = box_project_uvs(_verts, _normals); + } + + if (num_faces == 0) { + // Edges are only emitted if there are no faces. A mixed representation of faces + // and loose edges is discouraged by the standard. An alternative would be to use + // TopExp_Explorer texp(s, TopAbs_EDGE, TopAbs_FACE) to find edges that do not + // belong to any face. + for (TopExp_Explorer texp(s, TopAbs_EDGE); texp.More(); texp.Next()) { + BRepAdaptor_Curve crv(TopoDS::Edge(texp.Current())); + GCPnts_QuasiUniformDeflection tessellater(crv, settings().deflection_tolerance()); + int n = tessellater.NbPoints(); + int previous = -1; + + for (int i = 1; i <= n; ++i) { + gp_XYZ p = tessellater.Value(i).XYZ(); + + int current = addVertex(surface_style_id, p); + + std::vector> segments; + if (i > 1) { + segments.push_back(std::make_pair(previous, current)); + } + + if (settings().get(IfcGeom::IteratorSettings::EDGE_ARROWS)) { + // In case you want direction arrows on your edges + double u = tessellater.Parameter(i); + gp_XYZ p2, p3; + gp_Pnt tmp; + gp_Vec tmp2; + crv.D1(u, tmp, tmp2); + gp_Dir d1, d2, d3, d4; + d1 = tmp2; + if (texp.Current().Orientation() == TopAbs_REVERSED) { + d1 = -d1; + } + if (fabs(d1.Z()) < 0.5) { + d2 = d1.Crossed(gp::DZ()); + } else { + d2 = d1.Crossed(gp::DY()); + } + d3 = d1.XYZ() + d2.XYZ(); + d4 = d1.XYZ() - d2.XYZ(); + p2 = p - d3.XYZ() / 10.; + p3 = p - d4.XYZ() / 10.; + trsf.Transforms(p2); + trsf.Transforms(p3); + trsf.Transforms(p); + + int left = addVertex(surface_style_id, p2); + int right = addVertex(surface_style_id, p3); + + segments.push_back(std::make_pair(left, current)); + segments.push_back(std::make_pair(right, current)); + } + + for (auto& sgmt : segments) { + _edges.push_back(sgmt.first); + _edges.push_back(sgmt.second); + _material_ids.push_back(surface_style_id); + } + + previous = current; + } + } + } + + BRepTools::Clean(s); + } +} + +/// Generates UVs for a single mesh using box projection. +/// @todo Very simple impl. Assumes that input vertices and normals match 1:1. + +inline std::vector IfcGeom::Representation::Triangulation::box_project_uvs(const std::vector& vertices, const std::vector& normals) +{ + std::vector uvs; + uvs.resize(vertices.size() / 3 * 2); + for (size_t uv_idx = 0, v_idx = 0; + uv_idx < uvs.size() && v_idx < vertices.size() && v_idx < normals.size(); + uv_idx += 2, v_idx += 3) { + + double n_x = normals[v_idx], n_y = normals[v_idx + 1], n_z = normals[v_idx + 2]; + double v_x = vertices[v_idx], v_y = vertices[v_idx + 1], v_z = vertices[v_idx + 2]; + + if (std::abs(n_x) > std::abs(n_y) && std::abs(n_x) > std::abs(n_z)) { + uvs[uv_idx] = v_z; + uvs[uv_idx + 1] = v_y; + } + if (std::abs(n_y) > std::abs(n_x) && std::abs(n_y) > std::abs(n_z)) { + uvs[uv_idx] = v_x; + uvs[uv_idx + 1] = v_z; + } + if (std::abs(n_z) > std::abs(n_x) && std::abs(n_z) > std::abs(n_y)) { + uvs[uv_idx] = v_x; + uvs[uv_idx + 1] = v_y; + } + } + + return uvs; +} + +// Welds vertices that belong to different faces + +inline int IfcGeom::Representation::Triangulation::addVertex(int material_index, const gp_XYZ & p) { + const bool convert = settings().get(IteratorSettings::CONVERT_BACK_UNITS); + const double X = convert ? (p.X() / settings().unit_magnitude()) : p.X(); + const double Y = convert ? (p.Y() / settings().unit_magnitude()) : p.Y(); + const double Z = convert ? (p.Z() / settings().unit_magnitude()) : p.Z(); + int i = (int)_verts.size() / 3; + if (settings().get(IteratorSettings::WELD_VERTICES)) { + const VertexKey key = std::make_pair(material_index, std::make_pair(X, std::make_pair(Y, Z))); + typename VertexKeyMap::const_iterator it = welds.find(key); + if (it != welds.end()) return it->second; + i = (int)(welds.size() + weld_offset_); + welds[key] = i; + } + _verts.push_back(X); + _verts.push_back(Y); + _verts.push_back(Z); + return i; +} + +inline void IfcGeom::Representation::Triangulation::addEdge(int n1, int n2, std::map, int>& edgecount, std::vector>& edges_temp) { + const Edge e = Edge((std::min)(n1, n2), (std::max)(n1, n2)); + if (edgecount.find(e) == edgecount.end()) edgecount[e] = 1; + else edgecount[e] ++; + edges_temp.push_back(e); +} diff --git a/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.h b/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.h new file mode 100644 index 0000000000..4da99272fb --- /dev/null +++ b/src/ifcgeom_schema_agnostic/IfcGeomRepresentation.h @@ -0,0 +1,187 @@ +/******************************************************************************** + * * + * This file is part of IfcOpenShell. * + * * + * IfcOpenShell is free software: you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public License as published by * + * the Free Software Foundation, either version 3.0 of the License, or * + * (at your option) any later version. * + * * + * IfcOpenShell is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * Lesser GNU General Public License for more details. * + * * + * You should have received a copy of the Lesser GNU General Public License * + * along with this program. If not, see . * + * * + ********************************************************************************/ + +#ifndef IFCGEOMREPRESENTATION_H +#define IFCGEOMREPRESENTATION_H + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include "../ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h" +#include "../ifcgeom_schema_agnostic/IfcGeomMaterial.h" +#include "../ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h" + +#include + +#include + +namespace IfcGeom { + + namespace Representation { + + class IFC_GEOM_API Representation { + Representation(const Representation&); //N/A + Representation& operator =(const Representation&); //N/A + protected: + const ElementSettings settings_; + public: + explicit Representation(const ElementSettings& settings) + : settings_(settings) + {} + const ElementSettings& settings() const { return settings_; } + virtual ~Representation() {} + }; + + class IFC_GEOM_API BRep : public Representation { + private: + std::string id_; + const IfcGeom::IfcRepresentationShapeItems shapes_; + BRep(const BRep& other); + BRep& operator=(const BRep& other); + public: + BRep(const ElementSettings& settings, const std::string& id, const IfcGeom::IfcRepresentationShapeItems& shapes) + : Representation(settings) + , id_(id) + , shapes_(shapes) + {} + virtual ~BRep() {} + IfcGeom::IfcRepresentationShapeItems::const_iterator begin() const { return shapes_.begin(); } + IfcGeom::IfcRepresentationShapeItems::const_iterator end() const { return shapes_.end(); } + const IfcGeom::IfcRepresentationShapeItems& shapes() const { return shapes_; } + const std::string& id() const { return id_; } + TopoDS_Compound as_compound(bool force_meters = false) const; + + bool calculate_volume(double&) const; + bool calculate_surface_area(double&) const; + bool calculate_projected_surface_area(const gp_Ax3& ax, double& along_x, double& along_y, double& along_z) const; + }; + + class IFC_GEOM_API Serialization : public Representation { + private: + std::string id_; + std::string brep_data_; + std::vector surface_styles_; + std::vector surface_style_ids_; + public: + const std::string& brep_data() const { return brep_data_; } + const std::vector& surface_styles() const { return surface_styles_; } + const std::vector& surface_style_ids() const { return surface_style_ids_; } + Serialization(const BRep& brep); + virtual ~Serialization() {} + const std::string& id() const { return id_; } + private: + Serialization(); + Serialization(const Serialization&); + Serialization& operator=(const Serialization&); + }; + + class Triangulation : public Representation { + private: + // A nested pair of floats and a material index to be able to store an XYZ coordinate in a map. + // TODO: Make this a std::tuple when compilers add support for that. + typedef typename std::pair > Coordinate; + typedef typename std::pair VertexKey; + typedef std::map VertexKeyMap; + typedef std::pair Edge; + + std::string id_; + std::vector _verts; + std::vector _faces; + std::vector _edges; + std::vector _normals; + std::vector uvs_; + std::vector _material_ids; + std::vector _materials; + size_t weld_offset_; + VertexKeyMap welds; + + // when read from serialization, the element needs to take ownership of the styles, + // the material vector is constructor off of this. + // @todo this can be improved + std::vector> styles_; + + public: + const std::string& id() const { return id_; } + const std::vector& verts() const { return _verts; } + const std::vector& faces() const { return _faces; } + const std::vector& edges() const { return _edges; } + const std::vector& normals() const { return _normals; } + const std::vector& uvs() const { return uvs_; } + const std::vector& material_ids() const { return _material_ids; } + const std::vector& materials() const { return _materials; } + + Triangulation(const BRep& shape_model); + + Triangulation( + ElementSettings settings, + const std::string& id, + const std::vector& verts, + const std::vector& faces, + const std::vector& edges, + const std::vector& normals, + const std::vector& uvs, + const std::vector& material_ids, + const std::vector>& styles) + : Representation(settings) + , id_(id) + , _verts(verts) + , _faces(faces) + , _edges(edges) + , _normals(normals) + , uvs_(uvs) + , _material_ids(material_ids) + , styles_(styles) + { + for (auto& s : styles_) { + _materials.push_back(IfcGeom::Material(s)); + } + } + + virtual ~Triangulation() {} + + /// Generates UVs for a single mesh using box projection. + /// @todo Very simple impl. Assumes that input vertices and normals match 1:1. + static std::vector box_project_uvs(const std::vector &vertices, const std::vector &normals); + + private: + // Welds vertices that belong to different faces + int addVertex(int material_index, const gp_XYZ& p); + inline void addEdge(int n1, int n2, std::map, int>& edgecount, std::vector >& edges_temp); + + Triangulation(); + Triangulation(const Triangulation&); + Triangulation& operator=(const Triangulation&); + }; + + } +} + +#endif diff --git a/src/ifcgeom/IfcGeomShapeType.h b/src/ifcgeom_schema_agnostic/IfcGeomShapeType.h similarity index 100% rename from src/ifcgeom/IfcGeomShapeType.h rename to src/ifcgeom_schema_agnostic/IfcGeomShapeType.h diff --git a/src/ifcgeom/IfcGeomTree.h b/src/ifcgeom_schema_agnostic/IfcGeomTree.h similarity index 99% rename from src/ifcgeom/IfcGeomTree.h rename to src/ifcgeom_schema_agnostic/IfcGeomTree.h index 656ae2c868..4f0fae3335 100644 --- a/src/ifcgeom/IfcGeomTree.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomTree.h @@ -21,7 +21,8 @@ #define IFCGEOMTREE_H #include "../ifcparse/IfcFile.h" -#include "../ifcgeom/IfcGeomElement.h" + +#include "../ifcgeom_schema_agnostic/IfcGeomElement.h" #include "../ifcgeom_schema_agnostic/IfcGeomIterator.h" #include "../ifcgeom_schema_agnostic/IfcGeomMaterial.h" #include "../ifcgeom_schema_agnostic/Kernel.h" diff --git a/src/ifcgeom/IfcRepresentationShapeItem.h b/src/ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h similarity index 100% rename from src/ifcgeom/IfcRepresentationShapeItem.h rename to src/ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h diff --git a/src/ifcgeom_schema_agnostic/IteratorImplementation.h b/src/ifcgeom_schema_agnostic/IteratorImplementation.h index 51798f46c1..fc9ca78aeb 100644 --- a/src/ifcgeom_schema_agnostic/IteratorImplementation.h +++ b/src/ifcgeom_schema_agnostic/IteratorImplementation.h @@ -20,10 +20,11 @@ #ifndef ITERATOR_IMPLEMENTATION_H #define ITERATOR_IMPLEMENTATION_H +#include "../ifcparse/IfcFile.h" + #include "../ifcgeom_schema_agnostic/IfcGeomFilter.h" #include "../ifcgeom_schema_agnostic/GeometrySerializer.h" -#include "../ifcparse/IfcFile.h" -#include "../ifcgeom/IfcGeomIteratorSettings.h" +#include "../ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h" #include diff --git a/src/ifcgeom_schema_agnostic/Kernel.h b/src/ifcgeom_schema_agnostic/Kernel.h index 17fec0b1eb..4d961cded0 100644 --- a/src/ifcgeom_schema_agnostic/Kernel.h +++ b/src/ifcgeom_schema_agnostic/Kernel.h @@ -2,8 +2,8 @@ #define ITERATOR_KERNEL_H #include "../ifcparse/IfcFile.h" -#include "../ifcgeom/IfcGeomIteratorSettings.h" -#include "../ifcgeom/IfcRepresentationShapeItem.h" +#include "../ifcgeom_schema_agnostic/IfcGeomIteratorSettings.h" +#include "../ifcgeom_schema_agnostic/IfcRepresentationShapeItem.h" #ifdef HAS_SCHEMA_2x3 #include "../ifcparse/Ifc2x3.h" @@ -40,6 +40,13 @@ #include #include +static const double ALMOST_ZERO = 1.e-9; + +template +inline static bool ALMOST_THE_SAME(const T& a, const T& b, double tolerance = ALMOST_ZERO) { + return fabs(a - b) < tolerance; +} + namespace IfcGeom { class BRepElement; diff --git a/src/ifcgeom/ifc_geom_api.h b/src/ifcgeom_schema_agnostic/ifc_geom_api.h similarity index 100% rename from src/ifcgeom/ifc_geom_api.h rename to src/ifcgeom_schema_agnostic/ifc_geom_api.h