]> Creatis software - bbtk.git/blob - packages/wxvtk/src/bbwxvtkViewer3D.cxx
b81a1dd4700d0f5abc8f367c716643452319632f
[bbtk.git] / packages / wxvtk / src / bbwxvtkViewer3D.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbwxvtkViewer3D.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/05/07 12:59:23 $
7   Version:   $Revision: 1.4 $
8                                                                                 
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.
12                                                                                 
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.
16                                                                                 
17 =========================================================================*/
18 /**
19  *  \file 
20  *  \brief 
21  */
22
23
24 #ifdef _USE_WXWIDGETS_
25
26
27 #include "bbwxvtkViewer3D.h"
28 #include "bbwxvtkPackage.h"
29
30 #include "vtkCamera.h"
31 #include "vtkInteractorStyleTrackballCamera.h"
32
33
34
35 namespace bbwxvtk
36 {
37   BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer3D);
38   
39   //-------------------------------------------------------------------------
40   Viewer3DWidget::Viewer3DWidget(Viewer3D* box, wxWindow *parent)
41     : 
42     wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
43     mBox(box)
44   {
45     wxPanel *panel = this;
46
47     wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1);
48     wxvtkrenderwindowinteractor->UseCaptureMouseOn();
49
50    renderer     = vtkRenderer::New();
51    renderwindow = vtkRenderWindow::New();
52    renderwindow->AddRenderer(renderer);
53    wxvtkrenderwindowinteractor->SetRenderWindow(renderwindow);
54    
55    vtkInteractorStyleTrackballCamera *interactorstyle = vtkInteractorStyleTrackballCamera ::New();
56    interactorstyle->SetInteractor (  wxvtkrenderwindowinteractor );
57    wxvtkrenderwindowinteractor->SetInteractorStyle( interactorstyle );
58    
59    int x1=0,x2=200,y1=0,y2=200,z1=0,z2=200;
60    double spx=1,spy=1,spz=1;
61    vtkCamera *camera = renderer->GetActiveCamera();
62    camera->SetViewUp ( spx*0, -spy*1, spz*0);
63    camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000); 
64    camera->SetFocalPoint        ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0); 
65    //           camera->SetParallelScale(  spx*(x2-x1)/2.0 );
66    renderer->ResetCamera(x1,x2,y1,y2,z1,z2);
67    
68    renderer->SetBackground(0.1, 0.1, 0.2);
69   
70    wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
71    sizer->Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0);
72    panel->SetSizer(sizer);
73    panel->SetAutoLayout(true);
74    panel->Layout();
75   
76   }
77   //-------------------------------------------------------------------------
78
79   //-------------------------------------------------------------------------
80   Viewer3DWidget::~Viewer3DWidget()
81   {
82     wxvtkrenderwindowinteractor->Delete();
83   }
84   //-------------------------------------------------------------------------
85   
86   //-------------------------------------------------------------------------
87   void Viewer3DWidget::Update()
88   {
89     wxvtkrenderwindowinteractor->Render();
90   }
91   //-------------------------------------------------------------------------
92
93   //-------------------------------------------------------------------------
94   vtkRenderer *Viewer3DWidget::GetRenderer()
95   {
96      return renderer;
97   }
98   //-------------------------------------------------------------------------
99
100   //-------------------------------------------------------------------------
101   wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor()
102   {
103     return wxvtkrenderwindowinteractor;
104   }
105   //-------------------------------------------------------------------------
106
107   //--------------------------------------------------------------------------
108   //-------------------------------------------------------------------------
109   //--------------------------------------------------------------------------
110   //--------------------------------------------------------------------------
111
112
113   BBTK_BLACK_BOX_IMPLEMENTATION(Viewer3D,bbtk::WxBlackBox);
114
115   void Viewer3D::bbUserConstructor() 
116   { 
117     bbSetInputIn1(NULL);
118     bbSetInputIn2(NULL);
119     bbSetInputIn3(NULL);
120     bbSetInputIn4(NULL);
121     bbSetInputIn5(NULL);
122     bbSetInputObs1(NULL);
123     bbSetInputObs2(NULL);
124     bbSetInputObs3(NULL);
125     bbSetInputObs4(NULL);
126     bbSetInputObs5(NULL);
127     bbSetOutputRenderer( NULL );
128     bbSetOutputInteractor( NULL );
129   }
130
131
132   void Viewer3D::Process() 
133   { 
134     ((Viewer3DWidget*)bbGetOutputWidget())->Update();
135   }
136   
137
138   /**
139    * \brief  Create Widget . 
140    *
141    *
142    */ 
143   void Viewer3D::CreateWidget()
144   {
145     bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
146
147     Viewer3DWidget* w = new Viewer3DWidget(this,bbGetWxParent());
148     w->Update();
149     
150     vtkRenderer *renderer = w->GetRenderer();
151     if (renderer!=NULL)
152       {
153         if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
154         if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
155         if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
156         if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
157         if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
158         renderer->ResetCamera();
159         bbSetOutputRenderer( renderer );
160
161       }
162     vtkRenderWindowInteractor *interactor = w->GetInteractor();
163     if (interactor!=NULL)
164       {
165         if (bbGetInputObs1()!=NULL) 
166           {
167             bbGetInputObs1()->SetInteractor(interactor);
168             bbGetInputObs1()->EnabledOn();
169           }
170         if (bbGetInputObs2()!=NULL) 
171           {
172             bbGetInputObs2()->SetInteractor(interactor);
173             bbGetInputObs2()->EnabledOn();
174           }
175         if (bbGetInputObs3()!=NULL) 
176           {
177             bbGetInputObs3()->SetInteractor(interactor);
178             bbGetInputObs3()->EnabledOn();
179           }
180         if (bbGetInputObs4()!=NULL) 
181           {
182             bbGetInputObs4()->SetInteractor(interactor);
183             bbGetInputObs4()->EnabledOn();
184           }
185         if (bbGetInputObs5()!=NULL) 
186           {
187             bbGetInputObs5()->SetInteractor(interactor);
188             bbGetInputObs5()->EnabledOn();
189           }
190         bbSetOutputInteractor(  w->GetInteractor() );
191       }
192         
193     bbSetOutputWidget(w);
194     
195     bbtkDebugDecTab("Core",9);
196     
197   }
198
199
200 }//namespace bbwxvtk
201
202 #endif
203