]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMPRWidget.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMPRWidget.cxx
index dd8804c07d8c947d65c28fdf677202b33e32c136..38720c05fa171d1f1687f091a58fc50a80cdc41c 100644 (file)
@@ -3,8 +3,8 @@
   Program:   wxMaracas
   Module:    $RCSfile: wxMPRWidget.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/11/14 16:16:32 $
-  Version:   $Revision: 1.4 $
+  Date:      $Date: 2009/03/24 10:49:21 $
+  Version:   $Revision: 1.5 $
 
   Copyright: (c) 2002, 2003
   License:
@@ -1981,89 +1981,91 @@ void wxVtkMPR2DView::Configure(){
        GetVtkmprbasedata()     -> GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
 
        double spc[3];
-       GetVtkmprbasedata()->GetImageData()->GetSpacing(spc);
-       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]);
-
-       _visibleAxis = true;
-
-// Axe A
-       _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 );
-
-// Axe B
-       _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 );
-
-       vtkCamera *camera =_imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->GetActiveCamera();
-       if (_direction==0) {
-           camera->SetViewUp           (   0   ,    -1         ,     0         );
-               camera->SetPosition             ( -10000,(y1+y2)/2      , (z1+z2)/2     ); 
-               camera->SetFocalPoint   (   0   , (y1+y2)/2     , (z1+z2)/2     );
-               camera->SetParallelScale( (z2-z1)/3.0 );
-       }
+       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]);
+
+               x2 = (int)(x2*spc[0]);
+               y2 = (int)(y2*spc[1]);
+               z2 = (int)(z2*spc[2]);
+
+               _visibleAxis = true;
+
+       // Axe A
+               _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 );
+
+       // Axe B
+               _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 );
+
+               vtkCamera *camera =_imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->GetActiveCamera();
+               if (_direction==0) {
+                       camera->SetViewUp               (   0   ,    -1         ,     0         );
+                       camera->SetPosition             ( -10000,(y1+y2)/2      , (z1+z2)/2     ); 
+                       camera->SetFocalPoint   (   0   , (y1+y2)/2     , (z1+z2)/2     );
+                       camera->SetParallelScale( (z2-z1)/3.0 );
+               }
 
-       if (_direction==1) { 
-           camera->SetViewUp           (       0               ,       0       ,       -1              );
-               camera->SetPosition             ((x1+x2)/2      , 10000 , (z1+z2)/2     ); 
-               camera->SetFocalPoint   ((x1+x2)/2      ,   0   , (z1+z2)/2     );
-               camera->SetParallelScale( (x2-x1)/3.0 );
-       }
+               if (_direction==1) { 
+                       camera->SetViewUp               (       0               ,       0       ,       -1              );
+                       camera->SetPosition             ((x1+x2)/2      , 10000 , (z1+z2)/2     ); 
+                       camera->SetFocalPoint   ((x1+x2)/2      ,   0   , (z1+z2)/2     );
+                       camera->SetParallelScale( (x2-x1)/3.0 );
+               }
 
-       if (_direction==2) { 
-           camera->SetViewUp           (       0               ,       -1              ,       0       );
-               camera->SetPosition             ((x1+x2)/2      , (y1+y2)/2     , -10000); 
-               camera->SetFocalPoint   ((x1+x2)/2      , (y1+y2)/2     ,       0       ); 
-               camera->SetParallelScale( (x2-x1)/3.0 );
+               if (_direction==2) { 
+                       camera->SetViewUp               (       0               ,       -1              ,       0       );
+                       camera->SetPosition             ((x1+x2)/2      , (y1+y2)/2     , -10000); 
+                       camera->SetFocalPoint   ((x1+x2)/2      , (y1+y2)/2     ,       0       ); 
+                       camera->SetParallelScale( (x2-x1)/3.0 );
+               }
        }
 
 
-
 //     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow (160);
 //     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel (800);
 
@@ -2102,53 +2104,57 @@ void wxVtkMPR2DView::Refresh()
        int x1,x2,y1,y2,z1,z2;
        GetVtkmprbasedata()->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
        double spc[3];
-       GetVtkmprbasedata()->GetImageData()->GetSpacing(spc);
-       x1 =  (int)(x1*spc[0]);
-       y1 =  (int)(y1*spc[1]);
-       z1 =  (int)(z1*spc[2]);
+       
+       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]);
 
-       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());
+               int x = (int)(GetVtkmprbasedata()->GetX());
+               int y = (int)(GetVtkmprbasedata()->GetY());
+               int z = (int)(GetVtkmprbasedata()->GetZ());
 
-       x =  (int)(x*spc[0]);
-       y =  (int)(y*spc[1]);
-       z =  (int)(z*spc[2]);
+               x =  (int)(x*spc[0]);
+               y =  (int)(y*spc[1]);
+               z =  (int)(z*spc[2]);
 
 
 
-       if ((x!=_backX) || (y!=_backY) || (z!=_backZ)) {
+               if ((x!=_backX) || (y!=_backY) || (z!=_backZ)) {
 
-               if (_direction==0) { 
-                       _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) { 
-                       _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) { 
-                       _imageViewer2XYZ->SetZSlice( (int)(GetVtkmprbasedata()->GetZ()) ); 
-                       _ptsA->SetPoint(0, x1 , y , -z2 );
-                       _ptsA->SetPoint(1, x2 , y , -z2 );
-                       _ptsB->SetPoint(0, x  , y1, -z2 );
-                       _ptsB->SetPoint(1, x  , y2, -z2 );
+                       if (_direction==0) { 
+                               _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) { 
+                               _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) { 
+                               _imageViewer2XYZ->SetZSlice( (int)(GetVtkmprbasedata()->GetZ()) ); 
+                               _ptsA->SetPoint(0, x1 , y , -z2 );
+                               _ptsA->SetPoint(1, x2 , y , -z2 );
+                               _ptsB->SetPoint(0, x  , y1, -z2 );
+                               _ptsB->SetPoint(1, x  , y2, -z2 );
+                       }
+                       _backX=x;
+                       _backY=y;
+                       _backZ=z;
                }
-               _backX=x;
-               _backY=y;
-               _backZ=z;
+               wxVtkBaseView::Refresh();
        }
-       wxVtkBaseView::Refresh();
 }
 //-------------------------------------------------------------------
 int wxVtkMPR2DView::GetActualSlice()   // virtual
@@ -5385,38 +5391,60 @@ wxMPRWidget::wxMPRWidget( wxWindow* parent,
        _vtkmprbasedata                                 = NULL;
 
 
-       _voxelSize                                              = voxelSize;
+       
        _framePanelCutting                              = NULL;
        _panelCutting                                   = NULL;
-       _marImageData                                   = marimageData;
-
-       _vtkmprbasedata                                 = new vtkMPRBaseData(); 
-       _vtkmprbasedata->SetMarImageData(_marImageData);
 
-       wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
 
-       wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
-       wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);
        wxBoxSizer                      *sizer          = new wxBoxSizer(wxVERTICAL  );
-       sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
 
-       int ww,hh;
-       wxWindow *pp=this;
-       while (pp->GetParent()!=NULL) pp=pp->GetParent();
-       pp->GetSize(&ww,&hh);
+       if(marimageData!=NULL){
+               _marImageData                                   = marimageData;
+               _voxelSize                                              = voxelSize;
+               _vtkmprbasedata                                 = new vtkMPRBaseData(); 
+               _vtkmprbasedata->SetMarImageData(_marImageData);
+               
+               
+               
 
-       pnlSplitter     -> SetMinimumPaneSize( 2 );
+               wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
+               pnlSplitter     -> SetMinimumPaneSize( 2 );
 
-       pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
+               wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
+               wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
+               pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
+
+               sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
+
+       }          
+
+       //int ww,hh;
+       //wxWindow *pp=this;
+       //while (pp->GetParent()!=NULL) pp=pp->GetParent();
+       //pp->GetSize(&ww,&hh);
+       
        this            -> SetAutoLayout( true );
        this            -> SetSizer(sizer);
 //     sizer           ->      Fit( this );
-
        _refreshAPage=0;
        _refreshBPage=0;
 
 }
+void wxMPRWidget::setMarImage(marImageData *marimageData, double voxelsize){
+       _marImageData                                   = marimageData;
+       _voxelSize                                              = voxelsize;
+       _vtkmprbasedata                                 = new vtkMPRBaseData(); 
+       _vtkmprbasedata->SetMarImageData(_marImageData);        
 
+       wxSplitterWindow        *pnlSplitter            = new wxSplitterWindow( this , -1);
+       pnlSplitter     -> SetMinimumPaneSize( 2 );
+
+       wxPanel                         *MPRPanel       = CreateMPRPanel(pnlSplitter,_vtkmprbasedata);
+       wxPanel                         *controlPanel   = CreateControlPanel(pnlSplitter);      
+       pnlSplitter     -> SplitVertically( MPRPanel, controlPanel, 550 );
+
+       this->GetSizer()                -> Add( pnlSplitter ,1,wxGROW  ,0);
+}
 //----------------------------------------------------------------------------
 
 wxMPRWidget::~wxMPRWidget( )