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;
338 var volume = new X.volume();\
339 volume.spacing = [0.7,0.7,0.7 ];\
340 volume.file = '" + bbGetInputImagePath() + "';\
341 " +w->jsRef() + ".mVolume = volume;\
344 " +w->jsRef() + ".mVolume.center = center;\
345 volume.center = [0,0,0];\
346 setTimeout(function(){\
347 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
348 " + wtWindow1->jsRef() + ".mRenderer.render();\
350 setTimeout(function(){\
351 " + w->jsRef() +".mVolume.upperThreshold =20000;\
352 " + w->jsRef() +".mVolume.windowHigh =1670;\
353 var gui = new dat.GUI();\
354 var volumegui = gui.addFolder('Volume');\
355 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
356 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
357 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
358 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
359 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
360 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
361 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
362 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
363 " + wtWindow2->jsRef() + ".mRenderer.render();\
364 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
365 " + wtWindow3->jsRef() + ".mRenderer.render();\
366 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
367 " + wtWindow4->jsRef() + ".mRenderer.render();\
369 setTimeout(function(){\
370 " + wtWindow2->jsRef() + ".mRenderer.render();\
371 " + wtWindow3->jsRef() + ".mRenderer.render();\
372 " + wtWindow4->jsRef() + ".mRenderer.render();\
376 var volume = new X.volume();\
377 volume.spacing = [0.7,0.7,0.7 ];\
378 volume.file = '" + bbGetInputImagePath() + "';\
379 " +w->jsRef() + ".mVolume = volume;\
382 " +w->jsRef() + ".mVolume.center = center;\
383 volume.center = [0,0,0];\
384 setTimeout(function(){\
385 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
387 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
388 " + w->jsRef() +".mVolume.upperThreshold =20000;\
389 " + w->jsRef() +".mVolume.windowHigh =1670;\
390 var gui = new dat.GUI();\
391 var volumegui = gui.addFolder('Volume');\
392 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
393 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
394 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
395 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
396 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
397 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
398 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
399 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
400 " + wtWindow2->jsRef() + ".mRenderer.render();\
401 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
402 " + wtWindow3->jsRef() + ".mRenderer.render();\
403 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
404 " + wtWindow4->jsRef() + ".mRenderer.render();\
406 " + wtWindow1->jsRef() + ".mRenderer.render();";
412 std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
413 w->doJavaScript(jsCom);
416 //Wt::WApplication::instance()->refresh();
417 // wtWindow2->resize(Wt::WLength::Auto, 200);
418 // wtWindow3->resize(Wt::WLength::Auto, 200);
419 // wtWindow4->resize(Wt::WLength::Auto, 200);
422 Wt::WApplication::instance()->refresh();
430 // 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)
432 void ViewerNVWeb::bbUserSetDefaultValues()
435 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
436 // Here we initialize the input 'In' to 0
437 bbSetInputImagePath("");
439 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
440 bbSetInputnTypeView(nn);
441 bbSetOutputviewer1("");
442 bbSetOutputviewer2("");
443 bbSetOutputviewer3("");
444 bbSetOutputviewer4("");
452 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
454 nType = bbGetInputnTypeView();
456 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
463 if(nType.size() == 1 )
465 wtWindow1 = new Viewer_NV(w,nType[0]);
466 wtWindow1->configureWt();
467 wtWindow1->setStyleClass("black-box");
468 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
469 bbSetOutputviewer1(wtWindow1->jsRef());
471 else if(nType.size() == 2)
473 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
474 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
476 wtWindow1 = new Viewer_NV(0,nType[0]);
477 wtWindow2 = new Viewer_NV(0,nType[1]);
480 /*l->addWidget(wtWindow1);
481 l->addWidget(wtWindow2);
486 l->addWidget(wtWindow1);
487 l->addWidget(wtWindow2);
491 wtWindow1->configureWt();
492 wtWindow2->configureWt();
493 wtWindow1->setStyleClass("black-box");
494 wtWindow2->setStyleClass("black-box");
495 bbSetOutputviewer1(wtWindow1->jsRef());
496 bbSetOutputviewer2(wtWindow2->jsRef());
498 else if(nType.size() == 3)
500 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
501 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
503 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
504 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
506 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
508 wtWindow1 = new Viewer_NV(0,nType[0]);
510 wtWindow2 = new Viewer_NV(0,nType[1]);
512 wtWindow3 = new Viewer_NV(0,nType[2]);
515 l->addWidget(wtWindow2);
516 l->addWidget(wtWindow3);
519 l2->addWidget(wtWindow1);
526 l->addWidget(wtWindow2);
527 l->addWidget(wtWindow3);
530 l2->addWidget(wtWindow1);
535 wtWindow1->configureWt();
536 wtWindow2->configureWt();
537 wtWindow3->configureWt();
538 wtWindow1->setStyleClass("black-box");
539 wtWindow2->setStyleClass("black-box");
540 wtWindow3->setStyleClass("black-box");
541 bbSetOutputviewer1(wtWindow1->jsRef());
542 bbSetOutputviewer2(wtWindow2->jsRef());
543 bbSetOutputviewer3(wtWindow3->jsRef());
546 else if(nType.size() == 4)
549 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
550 Wt::WGridLayout *l = new Wt::WGridLayout();
551 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
553 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
554 Wt::WGridLayout *l = new Wt::WGridLayout();
555 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
557 wtWindow1 = new Viewer_NV(0,nType[0]);
559 wtWindow2 = new Viewer_NV(0,nType[1]);
561 wtWindow3 = new Viewer_NV(0,nType[2]);
563 wtWindow4 = new Viewer_NV(0,nType[3]);
566 l2->addWidget(wtWindow1);
567 l->addWidget(wtWindow2,0,1);
568 l->addWidget(wtWindow3,0,2);
569 l->addWidget(wtWindow4,0,3);
575 l->addWidget(wtWindow2,0,1);
576 l->addWidget(wtWindow3,0,2);
577 l->addWidget(wtWindow4,0,3);
580 l2->addWidget(wtWindow1);
586 wtWindow1->setStyleClass("black-box");
587 wtWindow2->setStyleClass("black-box");
588 wtWindow3->setStyleClass("black-box");
589 wtWindow4->setStyleClass("black-box");
591 wtWindow1->configureWt();
592 wtWindow2->configureWt();
593 wtWindow3->configureWt();
594 wtWindow4->configureWt();
596 bbSetOutputviewer1(wtWindow1->jsRef());
597 bbSetOutputviewer2(wtWindow2->jsRef());
598 bbSetOutputviewer3(wtWindow3->jsRef());
599 bbSetOutputviewer4(wtWindow4->jsRef());
605 bbSetOutputWidget(w);
612 // 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)
614 void ViewerNVWeb::bbUserInitializeProcessing()
617 // THE INITIALIZATION METHOD BODY :
619 // but this is where you should allocate the internal/output pointers
625 // 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)
627 void ViewerNVWeb::bbUserFinalizeProcessing()
630 // THE FINALIZATION METHOD BODY :
632 // but this is where you should desallocate the internal/output pointers