2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ */
28 /*=========================================================================
31 Module: $RCSfile: bbwxvtkViewer3D.cxx,v $
33 Date: $Date: 2012/11/16 08:52:36 $
34 Version: $Revision: 1.23 $
36 =========================================================================*/
43 #ifdef _USE_WXWIDGETS_
46 #include "bbwxvtkViewer3D.h"
47 #include "bbwxvtkPackage.h"
49 #include "vtkCamera.h"
55 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer3D);
57 //-------------------------------------------------------------------------
58 Viewer3DWidget::Viewer3DWidget(Viewer3D* box, wxWindow *parent, bool stereo)
60 wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
63 wxPanel *panel = this;
65 wxvtkrenderwindowinteractor = new crea::wxVTKRenderWindowInteractor(panel,-1);
66 wxvtkrenderwindowinteractor->UseCaptureMouseOn();
68 renderer = vtkRenderer::New();
69 renderwindow = vtkRenderWindow::New();
71 renderwindow->AddRenderer(renderer);
74 renderwindow->SetStereoCapableWindow(1);
76 // renderwindow->SetStereoTypeToCrystalEyes();
77 // renderwindow->SetStereoTypeToRedBlue(); // OK 2.
79 renderwindow->SetAnaglyphColorMask(4,3);
80 renderwindow->SetAnaglyphColorSaturation(0.65);
81 renderwindow->SetStereoTypeToAnaglyph(); // OK 1.
83 // renderwindow->SetStereoTypeToInterlaced(); // ??
84 // renderwindow->SetStereoTypeToCheckerboard();
85 // renderwindow->SetStereoTypeToDresden();
87 renderwindow->SetStereoRender(1);
90 wxvtkrenderwindowinteractor->SetRenderWindow(renderwindow);
92 interactorstyle = vtkInteractorStyleTrackballCamera ::New();
93 interactorstyle->SetInteractor ( wxvtkrenderwindowinteractor );
94 wxvtkrenderwindowinteractor->SetInteractorStyle( interactorstyle );
96 int x1=0,x2=200,y1=0,y2=200,z1=0,z2=200;
97 double spx=1,spy=1,spz=1;
98 vtkCamera *camera = renderer->GetActiveCamera();
99 camera->SetViewUp ( spx*0, -spy*1, spz*0);
100 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000);
101 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
104 // camera->SetParallelScale( spx*(x2-x1)/2.0 );
105 renderer->ResetCamera(x1,x2,y1,y2,z1,z2);
107 renderer->SetBackground(0.1, 0.1, 0.2);
109 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
110 sizer->Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0);
111 panel->SetSizer(sizer);
112 panel->SetAutoLayout(true);
116 //-------------------------------------------------------------------------
118 //-------------------------------------------------------------------------
119 Viewer3DWidget::~Viewer3DWidget()
121 mBox->DisableObservers();
122 mBox->bbSetOutputWidget(NULL);
123 renderwindow->Delete();
125 interactorstyle->Delete();
126 delete wxvtkrenderwindowinteractor;
128 //-------------------------------------------------------------------------
130 //-------------------------------------------------------------------------
131 void Viewer3DWidget::Update()
133 // wxvtkrenderwindowinteractor->Update();
134 wxvtkrenderwindowinteractor->Render();
135 renderer->ResetCameraClippingRange();
137 //-------------------------------------------------------------------------
139 //-------------------------------------------------------------------------
140 vtkRenderer *Viewer3DWidget::GetRenderer()
144 //-------------------------------------------------------------------------
146 //-------------------------------------------------------------------------
147 crea::wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor()
149 return wxvtkrenderwindowinteractor;
151 //-------------------------------------------------------------------------
153 void Viewer3DWidget::Refresh(bool eraseBackground , const wxRect* rect )
155 // wxPanel::Refresh(false,rect);
160 //--------------------------------------------------------------------------
161 //-------------------------------------------------------------------------
162 //--------------------------------------------------------------------------
163 //--------------------------------------------------------------------------
166 BBTK_BLACK_BOX_IMPLEMENTATION(Viewer3D,bbtk::WxBlackBox);
169 //-----------------------------------------------------------------
170 void Viewer3D::bbUserSetDefaultValues()
178 bbSetInputObs1(NULL);
179 bbSetInputObs2(NULL);
180 bbSetInputObs3(NULL);
181 bbSetInputObs4(NULL);
182 bbSetInputObs5(NULL);
183 bbSetInputStereo(false);
184 bbSetOutputRenderer( NULL );
185 bbSetOutputInteractor( NULL );
186 bbSetOutputWidget(NULL);
187 std::vector<double> bckgrndColor(3);
188 bckgrndColor[0] = 0.1;
189 bckgrndColor[1] = 0.1;
190 bckgrndColor[2] = 0.2;
191 bbSetInputBackgroundColor(bckgrndColor);
194 //-----------------------------------------------------------------
195 void Viewer3D::bbUserInitializeProcessing()
199 //-----------------------------------------------------------------
200 void Viewer3D::bbUserFinalizeProcessing()
205 void Viewer3D::DisableObservers()
207 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
210 vtkRenderWindowInteractor *interactor = w->GetInteractor();
211 if (interactor!=NULL)
213 if (bbGetInputObs1()!=NULL)
215 if (bbGetInputObs1()->GetInteractor()!=NULL)
216 bbGetInputObs1()->EnabledOff();
218 if (bbGetInputObs2()!=NULL)
220 if (bbGetInputObs2()->GetInteractor()!=NULL)
221 //bbGetInputObs2()->SetInteractor(NULL);
222 bbGetInputObs2()->EnabledOff();
224 if (bbGetInputObs3()!=NULL)
226 if (bbGetInputObs3()->GetInteractor()!=NULL)
227 //bbGetInputObs3()->SetInteractor(NULL);
228 bbGetInputObs3()->EnabledOff();
230 if (bbGetInputObs4()!=NULL)
232 if (bbGetInputObs4()->GetInteractor()!=NULL)
233 //bbGetInputObs4()->SetInteractor(NULL);
234 bbGetInputObs4()->EnabledOff();
236 if (bbGetInputObs5()!=NULL)
238 if (bbGetInputObs5()->GetInteractor()!=NULL)
239 //bbGetInputObs5()->SetInteractor(NULL);
240 bbGetInputObs5()->EnabledOff();
246 //--------------------------------------------------------------------------
247 void Viewer3D::Process()
250 if (!bbIsShown()) return;
252 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
253 // if (w) w->Update();
257 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
258 if ((firsttime==true) && (w!=NULL)){
261 vtkRenderWindowInteractor *interactor = w->GetInteractor();
262 if (interactor!=NULL)
265 if (bbGetInputObs1()!=NULL)
267 bbGetInputObs1()->SetInteractor(interactor);
268 bbGetInputObs1()->EnabledOn();
270 if (bbGetInputObs2()!=NULL)
272 bbGetInputObs2()->SetInteractor(interactor);
273 bbGetInputObs2()->EnabledOn();
275 if (bbGetInputObs3()!=NULL)
277 bbGetInputObs3()->SetInteractor(interactor);
278 bbGetInputObs3()->EnabledOn();
280 if (bbGetInputObs4()!=NULL)
282 bbGetInputObs4()->SetInteractor(interactor);
283 bbGetInputObs4()->EnabledOn();
285 if (bbGetInputObs5()!=NULL)
287 bbGetInputObs5()->SetInteractor(interactor);
288 bbGetInputObs5()->EnabledOn();
290 bbSetOutputInteractor( w->GetInteractor() );
293 vtkRenderer *renderer = w->GetRenderer();
296 std::vector<double> bckgrndColor = bbGetInputBackgroundColor();
297 renderer->SetBackground(bckgrndColor[0], bckgrndColor[1], bckgrndColor[2]);
298 bbSetOutputRenderer( renderer );
300 /*if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
301 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
302 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
303 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
304 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
305 renderer->ResetCamera();
307 renderer->ComputeVisiblePropBounds(bounds);
308 renderer->ResetCameraClippingRange(bounds);*/
315 if(bbGetOutputRenderer()!=NULL){
316 vtkRenderer *renderer = w->GetRenderer();
317 if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
318 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
319 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
320 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
321 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
322 renderer->ResetCamera();
324 renderer->ComputeVisiblePropBounds(bounds);
325 renderer->ResetCameraClippingRange(bounds);
329 if (w!=NULL) w->Update();
335 * \brief Create Widget .
339 void Viewer3D::CreateWidget(wxWindow* parent)
342 bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
344 Viewer3DWidget* w = new Viewer3DWidget(this,
351 bbSetOutputWidget(w);
353 bbtkDebugDecTab("Core",9);
357 // This callback is necessary to get actual processing of the view
358 // when window is shown
359 void Viewer3D::OnShowWidget()
362 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
363 // if (w) w->Update();