const GeomAbs_JoinType theJoinType,
const TopoDS_Vertex * Ends);
+Standard_Boolean CheckSmallParamOnEdge(const TopoDS_Edge& anEdge);
+
//=======================================================================
//function : KPartCircle
//purpose :
TopExp::Vertices (E,V1,V2);
if (V1.IsSame(V2) && IsSmallClosedEdge(E, V1))
continue; //remove small closed edges
+ if (!CheckSmallParamOnEdge(E))
+ continue;
if (!MVE.Contains(V1)) {
TopTools_ListOfShape empty;
MVE.Add(V1,empty);
}
}
+Standard_Boolean CheckSmallParamOnEdge(const TopoDS_Edge& anEdge)
+{
+ const BRep_ListOfCurveRepresentation& aList = ((Handle(BRep_TEdge)::DownCast(anEdge.TShape()))->Curves());
+ if (!aList.IsEmpty())
+ {
+ Handle( BRep_CurveRepresentation ) CRep = ((Handle(BRep_TEdge)::DownCast(anEdge.TShape()))->Curves()).First();
+ Standard_Real f = (Handle(BRep_GCurve)::DownCast(CRep))->First();
+ Standard_Real l = (Handle(BRep_GCurve)::DownCast(CRep))->Last();
+ if (Abs (l - f) < Precision::PConfusion())
+ return Standard_False;
+ }
+ return Standard_True;
+}
+
+
--- /dev/null
+puts "============"
+puts "OCC26498"
+puts "============"
+puts ""
+#######################################################################
+# BRepOffsetAPI_MakeOffset causes segmentation fault
+#######################################################################
+
+polyline w 0 0 0 0.2 0 0 0.2 0.2 0 0.4 0.2 0 0.4 0.4 0 -0.06 0.57 0
+
+smallview
+display w
+fit
+
+if [catch { openoffset r w 1 -0.2 i } ] {
+ puts "Error : openoffset is wrong"
+} else {
+ renamevar r_1 result
+
+ set length 0.272485
+
+ set nbshapes_expected "
+Number of shapes in shape
+ VERTEX : 3
+ EDGE : 2
+ WIRE : 1
+ FACE : 0
+ SHELL : 0
+ SOLID : 0
+ COMPSOLID : 0
+ COMPOUND : 0
+ SHAPE : 6
+"
+ checknbshapes result -ref ${nbshapes_expected} -t -m "Offset"
+
+ checkshape result
+
+ display result
+ fit
+}
+
+set only_screen_axo 1