From: jfa Date: Tue, 16 May 2023 12:55:50 +0000 (+0100) Subject: [bos #32155] EDF 25230 - face non planar. Advanced treatment of degenerated and non... X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=93b30d2d22a348fa00f775ba1bea6e3683f52c69;p=modules%2Fgeom.git [bos #32155] EDF 25230 - face non planar. Advanced treatment of degenerated and non geometrical edges. A workaround for OCCT bug." --- diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index f7f24c378..36b789763 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -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"); }