[vtk-developers] Wrapping enum types
David Gobbi
david.gobbi at gmail.com
Tue Dec 9 09:30:28 EST 2014
I've merged the fixes for the Java and Tcl wrappers so that they can wrap
methods that take enum types as parameters. Together with the python
fixes, this means that there should be no barrier to people who want to use
enum types in their class interfaces.
On Tue, Dec 2, 2014 at 9:17 PM, David Gobbi <david.gobbi at gmail.com> wrote:
> Thanks, Marcus. I've been thinking about Java and Tcl, and I might
> implement enums in those wrappers via a simple type cast.
>
> For example,
>
> void SetColorMode(ColorModeEnum val);
>
> would be called from the Tcl and Java wrappers like this
>
> SetColorMode(static_cast<ColorModeEnum>(val));
>
> with no type checking. It would be much easier to implement
> than making each enum into a first-class type like I've done
> for the Python wrappers.
>
> - David
>
>
> On Tue, Dec 2, 2014 at 9:01 PM, Marcus D. Hanwell <
> marcus.hanwell at kitware.com> wrote:
>
>> Hi David,
>>
>> I will try to take a look soon, travel and proposals have taken up
>> more of my time than I might like. I am really pleased to see this
>> added to the Python wrapping (although in truth would love to see it
>> in Java/Tcl so we could actually use it in our API).
>>
>> Marcus
>>
>> On Tue, Dec 2, 2014 at 11:46 AM, David Gobbi <david.gobbi at gmail.com>
>> wrote:
>> > Still waiting for reviewers for
>> http://review.source.kitware.com/#/c/17993
>> > (refactoring the python wrappers and wrapping enum types). Big thanks
>> > to Ben for his comments so far.
>> >
>> > - David
>> >
>> >
>> > On Fri, Nov 21, 2014 at 10:58 AM, David Gobbi <david.gobbi at gmail.com>
>> wrote:
>> >>
>> >> Hi All,
>> >>
>> >> The enum support for the wrappers is done (pending merge). The caveat
>> >> that I mentioned in my previous email no longer applies, i.e. with this
>> >> new
>> >> patch _all_ enum types are wrapped, whether they are in the global
>> >> namespace, in a class namespace, or in any other namespace (except for
>> >> nested namespaces, which aren't supported by the wrappers yet).
>> >>
>> >> This change isn't going to have much impact on the VTK core, because
>> >> most VTK class methods simply take "int" parameters instead of
>> requiring
>> >> the use of enums. However, it will have a _big_ impact for the
>> wrapping
>> >> of third-party VTK classes which tend to use enum parameters quite
>> often.
>> >> (In fact the change was motivated by the need to wrap some of my own
>> >> external classes).
>> >>
>> >> Enum parameter support is only provided for the python wrappers, not
>> for
>> >> Java or Tcl.
>> >>
>> >> - David
>> >>
>> >>
>> >> On Mon, Nov 17, 2014 at 7:04 AM, David Gobbi <david.gobbi at gmail.com>
>> >> wrote:
>> >>>
>> >>> Hi All,
>> >>>
>> >>> I have a patch in gerrit that modifies the python wrappers so that
>> enum
>> >>> types are wrapped. This means that method parameters can be enum
>> >>> types, something that wasn't possible for wrapped methods before.
>> >>> http://review.source.kitware.com/#/c/17993
>> >>>
>> >>> E.g.:
>> >>>
>> >>> class vtkSomeObject
>> >>> {
>> >>> public:
>> >>> enum ColorEnum { Red, Blue };
>> >>> void SetColor(enum ColorEnum);
>> >>> };
>> >>>
>> >>> Each enum type is wrapped as a unique python type subclassed from
>> >>> python's "int" type. So an enum can be used wherever an int can be
>> >>> used, but methods that take an enum will raise a TypeError unless
>> >>> given a value of the correct enum type.
>> >>>
>> >>> One caveat is that this only works if the method and the enum type are
>> >>> members of the same class. Sometime later I'll generalize it so that
>> a
>> >>> method can use an enum defined in a different class, but method & enum
>> >>> in the same class seems to be the most common use case.
>> >>>
>> >>> Cheers,
>> >>>
>> >>> - David
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20141209/6970dd00/attachment-0001.html>
More information about the vtk-developers
mailing list