diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp index f89f7d691504663c6b29be4adcf502d3e60ad995..82c960534a7e90a983ba7d278e5451bf8dcd3c8a 100644 --- a/Geo/GModelIO_OCC.cpp +++ b/Geo/GModelIO_OCC.cpp @@ -1710,17 +1710,20 @@ bool OCC_Internals::applyBooleanOperator TopoDS_Shape result; #if OCC_VERSION_HEX >= 0x060900 + // if we remove the tool or object, we should act on copies, so that syncing + // with GModel is not confused if the boolean operation does not modify some + // of the shapes that would already have been imported before TopTools_ListOfShape objectShapes, toolShapes; for(int dim = 0; dim < 4; dim++){ for(unsigned int i = 0; i < objects[dim].size(); i++){ - if(tolerance > 0.) - objectShapes.Append(BRepBuilderAPI_Copy(objects[dim][i]).Shape()); + if(removeTool || tolerance > 0.) + objectShapes.Append(BRepBuilderAPI_Copy(objects[dim][i], false).Shape()); else objectShapes.Append(objects[dim][i]); } for(unsigned int i = 0; i < tools[dim].size(); i++){ - if(tolerance > 0.) - toolShapes.Append(BRepBuilderAPI_Copy(tools[dim][i]).Shape()); + if(removeObject || tolerance > 0.) + toolShapes.Append(BRepBuilderAPI_Copy(tools[dim][i], false).Shape()); else toolShapes.Append(tools[dim][i]); }