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();\
371 var volume = new X.volume();\
372 volume.spacing = [0.7,0.7,0.7 ];\
373 volume.file = '" + bbGetInputImagePath() + "';\
374 " +w->jsRef() + ".mVolume = volume;\
377 " +w->jsRef() + ".mVolume.center = center;\
378 volume.center = [0,0,0];\
379 setTimeout(function(){\
380 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
382 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
383 " + w->jsRef() +".mVolume.upperThreshold =20000;\
384 " + w->jsRef() +".mVolume.windowHigh =1670;\
385 var gui = new dat.GUI();\
386 var volumegui = gui.addFolder('Volume');\
387 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
388 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
389 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
390 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
391 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
392 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
393 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
394 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
395 " + wtWindow2->jsRef() + ".mRenderer.render();\
396 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
397 " + wtWindow3->jsRef() + ".mRenderer.render();\
398 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
399 " + wtWindow4->jsRef() + ".mRenderer.render();\
401 " + wtWindow1->jsRef() + ".mRenderer.render();";
407 std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
408 w->doJavaScript(jsCom);
411 //Wt::WApplication::instance()->refresh();
412 // wtWindow2->resize(Wt::WLength::Auto, 200);
413 // wtWindow3->resize(Wt::WLength::Auto, 200);
414 // wtWindow4->resize(Wt::WLength::Auto, 200);
417 Wt::WApplication::instance()->refresh();
425 // 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 void ViewerNVWeb::bbUserSetDefaultValues()
430 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
431 // Here we initialize the input 'In' to 0
432 bbSetInputImagePath("");
434 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
435 bbSetInputnTypeView(nn);
436 bbSetOutputviewer1("");
437 bbSetOutputviewer2("");
438 bbSetOutputviewer3("");
439 bbSetOutputviewer4("");
447 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
449 nType = bbGetInputnTypeView();
451 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
458 if(nType.size() == 1 )
460 wtWindow1 = new Viewer_NV(w,nType[0]);
461 wtWindow1->configureWt();
462 wtWindow1->setStyleClass("black-box");
463 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
464 bbSetOutputviewer1(wtWindow1->jsRef());
466 else if(nType.size() == 2)
468 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
469 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
471 wtWindow1 = new Viewer_NV(0,nType[0]);
472 wtWindow2 = new Viewer_NV(0,nType[1]);
475 /*l->addWidget(wtWindow1);
476 l->addWidget(wtWindow2);
481 l->addWidget(wtWindow1);
482 l->addWidget(wtWindow2);
486 wtWindow1->configureWt();
487 wtWindow2->configureWt();
488 wtWindow1->setStyleClass("black-box");
489 wtWindow2->setStyleClass("black-box");
490 bbSetOutputviewer1(wtWindow1->jsRef());
491 bbSetOutputviewer2(wtWindow2->jsRef());
493 else if(nType.size() == 3)
495 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
496 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
498 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
499 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
501 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
503 wtWindow1 = new Viewer_NV(0,nType[0]);
505 wtWindow2 = new Viewer_NV(0,nType[1]);
507 wtWindow3 = new Viewer_NV(0,nType[2]);
510 l->addWidget(wtWindow2);
511 l->addWidget(wtWindow3);
514 l2->addWidget(wtWindow1);
521 l->addWidget(wtWindow2);
522 l->addWidget(wtWindow3);
525 l2->addWidget(wtWindow1);
530 wtWindow1->configureWt();
531 wtWindow2->configureWt();
532 wtWindow3->configureWt();
533 wtWindow1->setStyleClass("black-box");
534 wtWindow2->setStyleClass("black-box");
535 wtWindow3->setStyleClass("black-box");
536 bbSetOutputviewer1(wtWindow1->jsRef());
537 bbSetOutputviewer2(wtWindow2->jsRef());
538 bbSetOutputviewer3(wtWindow3->jsRef());
541 else if(nType.size() == 4)
544 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
545 Wt::WGridLayout *l = new Wt::WGridLayout();
546 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
548 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
549 Wt::WGridLayout *l = new Wt::WGridLayout();
550 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
552 wtWindow1 = new Viewer_NV(0,nType[0]);
554 wtWindow2 = new Viewer_NV(0,nType[1]);
556 wtWindow3 = new Viewer_NV(0,nType[2]);
558 wtWindow4 = new Viewer_NV(0,nType[3]);
561 l2->addWidget(wtWindow1);
562 l->addWidget(wtWindow2,0,1);
563 l->addWidget(wtWindow3,0,2);
564 l->addWidget(wtWindow4,0,3);
570 l->addWidget(wtWindow2,0,1);
571 l->addWidget(wtWindow3,0,2);
572 l->addWidget(wtWindow4,0,3);
575 l2->addWidget(wtWindow1);
581 wtWindow1->setStyleClass("black-box");
582 wtWindow2->setStyleClass("black-box");
583 wtWindow3->setStyleClass("black-box");
584 wtWindow4->setStyleClass("black-box");
586 wtWindow1->configureWt();
587 wtWindow2->configureWt();
588 wtWindow3->configureWt();
589 wtWindow4->configureWt();
591 bbSetOutputviewer1(wtWindow1->jsRef());
592 bbSetOutputviewer2(wtWindow2->jsRef());
593 bbSetOutputviewer3(wtWindow3->jsRef());
594 bbSetOutputviewer4(wtWindow4->jsRef());
600 bbSetOutputWidget(w);
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::bbUserInitializeProcessing()
612 // THE INITIALIZATION METHOD BODY :
614 // but this is where you should allocate the internal/output pointers
620 // 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)
622 void ViewerNVWeb::bbUserFinalizeProcessing()
625 // THE FINALIZATION METHOD BODY :
627 // but this is where you should desallocate the internal/output pointers