bool reTranslateTool::OnMouseDown(wxMouseEvent& event, rwxGLCanvas* canvas){ reToolBase::OnMouseDown(event, canvas); rActor3* actor = PickActor(event, canvas); if (actor){ m_selectedAxis = m_gizmo->GetGizmoAxis(actor); if (m_selectedAxis == reGizmoAxis::NONE){ bool result = DoActorSelection(actor, event); m_gizmo->Update(); } else{ m_gizmo->Update(); SetDragPlaneFromSelectedAxis(); GetWorldSpaceDragPosition(canvas, m_previousWorldPosition); m_command = new reTranslateCommand(m_component->SelectionManager()->GetSelection(), m_component); } return true; } else{ m_gizmo->SetVisibility(false); return DoClearSelection(); } }
bool reTranslateTool::OnMouseDown(wxMouseEvent& event, rwxGLCanvas* canvas){ reToolBase::OnMouseDown(event, canvas); m_component->GetEngine()->viewports->SetActiveViewport(canvas->GetViewport()); m_gizmo->Update(); rRay3 selectionRay = GetSelectionRay(event, canvas); m_selectedAxis = m_gizmo->PickAxis(selectionRay); if (m_selectedAxis != reGizmoAxis::NONE) { m_gizmo->HighlightAxis(m_selectedAxis); m_gizmo->Update(); m_dragPlane = reToolBase::GetDragPlaneFromRay(selectionRay, m_gizmo->GetPosition()); GetWorldSpaceDragPosition(canvas, m_previousWorldPosition); m_command = new reTranslateCommand(m_component->SelectionManager()->GetSelection(), m_component); return true; } else { rActor3* actor = PickActor(event, canvas); if (actor) { bool result = DoActorSelection(actor, event); m_gizmo->Update(); return true; } else { m_gizmo->SetVisibility(false); return DoClearSelection(); } } }
bool reTranslateTool::OnMouseMotion(wxMouseEvent& event, rwxGLCanvas* canvas){ reToolBase::OnMouseMotion(event, canvas); m_component->GetEngine()->viewports->SetActiveViewport(canvas->GetViewport()); if (m_selectedAxis == reGizmoAxis::NONE){ return false; } else{ rVector3 currentWorldSpacePosition; GetWorldSpaceDragPosition(canvas, currentWorldSpacePosition); rVector3 delta = currentWorldSpacePosition - m_previousWorldPosition; switch (m_selectedAxis){ case reGizmoAxis::X: delta.Set(delta.x, 0.0f, 0.0f); break; case reGizmoAxis::Y: delta.Set(0.0f, delta.y, 0.0f); break; case reGizmoAxis::Z: delta.Set(0.0f, 0.0f, delta.z); break; } m_command->Update(delta); m_gizmo->Update(); rEvent event; m_component->Trigger(reExternalPropertyChange, event); m_previousWorldPosition = currentWorldSpacePosition; return true; } }