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, 700);
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);\
196 setTimeout(function(){\
197 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
198 " + wtWindow2->jsRef() + ".mRenderer.render();";
204 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
205 " + wtWindow3->jsRef() + ".mRenderer.render();";
211 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
212 " + wtWindow4->jsRef() + ".mRenderer.render();\
213 " + w->jsRef() +".mVolume.upperTheshold =0;\
214 " + w->jsRef() +".mVolume.windowLow =0;\
215 " + w->jsRef() +".mVolume.windowHigh =1900;";
219 var gui = new dat.GUI();\
220 var volumegui = gui.addFolder('Volume');\
221 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
222 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
223 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
224 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
226 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
227 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);";
240 std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
241 //w->doJavaScript(jsCom);
243 Wt::WApplication::instance()->refresh();
249 void ViewerNVWeb::Process()
253 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
258 std::cout<<"Process ----"<<std::endl;
261 var volume = new X.volume();\
262 volume.spacing = [0.7,0.7,0.7 ];\
263 volume.center = [0,0,0];\
264 volume.file = '" + bbGetInputImagePath() + "';\
265 " + w->jsRef() +".mVolume = volume;\
266 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
267 " + wtWindow1->jsRef() + ".onShowTime = function(){";
273 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
274 " + wtWindow2->jsRef() + ".mRenderer.render();";
280 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
281 " + wtWindow3->jsRef() + ".mRenderer.render();";
287 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
288 " + wtWindow4->jsRef() + ".mRenderer.render();\
289 " + w->jsRef() +".mVolume.upperTheshold =0;\
290 " + w->jsRef() +".mVolume.windowLow =0;\
291 " + w->jsRef() +".mVolume.windowHigh =1900;";
295 var gui = new dat.GUI();\
296 var volumegui = gui.addFolder('Volume');\
297 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
298 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
299 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
300 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
302 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
303 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);";
309 " + wtWindow1->jsRef() + ".mRenderer.render();";
313 std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
314 //w->doJavaScript(jsCom);
316 Wt::WApplication::instance()->refresh();
323 //--------------------------------------------------------------------------------------------------------
324 //--------------------------------------------------------------------------------------------------------
328 void ViewerNVWeb::loadImage()
332 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
335 std::cout<<"Process ----"<<std::endl;
339 var volume = new X.volume();\
340 volume.spacing = [0.7,0.7,0.7 ];\
341 volume.file = '" + bbGetInputImagePath() + "';\
342 " +w->jsRef() + ".mVolume = volume;\
343 setTimeout(function(){\
346 " +w->jsRef() + ".mVolume.center = center;\
347 volume.center = [0,0,0];\
348 " + wtWindow1->jsRef() + ".mRenderer.add(" + w->jsRef() + ".mVolume);\
349 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
350 " + w->jsRef() +".mVolume.upperThreshold =20000;\
351 " + w->jsRef() +".mVolume.windowHigh =1670;\
352 var gui = new dat.GUI();\
353 var volumegui = gui.addFolder('Volume');\
354 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
355 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
356 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
357 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
358 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
359 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
360 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
361 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
362 " + wtWindow2->jsRef() + ".mRenderer.render();\
363 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
364 " + wtWindow3->jsRef() + ".mRenderer.render();\
365 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
366 " + wtWindow4->jsRef() + ".mRenderer.render();\
368 " + wtWindow1->jsRef() + ".mRenderer.render();\
372 var volume = new X.volume();\
373 volume.spacing = [0.7,0.7,0.7 ];\
374 volume.file = '" + bbGetInputImagePath() + "';\
375 " +w->jsRef() + ".mVolume = volume;\
378 " +w->jsRef() + ".mVolume.center = center;\
379 volume.center = [0,0,0];\
380 setTimeout(function(){\
381 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
382 " + wtWindow1->jsRef() + ".mRenderer.render();\
384 setTimeout(function(){\
385 " + w->jsRef() +".mVolume.upperThreshold =20000;\
386 " + w->jsRef() +".mVolume.windowHigh =1670;\
387 var gui = new dat.GUI();\
388 var volumegui = gui.addFolder('Volume');\
389 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
390 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
391 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
392 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
393 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
394 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
395 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
396 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
397 " + wtWindow2->jsRef() + ".mRenderer.render();\
398 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
399 " + wtWindow3->jsRef() + ".mRenderer.render();\
400 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
401 " + wtWindow4->jsRef() + ".mRenderer.render();\
405 var volume = new X.volume();\
406 volume.spacing = [0.7,0.7,0.7 ];\
407 volume.file = '" + bbGetInputImagePath() + "';\
408 " +w->jsRef() + ".mVolume = volume;\
411 " +w->jsRef() + ".mVolume.center = center;\
412 volume.center = [0,0,0];\
413 setTimeout(function(){\
414 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
416 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
417 " + w->jsRef() +".mVolume.upperThreshold =20000;\
418 " + w->jsRef() +".mVolume.windowHigh =1670;\
419 var gui = new dat.GUI();\
420 var volumegui = gui.addFolder('Volume');\
421 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
422 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
423 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
424 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
425 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
426 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
427 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
428 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
429 " + wtWindow2->jsRef() + ".mRenderer.render();\
430 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
431 " + wtWindow3->jsRef() + ".mRenderer.render();\
432 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
433 " + wtWindow4->jsRef() + ".mRenderer.render();\
435 " + wtWindow1->jsRef() + ".mRenderer.render();";
441 std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
442 w->doJavaScript(jsCom);
445 //Wt::WApplication::instance()->refresh();
446 // wtWindow2->resize(Wt::WLength::Auto, 200);
447 // wtWindow3->resize(Wt::WLength::Auto, 200);
448 // wtWindow4->resize(Wt::WLength::Auto, 200);
451 Wt::WApplication::instance()->refresh();
459 // 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)
461 void ViewerNVWeb::bbUserSetDefaultValues()
464 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
465 // Here we initialize the input 'In' to 0
466 bbSetInputImagePath("");
468 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
469 bbSetInputnTypeView(nn);
470 bbSetOutputviewer1("");
471 bbSetOutputviewer2("");
472 bbSetOutputviewer3("");
473 bbSetOutputviewer4("");
481 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
483 nType = bbGetInputnTypeView();
485 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
492 if(nType.size() == 1 )
494 wtWindow1 = new Viewer_NV(w,nType[0]);
495 wtWindow1->configureWt();
496 wtWindow1->setStyleClass("black-box");
497 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
498 bbSetOutputviewer1(wtWindow1->jsRef());
500 else if(nType.size() == 2)
502 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
503 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
505 wtWindow1 = new Viewer_NV(0,nType[0]);
506 wtWindow2 = new Viewer_NV(0,nType[1]);
509 /*l->addWidget(wtWindow1);
510 l->addWidget(wtWindow2);
515 l->addWidget(wtWindow1);
516 l->addWidget(wtWindow2);
517 l->setResizable(0,true,400);
520 wtWindow1->configureWt();
521 wtWindow2->configureWt();
522 wtWindow1->setStyleClass("black-box");
523 wtWindow2->setStyleClass("black-box");
524 bbSetOutputviewer1(wtWindow1->jsRef());
525 bbSetOutputviewer2(wtWindow2->jsRef());
527 else if(nType.size() == 3)
529 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
530 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
532 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
533 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
535 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
537 wtWindow1 = new Viewer_NV(0,nType[0]);
539 wtWindow2 = new Viewer_NV(0,nType[1]);
541 wtWindow3 = new Viewer_NV(0,nType[2]);
544 l->addWidget(wtWindow2);
545 l->addWidget(wtWindow3);
548 l2->addWidget(wtWindow1);
555 l->addWidget(wtWindow2);
556 l->addWidget(wtWindow3);
557 l->setResizable(0,true,400);
560 l2->addWidget(wtWindow1);
562 l2->setResizable(0,true,400);
565 wtWindow1->configureWt();
566 wtWindow2->configureWt();
567 wtWindow3->configureWt();
568 wtWindow1->setStyleClass("black-box");
569 wtWindow2->setStyleClass("black-box");
570 wtWindow3->setStyleClass("black-box");
571 bbSetOutputviewer1(wtWindow1->jsRef());
572 bbSetOutputviewer2(wtWindow2->jsRef());
573 bbSetOutputviewer3(wtWindow3->jsRef());
576 else if(nType.size() == 4)
579 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
580 Wt::WGridLayout *l = new Wt::WGridLayout();
581 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
583 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
584 Wt::WGridLayout *l = new Wt::WGridLayout();
585 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
587 wtWindow1 = new Viewer_NV(0,nType[0]);
589 wtWindow2 = new Viewer_NV(0,nType[1]);
591 wtWindow3 = new Viewer_NV(0,nType[2]);
593 wtWindow4 = new Viewer_NV(0,nType[3]);
596 l2->addWidget(wtWindow1);
597 l->addWidget(wtWindow2,0,1);
598 l->addWidget(wtWindow3,0,2);
599 l->addWidget(wtWindow4,0,3);
605 l->addWidget(wtWindow2,0,1);
606 l->addWidget(wtWindow3,0,2);
607 l->addWidget(wtWindow4,0,3);
608 l->setColumnResizable(0,true,400);
609 l->setColumnResizable(1,true,400);
610 l->setColumnResizable(2,true,400);
613 l2->addWidget(wtWindow1);
615 l2->setResizable(0,true,400);
619 wtWindow1->setStyleClass("black-box");
620 wtWindow2->setStyleClass("black-box");
621 wtWindow3->setStyleClass("black-box");
622 wtWindow4->setStyleClass("black-box");
624 wtWindow1->configureWt();
625 wtWindow2->configureWt();
626 wtWindow3->configureWt();
627 wtWindow4->configureWt();
629 bbSetOutputviewer1(wtWindow1->jsRef());
630 bbSetOutputviewer2(wtWindow2->jsRef());
631 bbSetOutputviewer3(wtWindow3->jsRef());
632 bbSetOutputviewer4(wtWindow4->jsRef());
638 bbSetOutputWidget(w);
645 // 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)
647 void ViewerNVWeb::bbUserInitializeProcessing()
650 // THE INITIALIZATION METHOD BODY :
652 // but this is where you should allocate the internal/output pointers
658 // 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)
660 void ViewerNVWeb::bbUserFinalizeProcessing()
663 // THE FINALIZATION METHOD BODY :
665 // but this is where you should desallocate the internal/output pointers