1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 # This software is governed by the CeCILL-B license under French law and
10 # abiding by the rules of distribution of free software. You can use,
11 # modify and/ or redistribute the software under the terms of the CeCILL-B
12 # license as circulated by CEA, CNRS and INRIA at the following URL
13 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 # or in the file LICENSE.txt.
16 # As a counterpart to the access to the source code and rights to copy,
17 # modify and redistribute granted by the license, users are provided only
18 # with a limited warranty and the software's author, the holder of the
19 # economic rights, and the successive licensors have only limited
22 # The fact that you are presently reading this means that you have had
23 # knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
26 #include "ContourVOIWidget.h"
28 //-------------------------------------------------------------------
29 //-------------------------------------------------------------------
30 //-------------------------------------------------------------------
32 wxWidgetSliderMinMaxVOI :: wxWidgetSliderMinMaxVOI(ContourVOIWidget *contourtool,
33 mBarRange *modelBarRange )
36 modBarRange = modelBarRange;
37 mcontourtool = contourtool;
38 modBarRange->PushEventHandler(this);
39 Connect(modBarRange->GetId(),wxEVT_TSBAR,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onBarrange );
40 Connect(modBarRange->GetId(),wxEVT_TSBAR_ACTUAL,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onActualChange_Bar );
41 Connect(modBarRange->GetId(),wxEVT_TSBAR_START,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onStartChange_Bar );
42 Connect(modBarRange->GetId(),wxEVT_TSBAR_END,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onEndChange_Bar );
43 Connect(modBarRange->GetId(),wxEVT_SELECTION_END,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onSelectionEnd );
44 Connect(modBarRange->GetId(),wxEVT_TSBAR_MOVED,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onMovedBar );
47 wxWidgetSliderMinMaxVOI :: ~wxWidgetSliderMinMaxVOI()
53 //--------------------------------------------------------------------------------------------------------------------------------
54 // Min-Max Barrange received events
55 //--------------------------------------------------------------------------------------------------------------------------------
56 void wxWidgetSliderMinMaxVOI :: onBarrange(wxCommandEvent& event)
60 void wxWidgetSliderMinMaxVOI :: onActualChange_Bar(wxCommandEvent& event)
62 std::cout << "wxWidgetSliderMinMaxVOI ::onActualChange_Bar" << std::endl;
63 wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
64 wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetActual());
65 wxvtk2dbaseview->Refresh();
67 void wxWidgetSliderMinMaxVOI :: onStartChange_Bar(wxCommandEvent& event)
69 std::cout << "wxWidgetSliderMinMaxVOI ::onStartChange_Bar" << std::endl;
70 wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
71 wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetStart());
72 wxvtk2dbaseview->Refresh();
73 //EED mcontourtool->ProcessOutputs();
75 void wxWidgetSliderMinMaxVOI :: onEndChange_Bar(wxCommandEvent& event)
77 std::cout << "wxWidgetSliderMinMaxVOI ::onEndChange_Bar" << std::endl;
78 wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
79 wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetEnd());
80 wxvtk2dbaseview->Refresh();
81 //EED mcontourtool->ProcessOutputs();
83 void wxWidgetSliderMinMaxVOI :: onSelectionEnd(wxCommandEvent& event)
86 void wxWidgetSliderMinMaxVOI :: onMovedBar(wxCommandEvent& event)
88 //EED mcontourtool->ProcessOutputs();
90 //----------------------------------------------------------------------
91 //----------------------------------------------------------------------
92 //----------------------------------------------------------------------
95 ContourVOIWidget::ContourVOIWidget(wxWindow *parent, wxVtkBaseView *wxvtkbaseview, vtkImageData* imagedata)
96 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
98 //EED this->mbbtkContourCrown = contourcrown;
99 this->imagedata = imagedata;
100 this->wxvtkbaseview = wxvtkbaseview;
101 wxPanel *panel = this;
102 wxSizer *sizer = NULL;
104 mbarrange = new mBarRange(panel,200, 65);
105 mbarrange -> SetOrientation( true );
106 mbarrange -> setActiveStateTo(true);
107 mbarrange -> setVisibleLabels( true );
108 mbarrange -> setDeviceEndMargin(10);
109 mbarrange -> setRepresentedValues( 0 , 100 );
110 mbarrange -> setDeviceBlitStart(10,10);
111 mbarrange -> setIfWithActualDrawed( true );
112 mbarrange -> SetStart( 10 );
113 mbarrange -> SetEnd( 90 );
115 //wxWidgetSliderMinMaxVOI * eventHandler = new wxWidgetSliderMinMaxVOI(this, mbarrange); // JPRx
117 wxFlexGridSizer *sizer1 = new wxFlexGridSizer(10);
118 sizer1->AddGrowableCol(0);
119 sizer1->Add(mbarrange,1,wxGROW);
121 panel -> SetSizer(sizer);
123 panel -> SetAutoLayout(true);
127 // ------------------------------------------------------------------------
129 ContourVOIWidget::~ContourVOIWidget()
133 // ------------------------------------------------------------------------
134 wxVtkBaseView *ContourVOIWidget::GetWxVtkBaseView()
136 return this->wxvtkbaseview;
140 // ------------------------------------------------------------------------
143 void ContourVOIWidget::ConfigureVTK()
146 this->imagedata->GetSpacing(spc);
150 this->imagedata->GetDimensions(dim);
151 mbarrange -> setRepresentedValues( 0 , dim[2] );
154 _manRoiControl = new manualRoiControler();
155 _mContourModel = new manualContourModelRoi();
156 _mViewRoi = new manualViewRoi();
157 _mViewRoi->SetModel( _mContourModel );
158 _mViewRoi->SetWxVtkBaseView( this->wxvtkbaseview );
159 _mViewRoi->SetRange( 2 );
160 _mViewRoi->SetZ( 1000 );
163 _mViewRoi->SetSpacing(spc);
165 _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
166 ((vtkInteractorStyleBaseView*)this->wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manRoiControl );
167 _manRoiControl->CreateNewManualContour();
168 _manRoiControl->SetActive(true);
169 _mViewRoi->RefreshContour();
174 //--------------------------------------------------------------------------------------------------------------------------------
175 void ContourVOIWidget::GetVOI( int voi[6] )
177 double minX,minY,maxX,maxY;
178 _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
184 voi[4] = mbarrange->GetStart();
185 voi[5] = mbarrange->GetEnd();
188 wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)wxvtkbaseview;
189 wxvtk2dbaseview->GetVtkBaseData()->GetImageData()->GetExtent( border );
191 if ( (voi[0]==voi[1]) || (voi[2]==voi[3]) || (voi[4]==voi[5]) )
202 if (voi[0]<border[0]) { voi[0]=border[0]; }
203 if (voi[2]<border[2]) { voi[2]=border[2]; }
204 if (voi[4]<border[4]) { voi[4]=border[4]; }
207 if (voi[1]>border[1]) { voi[1]=border[1]; }
208 if (voi[3]>border[3]) { voi[3]=border[3]; }
209 if (voi[5]>border[5]) { voi[5]=border[5]; }
212 //--------------------------------------------------------------------------------------------------------------------------------
214 void wxMaracasCoutourTool::ProcessOutputs()
219 sprintf(buffer,"%d %d %d ", voi[0], voi[2], voi[4] );
220 std::string Index(buffer);
221 sprintf(buffer,"%d %d %d ", voi[1]-voi[0]+1, voi[3]-voi[2]+1, voi[5]-voi[4]+1 );
222 std::string Size(buffer);
223 mbbtkContourCrown->bbSetOutputIndex( Index );
224 mbbtkContourCrown->bbSetOutputSize( Size );
225 std::vector<std::string> mod;
226 mod.push_back("Index");
227 mod.push_back("Size");
228 mbbtkContourCrown->bbSignalOutputModification(mod);