[vtk-developers] Python wrapping & factory methods

David Gobbi david.gobbi at gmail.com
Tue Apr 26 17:02:02 EDT 2011


Ah.  I thought you meant something like the vtkNotUsed() macro
wrapped around the return type. Good, we agree ;)

 - David


On Tue, Apr 26, 2011 at 2:58 PM, Michael Halle <mhalle at bwh.harvard.edu> wrote:
> Yes, sorry, we agree: I meant a comment-based decorator for the factor methods.
>
> --Mike
>
>
>
> On Apr 26, 2011, at 4:31 PM, David Gobbi wrote:
>
>> Err... I'm not keen on adding yet more macros to VTK.  My preferred
>> hinting method would be to add markup tags to the comments.  That way
>> the hint can be applied without obfuscating the code.
>>
>> - David
>>
>>
>> On Tue, Apr 26, 2011 at 2:26 PM, Michael Halle <mhalle at bwh.harvard.edu> wrote:
>>> A longer-term alternative could be a wrapper generation decorator for factory methods that could live in the .h file.
>>>
>>> --Mike
>>>
>>>
>>>
>>>
>>> On Apr 26, 2011, at 4:23 PM, David Gobbi wrote:
>>>
>>>> Hi David,
>>>>
>>>> That's great, I can use the same list and centralize it so that it is
>>>> shared between the Python, Tcl, and Java wrappers.
>>>>
>>>> This issue represents a significant oversight in the wrapper design.
>>>> Thanks for bringing this up, Tim.
>>>>
>>>> - David
>>>>
>>>>
>>>> On Tue, Apr 26, 2011 at 2:15 PM, David Cole <david.cole at kitware.com> wrote:
>>>>> I use the following regular expression in the ActiViz .NET C# wrappers to
>>>>> determine what methods of VTK are "factory methods."
>>>>>
>>>>>   "^(CreateImageReader2|CreateInstance|MakeTransform|New|NewInstance)$"
>>>>>
>>>>> (seen in action in this file:
>>>>> http://public.kitware.com/gitweb?p=activizdotnet.git;a=blob;f=MummySettings.xml.in;h=786b24431b7fc75749c1ebb16840757857cfff13;hb=HEAD
>>>>> )
>>>>>
>>>>> Perhaps I need to extend it to include CreateArray as well?
>>>>>
>>>>> Does anybody know of any others?
>>>>>
>>>>>
>>>>> HTH,
>>>>> David
>>>>>
>>>>>
>>>>> On Tue, Apr 26, 2011 at 4:08 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>>>>
>>>>>> Hi Tim,
>>>>>>
>>>>>> All NewInstance() methods are wrapped the same way.  There isn't any
>>>>>> hinting mechanism to tell the wrappers that a new instance is being
>>>>>> created.  In fact the only way even a human programmer can tell is by
>>>>>> reading the documentation.
>>>>>>
>>>>>> Since instance-creation methods are rare in VTK, I would be
>>>>>> comfortable hard-coding the few that exist into the wrappers.  For
>>>>>> instance, any method called NewInstance that returns an object can be
>>>>>> assumed to return a new instance (because honestly, why else would a
>>>>>> method have such a name?).
>>>>>>
>>>>>> As a temporary and very dirty fix, you can use SetReferenceCount() to
>>>>>> avoid the memory leaks.
>>>>>>
>>>>>>  - David
>>>>>>
>>>>>> On Tue, Apr 26, 2011 at 1:39 PM, Timothy Shead <tshead at sandia.gov> wrote:
>>>>>>>
>>>>>>> I'm troubleshooting a reference-counting issue in the Python bindings
>>>>>>> for VTK - in a nutshell, the only way to instantiate vtkArray-derived
>>>>>>> classes from Python is through the vtkArray::CreateArray() static factory
>>>>>>> method (because vtkArray derivates are template classes).
>>>>>>>
>>>>>>> However, using vtkArray::CreateArray() from Python returns objects that
>>>>>>> have a reference-count of 2, because the Python wrapping code increments the
>>>>>>> reference-count of objects returned from "normal" class methods. This leads
>>>>>>> to annoying leaks when the program ends.
>>>>>>>
>>>>>>> From what I can see, there's a separate code path when instantiating VTK
>>>>>>> objects from Python.  I'm thinking that there must be other examples of
>>>>>>> factory methods in VTK, and that there must be some clean way of using them
>>>>>>> from Python?
>>>>>>>
>>>>>>> Thanks in advance,
>>>>>>> Tim
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Timothy M. Shead
>>>>>>> Sandia National Laboratories
>>>>>>> 1461, Scalable Analysis and Visualization
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>
>
>



More information about the vtk-developers mailing list