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 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 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);
189 //-----------------------------------------------------------------
190 void Viewer3D::bbUserInitializeProcessing()
194 //-----------------------------------------------------------------
195 void Viewer3D::bbUserFinalizeProcessing()
200 void Viewer3D::DisableObservers()
202 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
205 vtkRenderWindowInteractor *interactor = w->GetInteractor();
206 if (interactor!=NULL)
208 if (bbGetInputObs1()!=NULL)
210 if (bbGetInputObs1()->GetInteractor()!=NULL)
211 bbGetInputObs1()->EnabledOff();
213 if (bbGetInputObs2()!=NULL)
215 if (bbGetInputObs2()->GetInteractor()!=NULL)
216 //bbGetInputObs2()->SetInteractor(NULL);
217 bbGetInputObs2()->EnabledOff();
219 if (bbGetInputObs3()!=NULL)
221 if (bbGetInputObs3()->GetInteractor()!=NULL)
222 //bbGetInputObs3()->SetInteractor(NULL);
223 bbGetInputObs3()->EnabledOff();
225 if (bbGetInputObs4()!=NULL)
227 if (bbGetInputObs4()->GetInteractor()!=NULL)
228 //bbGetInputObs4()->SetInteractor(NULL);
229 bbGetInputObs4()->EnabledOff();
231 if (bbGetInputObs5()!=NULL)
233 if (bbGetInputObs5()->GetInteractor()!=NULL)
234 //bbGetInputObs5()->SetInteractor(NULL);
235 bbGetInputObs5()->EnabledOff();
241 //--------------------------------------------------------------------------
242 void Viewer3D::Process()
245 if (!bbIsShown()) return;
247 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
248 // if (w) w->Update();
252 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
253 if ((firsttime==true) && (w!=NULL)){
256 vtkRenderWindowInteractor *interactor = w->GetInteractor();
257 if (interactor!=NULL)
260 if (bbGetInputObs1()!=NULL)
262 bbGetInputObs1()->SetInteractor(interactor);
263 bbGetInputObs1()->EnabledOn();
265 if (bbGetInputObs2()!=NULL)
267 bbGetInputObs2()->SetInteractor(interactor);
268 bbGetInputObs2()->EnabledOn();
270 if (bbGetInputObs3()!=NULL)
272 bbGetInputObs3()->SetInteractor(interactor);
273 bbGetInputObs3()->EnabledOn();
275 if (bbGetInputObs4()!=NULL)
277 bbGetInputObs4()->SetInteractor(interactor);
278 bbGetInputObs4()->EnabledOn();
280 if (bbGetInputObs5()!=NULL)
282 bbGetInputObs5()->SetInteractor(interactor);
283 bbGetInputObs5()->EnabledOn();
285 bbSetOutputInteractor( w->GetInteractor() );
288 vtkRenderer *renderer = w->GetRenderer();
291 bbSetOutputRenderer( renderer );
293 /*if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
294 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
295 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
296 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
297 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
298 renderer->ResetCamera();
300 renderer->ComputeVisiblePropBounds(bounds);
301 renderer->ResetCameraClippingRange(bounds);*/
308 if(bbGetOutputRenderer()!=NULL){
309 vtkRenderer *renderer = w->GetRenderer();
310 if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
311 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
312 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
313 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
314 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
315 renderer->ResetCamera();
317 renderer->ComputeVisiblePropBounds(bounds);
318 renderer->ResetCameraClippingRange(bounds);
322 if (w!=NULL) w->Update();
328 * \brief Create Widget .
332 void Viewer3D::CreateWidget(wxWindow* parent)
335 bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
337 Viewer3DWidget* w = new Viewer3DWidget(this,
344 bbSetOutputWidget(w);
346 bbtkDebugDecTab("Core",9);
350 // This callback is necessary to get actual processing of the view
351 // when window is shown
352 void Viewer3D::OnShowWidget()
355 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
356 // if (w) w->Update();