1 #include "wxVtkClipping3DView.h"
3 #include "wxVtkClipping3DViewCntrlPanel.h"
4 #include "wxVtkClipping3DViewVolCntrlPanel.h"
6 wxVtkClipping3DView::wxVtkClipping3DView(wxVtk3DBaseView* wxvtk3Dbaseview)
9 _wxvtk3Dbaseview = wxvtk3Dbaseview;
10 _vtkclipping3Ddataviewer = NULL;
11 _wxvtkclipping3DviewCntrlPanel = NULL;
13 _boxWidgetVolume = NULL;
17 //-------------------------------------------------------------------
18 wxVtkClipping3DView::~wxVtkClipping3DView(){
19 if (_boxWidgetVolume!=NULL) { _boxWidgetVolume -> Delete(); }
20 if (_boxWidgetS1!=NULL) { _boxWidgetS1 -> Delete(); }
21 if (_vtkclipping3Ddataviewer!=NULL) { delete _vtkclipping3Ddataviewer; }
22 if (_wxvtkclipping3DviewCntrlPanel!=NULL){ delete _wxvtkclipping3DviewCntrlPanel; }
24 //-------------------------------------------------------------------
25 void wxVtkClipping3DView::SetVisibleBoxSurface(bool visible)
33 //-------------------------------------------------------------------
34 void wxVtkClipping3DView::VisibleVolumeBoxActor(bool visible)
36 if (visible!=_vtkclipping3Ddataviewer->GetVisibleVolumeBox() ){
37 VisibleVolumeActor(!visible);
38 _vtkclipping3Ddataviewer->BoxActorChanged(visible);
39 _vtkclipping3Ddataviewer->SetVisibleVolumeBox(visible);
40 _vtkclipping3Ddataviewer->SetVisibleVolume(!visible);
43 //-------------------------------------------------------------------
44 void wxVtkClipping3DView::Refresh()
46 _vtkclipping3Ddataviewer->Refresh();
47 if (_wxvtkclipping3DviewCntrlPanel!=NULL)
49 _wxvtkclipping3DviewCntrlPanel->Refresh();
52 //-------------------------------------------------------------------
53 wxPanel* wxVtkClipping3DView::CreateSurfControlPanel(wxWindow *parent)
55 _wxvtkclipping3DviewCntrlPanel = new wxVtkClipping3DViewCntrlPanel(parent,this);
56 return _wxvtkclipping3DviewCntrlPanel;
59 //RaC 03-2010 Divide in two panels
60 //-------------------------------------------------------------------
61 wxPanel* wxVtkClipping3DView::CreateVolControlPanel(wxWindow *parent)
63 _wxvtkclipping3DviewVolCntrlPanel = new wxVtkClipping3DViewVolCntrlPanel(parent,this);
64 return _wxvtkclipping3DviewVolCntrlPanel;
68 //-------------------------------------------------------------------
69 vtkClipping3DDataViewer* wxVtkClipping3DView::GetVtkClipping3DDataViewer()
71 return _vtkclipping3Ddataviewer;
73 //-------------------------------------------------------------------
74 void wxVtkClipping3DView::VisibleActor(int idTissue, bool visTissue){
75 if (visTissue!=_vtkclipping3Ddataviewer->GetVisibleTissue(idTissue)){
76 if (visTissue==false){
77 _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkclipping3Ddataviewer->GetTissueActor(idTissue) );
79 _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkclipping3Ddataviewer->GetTissueActor(idTissue) );
80 // _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(idTissue) );
81 // _actor->VisibilityOn();
83 _vtkclipping3Ddataviewer->SetVisibleTissue(idTissue,visTissue);
86 //-------------------------------------------------------------------
87 void wxVtkClipping3DView::SetRepSurfaceWireFrame(int idTissue , bool representationType )
90 tmpActor = GetVtkClipping3DDataViewer()->GetTissueActor(idTissue);
92 if (representationType==false){
93 tmpActor->GetProperty()->SetRepresentationToWireframe();
95 tmpActor->GetProperty()->SetRepresentationToSurface();
98 _vtkclipping3Ddataviewer->SetRepresentationType(idTissue,representationType);
101 //-------------------------------------------------------------------
102 void wxVtkClipping3DView::VisibleVolumeActor( bool visVolume){
103 if (visVolume!=_vtkclipping3Ddataviewer->GetVisibleVolume() ){
104 if (visVolume==false){
106 // _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkclipping3Ddataviewer->GetVolumeActor() );
107 _wxvtk3Dbaseview->GetRenderer()->RemoveVolume( _vtkclipping3Ddataviewer->GetVolumeActor() );
110 // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkclipping3Ddataviewer->GetVolumeActor() );
111 _wxvtk3Dbaseview->GetRenderer()->AddVolume( _vtkclipping3Ddataviewer->GetVolumeActor() );
113 _vtkclipping3Ddataviewer->SetVisibleVolume(visVolume);
115 else if(visVolume==false && _vtkclipping3Ddataviewer->GetVisibleVolumeBox() == true)
117 _vtkclipping3Ddataviewer->BoxActorChanged(false);
118 _vtkclipping3Ddataviewer->SetVisibleVolumeBox(false);
122 //-------------------------------------------------------------------
123 wxVtk3DBaseView* wxVtkClipping3DView::GetWxvtk3Dbaseview()throw(char*)
125 if(_wxvtk3Dbaseview==NULL){
126 throw "wxVtk3DBaseView* wxVtkClipping3DView::GetWxvtk3Dbaseview() _wxvtk3Dbaseview=NULL";
128 return _wxvtk3Dbaseview;
130 //-------------------------------------------------------------------
131 void wxVtkClipping3DView::Configure(){
132 _wxvtk3Dbaseview->Configure();
134 // Actors are added to the renderer.
135 _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkclipping3Ddataviewer->GetOutlineActor() );
137 _boxWidgetS1 = vtkBoxWidget::New();
138 _boxWidgetS1->SetInteractor( _wxvtk3Dbaseview->GetWxVTKRenderWindowInteractor() );
139 _boxWidgetS1->SetPlaceFactor(1.25);
143 vtkStripper *stripper=_vtkclipping3Ddataviewer->GetTissueStripper(0);
144 vtkPolyData *polydata= stripper->GetOutput();
147 _boxWidgetS1->SetInput( polydata );
148 _boxWidgetS1->PlaceWidget();
151 for (i=0; i< VTKMPRDATA_MAXTISSUE ; i++)
153 _boxWidgetS1->AddObserver( vtkCommand::InteractionEvent, _vtkclipping3Ddataviewer->GetObserverS(i) );
159 // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkclipping3Ddataviewer->GetTissueActor(0) );
160 // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkclipping3Ddataviewer->GetTissueActor(3));
162 VisibleActor(0, false );
163 VisibleActor(1, false );
164 VisibleActor(2, false );
165 VisibleActor(3, false );
167 _boxWidgetS1->HandlesOn ();
170 // _boxWidgetS1->On();
174 _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(0) );
175 _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(1) );
176 _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(2) );
177 _boxWidgetS1->GetPlanes( this->GetVtkClipping3DDataViewer()->GetTissuePlanes(3) );
181 _boxWidgetVolume = vtkBoxWidget::New();
182 _boxWidgetVolume->SetInteractor( _wxvtk3Dbaseview->GetWxVTKRenderWindowInteractor() );
183 _boxWidgetVolume->SetPlaceFactor(1.25);
185 _boxWidgetVolume->SetInput( this->GetVtkClipping3DDataViewer()->GetVtkMPRBaseData()->GetImageData() );
186 _boxWidgetVolume->PlaceWidget();
188 _boxWidgetVolume->AddObserver( vtkCommand::InteractionEvent , _vtkclipping3Ddataviewer->GetObserverV() );
190 _boxWidgetVolume->HandlesOn ();
193 // _boxWidgetVolume->On();
195 _boxWidgetVolume->Off();
198 // vtkPlanes *vtkplanes=this->GetVtkClipping3DDataViewer()->GetVolumePlanes();
199 // _boxWidgetVolume->GetPlanes( vtkplanes );
202 // An initial camera view is created. The Dolly() method moves
203 // the camera towards the FocalPoint, thereby enlarging the image.
204 _wxvtk3Dbaseview->GetRenderer()->SetActiveCamera(_wxvtk3Dbaseview->GetCamera());
205 _wxvtk3Dbaseview->GetRenderer()->ResetCamera ();
206 _wxvtk3Dbaseview->GetCamera()->Dolly(1.5);
208 // Set a background color for the renderer and set the size of the
209 // render window (expressed in pixels).
210 _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.36 , 0.36 , 0.36 );
211 _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400);
213 // Note that when camera movement occurs (as it does in the Dolly()
214 // method), the clipping planes often need adjusting. Clipping planes
215 // consist of two planes: near and far along the view direction. The
216 // near plane clips out objects in front of the plane; the far plane
217 // clips out objects behind the plane. This way only what is drawn
218 // between the planes is actually rendered.
219 _wxvtk3Dbaseview->GetRenderer()->ResetCameraClippingRange();
221 cout<<"EED::JPRG::wxVtkClipping3DView::SetVtkClipping3DDataViewer::GetRenderer()::"<<this->GetWxvtk3Dbaseview()->GetRenderer()<<endl;
222 //cout<<"JPRG::wxVtkClipping3DView::SetVtkClipping3DDataViewer::GetWxVTKRenderWindowInteractor()::"<<this->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor()<<endl;
224 _vtkclipping3Ddataviewer->SetRenderer(this->GetWxvtk3Dbaseview()->GetRenderer());
225 _vtkclipping3Ddataviewer->SetInteractor(this->GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor());
228 //-------------------------------------------------------------------
229 void wxVtkClipping3DView::SetVtkClipping3DDataViewer(vtkClipping3DDataViewer *vtkclipping3Ddataviewer)
231 _vtkclipping3Ddataviewer = vtkclipping3Ddataviewer;
234 void wxVtkClipping3DView::SetRayCasting(bool active)
236 _vtkclipping3Ddataviewer->SetRayCasting(active);
237 _vtkclipping3Ddataviewer->updateVolume();
240 void wxVtkClipping3DView::SetMIPActive(bool active)
242 _vtkclipping3Ddataviewer->SetMIPActive(active);
243 _vtkclipping3Ddataviewer->updateVolume();
246 void wxVtkClipping3DView::SetInterpolation(bool active)
248 _vtkclipping3Ddataviewer->SetInterpolation(active);
249 _vtkclipping3Ddataviewer->updateVolume();
252 void wxVtkClipping3DView::SetShade(bool active)
254 _vtkclipping3Ddataviewer->SetShade(active);
255 _vtkclipping3Ddataviewer->updateVolume();
258 void wxVtkClipping3DView::UpdateVolumeBox(vector<double> gf, vector<double> vf, vtkColorTransferFunction* ctfun)
260 _vtkclipping3Ddataviewer->UpdateVolumeBox(gf, vf, ctfun);