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);
78 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wt,ViewerNVWeb)
79 BBTK_BLACK_BOX_IMPLEMENTATION(ViewerNVWeb,bbtk::WtBlackBox);
81 // 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)
87 //--------------------------------------------------------------------------------------------------------
88 void ViewerNVWeb::Process()
90 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
93 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
94 fprintf(flog,"EED %p ViewerNVWeb::Process START %s\n", this, bbGetInputImagePath().c_str() );
97 FILE *ff=fopen( bbGetInputImagePath().c_str() , "r" );
108 if (firstTime==false)
114 var volume = new X.volume();\
115 volume.spacing = [0.7,0.7,0.7 ];\
116 volume.file = '" + bbGetInputImagePath() + "';\
117 " +w->jsRef() + ".mVolume = volume;\
118 var center = [0,0,0];\
119 " +w->jsRef() + ".mVolume.center = center;\
120 volume.center = [0,0,0];\
121 setTimeout(function(){\
122 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
123 " + wtWindow1->jsRef() + ".mRenderer.render();\
130 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
131 fprintf(flog," EED ViewerNVWeb::Process firsttime = false\n" );
136 " +w->jsRef() + ".mVolume.file = '" + bbGetInputImagePath() + "';\
137 " +w->jsRef() + ".mVolume.modified(true);\
138 " + wtWindow1->jsRef() + ".mRenderer.render();\
139 alert('firsttime=false');\
144 w->doJavaScript(jsCom);
151 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
152 fprintf(flog," EED ViewerNVWeb::Process firsttime = true \n" );
158 var volume = new X.volume();\
159 volume.spacing = [0.7,0.7,0.7 ];\
160 volume.file = '" + bbGetInputImagePath() + "';\
161 " +w->jsRef() + ".mVolume = volume;\
162 var center = [0,0,0];\
163 " +w->jsRef() + ".mVolume.center = center;\
164 volume.center = [0,0,0];\
165 setTimeout(function(){\
166 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
167 " + wtWindow1->jsRef() + ".mRenderer.render();\
168 alert('(1) firsttime=true');\
170 setTimeout(function(){\
171 " + w->jsRef() +".mVolume.upperThreshold =20000;\
172 " + w->jsRef() +".mVolume.windowHigh =1670;\
173 var gui = new dat.GUI();\
174 var volumegui = gui.addFolder('Volume');\
175 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
176 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
177 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
178 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
179 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
180 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
181 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
182 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
183 " + wtWindow2->jsRef() + ".mRenderer.render();\
184 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
185 " + wtWindow3->jsRef() + ".mRenderer.render();\
186 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
187 " + wtWindow4->jsRef() + ".mRenderer.render();\
188 alert('(2) firsttime=true');\
197 var volume = new X.volume();\
198 volume.spacing = [0.7,0.7,0.7 ];\
199 volume.file = '" + bbGetInputImagePath() + "';\
200 " +w->jsRef() + ".mVolume = volume;\
203 " +w->jsRef() + ".mVolume.center = center;\
204 volume.center = [0,0,0];\
205 setTimeout(function(){\
206 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
208 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
209 " + w->jsRef() +".mVolume.upperThreshold =20000;\
210 " + w->jsRef() +".mVolume.windowHigh =1670;\
211 var gui = new dat.GUI();\
212 var volumegui = gui.addFolder('Volume');\
213 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
214 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
215 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
216 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
217 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
218 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
219 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
220 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
221 " + wtWindow2->jsRef() + ".mRenderer.render();\
222 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
223 " + wtWindow3->jsRef() + ".mRenderer.render();\
224 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
225 " + wtWindow4->jsRef() + ".mRenderer.render();\
227 " + wtWindow1->jsRef() + ".mRenderer.render();";
229 w->doJavaScript(jsCom);
230 } //if firsttime == true
233 //Wt::WApplication::instance()->refresh();
234 // wtWindow2->resize(Wt::WLength::Auto, 200);
235 // wtWindow3->resize(Wt::WLength::Auto, 200);
236 // wtWindow4->resize(Wt::WLength::Auto, 200);
238 flog=fopen("/var/www/testwtdbg/docroot/appli1/imagesTMP/bbtk-Web.log","a+");
239 fprintf(flog,"EED ViewerNVWeb::Process END \n" );
243 Wt::WApplication::instance()->refresh();
249 // 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)
251 void ViewerNVWeb::bbUserSetDefaultValues()
254 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
255 // Here we initialize the input 'In' to 0
257 bbSetInputImagePath("");
259 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
260 bbSetInputnTypeView(nn);
261 bbSetOutputviewer1("");
262 bbSetOutputviewer2("");
263 bbSetOutputviewer3("");
264 bbSetOutputviewer4("");
272 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
274 nType = bbGetInputnTypeView();
276 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
283 if(nType.size() == 1 )
285 wtWindow1 = new Viewer_NV(w,nType[0]);
286 wtWindow1->configureWt();
287 wtWindow1->setStyleClass("black-box");
288 bbSetOutputviewer1(wtWindow1->jsRef());
290 else if(nType.size() == 2)
292 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
293 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
295 wtWindow1 = new Viewer_NV(0,nType[0]);
296 wtWindow2 = new Viewer_NV(0,nType[1]);
299 /*l->addWidget(wtWindow1);
300 l->addWidget(wtWindow2);
305 l->addWidget(wtWindow1);
306 l->addWidget(wtWindow2);
307 l->setResizable(0,true,400);
310 wtWindow1->configureWt();
311 wtWindow2->configureWt();
312 wtWindow1->setStyleClass("black-box");
313 wtWindow2->setStyleClass("black-box");
314 bbSetOutputviewer1(wtWindow1->jsRef());
315 bbSetOutputviewer2(wtWindow2->jsRef());
317 else if(nType.size() == 3)
319 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
320 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
322 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
323 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
325 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
327 wtWindow1 = new Viewer_NV(0,nType[0]);
329 wtWindow2 = new Viewer_NV(0,nType[1]);
331 wtWindow3 = new Viewer_NV(0,nType[2]);
334 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
335 l->addWidget(wtWindow3);
338 l2->addWidget(wtWindow1);
345 l->addWidget(wtWindow2);
346 l->addWidget(wtWindow3);
347 l->setResizable(0,true,400);
350 l2->addWidget(wtWindow1);
352 l2->setResizable(0,true,400);
355 wtWindow1->configureWt();
356 wtWindow2->configureWt();
357 wtWindow3->configureWt();
358 wtWindow1->setStyleClass("black-box");
359 wtWindow2->setStyleClass("black-box");
360 wtWindow3->setStyleClass("black-box");
361 bbSetOutputviewer1(wtWindow1->jsRef());
362 bbSetOutputviewer2(wtWindow2->jsRef());
363 bbSetOutputviewer3(wtWindow3->jsRef());
366 else if(nType.size() == 4)
369 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
370 Wt::WGridLayout *l = new Wt::WGridLayout();
371 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
373 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
374 Wt::WGridLayout *l = new Wt::WGridLayout();
375 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
377 wtWindow1 = new Viewer_NV(0,nType[0]);
379 wtWindow2 = new Viewer_NV(0,nType[1]);
381 wtWindow3 = new Viewer_NV(0,nType[2]);
383 wtWindow4 = new Viewer_NV(0,nType[3]);
386 l2->addWidget(wtWindow1);
387 l->addWidget(wtWindow2,0,1);
388 l->addWidget(wtWindow3,0,2);
389 l->addWidget(wtWindow4,0,3);
395 l->addWidget(wtWindow2,0,1);
396 l->addWidget(wtWindow3,0,2);
397 l->addWidget(wtWindow4,0,3);
398 l->setColumnResizable(0,true,400);
399 l->setColumnResizable(1,true,400);
400 l->setColumnResizable(2,true,400);
403 l2->addWidget(wtWindow1);
405 l2->setResizable(0,true,600);
409 wtWindow1->setStyleClass("black-box");
410 wtWindow2->setStyleClass("black-box");
411 wtWindow3->setStyleClass("black-box");
412 wtWindow4->setStyleClass("black-box");
414 wtWindow1->configureWt();
415 wtWindow2->configureWt();
416 wtWindow3->configureWt();
417 wtWindow4->configureWt();
419 bbSetOutputviewer1(wtWindow1->jsRef());
420 bbSetOutputviewer2(wtWindow2->jsRef());
421 bbSetOutputviewer3(wtWindow3->jsRef());
422 bbSetOutputviewer4(wtWindow4->jsRef());
424 bbSetOutputViewer1(wtWindow1);
425 bbSetOutputViewer2(wtWindow2);
426 bbSetOutputViewer3(wtWindow3);
427 bbSetOutputViewer4(wtWindow4);
434 bbSetOutputWidget(w);
440 // 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)
442 void ViewerNVWeb::bbUserInitializeProcessing()
445 // THE INITIALIZATION METHOD BODY :
447 // but this is where you should allocate the internal/output pointers
453 // 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)
455 void ViewerNVWeb::bbUserFinalizeProcessing()
458 // THE FINALIZATION METHOD BODY :
460 // but this is where you should desallocate the internal/output pointers