]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourVOIWidget.cxx
Support #1768 CREATIS Licence insertion
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / Contour / ContourVOIWidget.cxx
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
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
8 #
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.
15 #
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
20 #  liability.
21 #
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 # ------------------------------------------------------------------------ */
25
26 #include "ContourVOIWidget.h"
27
28 //-------------------------------------------------------------------
29 //-------------------------------------------------------------------
30 //-------------------------------------------------------------------
31
32   wxWidgetSliderMinMaxVOI :: wxWidgetSliderMinMaxVOI(ContourVOIWidget *contourtool,
33                                                                                                          mBarRange *modelBarRange )
34                 :wxEvtHandler()
35                 {                       
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 );                
45                 }
46
47                 wxWidgetSliderMinMaxVOI ::  ~wxWidgetSliderMinMaxVOI()
48                 {
49                         
50                 }
51                 
52
53           //--------------------------------------------------------------------------------------------------------------------------------
54           // Min-Max Barrange received events
55           //--------------------------------------------------------------------------------------------------------------------------------
56                 void wxWidgetSliderMinMaxVOI :: onBarrange(wxCommandEvent& event)
57                 {
58
59                 }
60                 void wxWidgetSliderMinMaxVOI :: onActualChange_Bar(wxCommandEvent& event)
61                 {
62 std::cout << "wxWidgetSliderMinMaxVOI ::onActualChange_Bar" << std::endl;
63                         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
64                         wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetActual());
65                         wxvtk2dbaseview->Refresh();
66                 }
67                 void wxWidgetSliderMinMaxVOI :: onStartChange_Bar(wxCommandEvent& event)
68                 {
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();
74                 }
75                 void wxWidgetSliderMinMaxVOI :: onEndChange_Bar(wxCommandEvent& event)
76                 {
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();
82                 }
83                 void wxWidgetSliderMinMaxVOI :: onSelectionEnd(wxCommandEvent& event)
84                 {
85                 }
86                 void wxWidgetSliderMinMaxVOI :: onMovedBar(wxCommandEvent& event)
87                 {
88 //EED                   mcontourtool->ProcessOutputs();
89                 }
90 //----------------------------------------------------------------------
91 //----------------------------------------------------------------------
92 //----------------------------------------------------------------------
93
94
95   ContourVOIWidget::ContourVOIWidget(wxWindow *parent, wxVtkBaseView *wxvtkbaseview, vtkImageData* imagedata)
96     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
97   {
98 //EED    this->mbbtkContourCrown        = contourcrown;
99     this->imagedata                                     = imagedata;
100         this->wxvtkbaseview                             = wxvtkbaseview;
101         wxPanel *panel                                  = this;
102     wxSizer *sizer                                      = NULL;
103         
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 );  
114
115         //wxWidgetSliderMinMaxVOI * eventHandler = new wxWidgetSliderMinMaxVOI(this, mbarrange); // JPRx
116
117         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(10);
118         sizer1->AddGrowableCol(0);
119         sizer1->Add(mbarrange,1,wxGROW);
120         sizer = sizer1;
121         panel -> SetSizer(sizer);
122
123     panel       ->      SetAutoLayout(true);
124     panel       ->      Layout();  
125   }
126
127   // ------------------------------------------------------------------------
128
129   ContourVOIWidget::~ContourVOIWidget()
130   {
131   }
132
133   // ------------------------------------------------------------------------
134   wxVtkBaseView *ContourVOIWidget::GetWxVtkBaseView()
135         {
136                 return this->wxvtkbaseview;
137         }
138
139
140   // ------------------------------------------------------------------------
141
142
143   void ContourVOIWidget::ConfigureVTK()
144   {
145           double spc[3];
146           this->imagedata->GetSpacing(spc);
147
148           // LG 14 dec 2007
149           int dim[3];
150           this->imagedata->GetDimensions(dim);
151           mbarrange -> setRepresentedValues( 0 , dim[2] );
152         
153         // Rectangulo
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 );
161
162 //EED 3 oct 2006
163         _mViewRoi->SetSpacing(spc);
164
165         _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
166         ((vtkInteractorStyleBaseView*)this->wxvtkbaseview->GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _manRoiControl );
167         _manRoiControl->CreateNewManualContour();
168         _manRoiControl->SetActive(true);
169         _mViewRoi->RefreshContour();
170
171
172   }
173
174 //--------------------------------------------------------------------------------------------------------------------------------
175 void ContourVOIWidget::GetVOI( int voi[6] )
176 {
177         double minX,minY,maxX,maxY;
178         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
179         voi[0]=(int)minX;
180         voi[1]=(int)maxX;
181         voi[2]=(int)minY;
182         voi[3]=(int)maxY;
183
184         voi[4] =  mbarrange->GetStart();
185         voi[5] =  mbarrange->GetEnd();
186
187         int border[6];
188         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)wxvtkbaseview;
189         wxvtk2dbaseview->GetVtkBaseData()->GetImageData()->GetExtent( border );
190
191         if ( (voi[0]==voi[1]) || (voi[2]==voi[3]) || (voi[4]==voi[5]) )
192         {
193                         voi[0] = border[0];
194                         voi[1] = border[1];
195                         voi[2] = border[2];
196                         voi[3] = border[3];
197                         voi[4] = border[4];
198                         voi[5] = border[5];
199         }
200
201         // border min
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]; }
205
206         // border max
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]; }
210 }
211
212 //--------------------------------------------------------------------------------------------------------------------------------
213 /*EED
214 void wxMaracasCoutourTool::ProcessOutputs()
215 {
216         int voi[6];
217         GetVOI(voi);
218         char buffer[40];
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);
229 }
230 */
231
232
233