前言:本博文为系列博文,尝试将vtk交互功能讲清楚,包括常用的接口分析、常用的交互逻辑以及常用的交互Widget。若各位小伙伴有需要请多多关注,也希望能给各位小伙伴有所帮助。vtkCommand作为callback/obseve交互模式的基类,提供了很多基础和可继承的方法,那么我们就从vtkCommand开始。
vtkCommand

描述:
vtkCommand是callback/obseve交互模式的一个实现。这个设计模式下,可以“观察”到对象(任何vtkObject的实例)触发的任何事件。例如:vtkRenderer在开始渲染时触发StartEvent事件,在结束渲染时触发EndEvent事件。事件观察者是通过在vtkObject中找到的AddObserver()方法添加的。AddObserver()除了需要一个事件id或名称外,还需要一个vtkCommand的实例(或子类)。请注意,vtkCommand意味着子类化,因此您可以打包支持回调所需的信息。
所有事件的处理在priority list列表中组织,可以通过设置AbortFlag变量截断特定事件的处理。使用AddObserver()方法设置优先级。缺省情况下,优先级为0,优先级相同的事件按照后发先处的顺序进行顺序处理。对于像3DWidget这类窗口来说,事件的ordering/aborting很重要。如果小部件被选中,它将处理一个事件(然后中止对该事件的进一步处理)。否则。该事件被传递以进行进一步处理。
当vtkObject的实例调用事件时,它也传递一个可选的void指针给callData。这个callData大多数时候是null。callData不是特定于事件类型,而是特定于调用特定事件的vtkObject类型。例如,vtkCommand::PickEvent由vtkProp使用nullptr callData调用,但由vtkInteractorStyleImage使用指向vtkInteractorStyleImage对象本身的指针调用。
通过non-nullptr触发的事件列表
| vtkCommand::ProgressEvent | -大多数对象返回一个指针,指向范围在0.0到1.0之间的双精度值 -Infovis/vtkFixedWidthTextReader返回一个指针,浮点值等于到目前为止读取的行数。 | 
| vtkCommand::ErrorEvent | - 返回const char*类型的错误信息。 | 
| vtkCommand::WarningEvent | - 返回const char*类型的错误信息。 | 
| vtkCommand::StartAnimationCueEvent | - 返回指向vtkAnimationCue::AnimationCueInfo的指针 | 
| vtkCommand::EndAnimationCueEvent | - 返回指向vtkAnimationCue::AnimationCueInfo的指针 | 
| vtkCommand::AnimationCueTickEvent | - 返回指向vtkAnimationCue::AnimationCueInfo的指针 | 
| vtkCommand::PickEvent | - Common/vtkProp返回nullptr - Rendering/vtkInteractorStyleImage返回指向自身的指针 | 
| vtkCommand::StartPickEvent | - Common/vtkProp返回nullptr - Rendering/vtkInteractorStyleImage返回指向自身的指针 | 
| vtkCommand::EndPickEvent | - Common/vtkProp返回nullptr - Rendering/vtkInteractorStyleImage返回指向自身的指针 | 
| vtkCommand::WrongTagEvent | - Parallel/vtkSocketCommunicator返回一个char* 类型的标签 | 
| vtkCommand::SelectionChangedEvent | - Views/vtkView返回空指针 - Views/vtkDataRepresentation返回一个指向vtkSelection的指针 - Rendering/ vtkInteractorStyleRubberBand2D在vtkInteractorStyleRubberBand2D ::SELECT_UNION或vtkInteractorStyleRubberBand2D ::SELECT_NORMAL时返回一个包含五个无符号的Int类型的矩阵 | 
| vtkCommand::AnnotationChangedEvent | - GUISupport/Qt/vtkQtAnnotationView返回一个指向vtkAnnotationLayers的指针 | 
| vtkCommand::PlacePointEvent | - Widgets/vtkSeedWidget返回一个指向int类型的指针,指向当前Handle的Number | 
| vtkCommand::DeletePointEvent | - Widgets/vtkSeedWidget返回一个指向int类型的指针,指向当前删除的Handle的Number | 
| vtkCommand::ResetWindowLevelEvent | - Widgets/vtkImagePlaneWidget返回两个double值(window和level) - Rendering/vtkInteractorStyleImage返回一个指向自身的指针 | 
| vtkCommand::StartWindowLevelEvent | - Widgets/vtkImagePlaneWidget返回两个double值(window和level) - Rendering/vtkInteractorStyleImage返回一个指向自身的指针 | 
| vtkCommand::EndWindowLevelEvent | - Widgets/vtkImagePlaneWidget返回两个double值(window和level) - Rendering/vtkInteractorStyleImage返回一个指向自身的指针 | 
| vtkCommand::WindowLevelEvent | - Widgets/vtkImagePlaneWidget返回两个double值(window和level) - Rendering/vtkInteractorStyleImage返回一个指向自身的指针 | 
| vtkCommand::CharEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QKeyEvent* | 
| vtkCommand::TimerEvent | - 大多数对象返回一个代表timer ID的Int类型 - Widgets/vtkHoverWidget返回nullptr | 
| vtkCommand::CreateTimerEvent | - Rendering/ vtkGenericRenderWindowInteractor返回一个Interesting类型代表timer的ID | 
| vtkCommand::DestroyTimerEvent | - Rendering/ vtkGenericRenderWindowInteractor返回一个Interesting类型代表timer的ID | 
| vtkCommand::UserEvent | - 大多数对象返回空指针 - Infovis/vtkInteractorStyleTreeMapHover返回一个vtkIdType的指针,代表pedigree id | 
| vtkCommand::KeyPressEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QKeyEvent* | 
| vtkCommand::KeyReleaseEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QKeyEvent* | 
| vtkCommand::LeftButtonPressEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::LeftButtonReleaseEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::MouseMoveEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::MouseWheelForwardEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QWheelEvent* | 
| vtkCommand::MouseWheelBackwardEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QWheelEvent* | 
| vtkCommand::RightButtonPressEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::RightButtonReleaseEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::MiddleButtonPressEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::MiddleButtonReleaseEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget返回QMouseEvent* | 
| vtkCommand::CursorChangedEvent | - 大多数对象返回一个指向表示形状的int型指针 - Rendering/vtkInteractorObserver 返回空指针 | 
| vtkCommand::ResetCameraEvent | - Rendering/vtkRenderer返回指向自己的指针 | 
| vtkCommand::ResetCameraClippingRangeEvent | - Rendering/vtkRenderer返回指向自己的指针 | 
| vtkCommand::ActiveCameraEvent | - Rendering/vtkRenderer返回指向当前活动相机的指针 | 
| vtkCommand::CreateCameraEvent | - Rendering/vtkRenderer返回指向新建相机的指针 | 
| vtkCommand::EnterEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget 返回一个QEvent* | 
| vtkCommand::LeaveEvent | - 大多数对象返回空指针 - GUISupport/Qt/ QVTKOpenGLStereoWidget 返回一个QEvent* | 
| vtkCommand::RenderWindowMessageEvent | - Rendering/ vtkWin32OpenGLRenderWindow 返回一个指向UINT的信息 | 
| vtkCommand::ComputeVisiblePropBoundsEvent | - Rendering/vtkRenderer返回指向自身的指针 | 
| QVTKOpenGLStereoWidget::ContextMenuEvent | - 返回GUISupport/Qt/ QVTKOpenGLStereoWidget的一个QDragEnterEvent* | 
| QVTKOpenGLStereoWidget::DragEnterEvent | - 返回GUISupport/Qt/ QVTKOpenGLStereoWidget的一个QDragEnterEvent* | 
| QVTKOpenGLStereoWidget::DragMoveEvent | - 返回GUISupport/Qt/ QVTKOpenGLStereoWidget的一个QDragMoveEvent* | 
| QVTKOpenGLStereoWidget::DragLeaveEvent | - 返回GUISupport/Qt/ QVTKOpenGLStereoWidget的一个QDragLeaveEvent* | 
| QVTKOpenGLStereoWidget::DropEvent | - 返回GUISupport/Qt/ QVTKOpenGLStereoWidget的一个QDropEvent* | 
| vtkCommand::ViewProgressEvent | - 返回View/vtkView的一个ViewProgressEventCallData* | 
| vtkCommand::VolumeMapperRenderProgressEvent | - 返回指向范围在0.0到1.0之间的double值 | 
| vtkCommand::VolumeMapperComputeGradientsProgressEvent | - 返回指向范围在0.0到1.0之间的double值 | 
| vtkCommand::TDxMotionEvent (TDx=3DConnexion) | vtkTDxMotionEventInfo* | 
| vtkCommand::TDxButtonPressEvent | 一个int*是按钮的编号 | 
| vtkCommand::TDxButtonReleaseEvent | 一个int*是按钮的编号 | 
| vtkCommand::UpdateShaderEvent | 当前正在使用的vtkOpenGLHelper* | 
| vtkCommand::FourthButtonPressEvent | - 大多数对象返回nullptr | 
| vtkCommand::FourthButtonReleaseEvent | - 大多数对象返回nullptr | 
| vtkCommand::FifthButtonPressEvent | - 大多数对象返回nullptr | 
| vtkCommand::FifthButtonReleaseEvent | - 大多数对象返回nullptr | 
| vtkCommand::ErrorEvent | vtkoutputwwindow使用' char char* '为错误信息触发 | 
| vtkCommand::WarningEvent | vtkoutputwwindow使用' char char* '为警告信息触发 | 
| vtkCommand::MessageEvent | vtkoutputwwindow使用' char char* '为信息文本触发 | 
| vtkCommand::TextEvent | vtkoutputwwindow使用' char char* '为文本触发 | 



















