QT & VTK 交互风格
QT & VTK Interaction Style
我正在使用VTK作为qvtkwidget来显示QT中的3D对象。我知道我可以通过修改自己的交互样式来更改其交互样式。我想分别通过右键单击和按住左键单击来旋转和移动对象。并尝试在头文件中制作修改后的交互样式类,但是在修改后的交互样式中使用其他类中声明的函数存在一些困难。这应该很简单。有谁知道这件事吗?
boxWidget.at(boxWidget.count()-1)->SetInput(reader->GetOutput());
boxWidget.at(boxWidget.count()-1)->SetScalingEnabled(0); //turn this on to be able to resize the model
boxWidget.at(boxWidget.count()-1)->SetRotationEnabled(0);
boxWidget.at(boxWidget.count()-1)->SetInteractor(this->ui->qvtkWidget->GetInteractor());
boxWidget.at(boxWidget.count()-1)->GetInteractor()->SetInteractorStyle(MyStyle::New()); /
BoxWidget是我试图应用"MyStyle"的对象以下是 MyStyle 类
class MyStyle : public vtkInteractorStyleTrackballCamera , public MainWindow
{
private:
unsigned int NumberOfClicks;
int PreviousPosition[2];
int ResetPixelDistance;
public:
static MyStyle *New();
vtkTypeMacro(MyStyle, vtkInteractorStyleTrackballCamera);
PeterStyle() : NumberOfClicks(0) , ResetPixelDistance(5)
{
this->PreviousPosition[0] = 0;
this->PreviousPosition[1] = 0;
}
virtual void OnLeftButtonDown()
{
qDebug() << "My Style Mouse Left Clicked";
//std::cout << "Pressed left mouse button." << std::endl;
this->NumberOfClicks++;
//std::cout << "NumberOfClicks = " << this->NumberOfClicks << std::endl;
int pickPosition[2];
this->GetInteractor()->GetEventPosition(pickPosition);
int xdist = pickPosition[0] - this->PreviousPosition[0];
int ydist = pickPosition[1] - this->PreviousPosition[1];
this->PreviousPosition[0] = pickPosition[0];
this->PreviousPosition[1] = pickPosition[1];
int moveDistance = (int)sqrt((double)(xdist*xdist + ydist*ydist));
// Reset numClicks - If mouse moved further than resetPixelDistance
if(moveDistance > this->ResetPixelDistance)
{
this->NumberOfClicks = 1;
}
if(this->NumberOfClicks == 2)
{
vtkSmartPointer<vtkCamera> camera =
vtkSmartPointer<vtkCamera>::New();
camera->SetPosition(140.0, 155.0, 590.0);
camera->SetFocalPoint(140.0, 155.0, 0.0);
camera->SetClippingRange(590.0, 600.0);
this->GetCurrentRenderer()->SetActiveCamera(camera);
qDebug() << "Double clicked.";
this->NumberOfClicks = 0;
}
// forward events
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
我不知道要更改什么才能通过左键单击移动对象。
如果您只想使用左键移动对象,则不需要对自己的交互样式进行子类化,vtk
已经实现了vtkInteractorStyleTrackballActor
样式,允许通过鼠标控制演员,而无需与摄像机交互。然后,您可以覆盖它以执行任何您想要的操作。
相关文章:
- Qt VTK交互风格的信号到小部件
- 我可以使用条件运算符初始化C风格的字符串文字吗
- Visual Studio 2019:插入多个C++风格的单行注释
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- Qt Quick-如何仅从c++代码与qml属性交互
- 复制和交换习惯用法与移动操作之间的交互
- 重载运算符<<采用谷歌 C++ 风格
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- C++许多 SFINAE 风格的过载
- Qt QGraphicsProxyWidget 与 QGraphicsScene 的交互
- 谷歌风格指南(前向分枝部分)
- 使用 Python 事件并与 C++ 交互
- 函数-本地枚举声明和 ADL 的交互
- 如何使用 cmake pack redhat 风格的 rpm,这是主要的和"-devel"?
- 如何在扩展的QQuickItem中与模型交互
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 寻找C++中数组和cout交互的解决方案
- 如何编写一个类似于kernellist_head的c++风格的双链表实现
- C++继承和"常量"交互的问题
- QT & VTK 交互风格