diff --git a/src/ifcgeom/IfcGeomObjects.cpp b/src/ifcgeom/IfcGeomObjects.cpp index 855cde8dfc..0d2f71ec5b 100644 --- a/src/ifcgeom/IfcGeomObjects.cpp +++ b/src/ifcgeom/IfcGeomObjects.cpp @@ -47,8 +47,10 @@ // Welds vertices that belong to different faces bool weld_vertices = true; + bool convert_back_units = false; bool use_faster_booleans = false; +bool disable_subtractions = false; int IfcGeomObjects::IfcMesh::addvert(const gp_XYZ& p) { const float X = convert_back_units ? (float) (p.X() / IfcGeom::GetValue(IfcGeom::GV_LENGTH_UNIT)) : (float)p.X(); @@ -386,7 +388,7 @@ IfcGeomObjects::IfcGeomObject* _get() { } } - if ( openings && openings->Size() ) { + if ( !disable_subtractions && openings && openings->Size() ) { IfcGeom::ShapeList opened_shapes; try { if ( use_faster_booleans ) { @@ -628,9 +630,12 @@ void IfcGeomObjects::Settings(int setting, bool value) { case SEW_SHELLS: IfcGeom::SetValue(IfcGeom::GV_MAX_FACES_TO_SEW,value ? 1000 : -1); break; - case IfcGeomObjects::FORCE_CCW_FACE_ORIENTATION: + case FORCE_CCW_FACE_ORIENTATION: IfcGeom::SetValue(IfcGeom::GV_FORCE_CCW_FACE_ORIENTATION,value ? 1 : -1); break; + case DISABLE_OPENING_SUBTRACTIONS: + disable_subtractions = value; + break; } } int IfcGeomObjects::Progress() { diff --git a/src/ifcgeom/IfcGeomObjects.h b/src/ifcgeom/IfcGeomObjects.h index 5fc573e5bc..beb4818092 100644 --- a/src/ifcgeom/IfcGeomObjects.h +++ b/src/ifcgeom/IfcGeomObjects.h @@ -97,6 +97,9 @@ namespace IfcGeomObjects { // By default singular faces have no explicitly defined orientation, to // force faces to be defined CounterClockWise set this to true. const int FORCE_CCW_FACE_ORIENTATION = 7; + // Disables the subtraction of IfcOpeningElement representations from + // the related building element representations. + const int DISABLE_OPENING_SUBTRACTIONS = 8; // End of settings enumeration. diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 792c28eebf..6e88453ce0 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -685,7 +685,7 @@ bool IfcFile::Init(IfcParse::IfcSpfStream* f) { // Update the status after every 1000 instances parsed if ( !((++x)%1000) ) { std::stringstream ss; ss << "\r#" << currentId; - Logger::Status(ss.str()); + Logger::Status(ss.str(), false); } if ( entity->is(Ifc2x3::Type::IfcRoot) ) { Ifc2x3::IfcRoot::ptr ifc_root = (Ifc2x3::IfcRoot::ptr) entity; diff --git a/src/ifcwrap/Interface.h b/src/ifcwrap/Interface.h index aa13f393d6..3023b7be4e 100644 --- a/src/ifcwrap/Interface.h +++ b/src/ifcwrap/Interface.h @@ -26,6 +26,7 @@ namespace IfcGeomObjects { const int SEW_SHELLS = 5; const int FASTER_BOOLEANS = 6; const int FORCE_CCW_FACE_ORIENTATION = 7; + const int DISABLE_OPENING_SUBTRACTIONS = 8; class IfcMesh { public: