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)
4 #include "bbwtViewerNVWeb.h"
5 #include "bbwtPackage.h"
12 Viewer_NV::Viewer_NV(Wt::WContainerWidget* parent,int typeRender)
14 Wt::WContainerWidget(parent),
22 Viewer_NV::~Viewer_NV()
27 void Viewer_NV::configureWt()
29 std::cout<<"---- CREACION DE RENDER ----"<<std::endl;
30 Wt::WContainerWidget* w = this;
38 var mRenderer = new X.renderer2D(); \
39 mRenderer.container = '" + w->id() + "'; \
40 mRenderer.orientation = 'Z';\
42 " + w->jsRef() + ".mRenderer = mRenderer;";
47 var mRenderer = new X.renderer2D(); \
48 mRenderer.container = '" + w->id() + "'; \
49 mRenderer.orientation = 'Y';\
51 " + w->jsRef() + ".mRenderer = mRenderer;";
56 var mRenderer = new X.renderer2D(); \
57 mRenderer.container = '" + w->id() + "'; \
58 mRenderer.orientation = 'X';\
60 " + w->jsRef() + ".mRenderer = mRenderer;";
65 var mRenderer = new X.renderer3D(); \
66 mRenderer.container = '" + w->id() + "';\
68 " + w->jsRef() + ".mRenderer = mRenderer;";
70 w->resize(Wt::WLength::Auto, 500);
75 w->doJavaScript(jsCom);
76 std::cout<<" REF: "<<w->jsRef()<<std::endl;
77 std::cout<<" CREANDO TIPO: "<<mType<<" --- "<<jsCom<<std::endl;
80 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wt,ViewerNVWeb)
81 BBTK_BLACK_BOX_IMPLEMENTATION(ViewerNVWeb,bbtk::WtBlackBox);
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)
85 void ViewerNVWeb::Process()
88 //------------- This part works perfectly, uncomment it for use it safe
90 /*Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
98 " + wtWindow1->jsRef() + ".mRenderer.add(" +bbGetInputImagePath() + ".mObject);\
99 " + wtWindow1->jsRef() + ".mRenderer.render();";
101 std::cout<<std::endl;
102 std::cout<<std::endl;
103 std::cout<<std::endl;
104 std::cout<<std::endl;
105 std::cout<<"CADENA -- "<<std::endl;
106 std::cout<<jsCom<<std::endl;
109 var volume = new X.volume();\
110 volume.file = '" + bbGetInputImagePath() + "';\
111 " + wtWindow1->jsRef() + ".mRenderer.add(volume);\
112 " + wtWindow1->jsRef() + ".mRenderer.render();";
116 var volume = new X.volume();\
117 volume.file = '" + bbGetInputImagePath() + "';\
118 " + w->jsRef() +".mVolume = volume;\
119 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
120 " + wtWindow1->jsRef() + ".mRenderer.render();";
126 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
127 " + wtWindow2->jsRef() + ".mRenderer.render();";
132 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
133 " + wtWindow3->jsRef() + ".mRenderer.render();";
138 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
139 " + wtWindow4->jsRef() + ".mRenderer.render();";
145 std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
146 w->doJavaScript(jsCom);
149 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
154 std::cout<<"Process ----"<<std::endl;
160 var volume = new X.volume();\
161 volume.spacing = [0.7,0.7,0.7 ];\
162 volume.center = [0,0,0];\
163 volume.file = '" + bbGetInputImagePath() + "';\
164 " + w->jsRef() +".mVolume = volume;\
165 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
166 " + wtWindow1->jsRef() + ".mRenderer.render();";
168 // jsCom = jsCom + "\
169 var gui = new dat.GUI();\
170 var volumegui = gui.addFolder('Volume');\
171 var vrController = volumegui.add(volume, 'volumeRendering');\
172 var opacityController = volumegui.add(volume, 'opacity', 0, 1).listen();\
173 var lowerThresholdController = volumegui.add(volume, 'lowerThreshold',volume.min, volume.max);\
174 var upperThresholdController = volumegui.add(volume, 'upperThreshold',volume.min, volume.max);\
178 var gui = new dat.GUI();\
179 var volumegui = gui.addFolder('Volume');\
180 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
181 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
182 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', " + w->jsRef() +".mVolume.min," + w->jsRef() +".mVolume.max);\
183 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', " + w->jsRef() +".mVolume.min," + w->jsRef() +".mVolume.max);\
198 setTimeout(function(){\
199 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
200 " + wtWindow2->jsRef() + ".mRenderer.render();";
208 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
209 " + wtWindow3->jsRef() + ".mRenderer.render();";
212 // else if(cont == 4)
217 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
218 " + wtWindow4->jsRef() + ".mRenderer.render();\
219 " + w->jsRef() +".mVolume.upperTheshold =0;\
220 " + w->jsRef() +".mVolume.windowLow =0;\
221 " + w->jsRef() +".mVolume.windowHigh =1900;";
223 // jsCom = jsCom + "\
224 var gui = new dat.GUI();\
225 var volumegui = gui.addFolder('Volume');\
226 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
227 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
228 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', " + w->jsRef() +".mVolume.min," + w->jsRef() +".mVolume.max);\
229 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', " + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
231 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
232 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);";
235 var gui = new dat.GUI();\
236 var volumegui = gui.addFolder('Volume');\
237 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
238 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
239 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
240 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
242 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
243 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
246 // jsCom = jsCom + "\
247 var gui = new dat.GUI();\
248 var volumegui = gui.addFolder('Volume');\
249 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
250 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();";
259 std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
260 //w->doJavaScript(jsCom);
262 Wt::WApplication::instance()->refresh();
267 //--------------------------------------------------------------------------------------------------------
268 //--------------------------------------------------------------------------------------------------------
272 void ViewerNVWeb::loadImage()
276 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
279 std::cout<<"Process ----"<<std::endl;
282 var volume = new X.volume();\
283 volume.spacing = [0.7,0.7,0.7 ];\
284 volume.file = '" + bbGetInputImagePath() + "';\
285 " +w->jsRef() + ".mVolume = volume;\
288 " +w->jsRef() + ".mVolume.center = center;\
289 volume.center = [0,0,0];\
290 setTimeout(function(){\
291 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
292 " + wtWindow1->jsRef() + ".mRenderer.render();\
294 setTimeout(function(){\
295 " + w->jsRef() +".mVolume.upperThreshold =20000;\
296 " + w->jsRef() +".mVolume.windowHigh =1670;\
297 var gui = new dat.GUI();\
298 var volumegui = gui.addFolder('Volume');\
299 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
300 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
301 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
302 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
303 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
304 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
305 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
306 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
307 " + wtWindow2->jsRef() + ".mRenderer.render();\
308 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
309 " + wtWindow3->jsRef() + ".mRenderer.render();\
310 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
311 " + wtWindow4->jsRef() + ".mRenderer.render();\
316 setTimeout(function(){\
317 var volume = new X.volume();\
318 volume.spacing = [0.7,0.7,0.7 ];\
319 volume.file = '" + bbGetInputImagePath() + "';\
320 " +w->jsRef() + ".mVolume = volume;\
323 " +w->jsRef() + ".mVolume.center = center;\
324 volume.center = [0,0,0];\
326 " + wtWindow1->jsRef() + ".mRenderer.onShowtime=function(){\
327 " + w->jsRef() +".mVolume.upperThreshold =20000;\
328 " + w->jsRef() +".mVolume.windowHigh =1670;\
329 var gui = new dat.GUI();\
330 var volumegui = gui.addFolder('Volume');\
331 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
332 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
333 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
334 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
335 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
336 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
337 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
338 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
339 " + wtWindow2->jsRef() + ".mRenderer.render();\
340 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
341 " + wtWindow3->jsRef() + ".mRenderer.render();\
342 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
343 " + wtWindow4->jsRef() + ".mRenderer.render();\
345 setTimeout(function(){\
346 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
347 " + wtWindow1->jsRef() + ".mRenderer.render();\
351 // jsCom = jsCom + "\
352 setTimeout(function(){\
353 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
354 " + wtWindow2->jsRef() + ".mRenderer.render();";
358 // jsCom = jsCom + "\
359 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
360 " + wtWindow3->jsRef() + ".mRenderer.render();";
364 // jsCom = jsCom + "\
365 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
366 " + wtWindow4->jsRef() + ".mRenderer.render();";
369 // jsCom = jsCom + "\
370 " + w->jsRef() +".mVolume = volume;\
371 " + w->jsRef() +".mVolume.lowerThreshold =0;\
372 " + w->jsRef() +".mVolume.upperThreshold =20000;\
373 " + w->jsRef() +".mVolume.windowHigh =1670;\
374 var gui = new dat.GUI();\
375 var volumegui = gui.addFolder('Volume');\
376 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
377 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
378 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
379 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
384 // jsCom = jsCom + "\
385 setTimeout(function(){\
386 var gui = new dat.GUI();\
387 var volumegui = gui.addFolder('Volume');\
388 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
389 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
390 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
391 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
392 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
393 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
394 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
399 std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
400 w->doJavaScript(jsCom);
401 //Wt::WApplication::instance()->refresh();
402 wtWindow2->resize(Wt::WLength::Auto, 200);
403 wtWindow3->resize(Wt::WLength::Auto, 200);
404 wtWindow4->resize(Wt::WLength::Auto, 200);
412 // 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)
414 void ViewerNVWeb::bbUserSetDefaultValues()
417 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
418 // Here we initialize the input 'In' to 0
419 bbSetInputImagePath("");
421 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
422 bbSetInputnTypeView(nn);
423 bbSetOutputviewer1("");
424 bbSetOutputviewer2("");
425 bbSetOutputviewer3("");
426 bbSetOutputviewer4("");
434 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
436 nType = bbGetInputnTypeView();
438 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
445 if(nType.size() == 1 )
447 wtWindow1 = new Viewer_NV(w,nType[0]);
448 wtWindow1->configureWt();
449 wtWindow1->setStyleClass("black-box");
450 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
451 bbSetOutputviewer1(wtWindow1->jsRef());
453 else if(nType.size() == 2)
455 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
456 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
458 wtWindow1 = new Viewer_NV(0,nType[0]);
459 wtWindow2 = new Viewer_NV(0,nType[1]);
462 /*l->addWidget(wtWindow1);
463 l->addWidget(wtWindow2);
468 l->addWidget(wtWindow1);
469 l->addWidget(wtWindow2);
473 wtWindow1->configureWt();
474 wtWindow2->configureWt();
475 wtWindow1->setStyleClass("black-box");
476 wtWindow2->setStyleClass("black-box");
477 bbSetOutputviewer1(wtWindow1->jsRef());
478 bbSetOutputviewer2(wtWindow2->jsRef());
480 else if(nType.size() == 3)
482 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
483 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
485 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
486 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
488 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
490 wtWindow1 = new Viewer_NV(0,nType[0]);
492 wtWindow2 = new Viewer_NV(0,nType[1]);
494 wtWindow3 = new Viewer_NV(0,nType[2]);
497 l->addWidget(wtWindow2);
498 l->addWidget(wtWindow3);
501 l2->addWidget(wtWindow1);
508 l->addWidget(wtWindow2);
509 l->addWidget(wtWindow3);
512 l2->addWidget(wtWindow1);
517 wtWindow1->configureWt();
518 wtWindow2->configureWt();
519 wtWindow3->configureWt();
520 wtWindow1->setStyleClass("black-box");
521 wtWindow2->setStyleClass("black-box");
522 wtWindow3->setStyleClass("black-box");
523 bbSetOutputviewer1(wtWindow1->jsRef());
524 bbSetOutputviewer2(wtWindow2->jsRef());
525 bbSetOutputviewer3(wtWindow3->jsRef());
528 else if(nType.size() == 4)
531 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
532 Wt::WGridLayout *l = new Wt::WGridLayout();
533 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
535 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
536 Wt::WGridLayout *l = new Wt::WGridLayout();
537 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
539 wtWindow1 = new Viewer_NV(0,nType[0]);
541 wtWindow2 = new Viewer_NV(0,nType[1]);
543 wtWindow3 = new Viewer_NV(0,nType[2]);
545 wtWindow4 = new Viewer_NV(0,nType[3]);
548 l2->addWidget(wtWindow1);
549 l->addWidget(wtWindow2,0,1);
550 l->addWidget(wtWindow3,0,2);
551 l->addWidget(wtWindow4,0,3);
557 l->addWidget(wtWindow2,0,1);
558 l->addWidget(wtWindow3,0,2);
559 l->addWidget(wtWindow4,0,3);
562 l2->addWidget(wtWindow1);
568 wtWindow1->configureWt();
569 wtWindow2->configureWt();
570 wtWindow3->configureWt();
571 wtWindow4->configureWt();
573 wtWindow1->setStyleClass("black-box");
574 wtWindow2->setStyleClass("black-box");
575 wtWindow3->setStyleClass("black-box");
576 wtWindow4->setStyleClass("black-box");
578 bbSetOutputviewer1(wtWindow1->jsRef());
579 bbSetOutputviewer2(wtWindow2->jsRef());
580 bbSetOutputviewer3(wtWindow3->jsRef());
581 bbSetOutputviewer4(wtWindow4->jsRef());
587 bbSetOutputWidget(w);
594 // 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)
596 void ViewerNVWeb::bbUserInitializeProcessing()
599 // THE INITIALIZATION METHOD BODY :
601 // but this is where you should allocate the internal/output pointers
607 // 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)
609 void ViewerNVWeb::bbUserFinalizeProcessing()
612 // THE FINALIZATION METHOD BODY :
614 // but this is where you should desallocate the internal/output pointers