コード例 #1
0
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 );
}
コード例 #2
0
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 );
  }
}
コード例 #3
0
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
}
コード例 #4
0
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
}