[vtkusers] Questions on wrapping a C++ library for use in VTK Scripting (eg. TCL)

KenLists ken-lists at nycap.rr.com
Thu Oct 24 13:38:52 EDT 2002

> I have a C++ class library (already using some VTK objects like
> "vtkImageData" in its interface) that I want to make usable from
> within VTK/TCL or VTK/Python etc. scripts. This library however
> uses standard C++ exceptions for error reporting to its users and
> things like std::string to pass strings in and out.
> There is a hierarchy of C++ classes that could be thrown in the
> case of some error condition.
> I probably have to write a small C++ class derived from
> "vtkObject" that internally uses the C++ class library and
> translate the interface of the C++ class library to a simpler
> form that the VTK Wrapper generator can understand but before
> starting to write this class, I wanted to ask you some questions:
> 1. Is there a way of automatically wrapping C++ exceptions to the
>    corresponding exception mechanisms of TCL / JAVA /Python etc. ?
>    If there is no such thing (I guess there is nothing like that
>    by now) what would be the best way to provide sophisticated error
>    handling facilities to the script writers ?
> 2. Is there support for automatically wrapping "std::string" or
>    "std::vector" arguments in C++ class-methods ?
Not with the VTK wrappers. There is a new wrapper called cable
http://public.kitware.com/Cable/HTML/Index.html that I believe can
handle this and most other C++ features.

> 3. Has someone ever used SWIG together with VTK and some scripting
>    language (because it seams to support some of the features
>    I am asking about) ?

This usually gets tried or mentioned once a year or so and last I knew
it didn't really work. But I haven't checked up on it in the last year
so, feel free to give it a shot.

> 4. Is it possible to pass out multiple strings to the scripting
>    languages with just one call similar to the following C++ code:
>    void passOutTwoStrings(std::string& string1, std::string& string2)
>    {
>      string1 = std::string( "one" );
>      string2 = std::string( "two" );
>    }

Not with the VTK wrappers. With Cable I believe you can do this.
> 4. I was playing with the wrapper generator and it seamed that it
>    considers the use of the C/C++ keyword "volatile" as a syntax
>    error. Is there a reason for this behaviour ? I just used
>    the keyword for a private attribute of a class.

That is just a goober (technical term) and the VTK wrappers could be
fairly easily modified to handle this if necessary.


More information about the vtkusers mailing list