Thank you very much for the description. This helps me understand how to fix
the issue and also understand more how similar issues would happen in other
modules.

Thanks! 

-----Original Message-----
From: pythonocc-users-boun...@gna.org
[mailto:pythonocc-users-boun...@gna.org] On Behalf Of Thomas Paviot
Sent: Wednesday, May 06, 2009 4:19 AM
To: pythonOCC users mailing list.
Subject: Re: [Pythonocc-users] Hard Crash storing object proxies in a list?

Hi Dave,

As Jelle said, this was already discussed on this ml but the link provided
will not fix the but you report: I have the same segfault as you. Here is
the problem: the last occurence of the method
TopExp_Explorer.Next() erases all pointers. When you stores shapes in a
python lists, you then have a list of null pointers (that cause the
segfault).

The safest way to store shapes returned by the TopExp_Explorer is certainly
to use the TopoDS_ListOfShapes builtin iterator. However, if you want to use
python lists, then you have to ReInit() the explorer when it's done with the
.Next() method. In the sample you provide, you then just have to add
texp.ReInit() at the end of your 'findFaces' function:

def findFaces(shape):
    faceList = [];
    texp = TopExp.TopExp_Explorer();
    ts = TopoDS.TopoDS();
    texp.Init(shape,TopAbs.TopAbs_FACE);
    while ( texp.More() ):
        face = ts.Face(texp.Current());
        faceList.append(face);
        texp.Next(); # if there's no 'next' shape, pointers are destroyed
    texp.ReInit() # Add this line so pointers are recreated before the list
is returned
    return faceList;

Fix successfully tested on my Windows XP machine.

Cheers,

Thomas

jelle feringa a écrit :
> hi Dave,
>
> this was an issue with occ.utils.topology.py, which has been fixed in 
> the SVN some time ago. it would be best if you can upgrade to:
> http://pythonocc.org/Releases/daily/pythonOCC-PDE2009.win32-py2.5.exe
>
> cheers,
>
> -jelle
>
> On Wed, May 6, 2009 at 4:05 AM, Dave Cowden <dave.cow...@gmail.com> wrote:
>   
>> Hello, everyone:
>>
>> I could use some assistance. I know little about swig and subtle 
>> python/c++ binding details, but I suspect some subtle thing I'm doing 
>> wron
>>     
> g is kicking
>   
>> my butt.
>>
>> I am getting 'hard crashes' when I attempt to store object proxies 
>> into a list.
>>
>> Attached is an example script.  in the script, I do the following steps:
>>
>> (1) create a box
>> (2) dump the topology, using a function that will print the object 
>> tree-- solid, then faces, then wires, then edges. this works
>> (3) iterate through the box finding the faces, and print them out one 
>> at a time. this also works
>> (4) use the same code as (3), but instead of directly using the 
>> objects, put them into a list, and return them
>> (5) attempt to loop through the list, dumping the them exactly as in (4).
>>
>> in step 5, i get a hard crash every time. it seems like the object 
>> proxies are going out of scope or something. I'm completely lost.
>>
>> Can anyone else duplicate these results, and/or tell me if i'm doing 
>> something obviously wrong?
>>
>> Platform: windows xp
>> occ version 6.3.0
>> pyocc version wo0.2 ( from prebuilt binaries )
>>
>> as always help is appreciated.
>> _______________________________________________
>> 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