]> 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 2163d69de9a5be80a0f129d68621af2bd42dee97..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,68 +74,79 @@ void wxVtkMPR2DView::Configure(){
                z2 = (int)(z2*spc[2]);
 
                _visibleAxis = true;
-
+               
+               
+               
+       }
+       
        // Axe A
-               if(_lineAActor==NULL){
-                       _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->SetInput(_pdA);
-                       _lineAMapper->ImmediateModeRenderingOn();
-                       _lineAActor->SetMapper(_lineAMapper);
-       //              _lineAActor->GetProperty()->BackfaceCullingOn();
-                       _lineAActor->GetProperty()->SetDiffuseColor(1,0,0);
-                       _lineAActor->GetProperty()->SetLineWidth(2);
-                       _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineAActor );
-               }
-
+       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 );
+               
+               _pdA = vtkPolyData::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();
+       
 
+// 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 );
+               
+//             _lineBActor->GetProperty()->BackfaceCullingOn();
+       }
+       
+       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();
 
-       // Axe B
-               if(_lineBActor==NULL){
-                       _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 );
-               }
 
-       
+       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     ); 
@@ -143,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         );
@@ -166,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);
+       }
 
 }
 
@@ -205,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]);
@@ -231,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 );