]> Creatis software - creaMaracasVisu.git/blob - bbtk/src/bbmaracasvisuShowNPoints.cxx
ca5a850d93111118d8ac661efabff5074466d41f
[creaMaracasVisu.git] / bbtk / src / bbmaracasvisuShowNPoints.cxx
1 #include "bbmaracasvisuShowNPoints.h"
2 #include "bbcreaMaracasVisuPackage.h"
3
4 #include "vtkProperty.h"
5 #include "vtkSphereSource.h"
6 #include "vtkPolyDataMapper.h"
7 #include "vtkRenderWindow.h"
8
9 namespace bbcreaMaracasVisu
10 {
11
12
13 //----------------------------------------------------------------------
14         WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent,  bbcreaMaracasVisu::ShowNPoints *box)
15     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
16   {
17     mbbShowNPoints                              = box;
18     this->renderer                              = NULL;
19         wxPanel *panel                          = this;
20     wxSizer *sizer                              = NULL;
21         
22
23         // Widget interface
24         wxButton *btnAddPoint           = new wxButton( panel, -1, _T("Add Point"));
25         wxButton *btnEraseLstPoint  = new wxButton( panel, -1, _T("Erase Last point"));
26         wxButton *btnDeleteAllPoints= new wxButton( panel, -1, _T("Delete all points"));
27
28
29         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1); 
30 //    sizer1->Add(new wxStaticText(panel,-1,_T("  ")));
31
32     Connect(btnAddPoint->GetId()                , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint);
33     Connect(btnEraseLstPoint->GetId()   , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint);
34     Connect(btnDeleteAllPoints->GetId() , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints);
35
36     sizer1->Add(btnAddPoint);
37     sizer1->Add(btnEraseLstPoint);
38     sizer1->Add(btnDeleteAllPoints);
39
40         sizer = sizer1;
41         panel   ->      SetSizer(sizer);
42     panel       ->      SetAutoLayout(true);
43     panel       ->      Layout();  
44         
45 }
46
47
48 //------------------------------------------------------------------------
49 WidgetShowNPoints::~WidgetShowNPoints()
50 {
51 }
52
53 void WidgetShowNPoints::SetRadio(double radio)
54 {
55         mradio=radio;
56 }
57
58 //------------------------------------------------------------------------
59 std::vector<int> WidgetShowNPoints::GetLstPointsX()
60 {
61         return lstPointsX;
62 }
63
64 //------------------------------------------------------------------------
65 std::vector<int> WidgetShowNPoints::GetLstPointsY()
66 {
67         return lstPointsY;
68 }
69
70 //------------------------------------------------------------------------
71 std::vector<int> WidgetShowNPoints::GetLstPointsZ()
72 {
73         return lstPointsZ;
74 }
75
76
77
78
79 //------------------------------------------------------------------------
80 void WidgetShowNPoints::SetPoint(std::vector<int> ppoint)
81 {
82         mpoint = ppoint;
83 }
84
85 //------------------------------------------------------------------------
86 void WidgetShowNPoints::SetColour(std::vector<double> colour)
87 {
88         this->mcolour = colour;
89 }
90
91 //------------------------------------------------------------------------
92 void WidgetShowNPoints::SetOpacity(double opacity)
93 {
94         this->mopacity=opacity;
95 }
96
97 //------------------------------------------------------------------------
98 void WidgetShowNPoints::SetImage(vtkImageData *image)
99 {
100         this->mimage=image;
101 }
102
103 //------------------------------------------------------------------------
104 void  WidgetShowNPoints::SetRenderer(vtkRenderer *renderer)
105 {
106         this->renderer  = renderer;
107 }
108
109
110
111 //------------------------------------------------------------------------
112 void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event)
113 {
114 printf("EED %p WidgetShowNPoints::OnAddPoint 01\n", this);
115         if (this->renderer!=NULL){ 
116 printf("EED %p WidgetShowNPoints::OnAddPoint 02\n", this);
117                 if (mpoint.size()==3){
118 printf("EED %p WidgetShowNPoints::OnAddPoint 03\n", this);
119                         lstPointsX.push_back( mpoint[0] );
120                         lstPointsY.push_back( mpoint[1] );
121                         lstPointsZ.push_back( mpoint[2] );
122
123                         // Sphere
124                         vtkSphereSource *vtksphere              = vtkSphereSource::New();
125                         vtksphere->SetThetaResolution (20);
126                         vtksphere->SetPhiResolution (20);
127                         vtksphere->SetRadius( mradio  ); 
128                         vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
129                         sphereMapper->SetInput( vtksphere->GetOutput() );
130                         vtkActor *sphereActor   = vtkActor::New();
131                         sphereActor->SetMapper(sphereMapper);
132                         sphereActor->SetOrigin(0, 0, 0);
133                         double spc[3];
134                         mimage->GetSpacing(spc);
135                         sphereActor->SetPosition( spc[0]*mpoint[0] , spc[1]*mpoint[1] , spc[2]*mpoint[2] );
136                         sphereActor->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] );
137                         sphereActor->GetProperty()->SetOpacity( mopacity );
138
139                         lstActors.push_back(sphereActor);
140                         renderer->AddActor( sphereActor );
141
142                         renderer->GetRenderWindow()->Render();
143
144                         //--BBTK
145 //EED???                        mbbShowNPoints->bbSignalOutputModification(std::string("Point"));    
146
147                 } else {//mpoint.size
148                         printf("creaMaracasVisu::ShowNPoints (not match point)");
149                 }
150         } // renderer
151 }
152
153 //------------------------------------------------------------------------
154 void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event)
155 {
156         int id = lstActors.size()-1;
157         if (this->renderer!=NULL){ 
158                 if (id>=0){
159                         renderer->RemoveActor( lstActors[id] );
160                         lstActors.erase( lstActors.begin()+id );
161                         lstPointsX.erase( lstPointsX.begin()+id );
162                         lstPointsY.erase( lstPointsY.begin()+id );
163                         lstPointsZ.erase( lstPointsZ.begin()+id );
164                         renderer->GetRenderWindow()->Render();
165                 //--BBTK
166 //EED???                        mbbShowNPoints->bbSignalOutputModification(std::string("Point"));    
167                 } // if id
168         } // if renderer
169 }
170
171 //------------------------------------------------------------------------
172 void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event)
173 {
174         int i,size=lstActors.size();
175         if (this->renderer!=NULL){ 
176                 for (i=0;i<size;i++)
177                 {
178                         renderer->RemoveActor( lstActors[i] );
179                 }
180                 lstActors.clear();
181                 lstPointsX.clear();
182                 lstPointsY.clear();
183                 lstPointsZ.clear();
184                 renderer->GetRenderWindow()->Render();
185                 //--BBTK
186 //EED???                mbbShowNPoints->bbSignalOutputModification(std::string("Point"));    
187         } // renderer
188 }
189
190
191
192
193
194 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints)
195 BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox);
196
197 void ShowNPoints::Process()
198 {
199 printf("EED %p ShowNPoints::Process 01\n", this);
200         if (mwxwidget!=NULL){
201 printf("EED %p ShowNPoints::Process 02\n", this);
202                 mwxwidget->SetRenderer( bbGetInputRenderer() );   
203                 mwxwidget->SetPoint( bbGetInputIn() );   
204                 mwxwidget->SetImage( bbGetInputImage() );   
205                 mwxwidget->SetColour( bbGetInputColour() );   
206                 mwxwidget->SetOpacity( bbGetInputOpacity() );   
207                 mwxwidget->SetRadio( bbGetInputRadio() );   
208
209                 bbSetOutputlstPointsX( mwxwidget->GetLstPointsX() );
210                 bbSetOutputlstPointsY( mwxwidget->GetLstPointsY() );
211                 bbSetOutputlstPointsZ( mwxwidget->GetLstPointsZ() );
212         } // mwxwidget
213 }
214
215
216 void ShowNPoints::CreateWidget(wxWindow* parent)
217 {
218         mwxwidget = new WidgetShowNPoints( parent ,  this);
219         mwxwidget->SetPoint( bbGetInputIn() );
220
221         if (bbGetInputImage()==NULL)
222         {
223                 printf("Missing Image  (ShowNPoints) \n");
224         }
225
226    bbSetOutputWidget( mwxwidget ); 
227 }
228
229 void ShowNPoints::bbUserSetDefaultValues()
230 {
231         mwxwidget = NULL;
232
233         bbSetInputRadio(0.5);
234         bbSetInputOpacity(1);
235         
236         std::vector<double> colour;
237         colour.push_back(1.0);
238         colour.push_back(0.0);
239         colour.push_back(0.0);
240         bbSetInputColour(colour);
241
242         bbSetInputImage(NULL);
243         bbSetInputRenderer(NULL);
244 }
245         
246         //-----------------------------------------------------------------     
247         void ShowNPoints::bbUserInitializeProcessing()
248         {
249         }
250         
251         //-----------------------------------------------------------------     
252         void ShowNPoints::bbUserFinalizeProcessing()
253         {
254         }
255         
256         //-----------------------------------------------------------------     
257
258 }
259 // EO namespace bbcreaMaracasVisu
260
261