Ejemplo n.º 1
0
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();
	}
}
Ejemplo n.º 2
0
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();
		}
	}
}
Ejemplo n.º 3
0
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;
	}
}