]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
[bos #32155] EDF 25230 - face non planar. Advanced treatment of degenerated and non... jfa/32155_MakeFaceWires
authorjfa <jfa@opencascade.com>
Tue, 16 May 2023 12:55:50 +0000 (13:55 +0100)
committerjfa <jfa@opencascade.com>
Tue, 16 May 2023 14:08:27 +0000 (15:08 +0100)
src/GEOMImpl/GEOMImpl_ShapeDriver.cxx

index f7f24c3785aeef40732c7c43b2bf4fcaa29a9117..36b7897636572ac3636d075521405973d3b67b06 100644 (file)
@@ -482,6 +482,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(Handle(TFunction_Logbook)& log) c
 
     // Try to build a face from a set of wires and edges
     int ind;
+    bool isPlanarWanted = aCI.GetIsPlanar();
 
     Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
     int nbshapes = aShapes->Length();
@@ -501,11 +502,14 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(Handle(TFunction_Logbook)& log) c
       TopExp_Explorer anExpE_i (aSh_i, TopAbs_EDGE);
       for (; anExpE_i.More(); anExpE_i.Next()) {
         if (aMapEdges.Add(anExpE_i.Current())) {
+          const TopoDS_Edge& E = TopoDS::Edge(anExpE_i.Current());
+          if ((BRep_Tool::Degenerated(E) && isPlanarWanted) ||
+              !BRep_Tool::IsGeometric(E))
+            continue;
+
           // Copy the original shape.
           TopoDS_Shape aShapeCopy;
-
-          TNaming_CopyShape::CopyTool
-            (anExpE_i.Current(), aMapTShapes, aShapeCopy);
+          TNaming_CopyShape::CopyTool(E, aMapTShapes, aShapeCopy);
           aSeqEdgesIn->Append(aShapeCopy);
         }
       }
@@ -543,7 +547,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(Handle(TFunction_Logbook)& log) c
     // 4.a. Basic face
     TopoDS_Shape aFFace;
     TopoDS_Wire aW1 = TopoDS::Wire(aSeqClosedWires->Value(1));
-    aWarning = GEOMImpl_Block6Explorer::MakeFace(aW1, aCI.GetIsPlanar(), aFFace);
+    aWarning = GEOMImpl_Block6Explorer::MakeFace(aW1, isPlanarWanted, aFFace);
     if (aFFace.IsNull()) {
       Standard_ConstructionError::Raise("Face construction failed");
     }