]> Creatis software - creaWT.git/blob - wt/bbtk_wt_PKG/src/bbwtViewerNVWeb.cxx
#3052 creaWT Feature New Normal - Install documentation
[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
77   }
78 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wt,ViewerNVWeb)
79 BBTK_BLACK_BOX_IMPLEMENTATION(ViewerNVWeb,bbtk::WtBlackBox);
80 //===== 
81 // 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)
82 //===== 
83
84
85
86
87 //--------------------------------------------------------------------------------------------------------
88 void ViewerNVWeb::Process()
89 {
90         Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
91         std::string jsCom;      
92 FILE *flog;
93 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
94 fprintf(flog,"EED %p ViewerNVWeb::Process START %s\n", this, bbGetInputImagePath().c_str() );
95 fclose(flog);
96         bool ok;
97         FILE *ff=fopen( bbGetInputImagePath().c_str() , "r" );
98         if (ff)
99         {
100                 ok=true;
101                 fclose(ff);
102         } else {
103                 ok=false;
104         }       
105
106         if (ok==true)
107         {
108                 if (firstTime==false)
109                 {
110
111 /*
112                           jsCom = "\
113                                 try{\
114                                         var volume = new X.volume();\
115                                 volume.spacing = [0.7,0.7,0.7 ];\
116                                     volume.file = '" + bbGetInputImagePath() + "';\
117                                     " +w->jsRef() + ".mVolume = volume;\
118                                     var center = [0,0,0];\
119                                     " +w->jsRef() + ".mVolume.center = center;\
120                                 volume.center = [0,0,0];\
121                                     setTimeout(function(){\
122                                 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
123                                     " + wtWindow1->jsRef() + ".mRenderer.render();\
124                               },300);\
125                                 } catch (err) {\
126                                 } \
127                    ";
128 */
129
130 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
131 fprintf(flog,"  EED ViewerNVWeb::Process firsttime = false\n" );
132 fclose(flog);
133
134                           jsCom = "\
135                                 try{\
136                                         " +w->jsRef() + ".mVolume.file = '" + bbGetInputImagePath() + "';\
137                                         " +w->jsRef() + ".mVolume.modified(true);\
138                                 " + wtWindow1->jsRef() + ".mRenderer.render();\
139                                         alert('firsttime=false');\
140                                 } catch (err) {\
141                                 } \
142                    ";
143
144                         w->doJavaScript(jsCom);
145
146                 }
147
148                 if (firstTime==true)
149                 {
150
151 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
152 fprintf(flog,"  EED ViewerNVWeb::Process firsttime = true \n" );
153 fclose(flog);
154
155                         firstTime=false;
156                           jsCom = "\
157                                         try{\
158                                 var volume = new X.volume();\
159                                 volume.spacing = [0.7,0.7,0.7 ];\
160                                     volume.file = '" + bbGetInputImagePath() + "';\
161                                     " +w->jsRef() + ".mVolume = volume;\
162                                     var center = [0,0,0];\
163                                     " +w->jsRef() + ".mVolume.center = center;\
164                                 volume.center = [0,0,0];\
165                                     setTimeout(function(){\
166                                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
167                                             " + wtWindow1->jsRef() + ".mRenderer.render();\
168                                                         alert('(1) firsttime=true');\
169                                 },300);\
170                                     setTimeout(function(){\
171                                         " + w->jsRef() +".mVolume.upperThreshold =20000;\
172                                         " + w->jsRef() +".mVolume.windowHigh =1670;\
173                                         var gui = new dat.GUI();\
174                                         var volumegui = gui.addFolder('Volume');\
175                                         var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
176                                         var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
177                                         var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
178                                         var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
179                                         var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
180                                         var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
181                                         var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
182                                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
183                                         " + wtWindow2->jsRef() + ".mRenderer.render();\
184                                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
185                                         " + wtWindow3->jsRef() + ".mRenderer.render();\
186                                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
187                                         " + wtWindow4->jsRef() + ".mRenderer.render();\
188                                                         alert('(2) firsttime=true');\
189                                 },10000);\
190                                         } catch(err) { \
191                                         } \
192                                         ";
193                               
194
195
196            // jsCom = "\
197                                 var volume = new X.volume();\
198                                 volume.spacing = [0.7,0.7,0.7 ];\
199                                     volume.file = '" + bbGetInputImagePath() + "';\
200                                     " +w->jsRef() + ".mVolume = volume;\
201                                     var center = [0,0,0\
202                               ];\
203                                     " +w->jsRef() + ".mVolume.center = center;\
204                                 volume.center = [0,0,0];\
205                                     setTimeout(function(){\
206                                 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
207                               },300);\
208                                 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
209                                 " + w->jsRef() +".mVolume.upperThreshold =20000;\
210                                     " + w->jsRef() +".mVolume.windowHigh =1670;\
211                                     var gui = new dat.GUI();\
212                               var volumegui = gui.addFolder('Volume');\
213                               var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
214                               var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
215                               var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
216                               var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
217                               var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
218                               var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
219                               var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
220                                 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
221                                       " + wtWindow2->jsRef() + ".mRenderer.render();\
222                                 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
223                                       " + wtWindow3->jsRef() + ".mRenderer.render();\
224                                 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
225                                       " + wtWindow4->jsRef() + ".mRenderer.render();\
226                                       };\
227                                     " + wtWindow1->jsRef() + ".mRenderer.render();";
228                                     
229                                 w->doJavaScript(jsCom);
230                 } //if firsttime == true
231         } // ok
232         
233         //Wt::WApplication::instance()->refresh();
234         // wtWindow2->resize(Wt::WLength::Auto, 200);
235         // wtWindow3->resize(Wt::WLength::Auto, 200);
236         // wtWindow4->resize(Wt::WLength::Auto, 200);
237          
238 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
239 fprintf(flog,"EED ViewerNVWeb::Process END \n" );
240 fclose(flog);
241          
242
243          Wt::WApplication::instance()->refresh();
244         
245
246 }
247
248 //===== 
249 // 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)
250 //===== 
251 void ViewerNVWeb::bbUserSetDefaultValues()
252 {
253
254 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
255 //    Here we initialize the input 'In' to 0
256         firstTime=true;
257         bbSetInputImagePath("");
258         int n[] = {3,2,1,0};
259         std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
260         bbSetInputnTypeView(nn);
261         bbSetOutputviewer1("");
262         bbSetOutputviewer2("");
263         bbSetOutputviewer3("");
264         bbSetOutputviewer4("");
265   
266 }
267 //=======
268
269
270 //=======
271
272 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
273 {
274   nType = bbGetInputnTypeView();
275
276   Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
277         cont = 0;
278   wtWindow1 = NULL;
279   wtWindow2 = NULL;
280   wtWindow3 = NULL;
281   wtWindow4 = NULL;
282
283         if(nType.size() == 1 )
284         {
285                 wtWindow1 = new Viewer_NV(w,nType[0]);
286                 wtWindow1->configureWt();
287                 wtWindow1->setStyleClass("black-box");
288                 bbSetOutputviewer1(wtWindow1->jsRef());
289         }
290         else if(nType.size() == 2)
291         {
292                 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
293           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
294           
295                 wtWindow1 = new Viewer_NV(0,nType[0]);
296                 wtWindow2 = new Viewer_NV(0,nType[1]);
297                 
298
299                 /*l->addWidget(wtWindow1);
300                 l->addWidget(wtWindow2);
301
302                 w->addWidget(l);
303     */
304     
305     l->addWidget(wtWindow1);
306     l->addWidget(wtWindow2);
307     l->setResizable(0,true,400);
308     w->setLayout(l);
309     
310                 wtWindow1->configureWt();       
311                 wtWindow2->configureWt();
312                 wtWindow1->setStyleClass("black-box");
313                 wtWindow2->setStyleClass("black-box");
314                 bbSetOutputviewer1(wtWindow1->jsRef());
315                 bbSetOutputviewer2(wtWindow2->jsRef());
316         }
317         else if(nType.size() == 3)
318         {
319                 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
320                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
321                 */
322           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
323           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
324           
325           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
326           
327                 wtWindow1 = new Viewer_NV(0,nType[0]);
328                         
329                 wtWindow2 = new Viewer_NV(0,nType[1]);
330
331                 wtWindow3 = new Viewer_NV(0,nType[2]);
332
333         /*
334                 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
335                 l->addWidget(wtWindow3);
336                 
337                 
338                 l2->addWidget(wtWindow1);
339                 l2->addWidget(l);
340                 
341                 w->addWidget(l);
342                 
343                 */
344                 
345                 l->addWidget(wtWindow2);
346                 l->addWidget(wtWindow3);
347                 l->setResizable(0,true,400);
348                 aux1->setLayout(l);
349                 
350                 l2->addWidget(wtWindow1);
351                 l2->addWidget(aux1);
352                 l2->setResizable(0,true,400);
353                 w->setLayout(l2);
354                 
355           wtWindow1->configureWt();     
356           wtWindow2->configureWt();
357           wtWindow3->configureWt();
358     wtWindow1->setStyleClass("black-box");
359     wtWindow2->setStyleClass("black-box");
360     wtWindow3->setStyleClass("black-box");
361                 bbSetOutputviewer1(wtWindow1->jsRef());
362                 bbSetOutputviewer2(wtWindow2->jsRef());
363                 bbSetOutputviewer3(wtWindow3->jsRef());
364
365         }
366         else if(nType.size() == 4)
367         {
368         /*
369                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
370                 Wt::WGridLayout *l = new Wt::WGridLayout();
371                 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
372         */      
373           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
374           Wt::WGridLayout *l = new Wt::WGridLayout();
375           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
376         
377                 wtWindow1 = new Viewer_NV(0,nType[0]);
378     
379                 wtWindow2 = new Viewer_NV(0,nType[1]);
380
381                 wtWindow3 = new Viewer_NV(0,nType[2]);
382
383                 wtWindow4 = new Viewer_NV(0,nType[3]);
384 /*
385         
386                 l2->addWidget(wtWindow1);
387                 l->addWidget(wtWindow2,0,1);
388                 l->addWidget(wtWindow3,0,2);
389                 l->addWidget(wtWindow4,0,3);
390                 aux1->setLayout(l);
391                 l2->addWidget(aux1);
392                 
393                 w->addWidget(l2);
394                 */
395                 l->addWidget(wtWindow2,0,1);
396                 l->addWidget(wtWindow3,0,2);
397                 l->addWidget(wtWindow4,0,3);
398                 l->setColumnResizable(0,true,400);
399                 l->setColumnResizable(1,true,400);
400                 l->setColumnResizable(2,true,400);
401                 aux1->setLayout(l);
402                 
403                 l2->addWidget(wtWindow1);
404                 l2->addWidget(aux1);
405                 l2->setResizable(0,true,600);
406                 w->setLayout(l2);
407         
408         
409           wtWindow1->setStyleClass("black-box");
410     wtWindow2->setStyleClass("black-box");
411     wtWindow3->setStyleClass("black-box");
412     wtWindow4->setStyleClass("black-box");
413         
414           wtWindow1->configureWt();     
415           wtWindow2->configureWt();
416           wtWindow3->configureWt();     
417           wtWindow4->configureWt();
418
419                 bbSetOutputviewer1(wtWindow1->jsRef());
420                 bbSetOutputviewer2(wtWindow2->jsRef());
421                 bbSetOutputviewer3(wtWindow3->jsRef());
422                 bbSetOutputviewer4(wtWindow4->jsRef());
423
424                 bbSetOutputViewer1(wtWindow1);
425                 bbSetOutputViewer2(wtWindow2);
426                 bbSetOutputViewer3(wtWindow3);
427                 bbSetOutputViewer4(wtWindow4);
428
429
430         }
431
432
433   
434   bbSetOutputWidget(w);
435 //EED  loadImage();
436
437 }
438
439 //===== 
440 // 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)
441 //===== 
442 void ViewerNVWeb::bbUserInitializeProcessing()
443 {
444
445 //  THE INITIALIZATION METHOD BODY :
446 //    Here does nothing 
447 //    but this is where you should allocate the internal/output pointers 
448 //    if any 
449
450   
451 }
452 //===== 
453 // 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)
454 //===== 
455 void ViewerNVWeb::bbUserFinalizeProcessing()
456 {
457
458 //  THE FINALIZATION METHOD BODY :
459 //    Here does nothing 
460 //    but this is where you should desallocate the internal/output pointers 
461 //    if any
462   
463 }
464 }
465 // EO namespace bbwt
466
467