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