[vtkusers] InteractionProp in Java

Jim Peterson jimcp at cox.net
Mon Nov 15 23:17:24 EST 2010


Ambar,
I think you should be able to add an observer to the actor on the 
interactionEvent. The actor has GetOrientation(), GetScale(), and 
GetPosition() methods as well as access to the  user transform and user 
matrix 4x4. one would think you could apply the transform to the 
underlying points and ten set the transform to identity.
Hope that helps,
Jim
Ambar C wrote:
> Right - I didn't understand that JNI wouldn't let the members
> propagate, thanks for that.
>
> I'm trying to build a system where the user can move (rotate,
> translate) the shown actor using a mouse, and those changes should
> take place in the actual data itself. To do this I'd need to be able
> to find out the transformations the user is making with the mouse so
> that I can apply them to my data. In C++ the trackballactor's
> InteractionProp member let me get the current orientation and
> position, but I can't find anything in Java that lets me do that. Any
> help would be appreciated.
>
> Best,
> Ambar
>
> On Sat, Nov 13, 2010 at 2:02 PM, Jim Peterson <jimcp at cox.net> wrote:
>   
>> Ambar,
>> In my opinion, you have a solution that worked in C++, extend the function
>> of the class in C++ which makes protected attributes available to your code.
>> You are expecting extending the java wrapper to that C++ class to behave the
>> same. You are correct, the protected variable InteractionProp is not
>> accessible directly from Java because the JCI exposes the get/set functions
>> and other public functions of the class, the fact is no attributes of the
>> C++ classes are available as attributes of the corresponding Java classes.
>> My best understanding of JNI is no attributes of the native classes are
>> available by direct reference, the only access to attributes is via get/set
>> functions, and InteractionProp is protected in vtk and therefore not
>> exposed.
>>
>> It could be you have an argument for providing a getInteractionProperty from
>> the interactionStyle classes, but I would say it needs to be justified by
>> something other than "it is not accessible".
>>
>> The bottom line is you apparently have a C++ class that implements what you
>> want. If you want to code an interface change in Java you need to start from
>> what you want and chose a solution that is available, like an addObserver
>> callback or an interaction using display of vtk from Java.
>>
>> Maybe this discussion would be more productive if you describe what you want
>> to do in terms of changing the interaction behavior and not how you think
>> you should be able to do it.
>>
>> Hope that helps,
>> Jim
>>
>> Ambar C wrote:
>>     
>>> Hello,
>>>
>>> I understand the way JNI works in VTK, but the member that I'm having
>>> trouble accessing isn't something that I've overloaded any C++ class
>>> with. I'm trying to be able to access the InteractionProp member of
>>> the vtkInteractorStyleTrackballActor, which is a protected member
>>> object of the class. My observation so far is that this member doesn't
>>> seem to be recognized in the Java wrapped implementation. I'm not sure
>>> how JNI would tie into this lack of propagation, but do correct me if
>>> I'm wrong.
>>>
>>> Cheers,
>>> Ambar
>>>
>>> On Sat, Nov 13, 2010 at 10:37 AM, Jim Peterson <jimcp at cox.net> wrote:
>>>
>>>       
>>>> Ambar,
>>>> The set of vtk classes available in Java are not actually java classes,
>>>> they
>>>> are interfaces with the C++ vtk classes implemented in the vtk shared
>>>> libraries. The Java terminology is the classes are implemented via the
>>>> Java
>>>> Native Interface (JNI). As such, you cannot extend vtk classes in Java to
>>>> add functionality as you might in C++. The vtk C++ logic is unaware of
>>>> the
>>>> Java extensions.
>>>> You have at least three choices are:
>>>> 1. Add your modified C++ class to vtk so that it is included in one of
>>>> the
>>>> vtk shared libraries and wrapped by the Java interface and available to
>>>> your
>>>> Java program.
>>>> 2. Use the mouse move or other interaction callbacks in your java code to
>>>> gain control and interact with your vtk model.
>>>> 3. Use the relatively undocumented vtkRenderWindowPanel class from  Java
>>>> so
>>>> that you can use Java UI events to interact with the vtk object.
>>>>
>>>> I am not exactly sure what your eventual goal is other that the
>>>> interaction
>>>> modifications, but some examples of the java addObserver callbacks and
>>>> Swing
>>>> panel implementation are available from here:
>>>> http://www.vtk.org/Wiki/VTK/Examples/Java
>>>>
>>>> Hope that helps,
>>>> Jim
>>>>
>>>> Ambar C wrote:
>>>>
>>>>         
>>>>> Hi Jim,
>>>>>
>>>>> Could you be more specific? What would I need to do to be able to grab
>>>>> the mouse driven value changes in orientation and position in Java? I
>>>>> don't understand how I'd be able to replace the interaction prop's
>>>>> functionality. Thanks for the help.
>>>>>
>>>>> Best,
>>>>> Ambar
>>>>>
>>>>> On Tue, Nov 9, 2010 at 4:04 AM, Jim Peterson <jimcp at cox.net> wrote:
>>>>>
>>>>>
>>>>>           
>>>>>> Ambar C wrote:
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> Hello,
>>>>>>>
>>>>>>> I'm working on modifying an vtkInteractorStyleTrackballActor to have
>>>>>>> my own custom class, and am trying to access it's InteractionProp
>>>>>>> member but it doesn't seem to be coming through. The equivalent code
>>>>>>> works in C++, but something along the lines of
>>>>>>>
>>>>>>> public modifiedClass extends vtkInteractorStyleTrackballActor
>>>>>>> {
>>>>>>>   .....
>>>>>>>   this.InteractionProp. //Doesn't recognize the member.
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> Ambar,
>>>>>> I think this is not a valid construct for classes that are used for JNI
>>>>>> interfaces. Yes, Java compiles it, but no, there is no runtime
>>>>>> inheritance
>>>>>> to the c++ classes.  The pure java way to modify interaction behavior
>>>>>> is
>>>>>> to
>>>>>> use the interaction observers. If you want to use your C++ code you
>>>>>> would
>>>>>> need to add it to the vtk source tree and rebuild both vtk and the java
>>>>>> wrappers, The new class can be wrapped and accessible to Java in that
>>>>>> way.
>>>>>>
>>>>>> If you need to address this completely in Java, maybe it would be
>>>>>> better
>>>>>> to
>>>>>> identify your desired modification to the interaction rather than the
>>>>>> solution first.
>>>>>>
>>>>>> Hope that helps,
>>>>>> Jim
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>           
>>>>         
>>>       
>>     
>
>   




More information about the vtkusers mailing list