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)
89 //--------------------------------------------------------------------------------------------------------
90 void ViewerNVWeb::Process()
92 printf("EED ViewerNVWeb::Process start\n ");
94 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
98 var volume = new X.volume();\
99 volume.spacing = [0.7,0.7,0.7 ];\
100 volume.file = '" + bbGetInputImagePath() + "';\
101 " +w->jsRef() + ".mVolume = volume;\
102 setTimeout(function(){\
105 " +w->jsRef() + ".mVolume.center = center;\
106 volume.center = [0,0,0];\
107 " + wtWindow1->jsRef() + ".mRenderer.add(" + w->jsRef() + ".mVolume);\
108 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
109 " + w->jsRef() +".mVolume.upperThreshold =20000;\
110 " + w->jsRef() +".mVolume.windowHigh =1670;\
111 var gui = new dat.GUI();\
112 var volumegui = gui.addFolder('Volume');\
113 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
114 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
115 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
116 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
117 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
118 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
119 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
120 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
121 " + wtWindow2->jsRef() + ".mRenderer.render();\
122 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
123 " + wtWindow3->jsRef() + ".mRenderer.render();\
124 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
125 " + wtWindow4->jsRef() + ".mRenderer.render();\
127 " + wtWindow1->jsRef() + ".mRenderer.render();\
131 if (firstTime==false)
135 var volume = new X.volume();\
136 volume.spacing = [0.7,0.7,0.7 ];\
137 volume.file = '" + bbGetInputImagePath() + "';\
138 " +w->jsRef() + ".mVolume = volume;\
139 var center = [0,0,0];\
140 " +w->jsRef() + ".mVolume.center = center;\
141 volume.center = [0,0,0];\
142 setTimeout(function(){\
143 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
144 " + wtWindow1->jsRef() + ".mRenderer.render();\
147 w->doJavaScript(jsCom);
154 var volume = new X.volume();\
155 volume.spacing = [0.7,0.7,0.7 ];\
156 volume.file = '" + bbGetInputImagePath() + "';\
157 " +w->jsRef() + ".mVolume = volume;\
158 var center = [0,0,0];\
159 " +w->jsRef() + ".mVolume.center = center;\
160 volume.center = [0,0,0];\
161 setTimeout(function(){\
162 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
163 " + wtWindow1->jsRef() + ".mRenderer.render();\
165 setTimeout(function(){\
166 " + w->jsRef() +".mVolume.upperThreshold =20000;\
167 " + w->jsRef() +".mVolume.windowHigh =1670;\
168 var gui = new dat.GUI();\
169 var volumegui = gui.addFolder('Volume');\
170 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
171 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
172 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
173 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
174 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
175 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
176 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
177 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
178 " + wtWindow2->jsRef() + ".mRenderer.render();\
179 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
180 " + wtWindow3->jsRef() + ".mRenderer.render();\
181 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
182 " + wtWindow4->jsRef() + ".mRenderer.render();\
187 var volume = new X.volume();\
188 volume.spacing = [0.7,0.7,0.7 ];\
189 volume.file = '" + bbGetInputImagePath() + "';\
190 " +w->jsRef() + ".mVolume = volume;\
193 " +w->jsRef() + ".mVolume.center = center;\
194 volume.center = [0,0,0];\
195 setTimeout(function(){\
196 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
198 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
199 " + w->jsRef() +".mVolume.upperThreshold =20000;\
200 " + w->jsRef() +".mVolume.windowHigh =1670;\
201 var gui = new dat.GUI();\
202 var volumegui = gui.addFolder('Volume');\
203 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
204 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
205 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
206 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
207 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
208 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
209 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
210 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
211 " + wtWindow2->jsRef() + ".mRenderer.render();\
212 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
213 " + wtWindow3->jsRef() + ".mRenderer.render();\
214 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
215 " + wtWindow4->jsRef() + ".mRenderer.render();\
217 " + wtWindow1->jsRef() + ".mRenderer.render();";
219 std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
220 w->doJavaScript(jsCom);
224 //Wt::WApplication::instance()->refresh();
225 // wtWindow2->resize(Wt::WLength::Auto, 200);
226 // wtWindow3->resize(Wt::WLength::Auto, 200);
227 // wtWindow4->resize(Wt::WLength::Auto, 200);
230 Wt::WApplication::instance()->refresh();
233 printf("EED ViewerNVWeb::Process END\n ");
239 // 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)
241 void ViewerNVWeb::bbUserSetDefaultValues()
244 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
245 // Here we initialize the input 'In' to 0
247 bbSetInputImagePath("");
249 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
250 bbSetInputnTypeView(nn);
251 bbSetOutputviewer1("");
252 bbSetOutputviewer2("");
253 bbSetOutputviewer3("");
254 bbSetOutputviewer4("");
262 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
264 nType = bbGetInputnTypeView();
266 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
273 if(nType.size() == 1 )
275 wtWindow1 = new Viewer_NV(w,nType[0]);
276 wtWindow1->configureWt();
277 wtWindow1->setStyleClass("black-box");
278 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
279 bbSetOutputviewer1(wtWindow1->jsRef());
281 else if(nType.size() == 2)
283 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
284 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
286 wtWindow1 = new Viewer_NV(0,nType[0]);
287 wtWindow2 = new Viewer_NV(0,nType[1]);
290 /*l->addWidget(wtWindow1);
291 l->addWidget(wtWindow2);
296 l->addWidget(wtWindow1);
297 l->addWidget(wtWindow2);
298 l->setResizable(0,true,400);
301 wtWindow1->configureWt();
302 wtWindow2->configureWt();
303 wtWindow1->setStyleClass("black-box");
304 wtWindow2->setStyleClass("black-box");
305 bbSetOutputviewer1(wtWindow1->jsRef());
306 bbSetOutputviewer2(wtWindow2->jsRef());
308 else if(nType.size() == 3)
310 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
311 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
313 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
314 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
316 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
318 wtWindow1 = new Viewer_NV(0,nType[0]);
320 wtWindow2 = new Viewer_NV(0,nType[1]);
322 wtWindow3 = new Viewer_NV(0,nType[2]);
325 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
326 l->addWidget(wtWindow3);
329 l2->addWidget(wtWindow1);
336 l->addWidget(wtWindow2);
337 l->addWidget(wtWindow3);
338 l->setResizable(0,true,400);
341 l2->addWidget(wtWindow1);
343 l2->setResizable(0,true,400);
346 wtWindow1->configureWt();
347 wtWindow2->configureWt();
348 wtWindow3->configureWt();
349 wtWindow1->setStyleClass("black-box");
350 wtWindow2->setStyleClass("black-box");
351 wtWindow3->setStyleClass("black-box");
352 bbSetOutputviewer1(wtWindow1->jsRef());
353 bbSetOutputviewer2(wtWindow2->jsRef());
354 bbSetOutputviewer3(wtWindow3->jsRef());
357 else if(nType.size() == 4)
360 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
361 Wt::WGridLayout *l = new Wt::WGridLayout();
362 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
364 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
365 Wt::WGridLayout *l = new Wt::WGridLayout();
366 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
368 wtWindow1 = new Viewer_NV(0,nType[0]);
370 wtWindow2 = new Viewer_NV(0,nType[1]);
372 wtWindow3 = new Viewer_NV(0,nType[2]);
374 wtWindow4 = new Viewer_NV(0,nType[3]);
377 l2->addWidget(wtWindow1);
378 l->addWidget(wtWindow2,0,1);
379 l->addWidget(wtWindow3,0,2);
380 l->addWidget(wtWindow4,0,3);
386 l->addWidget(wtWindow2,0,1);
387 l->addWidget(wtWindow3,0,2);
388 l->addWidget(wtWindow4,0,3);
389 l->setColumnResizable(0,true,400);
390 l->setColumnResizable(1,true,400);
391 l->setColumnResizable(2,true,400);
394 l2->addWidget(wtWindow1);
396 l2->setResizable(0,true,600);
400 wtWindow1->setStyleClass("black-box");
401 wtWindow2->setStyleClass("black-box");
402 wtWindow3->setStyleClass("black-box");
403 wtWindow4->setStyleClass("black-box");
405 wtWindow1->configureWt();
406 wtWindow2->configureWt();
407 wtWindow3->configureWt();
408 wtWindow4->configureWt();
410 bbSetOutputviewer1(wtWindow1->jsRef());
411 bbSetOutputviewer2(wtWindow2->jsRef());
412 bbSetOutputviewer3(wtWindow3->jsRef());
413 bbSetOutputviewer4(wtWindow4->jsRef());
415 bbSetOutputViewer1(wtWindow1);
416 bbSetOutputViewer2(wtWindow2);
417 bbSetOutputViewer3(wtWindow3);
418 bbSetOutputViewer4(wtWindow4);
425 bbSetOutputWidget(w);
431 // 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)
433 void ViewerNVWeb::bbUserInitializeProcessing()
436 // THE INITIALIZATION METHOD BODY :
438 // but this is where you should allocate the internal/output pointers
444 // 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)
446 void ViewerNVWeb::bbUserFinalizeProcessing()
449 // THE FINALIZATION METHOD BODY :
451 // but this is where you should desallocate the internal/output pointers