00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00024 #ifdef _USE_WXWIDGETS_
00025
00026
00027 #include "bbwxvtkViewer3D.h"
00028 #include "bbwxvtkPackage.h"
00029
00030 #include "vtkCamera.h"
00031
00032
00033
00034 namespace bbwxvtk
00035 {
00036 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer3D);
00037
00038
00039 Viewer3DWidget::Viewer3DWidget(Viewer3D* box, wxWindow *parent, bool stereo)
00040 :
00041 wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
00042 mBox(box)
00043 {
00044 wxPanel *panel = this;
00045
00046 wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1);
00047 wxvtkrenderwindowinteractor->UseCaptureMouseOn();
00048
00049 renderer = vtkRenderer::New();
00050 renderwindow = vtkRenderWindow::New();
00051
00052 renderwindow->AddRenderer(renderer);
00053
00054 if (stereo==true){
00055 renderwindow->SetStereoCapableWindow(1);
00056
00057 renderwindow->SetStereoTypeToRedBlue();
00058 renderwindow->SetStereoRender(1);
00059 }
00060
00061 wxvtkrenderwindowinteractor->SetRenderWindow(renderwindow);
00062
00063 interactorstyle = vtkInteractorStyleTrackballCamera ::New();
00064 interactorstyle->SetInteractor ( wxvtkrenderwindowinteractor );
00065 wxvtkrenderwindowinteractor->SetInteractorStyle( interactorstyle );
00066
00067 int x1=0,x2=200,y1=0,y2=200,z1=0,z2=200;
00068 double spx=1,spy=1,spz=1;
00069 vtkCamera *camera = renderer->GetActiveCamera();
00070 camera->SetViewUp ( spx*0, -spy*1, spz*0);
00071 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*10000000);
00072 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
00073
00074 renderer->ResetCamera(x1,x2,y1,y2,z1,z2);
00075
00076 renderer->SetBackground(0.1, 0.1, 0.2);
00077
00078 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00079 sizer->Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0);
00080 panel->SetSizer(sizer);
00081 panel->SetAutoLayout(true);
00082 panel->Layout();
00083
00084 }
00085
00086
00087
00088 Viewer3DWidget::~Viewer3DWidget()
00089 {
00090 renderwindow->Delete();
00091 renderer->Delete();
00092 interactorstyle->Delete();
00093 delete wxvtkrenderwindowinteractor;
00094 }
00095
00096
00097
00098 void Viewer3DWidget::Update()
00099 {
00100 wxvtkrenderwindowinteractor->Update();
00101 wxvtkrenderwindowinteractor->Render();
00102 renderer->ResetCameraClippingRange();
00103 }
00104
00105
00106
00107 vtkRenderer *Viewer3DWidget::GetRenderer()
00108 {
00109 return renderer;
00110 }
00111
00112
00113
00114 wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor()
00115 {
00116 return wxvtkrenderwindowinteractor;
00117 }
00118
00119
00120 void Viewer3DWidget::Refresh(bool eraseBackground , const wxRect* rect )
00121 {
00122
00123 }
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 BBTK_BLACK_BOX_IMPLEMENTATION(Viewer3D,bbtk::WxBlackBox);
00134
00135 void Viewer3D::bbUserConstructor()
00136 {
00137 bbSetInputIn1(NULL);
00138 bbSetInputIn2(NULL);
00139 bbSetInputIn3(NULL);
00140 bbSetInputIn4(NULL);
00141 bbSetInputIn5(NULL);
00142 bbSetInputObs1(NULL);
00143 bbSetInputObs2(NULL);
00144 bbSetInputObs3(NULL);
00145 bbSetInputObs4(NULL);
00146 bbSetInputObs5(NULL);
00147 bbSetInputStereo(false);
00148 bbSetOutputRenderer( NULL );
00149 bbSetOutputInteractor( NULL );
00150 }
00151
00152
00153 void Viewer3D::Process()
00154 {
00155 ((Viewer3DWidget*)bbGetOutputWidget())->Update();
00156 }
00157
00158
00164 void Viewer3D::CreateWidget()
00165 {
00166 bbtkDebugMessageInc("Core",9,"Viewer3D::CreateWidget()"<<std::endl);
00167
00168 Viewer3DWidget* w = new Viewer3DWidget(this,bbGetWxParent(),bbGetInputStereo());
00169 w->Update();
00170
00171
00172 vtkRenderWindowInteractor *interactor = w->GetInteractor();
00173 if (interactor!=NULL)
00174 {
00175 if (bbGetInputObs1()!=NULL)
00176 {
00177 bbGetInputObs1()->SetInteractor(interactor);
00178 bbGetInputObs1()->EnabledOn();
00179 }
00180 if (bbGetInputObs2()!=NULL)
00181 {
00182 bbGetInputObs2()->SetInteractor(interactor);
00183 bbGetInputObs2()->EnabledOn();
00184 }
00185 if (bbGetInputObs3()!=NULL)
00186 {
00187 bbGetInputObs3()->SetInteractor(interactor);
00188 bbGetInputObs3()->EnabledOn();
00189 }
00190 if (bbGetInputObs4()!=NULL)
00191 {
00192 bbGetInputObs4()->SetInteractor(interactor);
00193 bbGetInputObs4()->EnabledOn();
00194 }
00195 if (bbGetInputObs5()!=NULL)
00196 {
00197 bbGetInputObs5()->SetInteractor(interactor);
00198 bbGetInputObs5()->EnabledOn();
00199 }
00200 bbSetOutputInteractor( w->GetInteractor() );
00201 }
00202
00203
00204 vtkRenderer *renderer = w->GetRenderer();
00205 if (renderer!=NULL)
00206 {
00207 if (bbGetInputIn1()!=NULL) {renderer->AddActor( bbGetInputIn1() ); }
00208 if (bbGetInputIn2()!=NULL) {renderer->AddActor( bbGetInputIn2() ); }
00209 if (bbGetInputIn3()!=NULL) {renderer->AddActor( bbGetInputIn3() ); }
00210 if (bbGetInputIn4()!=NULL) {renderer->AddActor( bbGetInputIn4() ); }
00211 if (bbGetInputIn5()!=NULL) {renderer->AddActor( bbGetInputIn5() ); }
00212 renderer->ResetCamera();
00213 bbSetOutputRenderer( renderer );
00214 }
00215
00216 bbSetOutputWidget(w);
00217
00218 bbtkDebugDecTab("Core",9);
00219
00220 }
00221
00222
00223
00224 void Viewer3D::bbUserOnShow()
00225 {
00226 ((Viewer3DWidget*)bbGetOutputWidget())->Update();
00227 }
00228
00229
00230 }
00231
00232 #endif
00233