Можно ли изменить стиль интерактора vtkRenderWindowInteractor во время выполнения? Я попытался изменить его с стиля 2D-интерактора на стиль 3D-интерактора, и он не работает ... и мне интересно, возможно ли это ...
У меня в начале программы на InitialUpdate :
m_pInteractor->SetInteractorStyle(vtkInteractorStyleImage::New());
, где m_pInteractor имеет тип vtkRenderWindowInteractor .
и где-то, при некотором событии кнопки:
m_pInteractor->SetInteractorStyle(vtkInteractorStyleTrackballCamera::New());
но кажется, что m_pInteractor имеет тот же тип vtkInteractorStyleImage , а не vtkInteractorStyleTrackballCamera тип.
Мне действительно нужен этот переключатель… этовозможно ? И если это так, как я могу сделать это переключение?
Позже отредактируйте:
Я попытался извлечь класс из vtkInteractorStyleSwitch и там переключиться между vtkInteractorStyleImage и vtkInteractorStyleVolume (получено из vtkInteractorStyleTrackballCamera ):
Вот код (заголовок):
#define VTKIS_JOYSTICKIMAGE 0
#define VTKIS_JOYSTICKVOLUME 1
class vtkInteractorStyleSwitchEx : public vtkInteractorStyleSwitch
{
public:
static vtkInteractorStyleSwitchEx* New() { return new vtkInteractorStyleSwitchEx; }
vtkTypeMacro(vtkInteractorStyleSwitchEx, vtkInteractorStyleSwitch);
public:
void SetCurrentStyleToJoystickImage();
void SetCurrentStyleToJoystickVolume();
protected:
vtkInteractorStyleImage* m_pJoystickImage;
vtkInteractorStyleVolume* m_pJoystickVolume;
protected:
virtual ~vtkInteractorStyleSwitchEx();
void SetCurrentStyle();
private:
int m_nJoystickType;
private:
vtkInteractorStyleSwitchEx();
vtkInteractorStyleSwitchEx(const vtkInteractorStyleSwitchEx& rhs) = delete;
void operator=(const vtkInteractorStyleSwitchEx& rhs) = delete;
};
иреализация:
#include "StdAfx.h"
#include "vtkInteractorStyleSwitchEx.h"
vtkInteractorStyleSwitchEx::vtkInteractorStyleSwitchEx()
:m_nJoystickType(VTKIS_JOYSTICKIMAGE)
{
m_pJoystickImage = vtkInteractorStyleImage::New();
m_pJoystickVolume = vtkInteractorStyleVolume::New();
}
vtkInteractorStyleSwitchEx::~vtkInteractorStyleSwitchEx()
{
m_pJoystickImage->Delete();
m_pJoystickImage = nullptr;
m_pJoystickVolume->Delete();
m_pJoystickVolume = nullptr;
}
void vtkInteractorStyleSwitchEx::SetCurrentStyleToJoystickImage()
{
if (VTKIS_JOYSTICKIMAGE != m_nJoystickType)
m_nJoystickType = VTKIS_JOYSTICKIMAGE;
SetCurrentStyle();
}
void vtkInteractorStyleSwitchEx::SetCurrentStyleToJoystickVolume()
{
if (VTKIS_JOYSTICKVOLUME != m_nJoystickType)
m_nJoystickType = VTKIS_JOYSTICKVOLUME;
SetCurrentStyle();
}
void vtkInteractorStyleSwitchEx::SetCurrentStyle()
{
switch (m_nJoystickType)
{
case VTKIS_JOYSTICKIMAGE:
if (this->CurrentStyle != this->m_pJoystickImage)
{
if (this->CurrentStyle)
this->CurrentStyle = nullptr;
this->CurrentStyle = m_pJoystickImage;
}
break;
case VTKIS_JOYSTICKVOLUME:
if (this->CurrentStyle != this->m_pJoystickVolume)
{
if (this->CurrentStyle)
this->CurrentStyle = nullptr;
this->CurrentStyle = m_pJoystickVolume;
}
break;
default:
break;
}
if (this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(this->Interactor);
this->CurrentStyle->SetTDxStyle(this->TDxStyle);
}
}
Но, даже если я позвоню:
m_pInteractor->SetInteractorStyle(m_pInteractorStyleSwitch);
m_pInteractorStyleSwitch->SetCurrentStyleToJoystickImage();
, где m_pInteractor равно
vtkRenderWindowInteractor * m_pInteractor;
и m_pInteractorStyleSwitch is
vtkInteractorStyleSwitchEx * m_pInteractorStyleSwitch;
У меня все еще нет функциональности переключателя (стиль переключателя)
Есть ли шанспереключить стиль интерактора во время выполнения? Вы встречали это задание раньше?