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