QT에서 3D 개체를 표시하기 위해 VTK를 qvtkwidget으로 사용하고 있습니다. 나 자신의 수정 된 상호 작용 스타일을 만들어 상호 작용 스타일을 변경할 수 있음을 알고 있습니다. 마우스 오른쪽 버튼을 누른 상태에서 왼쪽 마우스를 클릭하여 객체를 회전시키고 움직여야합니다. 그리고 헤더 파일에 수정 된 상호 작용 스타일 클래스를 만들려고했지만 수정 된 상호 작용 스타일에서 다른 클래스에 선언 된 함수를 사용하는 데 어려움이 있습니다. 이것은 간단해야합니다. 누구든지이 사실을 알고 있습니까? QT 및 VTK 상호 작용 스타일
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' 을 적용하려고하는 객체입니다 그리고 다음은 내가 leftclick으로 객체를 이동하도록 변경해야할지 모르는 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();
}
입니다.
나는 이것을 할 필요가있을 때 (5 년 이상 전에) 자신의 상호 작용 스타일을 만들었습니다. 어쩌면 당신은 자신의 상호 작용 방식으로 무엇을했는지와 그 문제가 무엇인지 보여 주어야합니다. – drescherjm
왼쪽 클릭을 vtkInteractorStyleTrackballCamera로 전달하지 않거나 최소한 조건에 따라이 작업을 수행 할 수 있습니다. – drescherjm