1 /*=========================================================================
4 Module: $RCSfile: bbwxvtkViewer3D.cxx,v $
6 Date: $Date: 2012/05/30 17:17:02 $
7 Version: $Revision: 1.22 $
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);
85 // camera->SetParallelScale( spx*(x2-x1)/2.0 );
86 renderer->ResetCamera(x1,x2,y1,y2,z1,z2);
88 renderer->SetBackground(0.1, 0.1, 0.2);
90 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
91 sizer->Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0);
92 panel->SetSizer(sizer);
93 panel->SetAutoLayout(true);
97 //-------------------------------------------------------------------------
99 //-------------------------------------------------------------------------
100 Viewer3DWidget::~Viewer3DWidget()
102 mBox->DisableObservers();
103 mBox->bbSetOutputWidget(NULL);
104 renderwindow->Delete();
106 interactorstyle->Delete();
107 delete wxvtkrenderwindowinteractor;
109 //-------------------------------------------------------------------------
111 //-------------------------------------------------------------------------
112 void Viewer3DWidget::Update()
114 // wxvtkrenderwindowinteractor->Update();
115 wxvtkrenderwindowinteractor->Render();
116 renderer->ResetCameraClippingRange();
118 //-------------------------------------------------------------------------
120 //-------------------------------------------------------------------------
121 vtkRenderer *Viewer3DWidget::GetRenderer()
125 //-------------------------------------------------------------------------
127 //-------------------------------------------------------------------------
128 wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor()
130 return wxvtkrenderwindowinteractor;
132 //-------------------------------------------------------------------------
134 void Viewer3DWidget::Refresh(bool eraseBackground , const wxRect* rect )
136 // wxPanel::Refresh(false,rect);
141 //--------------------------------------------------------------------------
142 //-------------------------------------------------------------------------
143 //--------------------------------------------------------------------------
144 //--------------------------------------------------------------------------
147 BBTK_BLACK_BOX_IMPLEMENTATION(Viewer3D,bbtk::WxBlackBox);
150 //-----------------------------------------------------------------
151 void Viewer3D::bbUserSetDefaultValues()
159 bbSetInputObs1(NULL);
160 bbSetInputObs2(NULL);
161 bbSetInputObs3(NULL);
162 bbSetInputObs4(NULL);
163 bbSetInputObs5(NULL);
164 bbSetInputStereo(false);
165 bbSetOutputRenderer( NULL );
166 bbSetOutputInteractor( NULL );
167 bbSetOutputWidget(NULL);
170 //-----------------------------------------------------------------
171 void Viewer3D::bbUserInitializeProcessing()
175 //-----------------------------------------------------------------
176 void Viewer3D::bbUserFinalizeProcessing()
181 void Viewer3D::DisableObservers()
183 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
186 vtkRenderWindowInteractor *interactor = w->GetInteractor();
187 if (interactor!=NULL)
189 if (bbGetInputObs1()!=NULL)
191 if (bbGetInputObs1()->GetInteractor()!=NULL)
192 bbGetInputObs1()->EnabledOff();
194 if (bbGetInputObs2()!=NULL)
196 if (bbGetInputObs2()->GetInteractor()!=NULL)
197 //bbGetInputObs2()->SetInteractor(NULL);
198 bbGetInputObs2()->EnabledOff();
200 if (bbGetInputObs3()!=NULL)
202 if (bbGetInputObs3()->GetInteractor()!=NULL)
203 //bbGetInputObs3()->SetInteractor(NULL);
204 bbGetInputObs3()->EnabledOff();
206 if (bbGetInputObs4()!=NULL)
208 if (bbGetInputObs4()->GetInteractor()!=NULL)
209 //bbGetInputObs4()->SetInteractor(NULL);
210 bbGetInputObs4()->EnabledOff();
212 if (bbGetInputObs5()!=NULL)
214 if (bbGetInputObs5()->GetInteractor()!=NULL)
215 //bbGetInputObs5()->SetInteractor(NULL);
216 bbGetInputObs5()->EnabledOff();
222 //--------------------------------------------------------------------------
223 void Viewer3D::Process()
226 if (!bbIsShown()) return;
228 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
229 // if (w) w->Update();
233 Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
234 if ((firsttime==true) && (w!=NULL)){
237 vtkRenderWindowInteractor *interactor = w->GetInteractor();
238 if (interactor!=NULL)
241 if (bbGetInputObs1()!=NULL)
243 bbGetInputObs1()->SetInteractor(interactor);
244 bbGetInputObs1()->EnabledOn();
246 if (bbGetInputObs2()!=NULL)
248 bbGetInputObs2()->SetInteractor(interactor);
249 bbGetInputObs2()->EnabledOn();
251 if (bbGetInputObs3()!=NULL)
253 bbGetInputObs3()->SetInteractor(interactor);
254 bbGetInputObs3()->EnabledOn();
256 if (bbGetInputObs4()!=NULL)
258 bbGetInputObs4()->SetInteractor(interactor);
259 bbGetInputObs4()->EnabledOn();
261 if (bbGetInputObs5()!=NULL)
263 bbGetInputObs5()->SetInteractor(interactor);
264 bbGetInputObs5()->EnabledOn();
266 bbSetOutputInteractor( w->GetInteractor() );
269 vtkRenderer *renderer = w->GetRenderer();
272 bbSetOutputRenderer( renderer );
274 /*if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
275 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
276 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
277 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
278 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
279 renderer->ResetCamera();
281 renderer->ComputeVisiblePropBounds(bounds);
282 renderer->ResetCameraClippingRange(bounds);*/
289 if(bbGetOutputRenderer()!=NULL){
290 vtkRenderer *renderer = w->GetRenderer();
291 if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
292 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
293 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
294 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
295 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
296 renderer->ResetCamera();
298 renderer->ComputeVisiblePropBounds(bounds);
299 renderer->ResetCameraClippingRange(bounds);
303 if (w!=NULL) w->Update();
309 * \brief Create Widget .
313 void Viewer3D::CreateWidget(wxWindow* parent)
316 bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
318 Viewer3DWidget* w = new Viewer3DWidget(this,
325 bbSetOutputWidget(w);
327 bbtkDebugDecTab("Core",9);
331 // This callback is necessary to get actual processing of the view
332 // when window is shown
333 void Viewer3D::OnShowWidget()
336 // Viewer3DWidget* w = (Viewer3DWidget*)bbGetOutputWidget();
337 // if (w) w->Update();