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