bool Interactor2DVolumeEdit::ProcessKeyDownEvent( QKeyEvent* event, RenderView* renderview ) { UpdateCursor( event, renderview ); RenderView2D* view = ( RenderView2D* )renderview; if ( event->modifiers() & Qt::AltModifier && event->key() == Qt::Key_H ) { Contour2D* c2d = view->GetContour2D(); c2d->SetVisible( !c2d->IsVisible() ); view->RequestRedraw(); return false; } else if (event->modifiers() & Qt::ShiftModifier && event->key() == Qt::Key_C) { m_bColorPicking = true; return false; } else if (event->key() == Qt::Key_Escape) { m_bColorPicking = false; return false; } if ( !m_bEditing ) { return Interactor2D::ProcessKeyDownEvent( event, renderview ); } else { return false; } }
void ToolWindowEdit::OnColorContour( wxColourPickerEvent& event ) { wxColour c = event.GetColour(); for ( int i = 0; i < 3; i++ ) { RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( i ); Contour2D* c2d = view->GetContour2D(); c2d->SetContourColor( c.Red()/255.0, c.Green()/255.0, c.Blue()/255.0 ); } }
void ToolWindowEdit::OnCheckSmooth( wxCommandEvent& event ) { for ( int i = 0; i < 3; i++ ) { RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( i ); Contour2D* c2d = view->GetContour2D(); c2d->SetSmooth( event.IsChecked() ); } UpdateTools(); }
void ToolWindowEdit::OnEditSmoothSD( wxCommandEvent& event ) { double value; if (m_editSmoothSD != NULL) { if ( m_editSmoothSD->GetValue().ToDouble( &value ) && value > 0 ) { for ( int i = 0; i < 3; i++ ) { RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( i ); Contour2D* c2d = view->GetContour2D(); c2d->SetSmoothSD( value ); } UpdateTools(); } } }
bool Interactor2DVolumeEdit::ProcessKeyDownEvent( wxKeyEvent& event, RenderView* renderview ) { UpdateCursor( event, renderview ); RenderView2D* view = ( RenderView2D* )renderview; if ( event.GetModifiers() == wxMOD_ALT && event.GetKeyCode() == 'H' ) { Contour2D* c2d = view->GetContour2D(); c2d->SetVisible( !c2d->IsVisible() ); view->NeedRedraw(); return false; } if ( !m_bEditing ) return Interactor2D::ProcessKeyDownEvent( event, renderview ); else return false; }
void ToolWindowEdit::OnEditContourValue( wxCommandEvent& event ) { double value; if ( m_editContourValue->GetValue().ToDouble( &value ) && value > 0 ) { BrushProperty* bp = MainWindow::GetMainWindowPointer()->GetBrushProperty(); LayerMRI* mri = (LayerMRI*)bp->GetReferenceLayer(); for ( int i = 0; i < 3; i++ ) { RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( i ); Contour2D* c2d = view->GetContour2D(); if ( c2d->GetInputImage() ) c2d->SetContourValue( value ); else if ( mri ) { c2d->SetInput( mri->GetSliceImageData( view->GetViewPlane() ), value, mri->GetSlicePosition()[i], mri->GetActiveFrame() ); c2d->SetVisible( true ); } } UpdateTools(); } }
void ToolWindowEdit::OnShow( wxShowEvent& event ) { //#if wxCHECK_VERSION(2,9,0) #if wxVERSION_NUMBER > 2900 if ( event.IsShown() ) #else if ( event.GetShow() ) #endif { wxConfigBase* config = wxConfigBase::Get(); if ( config ) { int x = config->Read( _T("/ToolWindowEdit/PosX"), 0L ); int y = config->Read( _T("/ToolWindowEdit/PosY"), 0L ); if ( x == 0 && y == 0 ) Center(); else Move( x, y ); } for ( int i = 0; i < 3; i++ ) { RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( i ); view->GetContour2D()->AddListener( this ); } } else { wxConfigBase* config = wxConfigBase::Get(); if ( config ) { int x, y; GetPosition( &x, &y ); config->Write( _T("/ToolWindowEdit/PosX"), (long) x ); config->Write( _T("/ToolWindowEdit/PosY"), (long) y ); } } MainWindow::GetMainWindowPointer()->SetFocus(); }
bool Interactor2DVolumeEdit::ProcessMouseDownEvent( QMouseEvent* event, RenderView* renderview ) { RenderView2D* view = ( RenderView2D* )renderview; if ( !view->hasFocus() ) { return Interactor2D::ProcessMouseDownEvent( event, renderview ); } if ( event->button() == Qt::LeftButton || ( event->button() == Qt::RightButton && (event->buttons() & Qt::LeftButton) ) ) { if ( (event->modifiers() & CONTROL_MODIFIER ) && (event->modifiers() & Qt::ShiftModifier) ) { return Interactor2D::ProcessMouseDownEvent( event, renderview ); } LayerCollection* lc = MainWindow::GetMainWindow()->GetLayerCollection( m_strLayerTypeName ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); if ( (!mri || !mri->IsVisible()) ) //&& ( event->ControlDown() || m_nAction == EM_Polyline ) ) { emit Error( "LayerNotVisible", mri ); } else if ( !mri->IsEditable() ) //&& ( event->ControlDown() || m_nAction == EM_Polyline ) ) { emit Error( "LayerNotEditable", mri ); } else if ( m_strLayerTypeName == "MRI" && ((LayerMRI*)mri)->IsTransformed() ) { emit Error( "LayerNotEditableForTransformation", mri ); } else { m_nMousePosX = event->x(); m_nMousePosY = event->y(); double ras[3]; view->MousePositionToRAS( m_nMousePosX, m_nMousePosY, ras ); bool bCondition = !(event->modifiers() & Qt::ShiftModifier) && !(event->buttons() & Qt::RightButton); if ( m_nAction == EM_Freehand ) //&& ( event->ControlDown() ) ) { mri->SaveForUndo( view->GetViewPlane() ); if ( event->modifiers() & CONTROL_MODIFIER ) { mri->FloodFillByRAS( ras, view->GetViewPlane(), bCondition ); } else { m_bEditing = true; mri->SetVoxelByRAS( ras, view->GetViewPlane(),bCondition ); } } else if ( m_nAction == EM_Fill ) //&& ( event->ControlDown() ) ) { mri->SaveForUndo( view->GetViewPlane() ); mri->FloodFillByRAS( ras, view->GetViewPlane(), bCondition ); } else if ( m_nAction == EM_Polyline || m_nAction == EM_Livewire ) { mri->SaveForUndo( view->GetViewPlane() ); if ( event->modifiers() & CONTROL_MODIFIER ) { mri->FloodFillByRAS( ras, view->GetViewPlane(), bCondition ); } else { m_bEditing = true; double ras2[3]; view->GetCursor2D()->ClearInterpolationPoints(); view->GetCursor2D()->GetPosition( ras2 ); view->GetCursor2D()->SetPosition( ras ); view->GetCursor2D()->SetPosition2( ras ); if ( m_dPolylinePoints.size() > 0 ) { if ( m_nAction == EM_Polyline ) { mri->SetVoxelByRAS( ras, ras2, view->GetViewPlane(), bCondition ); } else { mri->SetLiveWireByRAS( ras, ras2, view->GetViewPlane() ); } } else { // mri->SaveForUndo( view->GetViewPlane() ); m_dPolylinePoints.push_back( ras[0] ); m_dPolylinePoints.push_back( ras[1] ); m_dPolylinePoints.push_back( ras[2] ); view->GetCursor2D()->SetPosition( ras ); } view->grabMouse(); } } else if ( m_nAction == EM_ColorPicker && mri->IsTypeOf( "MRI" ) ) { if ( event->modifiers() & CONTROL_MODIFIER ) { mri->SaveForUndo( view->GetViewPlane() ); mri->FloodFillByRAS( ras, view->GetViewPlane(), bCondition ); } else { double dValue = ((LayerMRI*)mri)->GetVoxelValue( ras ); if ( dValue != 0 ) { mri->SetFillValue( (float)dValue ); } } } else if ( m_nAction == EM_Contour && mri->IsTypeOf( "MRI" ) ) { LayerMRI* mri_ref = (LayerMRI*)MainWindow::GetMainWindow()->GetBrushProperty()->GetReferenceLayer(); if ( !mri_ref ) { emit Error( "LayerReferenceNotSet" ); return false; } Contour2D* c2d = view->GetContour2D(); if ( (event->modifiers() & CONTROL_MODIFIER) && (event->modifiers() & Qt::AltModifier) ) { double dValue = mri_ref->GetVoxelValue( ras ); if ( dValue != 0 ) { m_bEditing = true; c2d->SetInput( mri_ref->GetSliceImageData( view->GetViewPlane() ), dValue, ras[view->GetViewPlane()], mri_ref->GetActiveFrame() ); c2d->SetVisible( true ); view->RequestRedraw(); } else if ( c2d->IsVisible() ) { m_bEditing = true; } } else if ( (event->modifiers() & CONTROL_MODIFIER) && !(event->modifiers() & Qt::AltModifier) ) { mri->SaveForUndo( view->GetViewPlane() ); ((LayerMRI*)mri)->FloodFillByContour2D( ras, c2d ); } else if ( event->modifiers() & Qt::ShiftModifier ) { m_bEditing = true; c2d->RemoveLine( ras, ras ); view->RequestRedraw(); } else { m_bEditing = true; c2d->AddLine( ras, ras ); view->RequestRedraw(); } } else { return Interactor2D::ProcessMouseDownEvent( event, renderview ); } } return false; } else if ( m_bEditing ) { m_bEditing = false; if ( m_nAction == EM_Polyline || m_nAction == EM_Livewire ) { if ( event->button() == Qt::MidButton ) { view->GetCursor2D()->Update(); view->RequestRedraw(); } else if ( event->button() == Qt::RightButton ) { if ( m_dPolylinePoints.size() > 0 && m_nAction == EM_Polyline ) { LayerCollection* lc = MainWindow::GetMainWindow()->GetLayerCollection( m_strLayerTypeName ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); double ras1[3] = { m_dPolylinePoints[0], m_dPolylinePoints[1], m_dPolylinePoints[2] }; double ras2[3]; view->GetCursor2D()->GetPosition( ras2 ); view->GetCursor2D()->SetPosition2( ras2 ); view->GetCursor2D()->SetPosition( ras1 ); mri->SetVoxelByRAS( ras1, ras2, view->GetViewPlane(), !(event->modifiers() & Qt::ShiftModifier) ); } else { // mri->SetLiveWireByRAS( ras1, ras2, view->GetViewPlane() ); view->GetCursor2D()->Update(); view->RequestRedraw(); } } } m_dPolylinePoints.clear(); view->releaseMouse(); return false; } return Interactor2D::ProcessMouseDownEvent( event, renderview ); // pass down the event }
bool Interactor2DVolumeEdit::ProcessMouseMoveEvent( QMouseEvent* event, RenderView* renderview ) { RenderView2D* view = ( RenderView2D* )renderview; if ( m_bEditing ) { UpdateCursor( event, view ); int posX = event->x(); int posY = event->y(); LayerCollection* lc = MainWindow::GetMainWindow()->GetLayerCollection( m_strLayerTypeName ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); if ( m_nAction == EM_Freehand ) { double ras1[3], ras2[3]; view->MousePositionToRAS( m_nMousePosX, m_nMousePosY, ras1 ); view->MousePositionToRAS( posX, posY, ras2 ); mri->SetVoxelByRAS( ras1, ras2, view->GetViewPlane(), !(event->modifiers() & Qt::ShiftModifier) && !(event->buttons() & Qt::RightButton) ); } else if ( m_nAction == EM_Polyline || m_nAction == EM_Livewire ) { double ras[3]; view->MousePositionToRAS( posX, posY, ras ); view->GetCursor2D()->SetPosition2( ras ); if ( m_nAction == EM_Livewire ) { view->GetCursor2D()->SetInterpolationPoints( mri->GetLiveWirePointsByRAS( ras, view->GetCursor2D()->GetPosition(), view->GetViewPlane() ) ); } view->GetCursor2D()->SetPosition( view->GetCursor2D()->GetPosition(), true ); view->RequestRedraw(); } else if ( m_nAction == EM_Contour ) { LayerMRI* mri_ref = (LayerMRI*)MainWindow::GetMainWindow()->GetBrushProperty()->GetReferenceLayer(); Contour2D* c2d = view->GetContour2D(); if ( event->modifiers() & Qt::ShiftModifier ) { double ras1[3], ras2[3]; view->MousePositionToRAS( m_nMousePosX, m_nMousePosY, ras1 ); view->MousePositionToRAS( posX, posY, ras2 ); c2d->RemoveLine( ras1, ras2 ); } else if ( (event->modifiers() & CONTROL_MODIFIER) && (event->modifiers() & Qt::AltModifier) ) { double scale = 0.2; if ( mri_ref ) { double dMin = mri_ref->GetProperty()->GetMinValue(); double dMax = mri_ref->GetProperty()->GetMaxValue(); scale = ( dMax - dMin ) * 0.0005; } c2d->SetContourValue( c2d->GetContourValue() + scale * ( posY - m_nMousePosY ) ); } else { double ras1[3], ras2[3]; view->MousePositionToRAS( m_nMousePosX, m_nMousePosY, ras1 ); view->MousePositionToRAS( posX, posY, ras2 ); c2d->AddLine( ras1, ras2 ); } view->RequestRedraw(); } m_nMousePosX = posX; m_nMousePosY = posY; return false; } else { return Interactor2D::ProcessMouseMoveEvent( event, renderview ); } }
void ToolWindowEdit::DoUpdateTools() { int nViewId = MainWindow::GetMainWindowPointer()->GetActiveViewId(); if ( nViewId < 0 || nViewId > 2 ) nViewId = 0; RenderView2D* view = ( RenderView2D* )MainWindow::GetMainWindowPointer()->GetRenderView( nViewId ); bool bVoxelEditVisible = m_toolbarVoxelEdit->IsShown(); bool bROIEditVisible = m_toolbarROIEdit->IsShown(); if ( bVoxelEditVisible != (view->GetInteractionMode() == RenderView2D::IM_VoxelEdit) || bROIEditVisible != (view->GetInteractionMode() == RenderView2D::IM_ROIEdit) ) { m_toolbarVoxelEdit ->Show( view->GetInteractionMode() == RenderView2D::IM_VoxelEdit ); m_toolbarROIEdit ->Show( view->GetInteractionMode() == RenderView2D::IM_ROIEdit ); XRCCTRL( *this, "ID_PANEL_HOLDER", wxPanel )->Layout(); } // XRCCTRL( *m_toolbarBrush, "ID_STATIC_BRUSH_SIZE", wxStaticText )->Enable( m_viewAxial->GetAction() != Interactor2DROIEdit::EM_Fill ); m_spinBrushSize->Enable( view->GetAction() != Interactor2DROIEdit::EM_Fill ); m_spinBrushTolerance->Enable( view->GetAction() == Interactor2DROIEdit::EM_Fill ); // choiceTemplate->Enable( checkTemplate->IsChecked() && m_viewAxial->GetAction() == Interactor2DROIEdit::EM_Fill ); // XRCCTRL( *m_toolbarBrush, "ID_STATIC_BRUSH_TOLERANCE", wxStaticText )->Enable( checkTemplate->IsChecked() ); //&& m_viewAxial->GetAction() == Interactor2DROIEdit::EM_Fill ); // XRCCTRL( *m_toolbarBrush, "ID_SPIN_BRUSH_TOLERANCE", wxSpinCtrl )->Enable( checkTemplate->IsChecked() );//&& m_viewAxial->GetAction() == Interactor2DROIEdit::EM_Fill ); BrushProperty* bp = MainWindow::GetMainWindowPointer()->GetBrushProperty(); LayerVolumeBase* layer = bp->GetReferenceLayer(); // if ( m_choiceTemplate->GetSelection() != wxNOT_FOUND ) // layer = ( LayerEditable* )(void*)m_choiceTemplate->GetClientData( m_choiceTemplate->GetSelection() ); m_choiceTemplate->Clear(); m_choiceTemplate->Append( _("None"), (void*)NULL ); LayerCollection* lc = MainWindow::GetMainWindowPointer()->GetLayerCollection( "MRI" ); int nSel = 0; for ( int i = 0; i < lc->GetNumberOfLayers(); i++ ) { LayerMRI* mri = (LayerMRI*)lc->GetLayer( i ); if ( layer == mri ) { nSel = i+1; } m_choiceTemplate->Append( wxString::FromAscii( mri->GetName() ), (void*)mri ); } // if ( !lc->IsEmpty() ) m_choiceTemplate->SetSelection( nSel ); m_spinBrushSize->SetValue( bp->GetBrushSize() ); m_spinBrushTolerance->SetValue( bp->GetBrushTolerance( ) ); m_checkDrawConnectedOnly->SetValue( bp->GetDrawConnectedOnly() ); m_checkDrawRange ->SetValue( bp->GetDrawRangeEnabled() ); m_checkExcludeRange ->SetValue( bp->GetExcludeRangeEnabled() ); m_editDrawRangeLow ->Enable( bp->GetDrawRangeEnabled() ); m_editDrawRangeHigh ->Enable( bp->GetDrawRangeEnabled() ); m_editExcludeRangeLow ->Enable( bp->GetExcludeRangeEnabled() ); m_editExcludeRangeHigh ->Enable( bp->GetExcludeRangeEnabled() ); double* range = bp->GetDrawRange(); UpdateTextValue( m_editDrawRangeLow, range[0] ); UpdateTextValue( m_editDrawRangeHigh, range[1] ); range = bp->GetExcludeRange(); UpdateTextValue( m_editExcludeRangeLow, range[0] ); UpdateTextValue( m_editExcludeRangeHigh, range[1] ); Contour2D* c2d = view->GetContour2D(); m_checkSmooth->SetValue( c2d->GetSmooth() ); UpdateTextValue( m_editSmoothSD, c2d->GetSmoothSD() ); m_editSmoothSD->Enable( c2d->GetSmooth() ); UpdateTextValue( m_editContourValue, c2d->GetContourValue() ); double* rgb = c2d->GetContourColor(); m_colorPickerContour->SetColour( wxColour( (int)(rgb[0]*255), (int)(rgb[1]*255), (int)(rgb[2]*255) ) ); int nAction = view->GetAction(); ShowWidgets( m_widgetsBrushSize, nAction != Interactor2DVoxelEdit::EM_Contour && nAction != Interactor2DVoxelEdit::EM_ColorPicker && nAction != Interactor2DVoxelEdit::EM_Fill ); ShowWidgets( m_widgetsReference, nAction == Interactor2DVoxelEdit::EM_Fill || nAction == Interactor2DVoxelEdit::EM_Contour ); ShowWidgets( m_widgetsTolerance, nAction == Interactor2DVoxelEdit::EM_Fill ); ShowWidgets( m_widgetsConstrain, nAction != Interactor2DVoxelEdit::EM_ColorPicker && nAction != Interactor2DVoxelEdit::EM_Contour ); ShowWidgets( m_widgetsSmooth, nAction == Interactor2DVoxelEdit::EM_Contour ); ShowWidgets( m_widgetsContour, nAction == Interactor2DVoxelEdit::EM_Contour ); m_bToUpdateTools = false; wxPanel* panel = XRCCTRL( *this, "ID_PANEL_HOLDER", wxPanel ); panel->Layout(); panel->Fit(); Fit(); Layout(); MainWindow::GetMainWindowPointer()->NeedRedraw( 1 ); }
bool Interactor2DVolumeEdit::ProcessMouseDownEvent( wxMouseEvent& event, RenderView* renderview ) { RenderView2D* view = ( RenderView2D* )renderview; // UpdateCursor( event, view ); if ( event.LeftDown() || ( event.RightDown() && event.LeftIsDown() ) ) { if ( event.CmdDown() && event.ShiftDown() ) return Interactor2D::ProcessMouseDownEvent( event, renderview ); LayerCollection* lc = MainWindow::GetMainWindowPointer()->GetLayerCollectionManager()->GetLayerCollection( m_strLayerTypeName.c_str() ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); if ( (!mri || !mri->IsVisible()) ) //&& ( event.CmdDown() || m_nAction == EM_Polyline ) ) { SendBroadcast( m_strLayerTypeName + "NotVisible", this ); } else if ( !mri->IsEditable() ) //&& ( event.CmdDown() || m_nAction == EM_Polyline ) ) { SendBroadcast( m_strLayerTypeName + "NotEditable", this ); } else if ( m_strLayerTypeName == "MRI" && ((LayerMRI*)mri)->IsTransformed() ) { SendBroadcast( m_strLayerTypeName + "NotEditableForTransformation", this ); } else { m_nMousePosX = event.GetX(); m_nMousePosY = event.GetY(); double ras[3]; view->MousePositionToRAS( m_nMousePosX, m_nMousePosY, ras ); if ( m_nAction == EM_Freehand ) //&& ( event.CmdDown() ) ) { mri->SaveForUndo( view->GetViewPlane() ); if ( event.CmdDown() ) { mri->FloodFillByRAS( ras, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); } else { m_bEditing = true; mri->SetVoxelByRAS( ras, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); } } else if ( m_nAction == EM_Fill ) //&& ( event.CmdDown() ) ) { mri->SaveForUndo( view->GetViewPlane() ); mri->FloodFillByRAS( ras, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); } else if ( m_nAction == EM_Polyline || m_nAction == EM_Livewire ) { mri->SaveForUndo( view->GetViewPlane() ); if ( event.CmdDown() ) { mri->FloodFillByRAS( ras, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); } else { m_bEditing = true; double ras2[3]; view->GetCursor2D()->ClearInterpolationPoints(); view->GetCursor2D()->GetPosition( ras2 ); view->GetCursor2D()->SetPosition( ras ); view->GetCursor2D()->SetPosition2( ras ); if ( m_dPolylinePoints.size() > 0 ) { if ( m_nAction == EM_Polyline ) mri->SetVoxelByRAS( ras, ras2, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); else mri->SetLiveWireByRAS( ras, ras2, view->GetViewPlane() ); } else { // mri->SaveForUndo( view->GetViewPlane() ); m_dPolylinePoints.push_back( ras[0] ); m_dPolylinePoints.push_back( ras[1] ); m_dPolylinePoints.push_back( ras[2] ); view->GetCursor2D()->SetPosition( ras ); } if ( view->GetCapture() == view ) view->ReleaseMouse(); view->CaptureMouse(); } } else if ( m_nAction == EM_ColorPicker && mri->IsTypeOf( "MRI" ) ) { if ( event.CmdDown() ) { mri->SaveForUndo( view->GetViewPlane() ); mri->FloodFillByRAS( ras, view->GetViewPlane(), !event.ShiftDown() && !event.RightIsDown() ); } else { double dValue = ((LayerMRI*)mri)->GetVoxelValue( ras ); if ( dValue != 0 ) { mri->SetFillValue( (float)dValue ); mri->SendBroadcast( "LayerActorUpdated", mri ); } } } else if ( m_nAction == EM_Contour && mri->IsTypeOf( "MRI" ) ) { LayerMRI* mri_ref = (LayerMRI*)MainWindow::GetMainWindowPointer()->GetBrushProperty()->GetReferenceLayer(); if ( !mri_ref ) { SendBroadcast( m_strLayerTypeName + "ReferenceNotSet", this ); return false; } Contour2D* c2d = view->GetContour2D(); if ( event.CmdDown() && event.AltDown() ) { double dValue = mri_ref->GetVoxelValue( ras ); if ( dValue != 0 ) { m_bEditing = true; c2d->SetInput( mri_ref->GetSliceImageData( view->GetViewPlane() ), dValue, ras[view->GetViewPlane()], mri_ref->GetActiveFrame() ); c2d->SetVisible( true ); view->NeedRedraw(); } else if ( c2d->IsVisible() ) { m_bEditing = true; } } else if ( event.CmdDown() && !event.AltDown() ) { mri->SaveForUndo( view->GetViewPlane() ); ((LayerMRI*)mri)->FloodFillByContour2D( ras, c2d ); } else if ( event.ShiftDown() ) { m_bEditing = true; c2d->RemoveLine( ras, ras ); view->NeedRedraw(); } else { m_bEditing = true; c2d->AddLine( ras, ras ); view->NeedRedraw(); } } else return Interactor2D::ProcessMouseDownEvent( event, renderview ); } return false; } else if ( m_bEditing ) { m_bEditing = false; if ( m_nAction == EM_Polyline || m_nAction == EM_Livewire ) { if ( event.MiddleDown() ) { view->GetCursor2D()->Update(); view->NeedRedraw(); } else if ( event.RightDown() ) { if ( m_dPolylinePoints.size() > 0 && m_nAction == EM_Polyline ) { LayerCollection* lc = MainWindow::GetMainWindowPointer()->GetLayerCollection( m_strLayerTypeName.c_str() ); LayerVolumeBase* mri = ( LayerVolumeBase* )lc->GetActiveLayer(); double ras1[3] = { m_dPolylinePoints[0], m_dPolylinePoints[1], m_dPolylinePoints[2] }; double ras2[3]; view->GetCursor2D()->GetPosition( ras2 ); view->GetCursor2D()->SetPosition2( ras2 ); view->GetCursor2D()->SetPosition( ras1 ); mri->SetVoxelByRAS( ras1, ras2, view->GetViewPlane(), !event.ShiftDown() ); } else { // mri->SetLiveWireByRAS( ras1, ras2, view->GetViewPlane() ); view->GetCursor2D()->Update(); view->NeedRedraw(); } } } m_dPolylinePoints.clear(); if ( view->GetCapture() == view ) view->ReleaseMouse(); return false; } return Interactor2D::ProcessMouseDownEvent( event, renderview ); // pass down the event }