diff --git a/src/ifcgeom/IfcGeomIteratorImplementation.h b/src/ifcgeom/IfcGeomIteratorImplementation.h index b32668a5e8..c17243d667 100644 --- a/src/ifcgeom/IfcGeomIteratorImplementation.h +++ b/src/ifcgeom/IfcGeomIteratorImplementation.h @@ -452,8 +452,8 @@ namespace IfcGeom { bool representation_processed_as_mapped_item = false; IfcSchema::IfcRepresentation* representation_mapped_to = kernel.representation_mapped_to(representation); if (representation_mapped_to) { - representation_processed_as_mapped_item = geometry_reuse_ok_for_current_representation_ || - ok_mapped_representations->contains(representation_mapped_to); + representation_processed_as_mapped_item = geometry_reuse_ok_for_current_representation_ && ( + ok_mapped_representations->contains(representation_mapped_to) || reuse_ok_(kernel.products_represented_by(representation_mapped_to))); } if (representation_processed_as_mapped_item) { diff --git a/src/ifcgeom/IfcGeomShapes.cpp b/src/ifcgeom/IfcGeomShapes.cpp index 4b56eeb97a..30e2f7cc41 100644 --- a/src/ifcgeom/IfcGeomShapes.cpp +++ b/src/ifcgeom/IfcGeomShapes.cpp @@ -1099,20 +1099,15 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shap } } - const bool is_continuous = wire_is_c1_continuous(wire, 1.e-3); + // This is not used anymore, BRepBuilderAPI_RightCorner is always used now. + // const bool is_continuous = wire_is_c1_continuous(wire, 1.e-3); // NB: Note that StartParam and EndParam param are ignored and the assumption is // made that the parametric range over which to be swept matches the IfcCurve in // its entirety. - // NB2: Contrary to IfcSurfaceCurveSweptAreaSolid the transition mode has been - // set to create round corners as this has proven to work better with the types - // of directrices encountered, which do not necessarily conform to a surface. { BRepOffsetAPI_MakePipeShell builder(wire); builder.Add(section1); - if (!is_continuous) { - // Only perform round corners on wires that are not c1 continuous - builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); - } + builder.SetTransitionMode(BRepBuilderAPI_RightCorner); builder.Build(); builder.MakeSolid(); shape = builder.Shape(); } @@ -1120,9 +1115,7 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcSweptDiskSolid* l, TopoDS_Shap if (hasInnerRadius) { BRepOffsetAPI_MakePipeShell builder(wire); builder.Add(section2); - if (!is_continuous) { - builder.SetTransitionMode(BRepBuilderAPI_RoundCorner); - } + builder.SetTransitionMode(BRepBuilderAPI_RightCorner); builder.Build(); builder.MakeSolid(); TopoDS_Shape inner = builder.Shape();