diff --git a/src/ifcgeom/IfcGeomObjects.cpp b/src/ifcgeom/IfcGeomObjects.cpp index e3ec4b1cf8..b61dd215d0 100644 --- a/src/ifcgeom/IfcGeomObjects.cpp +++ b/src/ifcgeom/IfcGeomObjects.cpp @@ -48,8 +48,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(); @@ -387,7 +389,7 @@ IfcGeomObjects::IfcGeomObject* _get() { } } - if ( openings && openings->Size() ) { + if ( !disable_subtractions && openings && openings->Size() ) { IfcGeom::ShapeList opened_shapes; try { if ( use_faster_booleans ) { @@ -629,9 +631,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 8ae5b13267..1995492a59 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -674,7 +674,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;