关于interactorStyle

该博客介绍了如何在vtk中通过鼠标操作实现相机视角的平移、缩放、旋转和中心点旋转。通过设置不同的鼠标按钮和组合键,可以分别控制vtkMouseCameraTrackball系列的四种操纵器,实现对3D场景的精细交互控制。
vtkMouseCameraTrackballPanManipulator  平移
vtkMouseCameraTrackballZoomManipulator  缩放
vtkMouseCameraTrackballRollManipulator  中心点旋转vtkMouseCameraTrackballRotateManipulator  整体旋转vtkMouseCameraTrackballZoomToMouseManipulator  缩放


const interactorStyle = vtkInteractorStyleManipulator.newInstance();
fullScreenRenderer.getInteractor().setInteractorStyle(interactorStyle);
const manipulator = vtkMouseCameraTrackballRotateManipulator.newInstance();
setButton的值为1,2,3;1为鼠标左键,2为鼠标滚轮,3为鼠标右键
manipulator.setButton(1);
setShift,setControl,setAlt键的值默认为false,如只设置setShift为true时,我们点击鼠标对应键时再按住shift键即能让效果生效;其alt,ctrl键同理;
当我们设置两个值为true时需要同时按住两个对应的键再按住鼠标对应设置值进行拖动才能让功能生效
manipulator.setShift(false);
manipulator.setControl(false);
manipulator.setAlt(false);
interactorStyle.addMouseManipulator(manipulator);
``` #pragma once #include "esvtkgenericwidgets_global.h" #include <QWidget> #include <QResizeEvent> #include <QShowEvent> #include "QVTKOpenGLNativeWidget.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkCornerAnnotation.h" #include "vtkEventQtSlotConnect.h" #include "vtkImageData.h" #include "vtkLegendScaleActor.h" extern ESVTKGENERICWIDGETS_EXPORT QString Global_VTK_TextFontFilePath; class esLoupeBrowser; class ESVTKGENERICWIDGETS_EXPORT esVTKWidgetBase : public QWidget { Q_OBJECT public: enum class WindowFillType//注意:windowSize需要在窗口展示后才有值 { NoFill=-1, //不铺满 FillMin,//自适应长宽中小的 FillMax,//自适应长宽中大的 FillHeight,//高铺满 FillWidth//宽铺满 }; esVTKWidgetBase(QWidget *parent=NULL); ~esVTKWidgetBase(); QVTKOpenGLNativeWidget*GetVtkWidget(); virtual void SetCustomWinId(int customWinId); virtual int GetCustomWinId(); protected: //bool eventFilter(QObject *watched, QEvent *event); virtual void showEvent(QShowEvent *) override; /*********************************************************************** //基础信息 ***********************************************************************/ public: virtual void UpdateShow(); virtual void ClearShow(); virtual void ResetCamera(WindowFillType fillType= WindowFillType::FillMin) = 0; vtkRenderWindow*GetRenderWindow(); vtkRenderWindowInteractor* GetInteractor(); vtkRenderer*GetRender(); //vtkRenderer*GetBackRender(); bool GetWidgetActiveFlag(); bool GetIsShowFlag(); void SetInteractorStyle(vtkInteractorObserver*style); private slots: void WidgetActive_Slot(); private: void InitBase(); /*********************************************************************** //边角信息 ***********************************************************************/ public: void SetAnnotationVisibility(bool flag); bool GetAnnotationVisibility(); void SetAnnotationText(int i, QString text); QString GetAnnotationText(int i); void SetAnnotationFontFilePath(QString path); virtual void SetSliceOrienInfoVisibility(bool flag); private: void InitCornerInfo(); /*********************************************************************** //放大镜 ***********************************************************************/ public: void SetLoupeBrowserEnabled(bool flag); void SetLoupeBrowserSize(int width, int height); void SetLoupeBrowserScaleRatio(double x,double y); private: void InitLoupeBrowser(); /*********************************************************************** //截图 ***********************************************************************/ public: static vtkImageData*ScreenShot(vtkRenderWindow*renderWindow); static void ScreenShot(vtkRenderWindow*renderWindow, QString filePath); /*********************************************************************** //比例尺 ***********************************************************************/ public: void SetLegendScaleVisibility(bool flag); bool GetLegendScaleVisibility(); private: void InitLegendScale(); protected: vtkLegendScaleActor* m_legendScaleActor; /*********************************************************************** //缩放比例 ***********************************************************************/ public: static double GetFillWindowScale(vtkCamera*camera,int sliceOrien, int dims[3], int windowSize[2], double spacing[3], WindowFillType fillType); static void GetPlaneAxisId(int sliceOrien, int planeAxisId[2]);//0:[1,2] 1:[0,2] 2:[0,1] //double GetScale(); signals: void mouseEvent(QMouseEvent* event); void WidgetActive_Signal(); protected: int m_customWinId; vtkRenderer*m_render; //vtkRenderer*m_backrender; QVTKOpenGLNativeWidget*m_vtkWidget; vtkCornerAnnotation*m_cornerAnnotation; vtkEventQtSlotConnect*m_slotConnect; bool m_widgetActiveFlag; bool m_IsShowFlag; esLoupeBrowser*m_loupeBrowser; vtkInteractorObserver*m_interactorStyle; bool m_resetCameraLater; WindowFillType m_resetCameraFillType; };```分析这个类的功能
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值