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 Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
94 printf("EED ViewerNVWeb::Process %s\n", bbGetInputImagePath().c_str() );
96 FILE *ff=fopen( bbGetInputImagePath().c_str() , "r" );
107 if (firstTime==false)
113 var volume = new X.volume();\
114 volume.spacing = [0.7,0.7,0.7 ];\
115 volume.file = '" + bbGetInputImagePath() + "';\
116 " +w->jsRef() + ".mVolume = volume;\
117 var center = [0,0,0];\
118 " +w->jsRef() + ".mVolume.center = center;\
119 volume.center = [0,0,0];\
120 setTimeout(function(){\
121 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
122 " + wtWindow1->jsRef() + ".mRenderer.render();\
132 " +w->jsRef() + ".mVolume.file = '" + bbGetInputImagePath() + "';\
133 setTimeout(function(){\
134 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
135 " + wtWindow1->jsRef() + ".mRenderer.render();\
141 w->doJavaScript(jsCom);
151 var volume = new X.volume();\
152 volume.spacing = [0.7,0.7,0.7 ];\
153 volume.file = '" + bbGetInputImagePath() + "';\
154 " +w->jsRef() + ".mVolume = volume;\
155 var center = [0,0,0];\
156 " +w->jsRef() + ".mVolume.center = center;\
157 volume.center = [0,0,0];\
158 setTimeout(function(){\
159 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
160 " + wtWindow1->jsRef() + ".mRenderer.render();\
162 setTimeout(function(){\
163 " + w->jsRef() +".mVolume.upperThreshold =20000;\
164 " + w->jsRef() +".mVolume.windowHigh =1670;\
165 var gui = new dat.GUI();\
166 var volumegui = gui.addFolder('Volume');\
167 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
168 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
169 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
170 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
171 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
172 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
173 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
174 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
175 " + wtWindow2->jsRef() + ".mRenderer.render();\
176 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
177 " + wtWindow3->jsRef() + ".mRenderer.render();\
178 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
179 " + wtWindow4->jsRef() + ".mRenderer.render();\
186 var volume = new X.volume();\
187 volume.spacing = [0.7,0.7,0.7 ];\
188 volume.file = '" + bbGetInputImagePath() + "';\
189 " +w->jsRef() + ".mVolume = volume;\
192 " +w->jsRef() + ".mVolume.center = center;\
193 volume.center = [0,0,0];\
194 setTimeout(function(){\
195 " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
197 " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
198 " + w->jsRef() +".mVolume.upperThreshold =20000;\
199 " + w->jsRef() +".mVolume.windowHigh =1670;\
200 var gui = new dat.GUI();\
201 var volumegui = gui.addFolder('Volume');\
202 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
203 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
204 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
205 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
206 var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
207 var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
208 var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
209 " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
210 " + wtWindow2->jsRef() + ".mRenderer.render();\
211 " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
212 " + wtWindow3->jsRef() + ".mRenderer.render();\
213 " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
214 " + wtWindow4->jsRef() + ".mRenderer.render();\
216 " + wtWindow1->jsRef() + ".mRenderer.render();";
218 w->doJavaScript(jsCom);
219 } //if firsttime == true
222 //Wt::WApplication::instance()->refresh();
223 // wtWindow2->resize(Wt::WLength::Auto, 200);
224 // wtWindow3->resize(Wt::WLength::Auto, 200);
225 // wtWindow4->resize(Wt::WLength::Auto, 200);
228 Wt::WApplication::instance()->refresh();
234 // 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)
236 void ViewerNVWeb::bbUserSetDefaultValues()
239 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
240 // Here we initialize the input 'In' to 0
242 bbSetInputImagePath("");
244 std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
245 bbSetInputnTypeView(nn);
246 bbSetOutputviewer1("");
247 bbSetOutputviewer2("");
248 bbSetOutputviewer3("");
249 bbSetOutputviewer4("");
257 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
259 nType = bbGetInputnTypeView();
261 Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
268 if(nType.size() == 1 )
270 wtWindow1 = new Viewer_NV(w,nType[0]);
271 wtWindow1->configureWt();
272 wtWindow1->setStyleClass("black-box");
273 std::cout<<" PRUEBA 1 RENDERER"<<std::endl;
274 bbSetOutputviewer1(wtWindow1->jsRef());
276 else if(nType.size() == 2)
278 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
279 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
281 wtWindow1 = new Viewer_NV(0,nType[0]);
282 wtWindow2 = new Viewer_NV(0,nType[1]);
285 /*l->addWidget(wtWindow1);
286 l->addWidget(wtWindow2);
291 l->addWidget(wtWindow1);
292 l->addWidget(wtWindow2);
293 l->setResizable(0,true,400);
296 wtWindow1->configureWt();
297 wtWindow2->configureWt();
298 wtWindow1->setStyleClass("black-box");
299 wtWindow2->setStyleClass("black-box");
300 bbSetOutputviewer1(wtWindow1->jsRef());
301 bbSetOutputviewer2(wtWindow2->jsRef());
303 else if(nType.size() == 3)
305 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
306 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
308 Wt::WHBoxLayout *l = new Wt::WHBoxLayout();
309 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
311 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
313 wtWindow1 = new Viewer_NV(0,nType[0]);
315 wtWindow2 = new Viewer_NV(0,nType[1]);
317 wtWindow3 = new Viewer_NV(0,nType[2]);
320 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
321 l->addWidget(wtWindow3);
324 l2->addWidget(wtWindow1);
331 l->addWidget(wtWindow2);
332 l->addWidget(wtWindow3);
333 l->setResizable(0,true,400);
336 l2->addWidget(wtWindow1);
338 l2->setResizable(0,true,400);
341 wtWindow1->configureWt();
342 wtWindow2->configureWt();
343 wtWindow3->configureWt();
344 wtWindow1->setStyleClass("black-box");
345 wtWindow2->setStyleClass("black-box");
346 wtWindow3->setStyleClass("black-box");
347 bbSetOutputviewer1(wtWindow1->jsRef());
348 bbSetOutputviewer2(wtWindow2->jsRef());
349 bbSetOutputviewer3(wtWindow3->jsRef());
352 else if(nType.size() == 4)
355 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
356 Wt::WGridLayout *l = new Wt::WGridLayout();
357 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
359 Wt::WVBoxLayout *l2 = new Wt::WVBoxLayout();
360 Wt::WGridLayout *l = new Wt::WGridLayout();
361 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
363 wtWindow1 = new Viewer_NV(0,nType[0]);
365 wtWindow2 = new Viewer_NV(0,nType[1]);
367 wtWindow3 = new Viewer_NV(0,nType[2]);
369 wtWindow4 = new Viewer_NV(0,nType[3]);
372 l2->addWidget(wtWindow1);
373 l->addWidget(wtWindow2,0,1);
374 l->addWidget(wtWindow3,0,2);
375 l->addWidget(wtWindow4,0,3);
381 l->addWidget(wtWindow2,0,1);
382 l->addWidget(wtWindow3,0,2);
383 l->addWidget(wtWindow4,0,3);
384 l->setColumnResizable(0,true,400);
385 l->setColumnResizable(1,true,400);
386 l->setColumnResizable(2,true,400);
389 l2->addWidget(wtWindow1);
391 l2->setResizable(0,true,600);
395 wtWindow1->setStyleClass("black-box");
396 wtWindow2->setStyleClass("black-box");
397 wtWindow3->setStyleClass("black-box");
398 wtWindow4->setStyleClass("black-box");
400 wtWindow1->configureWt();
401 wtWindow2->configureWt();
402 wtWindow3->configureWt();
403 wtWindow4->configureWt();
405 bbSetOutputviewer1(wtWindow1->jsRef());
406 bbSetOutputviewer2(wtWindow2->jsRef());
407 bbSetOutputviewer3(wtWindow3->jsRef());
408 bbSetOutputviewer4(wtWindow4->jsRef());
410 bbSetOutputViewer1(wtWindow1);
411 bbSetOutputViewer2(wtWindow2);
412 bbSetOutputViewer3(wtWindow3);
413 bbSetOutputViewer4(wtWindow4);
420 bbSetOutputWidget(w);
426 // 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)
428 void ViewerNVWeb::bbUserInitializeProcessing()
431 // THE INITIALIZATION METHOD BODY :
433 // but this is where you should allocate the internal/output pointers
439 // 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)
441 void ViewerNVWeb::bbUserFinalizeProcessing()
444 // THE FINALIZATION METHOD BODY :
446 // but this is where you should desallocate the internal/output pointers