You can try to use the OCC6.3.0 library compiled in debug mode (the one provided from the official website was compiled in release mode).
2010/4/18 Dave Cowden <dave.cow...@gmail.com> > Segfault. I am able to diagnose once i have a stack trace.. I was hoping > you knew of a way to get a stacktrace from a segfault, but sounds like you > end up diving into the source at that point... > > thanks for the help, i know where to get the c++ source so i'll poke > around... > > thanks as always for the quick response and help ! > > > On Sun, Apr 18, 2010 at 7:54 AM, Thomas Paviot <tpav...@gmail.com> wrote: > >> What do you mean exactly with 'crash'? Do OCC raise an exception catched >> by pythonOCC (like Standard_ConstructionError for instance) or is it a >> segfault? >> >> If the error is not reproductible (ie. according to the wires passed to >> the BRepOffsetAPI_MakeOffset class, the Perform() method passes or >> fails), it may come from an issue in the algorithm used by OCC de perform >> the operation. In that case, it's really difficult to identify the problem, >> unless diving into the C++ code. >> >> Thomas >> >> 2010/4/18 Dave Cowden <dave.cow...@gmail.com> >> >>> Hi, Thomas, thanks! >>> >>> That definitely makes my code much more readable: but unfortunately the >>> crash still occurs at that same place. I also switched to using Topo in a >>> couple of other places ( where the face you see passed into that method is >>> created ), but that did not help either. >>> >>> How do you go about finding what's going on when you encounter these? >>> >>> On Sun, Apr 18, 2010 at 12:30 AM, Thomas Paviot <tpav...@gmail.com>wrote: >>> >>>> 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 >>>> >>>> >>> >>> _______________________________________________ >>> 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 >> >> > > _______________________________________________ > 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