mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-15 18:14:08 +00:00
Optimize generation of faces with large (n > 128) number of edges.
This commit is contained in:
@@ -213,7 +213,15 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcFace* l, TopoDS_Shape& face) {
|
|||||||
process_wire:
|
process_wire:
|
||||||
|
|
||||||
if (face_surface.IsNull()) {
|
if (face_surface.IsNull()) {
|
||||||
mf = new BRepBuilderAPI_MakeFace(wire);
|
if (count(wire, TopAbs_EDGE) > 128) {
|
||||||
|
// tfk: optimization find the underlying surface ourselves since it's going
|
||||||
|
// to be planar in IFC if no explicit surface is given. Should we always do this?
|
||||||
|
gp_Pln pln;
|
||||||
|
approximate_plane_through_wire(wire, pln);
|
||||||
|
mf = new BRepBuilderAPI_MakeFace(pln, wire, true);
|
||||||
|
} else {
|
||||||
|
mf = new BRepBuilderAPI_MakeFace(wire);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/// @todo check necessity of false here
|
/// @todo check necessity of false here
|
||||||
mf = new BRepBuilderAPI_MakeFace(face_surface, wire, false);
|
mf = new BRepBuilderAPI_MakeFace(face_surface, wire, false);
|
||||||
|
|||||||
@@ -2838,7 +2838,10 @@ bool IfcGeom::Kernel::wire_intersections(const TopoDS_Wire& wire, TopTools_ListO
|
|||||||
}
|
}
|
||||||
|
|
||||||
int n = count(wire, TopAbs_EDGE);
|
int n = count(wire, TopAbs_EDGE);
|
||||||
if (n < 3) {
|
if (n < 3 || n > 128) {
|
||||||
|
if (n > 128) {
|
||||||
|
Logger::Notice("Too many segments for detection of self-intersections");
|
||||||
|
}
|
||||||
wires.Append(wire);
|
wires.Append(wire);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user