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;
}
Пример #2
0
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;
}