Sorry, hit send too soon… Have you had a look at
ShapeUpgrade_WireDivide ShapeAnalysis_Wire will help you find out which are intersecting edges. Björn, if you manage to fix this ( confident you will ;) than would you please share this example with us, such that way may include it in the /examples ? Thanks, -jelle On Aug 12, 2010, at 11:20 AM, Free Cad wrote: > 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 _______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users