void Interactor2DMeasure::UpdateCursor( wxEvent& event, wxWindow* wnd ) { RenderView2D* view = ( RenderView2D* )wnd; if ( wnd->FindFocus() == wnd ) { if ( event.IsKindOf( CLASSINFO( wxMouseEvent ) ) ) { wxMouseEvent* e = ( wxMouseEvent* )&event; if ( ( ( e->MiddleDown() || e->RightDown() ) && !m_bEditing ) || ( e->CmdDown() && e->ShiftDown() ) ) { Interactor2D::UpdateCursor( event, wnd ); return; } else if ( ( !m_bEditing && !m_bDrawing && view->GetRegion( e->GetX(), e->GetY() ) ) || ( m_bEditing && m_nPointIndex < 0 ) ) { wnd->SetCursor( CursorFactory::CursorGrab ); } else { if ( m_nAction == MM_Line ) wnd->SetCursor( CursorFactory::CursorMeasureLine ); else if ( m_nAction == MM_Rectangle ) wnd->SetCursor( CursorFactory::CursorMeasureRectangle ); else if ( m_nAction == MM_Polyline || m_nAction == MM_Spline ) wnd->SetCursor( CursorFactory::CursorMeasurePolyline ); } } } else Interactor2D::UpdateCursor( event, wnd ); }
void Interactor2DMeasure::UpdateCursor( QEvent* event, QWidget* wnd ) { RenderView2D* view = ( RenderView2D* )wnd; if ( wnd->hasFocus() ) { if ( event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::MouseMove) { QMouseEvent* e = ( QMouseEvent* )event; if ( ( ( e->button() == Qt::MidButton || e->button() == Qt::RightButton ) && !m_bEditing ) || ( ( e->modifiers() & CONTROL_MODIFIER) && (e->modifiers() & Qt::ShiftModifier) ) ) { Interactor2D::UpdateCursor( event, wnd ); return; } else if ( ( !m_bEditing && !m_bDrawing && view->GetRegion( e->x(), e->y() ) ) || ( m_bEditing && m_nPointIndex < 0 ) ) { wnd->setCursor( CursorFactory::CursorGrab ); } else { if ( m_nAction == MM_Line ) { wnd->setCursor( CursorFactory::CursorMeasureLine ); } else if ( m_nAction == MM_Rectangle ) { wnd->setCursor( CursorFactory::CursorMeasureRectangle ); } else if ( m_nAction == MM_Polyline || m_nAction == MM_Spline ) { wnd->setCursor( CursorFactory::CursorMeasurePolyline ); } } } } else { Interactor2D::UpdateCursor( event, wnd ); } }
bool Interactor2DMeasure::ProcessMouseDownEvent( QMouseEvent* event, RenderView* renderview ) { RenderView2D* view = ( RenderView2D* )renderview; // UpdateCursor( event, view ); if ( m_region && !m_bDrawing && !m_bEditing ) { m_region->Highlight( false ); } if ( event->button() == Qt::LeftButton ) { if ( ( event->modifiers() & CONTROL_MODIFIER ) && ( event->modifiers() & Qt::ShiftModifier ) ) { return Interactor2D::ProcessMouseDownEvent( event, renderview ); } LayerCollection* lc = MainWindow::GetMainWindow()->GetLayerCollection( "MRI" ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); if ( mri ) { m_nMousePosX = event->x(); m_nMousePosY = event->y(); if ( m_region && m_bDrawing ) // drawing { ((Region2DPolyline*)m_region)->AddPoint( m_nMousePosX, m_nMousePosY ); } else { Region2D* reg = view->GetRegion( m_nMousePosX, m_nMousePosY, &m_nPointIndex ); if ( !reg ) // new region { if ( m_nAction == MM_Line ) { Region2DLine* reg_line = new Region2DLine( view ); reg_line->SetLine( m_nMousePosX, m_nMousePosY, m_nMousePosX, m_nMousePosY ); view->AddRegion( reg_line ); m_region = reg_line; } else if ( m_nAction == MM_Spline || m_nAction == MM_Polyline ) { Region2DPolyline* reg_polyline = new Region2DPolyline( view, m_nAction == MM_Spline ); reg_polyline->AddPoint( m_nMousePosX, m_nMousePosY ); reg_polyline->AddPoint( m_nMousePosX, m_nMousePosY ); // add second point view->AddRegion( reg_polyline ); m_region = reg_polyline; } else if ( m_nAction == MM_Rectangle ) { Region2DRectangle* reg_rect = new Region2DRectangle( view ); reg_rect->SetRect( m_nMousePosX, m_nMousePosY, 1, 1 ); view->AddRegion( reg_rect ); m_region = reg_rect; } m_bDrawing = true; } else // editing { m_region = reg; m_bEditing = true; m_region->Highlight(); view->EmitRegionSelected( reg ); view->RequestRedraw(); } } return false; } } else if ( event->button() == Qt::RightButton ) { if ( m_bDrawing && m_region ) { m_bDrawing = false; m_bEditing = false; if ( m_nAction == MM_Spline || m_nAction == MM_Polyline ) { ((Region2DPolyline*)m_region)->RemoveLastPoint(); } view->RequestRedraw(); return false; } } return Interactor2D::ProcessMouseDownEvent( event, renderview ); // pass down the event }
bool Interactor2DMeasure::ProcessMouseDownEvent( wxMouseEvent& event, RenderView* renderview ) { RenderView2D* view = ( RenderView2D* )renderview; // UpdateCursor( event, view ); if ( m_region && !m_bDrawing && !m_bEditing ) m_region->Highlight( false ); if ( event.LeftDown() ) { if ( event.CmdDown() && event.ShiftDown() ) return Interactor2D::ProcessMouseDownEvent( event, renderview ); LayerCollection* lc = MainWindow::GetMainWindowPointer()->GetLayerCollectionManager()->GetLayerCollection( "MRI" ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); if ( mri ) { m_nMousePosX = event.GetX(); m_nMousePosY = event.GetY(); Region2D* reg = view->GetRegion( m_nMousePosX, m_nMousePosY, &m_nPointIndex ); if ( m_region && m_bDrawing ) { ((Region2DPolyline*)m_region)->AddPoint( m_nMousePosX, m_nMousePosY ); } else if ( !reg ) // drawing { if ( m_nAction == MM_Line ) { Region2DLine* reg_line = new Region2DLine( view ); reg_line->SetLine( m_nMousePosX, m_nMousePosY, m_nMousePosX, m_nMousePosY ); view->AddRegion( reg_line ); m_region = reg_line; } else if ( m_nAction == MM_Spline || m_nAction == MM_Polyline ) { Region2DPolyline* reg_polyline = new Region2DPolyline( view, m_nAction == MM_Spline ); reg_polyline->AddPoint( m_nMousePosX, m_nMousePosY ); reg_polyline->AddPoint( m_nMousePosX, m_nMousePosY ); // add second point view->AddRegion( reg_polyline ); m_region = reg_polyline; } else if ( m_nAction == MM_Rectangle ) { Region2DRectangle* reg_rect = new Region2DRectangle( view ); reg_rect->SetRect( m_nMousePosX, m_nMousePosY, 1, 1 ); view->AddRegion( reg_rect ); m_region = reg_rect; } m_bDrawing = true; } else // editing { m_region = reg; m_bEditing = true; m_region->Highlight(); view->SendBroadcast( "RegionSelected", m_region ); view->NeedRedraw(); } return false; } } else if ( event.RightDown() ) { if ( m_bDrawing && m_region ) { m_bDrawing = false; m_bEditing = false; if ( m_nAction == MM_Spline || m_nAction == MM_Polyline ) ((Region2DPolyline*)m_region)->RemoveLastPoint(); view->NeedRedraw(); return false; } } return Interactor2D::ProcessMouseDownEvent( event, renderview ); // pass down the event }