[vtkusers] How do I modify the interaction behavior for the vtkContourWidget?
kent williams
nkwmailinglists at gmail.com
Fri Dec 14 14:47:28 EST 2007
Really, I only ask these dumb questions after I poke around the
documentation and code examples and google for answers ;-)
I have made some good progress on my 3D Image tracer application. The
program now can load a 3D volume, and allow a user to trace anatomical
features slice by slice, with one or more contours.
I currently hook the vtkContourWidgets to a vtkViewImage2D widget
(from the vtkinria3d toolkit:
http://www-sop.inria.fr/asclepios/software/vtkINRIA3D/
Everything works great EXCEPT -- the vtkContourWidget reacts to some
of the same events as the vtkViewImage2D widget. I'm able to turn
off all but the essential event handling in the View -- zoom and pan,
which is bound to the right mouse button.
So first off I want to move the AddFinalPointAction binding from the
right mouse button, or change it to Control->RightMouseButton.
Secondly the vtkContourWidget::DeleteAction method is bound thusly in
vtkContourWidget:
this->CallbackMapper->SetCallbackMethod(vtkCommand::KeyPressEvent,
vtkEvent::NoModifier, 47, 1, NULL,
vtkWidgetEvent::Delete,
this, vtkContourWidget::DeleteAction);
this->CallbackMapper->SetCallbackMethod(vtkCommand::CharEvent,
vtkEvent::NoModifier, 47, 1, NULL,
vtkWidgetEvent::Delete,
this, vtkContourWidget::DeleteAction);
What this ends up doing, as I've discovered from experimentation, is
that any time the Ctrl, (Alt/Option) (OpenApple/Cloverleaf), or Shift
keys is pressed, the last point of an open contour, or the currently
selected point of a closed contour, gets deleted. This seems to me to
be pretty end-user-confusing. Those are all buttons that can get
pressed accidentally, and normally, being pressed by themselves has
null effect. Where by 'normally' I mean 'in nearly every other
program that runs on a computer.' Furthermore the DART Man Page for
vtkContourWidget says that the vtkContourWidget::DeleteAction is bound
to the 'Delete' key.
So I'd like to have something like 'F1' or 'Alt-something-or-other'
mapped to the vtkContourWidget::AddFinalPointAction action, and
'Delete' or 'Ctrl-something-or-Other' I kind of see how to do this by
messing with the vtkWidgetEventTranslator, but I'm a little baffled by
how exactly what the magic incantation to do this is. Pointers to
examples, or discussion, is welcome. Thanks!
More information about the vtkusers
mailing list