handler toggle 1,2,3 keys
This commit is contained in:
@@ -68,6 +68,9 @@ vtkHandlerWidget::vtkHandlerWidget() {
|
||||
this->m_OverlayRenderer->EraseOff();
|
||||
this->m_OverlayRenderer->InteractiveOff();
|
||||
this->Priority = 50.0; // Higher priority to beat camera style
|
||||
this->m_TranslationEnabled = true;
|
||||
this->m_RotationEnabled = true;
|
||||
this->m_ScalingEnabled = true;
|
||||
this->CreateGizmos();
|
||||
}
|
||||
|
||||
@@ -131,6 +134,8 @@ void vtkHandlerWidget::SetEnabled(int enabling) {
|
||||
this->m_OverlayRenderer->AddActor(m_ScaleY);
|
||||
this->m_OverlayRenderer->AddActor(m_ScaleZ);
|
||||
|
||||
this->UpdateVisibility();
|
||||
|
||||
this->InvokeEvent(::vtkCommand::EnableEvent, nullptr);
|
||||
} else {
|
||||
if (!this->Enabled)
|
||||
@@ -454,6 +459,63 @@ void vtkHandlerWidget::PlaceWidget(double bounds[6]) {
|
||||
this->UpdateGizmoPosition();
|
||||
}
|
||||
|
||||
void vtkHandlerWidget::SetTranslationEnabled(bool enabled) {
|
||||
this->m_TranslationEnabled = enabled;
|
||||
this->UpdateVisibility();
|
||||
if (this->Interactor) this->Interactor->Render();
|
||||
}
|
||||
|
||||
void vtkHandlerWidget::SetRotationEnabled(bool enabled) {
|
||||
this->m_RotationEnabled = enabled;
|
||||
this->UpdateVisibility();
|
||||
if (this->Interactor) this->Interactor->Render();
|
||||
}
|
||||
|
||||
void vtkHandlerWidget::SetScalingEnabled(bool enabled) {
|
||||
this->m_ScalingEnabled = enabled;
|
||||
this->UpdateVisibility();
|
||||
if (this->Interactor) this->Interactor->Render();
|
||||
}
|
||||
|
||||
void vtkHandlerWidget::UpdateVisibility() {
|
||||
if (!m_AxesX) return;
|
||||
|
||||
m_AxesX->SetVisibility(m_TranslationEnabled);
|
||||
m_AxesY->SetVisibility(m_TranslationEnabled);
|
||||
m_AxesZ->SetVisibility(m_TranslationEnabled);
|
||||
|
||||
m_RotX->SetVisibility(m_RotationEnabled);
|
||||
m_RotY->SetVisibility(m_RotationEnabled);
|
||||
m_RotZ->SetVisibility(m_RotationEnabled);
|
||||
m_RotCam->SetVisibility(m_RotationEnabled);
|
||||
|
||||
m_ScaleX->SetVisibility(m_ScalingEnabled);
|
||||
m_ScaleY->SetVisibility(m_ScalingEnabled);
|
||||
m_ScaleZ->SetVisibility(m_ScalingEnabled);
|
||||
|
||||
// Update picker list
|
||||
if (m_Picker) {
|
||||
m_Picker->InitializePickList();
|
||||
if (m_TranslationEnabled) {
|
||||
m_Picker->AddPickList(m_AxesX);
|
||||
m_Picker->AddPickList(m_AxesY);
|
||||
m_Picker->AddPickList(m_AxesZ);
|
||||
}
|
||||
if (m_RotationEnabled) {
|
||||
m_Picker->AddPickList(m_RotX);
|
||||
m_Picker->AddPickList(m_RotY);
|
||||
m_Picker->AddPickList(m_RotZ);
|
||||
m_Picker->AddPickList(m_RotCam);
|
||||
}
|
||||
if (m_ScalingEnabled) {
|
||||
m_Picker->AddPickList(m_ScaleX);
|
||||
m_Picker->AddPickList(m_ScaleY);
|
||||
m_Picker->AddPickList(m_ScaleZ);
|
||||
}
|
||||
m_Picker->PickFromListOn();
|
||||
}
|
||||
}
|
||||
|
||||
void vtkHandlerWidget::PlaceWidget() { this->UpdateGizmoPosition(); }
|
||||
|
||||
void vtkHandlerWidget::SetTransform(::vtkTransform *t) {
|
||||
|
||||
@@ -99,14 +99,25 @@ public:
|
||||
void GetTransform(::vtkTransform *t);
|
||||
|
||||
::vtkRenderer *GetOverlayRenderer() { return this->m_OverlayRenderer; }
|
||||
|
||||
void SetTranslationEnabled(bool enabled);
|
||||
bool GetTranslationEnabled() const { return m_TranslationEnabled; }
|
||||
void SetRotationEnabled(bool enabled);
|
||||
bool GetRotationEnabled() const { return m_RotationEnabled; }
|
||||
void SetScalingEnabled(bool enabled);
|
||||
bool GetScalingEnabled() const { return m_ScalingEnabled; }
|
||||
|
||||
protected:
|
||||
void CreateGizmos();
|
||||
void UpdateGizmoPosition();
|
||||
void Highlight(::vtkProp *prop);
|
||||
void UpdateVisibility();
|
||||
|
||||
vtkSmartPointer<::vtkRenderer> m_OverlayRenderer;
|
||||
ReferenceFrame m_Frame;
|
||||
bool m_TranslationEnabled;
|
||||
bool m_RotationEnabled;
|
||||
bool m_ScalingEnabled;
|
||||
|
||||
int Interaction;
|
||||
::vtkProp *m_HighlightedProp;
|
||||
|
||||
@@ -192,7 +192,7 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
// Keyboard events for widget coordinate frame
|
||||
m_KeyCallback = vtkSmartPointer<vtkCallbackCommand>::New();
|
||||
m_KeyCallback->SetClientData(this);
|
||||
m_KeyCallback->SetCallback([](vtkObject* caller, unsigned long, void* clientdata, void*){
|
||||
m_KeyCallback->SetCallback([](vtkObject* caller, unsigned long event, void* clientdata, void*){
|
||||
auto* iren = static_cast<vtkRenderWindowInteractor*>(caller);
|
||||
auto* self = static_cast<Viewport*>(clientdata);
|
||||
|
||||
@@ -201,29 +201,57 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
|
||||
if (self->m_HandlerWidget && self->m_HandlerWidget->GetEnabled()) {
|
||||
if (key == "l") {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::LOCAL);
|
||||
std::cout << "Widget Frame: LOCAL" << std::endl;
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::LOCAL);
|
||||
std::cout << "Widget Frame: LOCAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "g") {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::GLOBAL);
|
||||
std::cout << "Widget Frame: GLOBAL" << std::endl;
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::GLOBAL);
|
||||
std::cout << "Widget Frame: GLOBAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "c") {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER);
|
||||
std::cout << "Widget Frame: CENTER" << std::endl;
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER);
|
||||
std::cout << "Widget Frame: CENTER" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "k") {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER_LOCAL);
|
||||
std::cout << "Widget Frame: CENTER_LOCAL" << std::endl;
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER_LOCAL);
|
||||
std::cout << "Widget Frame: CENTER_LOCAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "1") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetTranslationEnabled(!self->m_HandlerWidget->GetTranslationEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "2") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetRotationEnabled(!self->m_HandlerWidget->GetRotationEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "3") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->m_HandlerWidget->SetScalingEnabled(!self->m_HandlerWidget->GetScalingEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (key == "f") {
|
||||
self->ZoomSelected();
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->ZoomSelected();
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user