]> Creatis software - creaWT.git/blob - wt/bbtk_wt_PKG/src/bbwtViewerNVWeb.cxx
#3040 creaWT Bug New Normal - box ViewerWeb update
[creaWT.git] / wt / bbtk_wt_PKG / src / bbwtViewerNVWeb.cxx
1 //===== 
2 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
3 //===== 
4 #include "bbwtViewerNVWeb.h"
5 #include "bbwtPackage.h"
6 namespace bbwt
7 {
8
9
10
11
12   Viewer_NV::Viewer_NV(Wt::WContainerWidget* parent,int typeRender)
13   :
14   Wt::WContainerWidget(parent),
15   mType(typeRender)
16   {
17     //configureWt();
18   }
19
20
21
22   Viewer_NV::~Viewer_NV()
23   {
24
25   }
26
27   void Viewer_NV::configureWt()
28   {
29                 std::cout<<"---- CREACION DE RENDER ----"<<std::endl;
30           Wt::WContainerWidget* w = this;
31      
32         
33                 std::string jsCom;
34
35                 if(mType == 0 )
36                 {
37                         jsCom = "\
38                   var mRenderer = new X.renderer2D();   \
39                   mRenderer.container = '" + w->id() + "';    \
40                                                                         mRenderer.orientation = 'Z';\
41                                                                         mRenderer.init() ;\
42                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
43                 }
44                 else if(mType == 1)
45                 {
46                         jsCom = "\
47                   var mRenderer = new X.renderer2D();   \
48                   mRenderer.container = '" + w->id() + "';    \
49                                                                         mRenderer.orientation = 'Y';\
50                                                                         mRenderer.init() ;       \
51                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
52                 }
53                 else if(mType == 2)
54                 {
55                         jsCom = "\
56                   var mRenderer = new X.renderer2D();   \
57                   mRenderer.container = '" + w->id() + "';    \
58                                                                         mRenderer.orientation = 'X';\
59                                                                         mRenderer.init() ;       \
60                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
61                 }
62                 else if(mType == 3)
63                 {
64                                 jsCom = "\
65                   var mRenderer = new X.renderer3D();   \
66                   mRenderer.container = '" + w->id() + "';\
67                                                                         mRenderer.init() ; \
68                                 " + w->jsRef() + ".mRenderer = mRenderer;";
69         
70         w->resize(Wt::WLength::Auto, 700);
71                 }
72                  
73
74  
75   w->doJavaScript(jsCom);
76   std::cout<<"       REF:   "<<w->jsRef()<<std::endl;
77         std::cout<<"       CREANDO TIPO:   "<<mType<<" ---  "<<jsCom<<std::endl;
78
79   }
80 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wt,ViewerNVWeb)
81 BBTK_BLACK_BOX_IMPLEMENTATION(ViewerNVWeb,bbtk::WtBlackBox);
82 //===== 
83 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
84 //===== 
85
86
87
88
89 //--------------------------------------------------------------------------------------------------------
90 void ViewerNVWeb::Process()
91 {
92         Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
93         std::string jsCom;      
94 printf("EED ViewerNVWeb::Process %s\n", bbGetInputImagePath().c_str() );
95         bool ok;
96         FILE *ff=fopen( bbGetInputImagePath().c_str() , "r" );
97         if (ff)
98         {
99                 ok=true;
100                 fclose(ff);
101         } else {
102                 ok=false;
103         }       
104
105         if (ok==true)
106         {
107                 if (firstTime==false)
108                 {
109
110 /*
111                           jsCom = "\
112                                 try{\
113                                         var volume = new X.volume();\
114                                 volume.spacing = [0.7,0.7,0.7 ];\
115                                     volume.file = '" + bbGetInputImagePath() + "';\
116                                     " +w->jsRef() + ".mVolume = volume;\
117                                     var center = [0,0,0];\
118                                     " +w->jsRef() + ".mVolume.center = center;\
119                                 volume.center = [0,0,0];\
120                                     setTimeout(function(){\
121                                 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
122                                     " + wtWindow1->jsRef() + ".mRenderer.render();\
123                               },300);\
124                                 } catch (err) {\
125                                 } \
126                    ";
127 */
128
129 /*
130                           jsCom = "\
131                                 try{\
132                                     " +w->jsRef() + ".mVolume.file = '" + bbGetInputImagePath() + "';\
133                                     setTimeout(function(){\
134                                 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
135                                     " + wtWindow1->jsRef() + ".mRenderer.render();\
136                               },300);\
137                                 } catch (err) {\
138                                 } \
139                    ";
140
141                         w->doJavaScript(jsCom);
142 */
143
144                 }
145
146                 if (firstTime==true)
147                 {
148                         firstTime=false;
149                           jsCom = "\
150                                         try{\
151                                 var volume = new X.volume();\
152                                 volume.spacing = [0.7,0.7,0.7 ];\
153                                     volume.file = '" + bbGetInputImagePath() + "';\
154                                     " +w->jsRef() + ".mVolume = volume;\
155                                     var center = [0,0,0];\
156                                     " +w->jsRef() + ".mVolume.center = center;\
157                                 volume.center = [0,0,0];\
158                                     setTimeout(function(){\
159                                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
160                                             " + wtWindow1->jsRef() + ".mRenderer.render();\
161                                 },300);\
162                                     setTimeout(function(){\
163                                         " + w->jsRef() +".mVolume.upperThreshold =20000;\
164                                         " + w->jsRef() +".mVolume.windowHigh =1670;\
165                                         var gui = new dat.GUI();\
166                                         var volumegui = gui.addFolder('Volume');\
167                                         var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
168                                         var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
169                                         var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
170                                         var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
171                                         var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
172                                         var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
173                                         var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
174                                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
175                                         " + wtWindow2->jsRef() + ".mRenderer.render();\
176                                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
177                                         " + wtWindow3->jsRef() + ".mRenderer.render();\
178                                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
179                                         " + wtWindow4->jsRef() + ".mRenderer.render();\
180                                 },3000);\
181                                         } catch(err) { \
182                                         } \
183                                         ";
184                               
185            // jsCom = "\
186                                 var volume = new X.volume();\
187                                 volume.spacing = [0.7,0.7,0.7 ];\
188                                     volume.file = '" + bbGetInputImagePath() + "';\
189                                     " +w->jsRef() + ".mVolume = volume;\
190                                     var center = [0,0,0\
191                               ];\
192                                     " +w->jsRef() + ".mVolume.center = center;\
193                                 volume.center = [0,0,0];\
194                                     setTimeout(function(){\
195                                 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
196                               },300);\
197                                 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
198                                 " + w->jsRef() +".mVolume.upperThreshold =20000;\
199                                     " + w->jsRef() +".mVolume.windowHigh =1670;\
200                                     var gui = new dat.GUI();\
201                               var volumegui = gui.addFolder('Volume');\
202                               var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
203                               var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
204                               var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
205                               var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
206                               var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
207                               var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
208                               var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
209                                 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
210                                       " + wtWindow2->jsRef() + ".mRenderer.render();\
211                                 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
212                                       " + wtWindow3->jsRef() + ".mRenderer.render();\
213                                 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
214                                       " + wtWindow4->jsRef() + ".mRenderer.render();\
215                                       };\
216                                     " + wtWindow1->jsRef() + ".mRenderer.render();";
217                                     
218                                 w->doJavaScript(jsCom);
219                 } //if firsttime == true
220         } // ok
221         
222         //Wt::WApplication::instance()->refresh();
223         // wtWindow2->resize(Wt::WLength::Auto, 200);
224         // wtWindow3->resize(Wt::WLength::Auto, 200);
225         // wtWindow4->resize(Wt::WLength::Auto, 200);
226          
227          
228          Wt::WApplication::instance()->refresh();
229         
230
231 }
232
233 //===== 
234 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
235 //===== 
236 void ViewerNVWeb::bbUserSetDefaultValues()
237 {
238
239 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
240 //    Here we initialize the input 'In' to 0
241         firstTime=true;
242         bbSetInputImagePath("");
243         int n[] = {3,2,1,0};
244         std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
245         bbSetInputnTypeView(nn);
246         bbSetOutputviewer1("");
247         bbSetOutputviewer2("");
248         bbSetOutputviewer3("");
249         bbSetOutputviewer4("");
250   
251 }
252 //=======
253
254
255 //=======
256
257 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
258 {
259   nType = bbGetInputnTypeView();
260
261   Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
262         cont = 0;
263   wtWindow1 = NULL;
264   wtWindow2 = NULL;
265   wtWindow3 = NULL;
266   wtWindow4 = NULL;
267
268         if(nType.size() == 1 )
269         {
270                 wtWindow1 = new Viewer_NV(w,nType[0]);
271                 wtWindow1->configureWt();
272                 wtWindow1->setStyleClass("black-box");
273                 std::cout<<"   PRUEBA 1 RENDERER"<<std::endl;
274                 bbSetOutputviewer1(wtWindow1->jsRef());
275         }
276         else if(nType.size() == 2)
277         {
278                 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
279           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
280           
281                 wtWindow1 = new Viewer_NV(0,nType[0]);
282                 wtWindow2 = new Viewer_NV(0,nType[1]);
283                 
284
285                 /*l->addWidget(wtWindow1);
286                 l->addWidget(wtWindow2);
287
288                 w->addWidget(l);
289     */
290     
291     l->addWidget(wtWindow1);
292     l->addWidget(wtWindow2);
293     l->setResizable(0,true,400);
294     w->setLayout(l);
295     
296                 wtWindow1->configureWt();       
297                 wtWindow2->configureWt();
298                 wtWindow1->setStyleClass("black-box");
299                 wtWindow2->setStyleClass("black-box");
300                 bbSetOutputviewer1(wtWindow1->jsRef());
301                 bbSetOutputviewer2(wtWindow2->jsRef());
302         }
303         else if(nType.size() == 3)
304         {
305                 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
306                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
307                 */
308           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
309           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
310           
311           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
312           
313                 wtWindow1 = new Viewer_NV(0,nType[0]);
314                         
315                 wtWindow2 = new Viewer_NV(0,nType[1]);
316
317                 wtWindow3 = new Viewer_NV(0,nType[2]);
318
319         /*
320                 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
321                 l->addWidget(wtWindow3);
322                 
323                 
324                 l2->addWidget(wtWindow1);
325                 l2->addWidget(l);
326                 
327                 w->addWidget(l);
328                 
329                 */
330                 
331                 l->addWidget(wtWindow2);
332                 l->addWidget(wtWindow3);
333                 l->setResizable(0,true,400);
334                 aux1->setLayout(l);
335                 
336                 l2->addWidget(wtWindow1);
337                 l2->addWidget(aux1);
338                 l2->setResizable(0,true,400);
339                 w->setLayout(l2);
340                 
341           wtWindow1->configureWt();     
342           wtWindow2->configureWt();
343           wtWindow3->configureWt();
344     wtWindow1->setStyleClass("black-box");
345     wtWindow2->setStyleClass("black-box");
346     wtWindow3->setStyleClass("black-box");
347                 bbSetOutputviewer1(wtWindow1->jsRef());
348                 bbSetOutputviewer2(wtWindow2->jsRef());
349                 bbSetOutputviewer3(wtWindow3->jsRef());
350
351         }
352         else if(nType.size() == 4)
353         {
354         /*
355                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
356                 Wt::WGridLayout *l = new Wt::WGridLayout();
357                 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
358         */      
359           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
360           Wt::WGridLayout *l = new Wt::WGridLayout();
361           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
362         
363                 wtWindow1 = new Viewer_NV(0,nType[0]);
364     
365                 wtWindow2 = new Viewer_NV(0,nType[1]);
366
367                 wtWindow3 = new Viewer_NV(0,nType[2]);
368
369                 wtWindow4 = new Viewer_NV(0,nType[3]);
370 /*
371         
372                 l2->addWidget(wtWindow1);
373                 l->addWidget(wtWindow2,0,1);
374                 l->addWidget(wtWindow3,0,2);
375                 l->addWidget(wtWindow4,0,3);
376                 aux1->setLayout(l);
377                 l2->addWidget(aux1);
378                 
379                 w->addWidget(l2);
380                 */
381                 l->addWidget(wtWindow2,0,1);
382                 l->addWidget(wtWindow3,0,2);
383                 l->addWidget(wtWindow4,0,3);
384                 l->setColumnResizable(0,true,400);
385                 l->setColumnResizable(1,true,400);
386                 l->setColumnResizable(2,true,400);
387                 aux1->setLayout(l);
388                 
389                 l2->addWidget(wtWindow1);
390                 l2->addWidget(aux1);
391                 l2->setResizable(0,true,600);
392                 w->setLayout(l2);
393         
394         
395           wtWindow1->setStyleClass("black-box");
396     wtWindow2->setStyleClass("black-box");
397     wtWindow3->setStyleClass("black-box");
398     wtWindow4->setStyleClass("black-box");
399         
400           wtWindow1->configureWt();     
401           wtWindow2->configureWt();
402           wtWindow3->configureWt();     
403           wtWindow4->configureWt();
404
405                 bbSetOutputviewer1(wtWindow1->jsRef());
406                 bbSetOutputviewer2(wtWindow2->jsRef());
407                 bbSetOutputviewer3(wtWindow3->jsRef());
408                 bbSetOutputviewer4(wtWindow4->jsRef());
409
410                 bbSetOutputViewer1(wtWindow1);
411                 bbSetOutputViewer2(wtWindow2);
412                 bbSetOutputViewer3(wtWindow3);
413                 bbSetOutputViewer4(wtWindow4);
414
415
416         }
417
418
419   
420   bbSetOutputWidget(w);
421 //EED  loadImage();
422
423 }
424
425 //===== 
426 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
427 //===== 
428 void ViewerNVWeb::bbUserInitializeProcessing()
429 {
430
431 //  THE INITIALIZATION METHOD BODY :
432 //    Here does nothing 
433 //    but this is where you should allocate the internal/output pointers 
434 //    if any 
435
436   
437 }
438 //===== 
439 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
440 //===== 
441 void ViewerNVWeb::bbUserFinalizeProcessing()
442 {
443
444 //  THE FINALIZATION METHOD BODY :
445 //    Here does nothing 
446 //    but this is where you should desallocate the internal/output pointers 
447 //    if any
448   
449 }
450 }
451 // EO namespace bbwt
452
453