1 /*=========================================================================
4 Module: $RCSfile: bbwxvtkViewer3D.cxx,v $
6 Date: $Date: 2011/05/05 16:07:19 $
7 Version: $Revision: 1.21 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
24 #ifdef _USE_WXWIDGETS_
27 #include "bbwxvtkViewer3D.h"
28 #include "bbwxvtkPackage.h"
30 #include "vtkCamera.h"
36 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer3D);
38 //-------------------------------------------------------------------------
39 Viewer3DWidget::Viewer3DWidget(Viewer3D* box, wxWindow *parent, bool stereo)
41 wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
44 wxPanel *panel = this;
46 wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1);
47 wxvtkrenderwindowinteractor->UseCaptureMouseOn();
49 renderer = vtkRenderer::New();
50 renderwindow = vtkRenderWindow::New();
52 renderwindow->AddRenderer(renderer);
55 renderwindow->SetStereoCapableWindow(1);
57 // renderwindow->SetStereoTypeToCrystalEyes();
58 // renderwindow->SetStereoTypeToRedBlue(); // OK 2.
60 renderwindow->SetAnaglyphColorMask(4,3);
61 renderwindow->SetAnaglyphColorSaturation(0.65);
62 renderwindow->SetStereoTypeToAnaglyph(); // OK 1.
64 // renderwindow->SetStereoTypeToInterlaced(); // ??
65 // renderwindow->SetStereoTypeToCheckerboard();
66 // renderwindow->SetStereoTypeToDresden();
68 renderwindow->SetStereoRender(1);
71 wxvtkrenderwindowinteractor->SetRenderWindow(renderwindow);
73 interactorstyle = vtkInteractorStyleTrackballCamera ::New();
74 interactorstyle->SetInteractor ( wxvtkrenderwindowinteractor );
75 wxvtkrenderwindowinteractor->SetInteractorStyle( interactorstyle );
77 int x1=0,x2=200,y1=0,y2=200,z1=0,z2=200;
78 double spx=1,spy=1,spz=1;
79 vtkCamera *camera = renderer->GetActiveCamera();
80 camera->SetViewUp ( spx*0, -spy*1, spz*0);
81 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000);
82 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
83 // camera->SetParallelScale( spx*(x2-x1)/2.0 );
84 renderer->ResetCamera(x1,x2,y1,y2,z1,z2);
86 renderer->SetBackground(0.1, 0.1, 0.2);
88 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
89 sizer->Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0);
90 panel->SetSizer(sizer);
91 panel->SetAutoLayout(true);
95 //-------------------------------------------------------------------------
97 //-------------------------------------------------------------------------
98 Viewer3DWidget::~Viewer3DWidget()
100 mBox->DisableObservers();
101 mBox->bbSetOutputWidget(NULL);
102 renderwindow->Delete();
104 interactorstyle->Delete();
105 delete wxvtkrenderwindowinteractor;
107 //-------------------------------------------------------------------------
109 //-------------------------------------------------------------------------
110 void Viewer3DWidget::Update()
112 // wxvtkrenderwindowinteractor->Update();
113 wxvtkrenderwindowinteractor->Render();
114 renderer->ResetCameraClippingRange();
116 //-------------------------------------------------------------------------
118 //-------------------------------------------------------------------------
119 vtkRenderer *Viewer3DWidget::GetRenderer()
123 //-------------------------------------------------------------------------
125 //-------------------------------------------------------------------------
126 wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor()
128 return wxvtkrenderwindowinteractor;
130 //-------------------------------------------------------------------------
132 void Viewer3DWidget::Refresh(bool eraseBackground , const wxRect* rect )
134 // wxPanel::Refresh(false,rect);
139 //--------------------------------------------------------------------------
140 //-------------------------------------------------------------------------
141 //--------------------------------------------------------------------------
142 //--------------------------------------------------------------------------
145 BBTK_BLACK_BOX_IMPLEMENTATION(Viewer3D,bbtk::WxBlackBox);
148 //-----------------------------------------------------------------
149 void Viewer3D::bbUserSetDefaultValues()
157 bbSetInputObs1(NULL);
158 bbSetInputObs2(NULL);
159 bbSetInputObs3(NULL);
160 bbSetInputObs4(NULL);
161 bbSetInputObs5(NULL);
162 bbSetInputStereo(false);
163 bbSetOutputRenderer( NULL );
164 bbSetOutputInteractor( NULL );
165 bbSetOutputWidget(NULL);
168 //-----------------------------------------------------------------
169 void Viewer3D::bbUserInitializeProcessing()
173 //-----------------------------------------------------------------
174 void Viewer3D::bbUserFinalizeProcessing()
179 void Viewer3D::DisableObservers()
181 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
184 vtkRenderWindowInteractor *interactor = w->GetInteractor();
185 if (interactor!=NULL)
187 if (bbGetInputObs1()!=NULL)
189 if (bbGetInputObs1()->GetInteractor()!=NULL)
190 bbGetInputObs1()->EnabledOff();
192 if (bbGetInputObs2()!=NULL)
194 if (bbGetInputObs2()->GetInteractor()!=NULL)
195 //bbGetInputObs2()->SetInteractor(NULL);
196 bbGetInputObs2()->EnabledOff();
198 if (bbGetInputObs3()!=NULL)
200 if (bbGetInputObs3()->GetInteractor()!=NULL)
201 //bbGetInputObs3()->SetInteractor(NULL);
202 bbGetInputObs3()->EnabledOff();
204 if (bbGetInputObs4()!=NULL)
206 if (bbGetInputObs4()->GetInteractor()!=NULL)
207 //bbGetInputObs4()->SetInteractor(NULL);
208 bbGetInputObs4()->EnabledOff();
210 if (bbGetInputObs5()!=NULL)
212 if (bbGetInputObs5()->GetInteractor()!=NULL)
213 //bbGetInputObs5()->SetInteractor(NULL);
214 bbGetInputObs5()->EnabledOff();
220 //--------------------------------------------------------------------------
221 void Viewer3D::Process()
224 if (!bbIsShown()) return;
226 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
227 // if (w) w->Update();
231 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
232 if ((firsttime==true) && (w!=NULL)){
235 vtkRenderWindowInteractor *interactor = w->GetInteractor();
236 if (interactor!=NULL)
239 if (bbGetInputObs1()!=NULL)
241 bbGetInputObs1()->SetInteractor(interactor);
242 bbGetInputObs1()->EnabledOn();
244 if (bbGetInputObs2()!=NULL)
246 bbGetInputObs2()->SetInteractor(interactor);
247 bbGetInputObs2()->EnabledOn();
249 if (bbGetInputObs3()!=NULL)
251 bbGetInputObs3()->SetInteractor(interactor);
252 bbGetInputObs3()->EnabledOn();
254 if (bbGetInputObs4()!=NULL)
256 bbGetInputObs4()->SetInteractor(interactor);
257 bbGetInputObs4()->EnabledOn();
259 if (bbGetInputObs5()!=NULL)
261 bbGetInputObs5()->SetInteractor(interactor);
262 bbGetInputObs5()->EnabledOn();
264 bbSetOutputInteractor( w->GetInteractor() );
267 vtkRenderer *renderer = w->GetRenderer();
270 bbSetOutputRenderer( renderer );
272 /*if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
273 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
274 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
275 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
276 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
277 renderer->ResetCamera();
279 renderer->ComputeVisiblePropBounds(bounds);
280 renderer->ResetCameraClippingRange(bounds);*/
287 if(bbGetOutputRenderer()!=NULL){
288 vtkRenderer *renderer = w->GetRenderer();
289 if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
290 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
291 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
292 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
293 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
294 renderer->ResetCamera();
296 renderer->ComputeVisiblePropBounds(bounds);
297 renderer->ResetCameraClippingRange(bounds);
301 if (w!=NULL) w->Update();
307 * \brief Create Widget .
311 void Viewer3D::CreateWidget(wxWindow* parent)
314 bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
316 Viewer3DWidget* w = new Viewer3DWidget(this,
323 bbSetOutputWidget(w);
325 bbtkDebugDecTab("Core",9);
329 // This callback is necessary to get actual processing of the view
330 // when window is shown
331 void Viewer3D::OnShowWidget()
334 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
335 // if (w) w->Update();