Frank,

I uploaded a prebuilt binary for Windows-Python25 that fixes the bug you 
reported.

http://www.pythonocc.org/Releases/daily

Cheers,

Thomas


Thomas Paviot a écrit :
> Frank,
>
> The build of pythonOCC on Windows is quite easier than on Linux (in my 
> opinion). I use VS2003. If you properly installed OpenCascade6.3.0 (and 
> the CASROOT env variable is set), then you only have to
>
> cd src
> python setup.py build -cmsvc
>
> And everything should go fine (strangely, scons build script does not 
> work under Windows and is then not usable). I don't know how to deal 
> with distutils and various VS installation. Any feedback is welcome.
>
> There were many changes and improvements since the md0.1 release, and 
> the development is still very active. I usually upload 'daily builds for 
> Windows' (indeed, it's more 'weekly' builds) that you can find at 
> http://www.pythonocc.org/Releases/daily. Thanks to your report, I hope 
> to upload one more daily build this evening. If you really wish to be 
> up-to-date, you'd better check out source code from the subversion 
> repository and build your own pythonOCC.
>
> Cheers,
>
> Thomas
>
> Frank Conradie a écrit :
>   
>> Hi Thomas
>>
>> Thanks for your thorough reply! I am using Vista and the md0.1 release 
>> of PythonOCC. I have used scons before - how big an issue is it to 
>> build PythonOCC on Windows (I have various versions of Visual Studio 
>> available - .NET, 2005, 2008)?
>>
>> Thanks again,
>> Frank Conradie
>> Rossland, BC, Canada
>>
>>
>> Thomas Paviot wrote:
>>     
>>> Hi Frank,
>>>
>>> I tested your script and have the same result. You point out a really 
>>> *serious* bug related to python/OpenCascade memory management 
>>> conflicts. In a sense, when you're 'outside' the function, the python 
>>> object points to an OCC object that was deleted when exiting the 
>>> function. I thought I fixed this behaviour, and that it was enough to 
>>> use a custom destructor only for OCC objects that inherits from 
>>> Standard_Transient. I was wrong, and this fix has to be extended to 
>>> *all* OCC objects. Thanks for the feedback, I'll tryo to do that this 
>>> week-end (should be a simple line removing in the SWIG_generator.py 
>>> script).
>>>
>>> Anyway, this discussion is far from your needs! If you cannot wait 
>>> for the fix to be commited, I have one solution:
>>>
>>> Just after the line 'mkface = 
>>> BRepBuilderAPI.BRepBuilderAPI_MakeFace(mkwire.Wire())', add the 
>>> following line:
>>> mkface.thisown = False
>>> (Tells python to *not* delete the object when exiting the function). 
>>> The result is then:
>>>
>>> f faceInsideFunction.IsNull: 0
>>> <OCC.TopoDS.TopoDS_Face; proxy of <Swig Object of type 'TopoDS_Face 
>>> *' at 0x00AE28C0> >
>>> returnedFace.IsNull: 0
>>> <OCC.TopoDS.TopoDS_Face; proxy of <Swig Object of type 'TopoDS_Face 
>>> *' at 0x00ADFBC0> >
>>>
>>> Jelle and I had a long discussion about this topic (memory 
>>> management). Our conclusion is that this stuff *must* be completely 
>>> hidden to the end-user (since it's not pythonic at all) before 
>>> another pythonOCC version is released. Thanks so much for your 
>>> report, Franck. I know exactly what to do and it will be done before 
>>> the end of the week-end. I have however a bad news: the complete 
>>> solution will have to be rebuild from scratch since amost all SWIG 
>>> files will be modified.
>>>
>>> Just a question: what is your OS? Which pythonOCC version do you use?
>>>
>>> Best Regards,
>>>
>>> Thomas
>>>
>>> Frank Conradie a écrit :
>>>       
>>>> I was hoping someone could explain the following odd wrapper 
>>>> behavior: if I build a TopoDS_Face inside a Python function, then 
>>>> return it from the function, the returned face seems to be 
>>>> different/invalid in the calling scope.
>>>> Here is the output:
>>>>
>>>> faceInsideFunction.IsNull: 0
>>>> <OCC.TopoDS.TopoDS_Face; proxy of <Swig Object of type 'TopoDS_Face 
>>>> *' at 0x01BE4640> >
>>>>
>>>> returnedFace.IsNull: 1
>>>> <OCC.TopoDS.TopoDS_Face; proxy of <Swig Object of type 'TopoDS_Face 
>>>> *' at 0x01BDF7E0> >
>>>>
>>>> And here is the code that generated this output:
>>>>
>>>> from OCC import gp, BRepBuilderAPI, TopoDS
>>>>
>>>> def MakeFace(pts):
>>>>     gpnts = [gp.gp_Pnt(x,y,z) for x,y,z in pts]
>>>>     n = len(gpnts)
>>>>     gpnts.append(gpnts[0])
>>>>     mkwire = BRepBuilderAPI.BRepBuilderAPI_MakeWire()
>>>>     for i in range(n):
>>>>         mkedge = BRepBuilderAPI.BRepBuilderAPI_MakeEdge(gpnts[i], 
>>>> gpnts[i+1])
>>>>         mkwire.Add(mkedge.Edge())
>>>>     mkface = BRepBuilderAPI.BRepBuilderAPI_MakeFace(mkwire.Wire())
>>>>     f = mkface.Face()
>>>>     print 'faceInsideFunction.IsNull:', f.IsNull()
>>>>     print f
>>>>     return f
>>>>
>>>> def Test1():
>>>>     y = 0.000
>>>>     o = 0.000
>>>>     d = 0.100
>>>>     fpts = [
>>>>         [o,  y,o  ],
>>>>         [o+d,y,o  ],
>>>>         [o+d,y,o+d],
>>>>         [o,  y,o+d],
>>>>     ]
>>>>     f1 = MakeFace(fpts)
>>>>     print
>>>>     print 'returnedFace.IsNull:', f1.IsNull()
>>>>     print f1
>>>>
>>>> if __name__ == '__main__':
>>>>     Test1()
>>>>
>>>> Thanks for a great project!
>>>> Frank Conradie
>>>> Rossland, BC, Canada
>>>>
>>>>
>>>> _______________________________________________
>>>> 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