[vtkusers] Notification after interaction with vtkComposite(TransferFunction|ControlPoints)Item

Elvis Stansvik elvis.stansvik at orexplore.com
Mon Jun 27 09:55:43 EDT 2016


2016-06-22 12:23 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:

> 2016-06-22 11:07 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
>
>> 2016-06-22 10:36 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
>>
>>> 2016-06-21 16:02 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>
>>> :
>>>
>>>> Hi all,
>>>>
>>>> I'm using a vtkCompositeTransferFunctionItem +
>>>> vtkCompositeControlPointsItem in a vtkChartXY to modify the transfer
>>>> functions used for some volume rendering.
>>>>
>>>> Is there some event from one of these items I can observe that will
>>>> fire once interaction has occurred? I know I can observe the ModifiedEvent
>>>> of the vtkCompositeTransferFunctionItem, but when dragging points around,
>>>> it will fire on each mouse move. I need to be notified only once the
>>>> interaction has stopped.
>>>>
>>>
>>> Looking at the code, I noticed that vtkControlPointsItem seem to emit
>>> vtkCommand::StartInteractionEvent and vtkCommand::EndInteractionEvent
>>> (though I'm not sure...), and since vtkCompositeControlPointsItem
>>> indirectly inherits vtkControlPointsItem, I tried to observe
>>> vtkCommand::EndInteractionEvent with
>>>
>>>         self._pointsItem.AddObserver(vtkCommand.EndInteractionEvent,
>>>                                      lambda *_: print('interaction
>>> ended'))
>>>
>>> where self._pointsItem is my vtkCompositeControlPointsItem.
>>>
>>> But it seems the event is not emitted when I interact with the points.
>>>
>>> Any ideas here? Surely there must be some way of being notified when
>>> interaction with the color transfer functions has ended? My use case is
>>> that I don't want to issue a re-render of my volume each time the mouse
>>> moves when dragging a point around. Only when dragging finally stops do I
>>> want to re-render.
>>>
>>> Any advice is much appriciated.
>>>
>>
>> After some more experimentation, trying to observe various events on the
>> items, the chart, the context view and the context scene, I've realized I
>> can observe
>>
>> vtkCommand.LeftButtonReleaseEvent
>> vtkCommand.RightButtonReleaseEvent
>> vtkCommand.MiddleButtonReleaseEvent
>>
>> on the context scene. This will work as a workaround, but seems overly
>> liberal and complicated. Is there no single event on the composite control
>> points item or the composite transfer function item I could observe?
>>
>
> Although I realized now that this approach won't work, since for some
> reason, by the time I get the vtkCommand.MiddleButtonReleaseEvent, the
> point has not yet been deleted. So still looking for a proper solution.
>

Noone knows how this can be done? I noticed that ParaView also has this
behavior (that the rendering is updated on each mouse move when dragging a
point in the transfer function). For me, this will be too heavy :/ Only
once mouse movement stops do I want to re-render. But I can't seem to find
a way to do this when using these VTK-bundled transfer function editing
widgets.

Elvis


>
> Elvis
>
>
>>
>
>> Elvis
>>
>>
>>> Elvis
>>>
>>>
>>>> Thanks in advance,
>>>> Elvis
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160627/bffd6821/attachment.html>


More information about the vtkusers mailing list