BRepOffsetAPI_MakePipeShell::Build stack overflow

Hi, 

In certain cases BRepOffsetAPI_MakePipeShell::Build runs out of stack space.
I like to report the issue with the data to reproduce, but I'm not entirely sure how to supply that data.
 

This is on Windows 10, Visual Studio 2019, OpenCascade 7.4.0
Besides the splines the only other setting applied to the object is  SetTransitionMode(BRepBuilderAPI_RoundCorner)

This is all the data I got out of the object. There might be other data elements that I'm missing (like tolerances etc.), please let me know how to get those.
The printout below recursively prints the shapes and the children of the shapes, the number of '+' characters indicates the level of recursion.

Thanks,

Maurice.

IsReady: 1
ErrorOnSurface: 0
GetStatus: 0
profile:
+"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 27}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [3.92825e-07, 0, -1, 0, 1, 0, 1, 0, 3.92825e-07]}, "shape": 7, "scale": 1}}, "IsIdentity()": 0}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [3.92825e-07, 0, -1, 0, 1, 0, 1, 0, 3.92825e-07]}, "shape": 7, "scale": 1}}, "IsIdentity()": 0}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [3.92825e-07, 0, -1, 0, 1, 0, 1, 0, 3.92825e-07]}, "shape": 7, "scale": 1}}, "IsIdentity()": 0}}, "Orient": 1}
first:
+"TopoDS_Shape": {, "TShape.get()": {}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 3}
last:
+"TopoDS_Shape": {, "TShape.get()": {}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 3}
spine:
+"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 11}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 1}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [-0.54, 0, 0.515]}, "matrix": {"gp_Mat": [0, -1, 0, 0, 0, -1, 1, 0, 0]}, "shape": 7, "scale": 1}}, "IsIdentity()": 0}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 1}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 1}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [-1.08, 0, -0.157]}, "matrix": {"gp_Mat": [-1, -3.92825e-07, 0, 0, 0, -1, 3.92825e-07, -1, 0]}, "shape": 7, "scale": 1}}, "IsIdentity()": 0}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 1}
++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 10}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 0}
+++"TopoDS_Shape": {, "TShape.get()": {"TopoDS_TShape": {"Flags": 90}}, "Location": {"TopLoc_Location": {"Transformation()": {"gp_Trsf": {"loc": {"gp_XYZ": [0, 0, 0]}, "matrix": {"gp_Mat": [1, 0, 0, 0, 1, 0, 0, 0, 1]}, "shape": 0, "scale": 1}}, "IsIdentity()": 1}}, "Orient": 1}

 

Kirill Gavrilov's picture

Reporting a bug could be done on Bugtracker.
For this, it is necessary providing a comprehensive information for reproducing the issue:

  • Input shapes (you may export a shape in native .BREP format, see BRepTools::Write() / Read()).
  • A sequence of commands triggering an issue (C++ code snippet or Tcl script for Draw Harness).

Tcl script for Draw Harness is preferable way, as it does not require building any sample and allows easily checking results in different OCCT releases (to track possible regressions, etc.), but if you are not familiar with with Draw Harness, then self-sustained C++ code snippet will also work.