[vtkusers] InteractionProp in Java

Ambar C ambarc at gmail.com
Mon Nov 22 17:17:59 EST 2010


The ending event will probably be the press of a separate Java Swing
button. I'll give your suggestion a try - do let me know if you have
any more of them.

Best,
Ambar

On Mon, Nov 15, 2010 at 8:52 PM, Jim Peterson <jimcp at cox.net> wrote:
> Correction on my last, I can set the ModifiedEvent observer on the actor
> then GetOrientation(), GetScale() and GetPosition() on the actor. It is a
> little noisy, it might be better if I could get an ending interaction event.
>
> 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