Hi again, can you help me use ShapeFix in the correct way, or suggest other solutions to a problem with self-intersecting wires?
The code below generates an example of such a wire. There is a small loop close to the point (1.0,1.0,0.0) which is the reason why no face can be made from it, I guess. The code also shows my attempt to solve the problem using sf=ShapeFix_Wire(). But sf.Perform() always fails, even if the wire is without problems (using vertex definitions as in the line which is commented out). What is the simplest solution to generate a face from self-intersecting wires _automatically_? In my example, the small loop could be collapsed to a single vertex, or the wire could be split into two (the large loop and the small loop) - both solutions would be fine. How about OCC's ShapeHealing functions? Are they more powerful than ShapeFix? I don't understand the relation between ShapeFix and ShapeHealing. Is ShapeHealing available in the non-commercial OCC distribution? Thank you Björn --- code example: --- from OCC.BRepBuilderAPI import * from OCC.gp import * from OCC.ShapeFix import * from OCC.TopoDS import * def fixWire(wire): sf=ShapeFix_Wire() sf.Load(wire) sf.SetFixIntersectingEdgesMode(1) sf.SetFixNonAdjacentIntersectingEdgesMode(1) sf.SetFixSelfIntersectingEdgeMode(1) if sf.Perform(): print 'Fix Successful' return sf.Wire() else: print 'Fix Unsuccessful' return wire def vertex(x,y,z): mv=BRepBuilderAPI_MakeVertex(gp_Pnt(x,y,z)) return mv.Vertex() def edge(v1,v2): me=BRepBuilderAPI_MakeEdge(v1,v2) return me.Edge() def face(w): mf=BRepBuilderAPI_MakeFace(w) return mf.Face() def wire(e1,e2,e3,e4): mw=BRepBuilderAPI_MakeWire(e1) mw.Add(e2); mw.Add(e3); mw.Add(e4); return mw.Wire() v=[vertex(0,0,0),vertex(1,0,0),vertex(0.95,1,0),vertex(1,1,0)] #self intersecting, no face visible #v=[vertex(0,0,0),vertex(1,0,0),vertex(1,1,0),vertex(0.9,1,0)] #valid wire e=[] for i in range(4): e.append(edge(v[i-1],v[i])) w=wire(e[0],e[1],e[2],e[3]) f=face(fixWire(w)) from OCC.Display.SimpleGui import * display, start_display, add_menu, add_function_to_menu = init_display() display.DisplayShape([w,f]) start_display() _______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users