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