2010/4/18 Dave Cowden <dave.cow...@gmail.com>

> Hi, all:
>
> I'm struggling with a couple of problems that I presume to be null pointers
> that are crashing OCC.  I have a feeling this may be related to memory
> management.
>
> For example, I've tracked down one crash to one line:
>  BRepBuilderAPI_MakeOffset.Perform().  I load it with several wires, each of
> which I can display successfully immediately before invoking perform. Yet,
> Perform() crashes. See example below.  I do not believe any object scoping
> issues are at play that I can see: all of the objects in question seem to be
> in scope when the crash happens.
>
> I am also fairly certain that its something I'm doing: all of the 'simple'
> test cases I create work fine.
>
> So my question is: are there any tricks/techniques I can use to isolate the
> problem when a crash occurs?  Right now i'm using old school print
> statements to get to what method call dies, but I still cannot see what
> exactly is going wrong.  Help is appreciated, this is completely kicking my
> butt :(
>
>
> #offset a face, returning the offset shape
> def _offsetFace(self,face,offset ):
>                 brt = BRepTools.BRepTools();
> ow = brt.OuterWire(face);
> bo = BRepOffsetAPI.BRepOffsetAPI_MakeOffset();
>
> bo.AddWire(ow);
>
> #now get the other wires
> te = TopExp.TopExp_Explorer();
>  te.Init(face,TopAbs.TopAbs_WIRE);
> while te.More():
> w = ts.Wire(te.Current());
>  TestDisplay.display.showShape(w); # this line succesfully shows the wires
> on screen
> if not w.IsSame(ow):
>  bo.AddWire(w);
> te.Next();
> te.ReInit();
>  print "about to offset...";
>
>  bo.Perform(offset,0.00001);  #this line crashes hard, but only sometimes.
> print "done offsetting..";
>
> if  not bo.IsDone():
> raise Exception, "Offset Was Not Successful.";
>  else:
> return  bo.Shape();
>
>
Hi Dave,

If you want to traverse topology, I suggest you use the Topo class available
from the High-Level Topology subpackage (the 'Topo' name for this class is
maybe not the best one). This is a wrapper over the TopExp class which fixes
issues related to TopExp (with the use of  the __hash__ method):

from OCC.Utils.Topology import Topo

#offset a face, returning the offset shape
def _offsetFace(self,face,offset ):
                brt = BRepTools.BRepTools();
ow = brt.OuterWire(face);
bo = BRepOffsetAPI.BRepOffsetAPI_MakeOffset();

bo.AddWire(ow);

#now get the other wires
                for w in Topo(face).wires():
  bo.AddWire(w);
print "about to offset...";

bo.Perform(offset,0.00001);
print "done offsetting..";

if  not bo.IsDone():
raise Exception, "Offset Was Not Successful.";
else:
return  bo.Shape();

Hope this helps,

Regards,

Thomas
_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to