]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR2DView.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkMPR2DView.cxx
index 88cfd1a65d9524042386c82470f2d96c81c7b197..247113eba042eaa7eca7d54e038665e6b4c17cf8 100644 (file)
@@ -19,6 +19,7 @@ wxVtkMPR2DView::wxVtkMPR2DView( wxWindow *parent, int direction)
        _lineBActor             = NULL;
        _lineBMapper    = NULL;
        _pdB                    = NULL;
+       _interactorstylemprview = NULL;
 }
 
 //-------------------------------------------------------------------
@@ -41,17 +42,29 @@ vtkMPRBaseData *wxVtkMPR2DView::GetVtkmprbasedata()
 //-------------------------------------------------------------------
 void wxVtkMPR2DView::Configure(){
        wxVtk2DBaseView::Configure();
-
-       _interactorstylemprview = new vtkInteractorStyleMPRView();
-       ((vtkInteractorStyleBaseView*)GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _interactorstylemprview );
+       
 
        int x1,x2,y1,y2,z1,z2;
        GetVtkmprbasedata()     -> GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
 
        double spc[3];
        vtkImageData* img =  GetVtkmprbasedata()->GetImageData();
+       if(_interactorstylemprview==NULL)       
+       {
+               _interactorstylemprview = new vtkInteractorStyleMPRView();
+               ((vtkInteractorStyleBaseView*)GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _interactorstylemprview );
+       }
+       
        if(img!=NULL){
+               double* origin = img->GetOrigin();
+               img->GetExtent(x1,x2,y1,y2,z1,z2);
                img->GetSpacing(spc);
+               x1 += origin[0];
+               x2 += origin[0];
+               y1 += origin[1];
+               y2 += origin[1];
+               z1 += origin[2];
+               z2 += origin[2];
                x1 = (int)(x1*spc[0]);
                y1 = (int)(y1*spc[1]);
                z1 = (int)(z1*spc[2]);
@@ -61,60 +74,79 @@ void wxVtkMPR2DView::Configure(){
                z2 = (int)(z2*spc[2]);
 
                _visibleAxis = true;
-
+               
+               
+               
+       }
+       
        // Axe A
+       if(_lineAActor==NULL){
+               _lineAActor = vtkActor::New();
+               _lineAActor->GetProperty()->SetDiffuseColor(1,0,0);
+               _lineAActor->GetProperty()->SetLineWidth(2);
+               
                _ptsA = vtkPoints::New();
                _ptsA->SetNumberOfPoints(2);
                _ptsA->SetPoint(0, -1000        , -1000 , -1000 );
                _ptsA->SetPoint(1,  1000        ,  1000 ,  1000 );
-               vtkCellArray *linesA;
-               linesA = vtkCellArray::New();
-               linesA->InsertNextCell(2);
-               linesA->InsertCellPoint(0);
-               linesA->InsertCellPoint(1);
+               
                _pdA = vtkPolyData::New();
-               _pdA->SetPoints( _ptsA );
-               _pdA->SetLines( linesA );
-               linesA->Delete();  //do not delete lines ??
-               _lineAActor                                             =       vtkActor::New();
-               _lineAMapper                                    =       vtkPolyDataMapper::New();
+               
+               _lineAMapper = vtkPolyDataMapper::New();
+               
                _lineAMapper->SetInput(_pdA);
                _lineAMapper->ImmediateModeRenderingOn();
                _lineAActor->SetMapper(_lineAMapper);
+       }       
+       
+       vtkCellArray *linesA = vtkCellArray::New();
+       linesA->InsertNextCell(2);
+       linesA->InsertCellPoint(0);
+       linesA->InsertCellPoint(1);
+       _pdA->SetPoints( _ptsA );
+       _pdA->SetLines( linesA );
+       linesA->Delete();  //do not delete lines ??
 //             _lineAActor->GetProperty()->BackfaceCullingOn();
-               _lineAActor->GetProperty()->SetDiffuseColor(1,0,0);
-               _lineAActor->GetProperty()->SetLineWidth(2);
-               _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineAActor );
+       
 
-       // Axe B
+// Axe B
+       if(_lineBActor==NULL){
+               _lineBActor                                             =       vtkActor::New();
+               _lineBActor->GetProperty()->SetDiffuseColor(1,0,0);
+               _lineBActor->GetProperty()->SetLineWidth(2);
+               _lineBMapper                                    =       vtkPolyDataMapper::New();               
+               _lineBActor->SetMapper(_lineBMapper);
+               
                _ptsB = vtkPoints::New();
                _ptsB->SetNumberOfPoints(2);
                _ptsB->SetPoint(0, -1000        , -1000 , -1000 );
                _ptsB->SetPoint(1,  1000        ,  1000 ,  1000 );
-               vtkCellArray *linesB;
-               linesB = vtkCellArray::New();
-               linesB->InsertNextCell(2);
-               linesB->InsertCellPoint(0);
-               linesB->InsertCellPoint(1);
-               _pdB = vtkPolyData::New();
-               _pdB->SetPoints( _ptsB );
-               _pdB->SetLines( linesB );
-               linesB->Delete();  //do not delete lines ??
-               _lineBActor                                             =       vtkActor::New();
-               _lineBMapper                                    =       vtkPolyDataMapper::New();
-               _lineBMapper->SetInput(_pdB);
-               _lineBMapper->ImmediateModeRenderingOn();
-               _lineBActor->SetMapper(_lineBMapper);
+               
 //             _lineBActor->GetProperty()->BackfaceCullingOn();
-               _lineBActor->GetProperty()->SetDiffuseColor(1,0,0);
-               _lineBActor->GetProperty()->SetLineWidth(2);
-               _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineBActor );
-
+       }
+       
+       vtkCellArray *linesB;
+       linesB = vtkCellArray::New();
+       linesB->InsertNextCell(2);
+       linesB->InsertCellPoint(0);
+       linesB->InsertCellPoint(1);
+       _pdB = vtkPolyData::New();
+       _pdB->SetPoints( _ptsB );
+       _pdB->SetLines( linesB );
+       linesB->Delete();  //do not delete lines ??
        
+       
+       _lineBMapper->SetInput(_pdB);
+       _lineBMapper->ImmediateModeRenderingOn();
+
+
+       if(_imageViewer2XYZ){
+               _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineAActor );
+               _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineBActor );
                vtkCamera *camera =_imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->GetActiveCamera();
                
-//EED 17Avril2009
-/*             
+       //EED 17Avril2009
+       /*              
                if (_direction==0) {
                        camera->SetViewUp               (   0   ,    -1         ,     0         );
                        camera->SetPosition             ( -10000,(y1+y2)/2      , (z1+z2)/2     ); 
@@ -135,7 +167,7 @@ void wxVtkMPR2DView::Configure(){
                        camera->SetFocalPoint   ((x1+x2)/2      , (y1+y2)/2     ,       0       ); 
                        camera->SetParallelScale( (x2-x1)/3.0 );
                }
- */
      */
 
                if (_direction==0) {    // YZ
                        camera->SetViewUp               (   0   ,     1         ,     0         );
@@ -158,12 +190,10 @@ void wxVtkMPR2DView::Configure(){
                        camera->SetParallelScale( (x2-x1)/3.0 );
                }
                
-               
-               
-       }
 
-//     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow (160);
-//     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel (800);
+       //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow (160);
+       //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel (800);
+       }
 
 }
 
@@ -197,24 +227,36 @@ void wxVtkMPR2DView::Refresh()
 
 
 
-       int x1,x2,y1,y2,z1,z2;
-       GetVtkmprbasedata()->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
-       double spc[3];
+       int x1 = 0,x2 = 0,y1 = 0,y2 = 0,z1 = 0,z2 = 0, x = 0, y = 0, z = 0;
+       double *spc = 0;
+       double *origin = 0;
+       
+       
+       //GetVtkmprbasedata()->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
+       
        
        vtkImageData* img = GetVtkmprbasedata()->GetImageData();
        if(img!=NULL){
-               img->GetSpacing(spc);
-               x1 =  (int)(x1*spc[0]);
-               y1 =  (int)(y1*spc[1]);
-               z1 =  (int)(z1*spc[2]);
+               origin = img->GetOrigin();
+               img->GetExtent(x1,x2,y1,y2,z1,z2);
+               spc = img->GetSpacing();
+               x1 += origin[0];
+               x2 += origin[0];
+               y1 += origin[1];
+               y2 += origin[1];
+               z1 += origin[2];
+               z2 += origin[2];
+               x1 = (int)(x1*spc[0]);
+               y1 = (int)(y1*spc[1]);
+               z1 = (int)(z1*spc[2]);
 
-               x2 =  (int)(x2*spc[0]);
-               y2 =  (int)(y2*spc[1]);
-               z2 =  (int)(z2*spc[2]);
+               x2 = (int)(x2*spc[0]);
+               y2 = (int)(y2*spc[1]);
+               z2 = (int)(z2*spc[2]);
 
-               int x = (int)(GetVtkmprbasedata()->GetX());
-               int y = (int)(GetVtkmprbasedata()->GetY());
-               int z = (int)(GetVtkmprbasedata()->GetZ());
+               x = (int)(GetVtkmprbasedata()->GetX());
+               y = (int)(GetVtkmprbasedata()->GetY());
+               z = (int)(GetVtkmprbasedata()->GetZ());
 
                x =  (int)(x*spc[0]);
                y =  (int)(y*spc[1]);
@@ -223,22 +265,24 @@ void wxVtkMPR2DView::Refresh()
                if ((x!=_backX) || (y!=_backY) || (z!=_backZ)) {
 
                        if (_direction==0) {    // YZ 
-                               _imageViewer2XYZ->SetXSlice( (int)(GetVtkmprbasedata()->GetX()) ); 
+                               if(_imageViewer2XYZ)
+                                       _imageViewer2XYZ->SetXSlice( (int)(GetVtkmprbasedata()->GetX()) ); 
                                _ptsA->SetPoint(0, x2, y1  , z );
                                _ptsA->SetPoint(1, x2, y2  , z );
                                _ptsB->SetPoint(0, x2, y   , z1);
                                _ptsB->SetPoint(1, x2, y   , z2);
                        }
                        if (_direction==1) {    // XZ
-                               _imageViewer2XYZ->SetYSlice( (int)(GetVtkmprbasedata()->GetY()) ); 
+                               if(_imageViewer2XYZ)
+                                       _imageViewer2XYZ->SetYSlice( (int)(GetVtkmprbasedata()->GetY()) ); 
                            _ptsA->SetPoint(0, x1 , y2 , z );
                                _ptsA->SetPoint(1, x2 , y2 , z );
                                _ptsB->SetPoint(0, x  , y2 , z1);
                                _ptsB->SetPoint(1, x  , y2 , z2);
                        }
                        if (_direction==2) {    // XY
-                               _imageViewer2XYZ->SetZSlice( (int)(GetVtkmprbasedata()->GetZ()) ); 
-                               _imageViewer2XYZ->SetZSlice( (int)(GetVtkmprbasedata()->GetZ()) ); 
+                               if(_imageViewer2XYZ)
+                                       _imageViewer2XYZ->SetZSlice( (int)(GetVtkmprbasedata()->GetZ()) ); 
                        //      _ptsA->SetPoint(0, x1 , y , -z2 );
                        //      _ptsA->SetPoint(1, x2 , y , -z2 );
                        //      _ptsB->SetPoint(0, x  , y1, -z2 );
@@ -463,27 +507,32 @@ void wxVtkMPR2DView::ChangeAxisColor(double x, double y, double z)
        Refresh();
 }
 
-//-------------------------------------------------------------------
+
 //EED 5 juin 2009
-//void wxVtkMPR2DView::TransfromeCoordScreenToWorld(double &X, double &Y, double &Z, int type) // virtual 
-void wxVtkMPR2DView::TransfromeCoordViewWorld(double &X, double &Y, double &Z, int type) // virtual 
+//void wxVtkMPR2DView::TransfromCoordViewWorld(double &X, double &Y, double &Z, int type) // virtual 
+void wxVtkMPR2DView::TransFromCoordScreenToWorld(double &X, double &Y, double &Z, bool keepNormalDirection, int type) //virtual //keepNormalDirection=false, type=2
 {
                
-       wxVtkBaseView::TransfromeCoordScreenToWorld(X,Y,Z,_direction);
+       wxVtkBaseView::TransFromCoordScreenToWorld(X,Y,Z,keepNormalDirection,_direction);
 
-       if (_direction==0)
+       if ((_direction==0) && (keepNormalDirection==true) )
        {
                X = ((vtkMPRBaseData*)GetVtkBaseData())->GetX();
        }
-       if (_direction==1)
+       
+       if ((_direction==1) && (keepNormalDirection==true) )
        {
                Y = ((vtkMPRBaseData*)GetVtkBaseData())->GetY();
        }
-       if (_direction==2)
+       
+       if ((_direction==2) && (keepNormalDirection==true) )
        {
                Z = ((vtkMPRBaseData*)GetVtkBaseData())->GetZ();
        }
+       
 }
+
+
 //-------------------------------------------------------------------
 //-------------------------------------------------------------------
 //-------------------------------------------------------------------