]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/Contour/ContourVOIWidget.cxx
creaMaracasVisu Library
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / Contour / ContourVOIWidget.cxx
1
2 #include "ContourVOIWidget.h"
3
4 #include <vtkImageMapToColors.h>
5 #include <vtkImageActor.h>
6
7
8
9 //-------------------------------------------------------------------
10 //-------------------------------------------------------------------
11 //-------------------------------------------------------------------
12
13   wxWidgetSliderMinMaxVOI :: wxWidgetSliderMinMaxVOI(ContourVOIWidget *contourtool,
14                                                                                                          mBarRange *modelBarRange )
15                 :wxEvtHandler()
16                 {                       
17                         modBarRange = modelBarRange;
18                         mcontourtool = contourtool;
19                         modBarRange->PushEventHandler(this);
20                         Connect(modBarRange->GetId(),wxEVT_TSBAR,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMaxVOI::onBarrange );
21                         Connect(modBarRange->GetId(),wxEVT_TSBAR_ACTUAL,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMaxVOI::onActualChange_Bar );
22                         Connect(modBarRange->GetId(),wxEVT_TSBAR_START,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMaxVOI::onStartChange_Bar );
23                         Connect(modBarRange->GetId(),wxEVT_TSBAR_END,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMaxVOI::onEndChange_Bar );
24                         Connect(modBarRange->GetId(),wxEVT_SELECTION_END,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMaxVOI::onSelectionEnd );
25                         Connect(modBarRange->GetId(),wxEVT_TSBAR_MOVED,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMaxVOI::onMovedBar );                
26                 }
27
28                 wxWidgetSliderMinMaxVOI ::  ~wxWidgetSliderMinMaxVOI()
29                 {
30                         
31                 }
32                 
33
34           //--------------------------------------------------------------------------------------------------------------------------------
35           // Min-Max Barrange received events
36           //--------------------------------------------------------------------------------------------------------------------------------
37                 void wxWidgetSliderMinMaxVOI :: onBarrange(wxCommandEvent& event)
38                 {
39
40                 }
41                 void wxWidgetSliderMinMaxVOI :: onActualChange_Bar(wxCommandEvent& event)
42                 {
43                         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
44                         wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetActual());
45                         wxvtk2dbaseview->Refresh();
46                 }
47                 void wxWidgetSliderMinMaxVOI :: onStartChange_Bar(wxCommandEvent& event)
48                 {
49                         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
50                         wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetStart());
51                         wxvtk2dbaseview->Refresh();
52 //EED                   mcontourtool->ProcessOutputs();
53                 }
54                 void wxWidgetSliderMinMaxVOI :: onEndChange_Bar(wxCommandEvent& event)
55                 {
56                         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)mcontourtool->GetWxVtkBaseView();
57                         wxvtk2dbaseview->GetVtkBaseData()->SetZ(modBarRange->GetEnd());
58                         wxvtk2dbaseview->Refresh();
59 //EED                   mcontourtool->ProcessOutputs();
60                 }
61                 void wxWidgetSliderMinMaxVOI :: onSelectionEnd(wxCommandEvent& event)
62                 {
63                 }
64                 void wxWidgetSliderMinMaxVOI :: onMovedBar(wxCommandEvent& event)
65                 {
66 //EED                   mcontourtool->ProcessOutputs();
67                 }
68 //----------------------------------------------------------------------
69 //----------------------------------------------------------------------
70 //----------------------------------------------------------------------
71
72
73   ContourVOIWidget::ContourVOIWidget(wxWindow *parent, wxVtkBaseView *wxvtkbaseview, vtkImageData* imagedata)
74     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
75   {
76 //EED    this->mbbtkContourCrown        = contourcrown;
77     this->imagedata                                     = imagedata;
78         this->wxvtkbaseview                             = wxvtkbaseview;
79         wxPanel *panel                                  = this;
80     wxSizer *sizer                                      = NULL;
81         
82         mbarrange = new mBarRange(panel,200, 65); 
83         mbarrange -> SetOrientation( true );
84         mbarrange -> setActiveStateTo(true);
85         mbarrange -> setVisibleLabels( true );
86         mbarrange -> setDeviceEndMargin(10);
87         mbarrange -> setRepresentedValues( 0 , 100 );
88         mbarrange -> setDeviceBlitStart(10,10); 
89         mbarrange -> setIfWithActualDrawed( true );
90         mbarrange -> SetStart( 10 );
91         mbarrange -> SetEnd( 90 );  
92
93         wxWidgetSliderMinMaxVOI * eventHandler = new wxWidgetSliderMinMaxVOI(this, mbarrange);
94
95         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(10);
96         sizer1->AddGrowableCol(0);
97     sizer1->Add(mbarrange,1,wxGROW);
98         sizer = sizer1;
99         panel -> SetSizer(sizer);
100
101     panel       ->      SetAutoLayout(true);
102     panel       ->      Layout();  
103   }
104
105   // ------------------------------------------------------------------------
106
107   ContourVOIWidget::~ContourVOIWidget()
108   {
109   }
110
111   // ------------------------------------------------------------------------
112   wxVtkBaseView *ContourVOIWidget::GetWxVtkBaseView()
113         {
114                 return this->wxvtkbaseview;
115         }
116
117
118   // ------------------------------------------------------------------------
119
120
121   void ContourVOIWidget::ConfigureVTK()
122   {
123           double spc[3];
124           this->imagedata->GetSpacing(spc);
125
126           // LG 14 dec 2007
127           int dim[3];
128           this->imagedata->GetDimensions(dim);
129           mbarrange -> setRepresentedValues( 0 , dim[2] );
130         
131         // Rectangulo
132         _manRoiControl  = new manualRoiControler();
133         _mContourModel  = new manualContourModel();
134         _mViewRoi               = new manualViewRoi();
135         _mViewRoi->SetModel( _mContourModel );
136         _mViewRoi->SetWxVtkBaseView( this->wxvtkbaseview );
137         _mViewRoi->SetRange( 2 );
138         _mViewRoi->SetZ( 1000 );
139
140 //EED 3 oct 2006
141         _mViewRoi->SetSpacing(spc);
142
143         _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
144          this->wxvtkbaseview->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manRoiControl );
145         _manRoiControl->CreateNewManualContour();
146         _manRoiControl->SetActive(true);
147         _mViewRoi->RefreshContour();
148
149
150   }
151
152 //--------------------------------------------------------------------------------------------------------------------------------
153 void ContourVOIWidget::GetVOI( int voi[6] )
154 {
155         double minX,minY,maxX,maxY;
156         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
157         voi[0]=(int)minX;
158         voi[1]=(int)maxX;
159         voi[2]=(int)minY;
160         voi[3]=(int)maxY;
161
162         voi[4] =  mbarrange->GetStart();
163         voi[5] =  mbarrange->GetEnd();
164
165         int border[6];
166         wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)wxvtkbaseview;
167         wxvtk2dbaseview->GetVtkBaseData()->GetImageData()->GetExtent( border );
168
169         if ( (voi[0]==voi[1]) || (voi[2]==voi[3]) || (voi[4]==voi[5]) )
170         {
171                         voi[0] = border[0];
172                         voi[1] = border[1];
173                         voi[2] = border[2];
174                         voi[3] = border[3];
175                         voi[4] = border[4];
176                         voi[5] = border[5];
177         }
178
179         // border min
180         if (voi[0]<border[0]) { voi[0]=border[0]; }
181         if (voi[2]<border[2]) { voi[2]=border[2]; }
182         if (voi[4]<border[4]) { voi[4]=border[4]; }
183
184         // border max
185         if (voi[1]>border[1]) { voi[1]=border[1]; }
186         if (voi[3]>border[3]) { voi[3]=border[3]; }
187         if (voi[5]>border[5]) { voi[5]=border[5]; }
188 }
189
190 //--------------------------------------------------------------------------------------------------------------------------------
191 /*EED
192 void wxMaracasCoutourTool::ProcessOutputs()
193 {
194         int voi[6];
195         GetVOI(voi);
196         char buffer[40];
197         sprintf(buffer,"%d %d %d ", voi[0], voi[2], voi[4] );
198         std::string Index(buffer);
199         sprintf(buffer,"%d %d %d ", voi[1]-voi[0]+1, voi[3]-voi[2]+1, voi[5]-voi[4]+1 );
200         std::string Size(buffer);
201         mbbtkContourCrown->bbSetOutputIndex( Index );
202         mbbtkContourCrown->bbSetOutputSize( Size );
203         std::vector<std::string> mod;
204         mod.push_back("Index");
205         mod.push_back("Size");
206         mbbtkContourCrown->bbSignalOutputModification(mod);
207 }
208 */
209
210
211