#include "wxVtk2DBaseView.h" #include "vtkInfoTextImage.h" #include "vtkInteractorStyleBaseView2D.h" #include "vtkInfoTextImageInteractor.h" wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent) :wxVtkBaseView(parent) { _imageViewer2XYZ = NULL; _vtkIinfoTextImage = NULL; } //EED 5mai2009 //------------------------------------------------------------------- wxVtk2DBaseView::~wxVtk2DBaseView() { if (_vtkIinfoTextImage!=NULL) { delete _vtkIinfoTextImage; } if (_imageViewer2XYZ!=NULL) { delete _imageViewer2XYZ; } } //------------------------------------------------------------------- void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) // virtual { //EEDx5 double spc[3]; // GetVtkBaseData()->GetImageData()->GetSpacing(spc); this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); X = X / spc[0]; Y = Y / spc[1]; Z = Z / spc[2]; } //------------------------------------------------------------------- void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual { //EEDx5 double spc[3]; // GetVtkBaseData()->GetImageData()->GetSpacing(spc); this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); X=X*spc[0]; Y=Y*spc[1]; Z=Z*spc[2]; } //------------------------------------------------------------------- void wxVtk2DBaseView::ResetView() { double spx,spy,spz; int x1,x2,y1,y2,z1,z2; wxVtkBaseView::Configure(); wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); vtkImageData *imageData = GetVtkBaseData()->GetImageData(); imageData->UpdateInformation(); imageData->SetUpdateExtent( imageData->GetWholeExtent()); imageData->Update(); _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData ); imageData->GetSpacing (spx,spy,spz); imageData->GetExtent (x1,x2,y1,y2,z1,z2); _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2); _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren ); _imageViewer2XYZ->GetVtkImageViewer2()->Render(); SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() ); } //------------------------------------------------------------------- void wxVtk2DBaseView::Configure(bool okimage) { double spx,spy,spz; int x1,x2,y1,y2,z1,z2; wxVtkBaseView::Configure(); // EED 17 Oct 2007 if (_imageViewer2XYZ==NULL) { _imageViewer2XYZ = new vtkImageViewer2_XYZ(); wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren ); SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() ); } vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData(); if (imageData!=NULL){ imageData->UpdateInformation(); imageData->SetUpdateExtent( imageData->GetWholeExtent()); imageData->Update(); if (okimage==true){ imageData->GetSpacing (spx,spy,spz); imageData->GetExtent (x1,x2,y1,y2,z1,z2); _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData ); _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2); double range[2]; imageData->GetScalarRange(range); if (range[1]<20000){ _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 ); _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 ); } else { _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 ); _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 ); } // EED 31 Janvier 2007 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor (); //vtkimageactor->InterpolateOff (); //vtkLookupTable * _collookup = vtkLookupTable::New( ); //_collookup->SetNumberOfColors( 256 ); //_collookup->SetTableRange( 0 , 255 ); //_collookup->Build( ); //_collookup->SetTableValue( 0 , 1 , 0 , 0 , 1 ); //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 ); //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 ); //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup ); // EED 17 Oct 2007 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() ); vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2(); vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera(); //EED 17Avril2009 /* camera->SetViewUp ( spx*0 , -spy*1 , spz*0 ); camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 ); camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); */ camera->SetViewUp ( spx*0 , spy*1 , spz*0 ); camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 ); camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); camera->SetClippingRange( 0.01 , 1000000 ); camera->ComputeViewPlaneNormal(); camera->SetParallelScale( spx*(x2-x1)/3.0 ); // text information over the graphic window _vtkIinfoTextImage = new vtkInfoTextImage(); _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor(); _vtkIinfoTextImage->SetWxVtk2DBaseView(this); _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() ); _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage); _vtkIinfoTextImage->Configure(); ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor); } // okimage } // imageData } //------------------------------------------------------------------- int wxVtk2DBaseView::GetActualSlice() // virtual { return (int)(_vtkbasedata->GetZ()); } //------------------------------------------------------------------- void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual { _vtkbasedata->SetZ(slice); } //------------------------------------------------------------------- vtkBaseData *wxVtk2DBaseView::GetVtkBaseData() { return _vtkbasedata; } //------------------------------------------------------------------- void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata) { _vtkbasedata=vtkbasedata; } //------------------------------------------------------------------- void wxVtk2DBaseView::Refresh() { int z = (int)(GetVtkBaseData()->GetZ()); _imageViewer2XYZ->SetZSlice( z ); wxVtkBaseView::Refresh(); } //------------------------------------------------------------------- void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview) { SetInteractorStyleBaseView(interactorstylebaseview); wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); interactorstylebaseview->SetInteractor ( iren ); iren->SetInteractorStyle(interactorstylebaseview); interactorstylebaseview->SetwxVtkBaseView(this); vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New(); cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2(); interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk ); interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk ); interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk ); cbk->Delete(); } //--------------------------------------------------------------------------- vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual { return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer(); } //--------------------------------------------------------------------------- vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual { return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow(); } //------------------------------------------------------------------- void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual { vtkImageData *imageData = GetVtkBaseData()->GetImageData(); imageData->GetSpacing(spc); }