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

Reply via email to