glc::WidgetEventFlag GLC_CuttingPlane::mouseReleased(Qt::MouseButton button) { glc::WidgetEventFlag returnFlag= glc::IgnoreEvent; if ((button == Qt::LeftButton) && (m_SelectionIndex != -1)) { // get selected instance index if (m_CurrentManipulator == TranslationManipulator) { GLC_3DWidget::set3DViewInstanceVisibility(1, false); GLC_3DWidget::set3DViewInstanceVisibility(2, true); GLC_3DWidget::set3DViewInstanceVisibility(3, true); GLC_3DWidget::set3DViewInstanceVisibility(4, true); returnFlag= glc::BlockedEvent; m_CurrentManipulator= RotationManipulator; delete m_pCurrentManipulator; m_pCurrentManipulator= NULL; moveManipulatorRep(m_CurrentNavigatorPosition); } else if (m_CurrentManipulator == RotationManipulator) { GLC_3DWidget::set3DViewInstanceVisibility(1, true); GLC_3DWidget::set3DViewInstanceVisibility(2, false); GLC_3DWidget::set3DViewInstanceVisibility(3, false); GLC_3DWidget::set3DViewInstanceVisibility(4, false); returnFlag= glc::BlockedEvent; m_CurrentManipulator= TranslationManipulator; delete m_pCurrentManipulator; GLC_Viewport* pViewport= GLC_3DWidget::widgetManagerHandle()->viewport(); m_pCurrentManipulator= new GLC_PullManipulator(pViewport, m_Normal); m_pCurrentManipulator->enterManipulateState(m_CurrentNavigatorPosition); moveManipulatorRep(m_CurrentNavigatorPosition); } m_SelectionIndex= -1; } return returnFlag; }
void GLC_CuttingPlane::updateWidgetRep() { const double viewTangent= GLC_3DWidget::widgetManagerHandle()->viewportTangent(); const GLC_Point3d eye(GLC_3DWidget::widgetManagerHandle()->cameraHandle()->eye()); const double distanceToNormal= (m_CurrentNavigatorPosition - eye).length(); const double viewWidth= distanceToNormal * viewTangent; m_ScaleFactor= viewWidth * 0.1; m_ManipulatorOffsetFactor= m_ScaleFactor * (-0.01); moveManipulatorRep(m_CurrentNavigatorPosition); }
glc::WidgetEventFlag GLC_CuttingPlane::mouseMove(const GLC_Point3d& pos, Qt::MouseButtons button, GLC_uint) { glc::WidgetEventFlag returnFlag= glc::IgnoreEvent; if (button & Qt::LeftButton) { if (NULL != m_pCurrentManipulator) { if (m_SelectionIndex != -1) { moveManipulatorRep(m_CurrentNavigatorPosition); m_SelectionIndex= -1; } GLC_Matrix4x4 moveMatrix(m_pCurrentManipulator->manipulate(pos)); // Update plane normal if (m_CurrentManipulator == RotationManipulator) { m_Normal= moveMatrix.rotationMatrix() * m_Normal; } m_CompMatrix= moveMatrix * m_CompMatrix; m_Center= moveMatrix * m_Center; m_CurrentNavigatorPosition= moveMatrix * m_CurrentNavigatorPosition; // Update the instance for (int i= 0; i < 5; ++i) { GLC_3DWidget::instanceHandle(i)->multMatrix(moveMatrix); } // Plane throw intersection and plane normal and camera up vector m_pCurrentManipulator->enterManipulateState(m_pCurrentManipulator->previousPosition()); emit asChanged(); returnFlag= glc::AcceptEvent; } } return returnFlag; }