X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVtkMPR2DView.cxx;h=bf823640f06f8c218929e53493565cf6c1a9cd43;hb=1484229c7f3dab0bc65f08edc2e8d477f92424ff;hp=32d4fc3fe9e9d253f46957d5cdcdb72268a10f44;hpb=897b3f6aeec3179a0afed6b1657ed426693c80de;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR2DView.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR2DView.cxx index 32d4fc3..bf82364 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR2DView.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR2DView.cxx @@ -1,8 +1,39 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "wxVtkMPR2DView.h" #include "vtkInteractorStyleBaseView.h" #include "vtkCellArray.h" +#include "vtkImageActor.h" + +#ifdef WIN32 +#include +using namespace gtm; +#endif wxVtkMPR2DView::wxVtkMPR2DView( wxWindow *parent, int direction) :wxVtk2DBaseView(parent) @@ -40,13 +71,11 @@ vtkMPRBaseData *wxVtkMPR2DView::GetVtkmprbasedata() return (vtkMPRBaseData*)GetVtkBaseData(); } //------------------------------------------------------------------- -void wxVtkMPR2DView::Configure(){ +void wxVtkMPR2DView::Configure() +{ wxVtk2DBaseView::Configure(); - - 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) @@ -55,7 +84,8 @@ void wxVtkMPR2DView::Configure(){ ((vtkInteractorStyleBaseView*)GetInteractorStyleBaseView())->AddInteractorStyleMaracas( _interactorstylemprview ); } - if(img!=NULL){ + if(img!=NULL) + { double* origin = img->GetOrigin(); img->GetExtent(x1,x2,y1,y2,z1,z2); img->GetSpacing(spc); @@ -68,32 +98,24 @@ void wxVtkMPR2DView::Configure(){ 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 if(_lineAActor==NULL){ _lineAActor = vtkActor::New(); _lineAActor->GetProperty()->SetDiffuseColor(1,0,0); - _lineAActor->GetProperty()->SetLineWidth(2); + _lineAActor->GetProperty()->SetLineWidth(0.5); _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); @@ -110,18 +132,17 @@ void wxVtkMPR2DView::Configure(){ // Axe B - if(_lineBActor==NULL){ + if(_lineBActor==NULL) + { _lineBActor = vtkActor::New(); _lineBActor->GetProperty()->SetDiffuseColor(1,0,0); - _lineBActor->GetProperty()->SetLineWidth(2); + _lineBActor->GetProperty()->SetLineWidth(0.5); _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(); } @@ -134,41 +155,40 @@ void wxVtkMPR2DView::Configure(){ _pdB->SetPoints( _ptsB ); _pdB->SetLines( linesB ); linesB->Delete(); //do not delete lines ?? - - _lineBMapper->SetInput(_pdB); _lineBMapper->ImmediateModeRenderingOn(); - - - if(_imageViewer2XYZ){ + if(_imageViewer2XYZ) + { _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineAActor ); _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->AddActor( _lineBActor ); vtkCamera *camera =_imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->GetActiveCamera(); //EED 17Avril2009 - /* - if (_direction==0) { - camera->SetViewUp ( 0 , -1 , 0 ); - camera->SetPosition ( -10000,(y1+y2)/2 , (z1+z2)/2 ); + //EED 21 mars 2012 FLIP problem ..PLOP.. + + if (_direction==0) + { // YZ + camera->SetViewUp ( 0 , 0 , 1 ); + 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 ); + if (_direction==1) + { // XZ + 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) { + if (_direction==2) + { // XY 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==0) { // YZ camera->SetViewUp ( 0 , 1 , 0 ); camera->SetPosition ( 10000,(y1+y2)/2 , (z1+z2)/2 ); @@ -189,12 +209,11 @@ void wxVtkMPR2DView::Configure(){ camera->SetFocalPoint ((x1+x2)/2 , (y1+y2)/2 , 0 ); camera->SetParallelScale( (x2-x1)/3.0 ); } - +*/ // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow (160); // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel (800); } - } void wxVtkMPR2DView::SetVisibleAxis(bool ok) @@ -211,35 +230,27 @@ void wxVtkMPR2DView::SetVisibleAxis(bool ok) { _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->RemoveActor( _lineAActor ); _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer()->RemoveActor( _lineBActor ); - } - - } + } // if visible + } // ok } //------------------------------------------------------------------- void wxVtkMPR2DView::Refresh() { - - //wxVtk2DBaseView::Refresh(); - - - //vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2(); // JPRx - //vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera(); // JPRx - - int x1 = 0,x2 = 0,y1 = 0,y2 = 0,z1 = 0,z2 = 0; - int x = 0, y = 0, z = 0; - int xx = 0, yy = 0, zz = 0; +//EED 02/08/2013 +// int x = 0, y = 0, z = 0; + double x = 0, y = 0, z = 0; + int xx = 0, yy = 0, zz = 0; double *spc = 0; double *origin = 0; - - - //GetVtkmprbasedata()->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2); - - + double xx1,yy1,zz1,xx2,yy2,zz2; + bool fixAxis2D; + double opacityAxis; vtkImageData* img = GetVtkmprbasedata()->GetImageData(); - if(img!=NULL){ + if(img!=NULL) + { origin = img->GetOrigin(); img->GetExtent(x1,x2,y1,y2,z1,z2); spc = img->GetSpacing(); @@ -249,64 +260,122 @@ void wxVtkMPR2DView::Refresh() 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]); - - xx = (int)(GetVtkmprbasedata()->GetX()); - yy = (int)(GetVtkmprbasedata()->GetY()); - zz = (int)(GetVtkmprbasedata()->GetZ()); - - x = round(xx*spc[0]); - y = round(yy*spc[1]); - z = round(zz*spc[2]); - - if ((xx!=_backX) || (yy!=_backY) || (zz!=_backZ)) { - + xx1 = x1*spc[0]; + yy1 = y1*spc[1]; + zz1 = z1*spc[2]; + xx2 = x2*spc[0]; + yy2 = y2*spc[1]; + zz2 = z2*spc[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]); + xx = (int)(GetVtkmprbasedata()->GetX()); + yy = (int)(GetVtkmprbasedata()->GetY()); + zz = (int)(GetVtkmprbasedata()->GetZ()); +//EED 02/08/2013 +// x = round(xx*spc[0]); +// y = round(yy*spc[1]); +// z = round(zz*spc[2]); + x = xx*spc[0]; + y = yy*spc[1]; + z = zz*spc[2]; + fixAxis2D = GetVtkmprbasedata()->GetFixAxis2D(); + opacityAxis = GetVtkmprbasedata()->GetOpacityAxis(); + if ((xx!=_backX) || (yy!=_backY) || (zz!=_backZ) || (fixAxis2D!=_backFixAxis2D) || (opacityAxis!=_backOpacityAxis)) + { + double position[3]; + double focalpoint[3]; + GetRenderer()->GetActiveCamera()->GetPosition(position); + GetRenderer()->GetActiveCamera()->GetFocalPoint(focalpoint); if (_direction==0) { // YZ 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); + } +//EED 21 mars 2012 FLIP probleme ..PLOP.. + //_ptsA->SetPoint(0, x2, y1 , z ); + //_ptsA->SetPoint(1, x2, y2 , z ); + //_ptsB->SetPoint(0, x2, y , z1); + //_ptsB->SetPoint(1, x2, y , z2); + _ptsA->SetPoint(0, xx2, yy1 , z ); + _ptsA->SetPoint(1, xx2, yy2 , z ); + _ptsB->SetPoint(0, xx2, y , zz1); + _ptsB->SetPoint(1, xx2, y , zz2); + position[1] = y; + position[2] = z; + focalpoint[1] = y; + focalpoint[2] = z; } if (_direction==1) { // XZ 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); + } +//EED 21 mars 2012 FLIP probleme ..PLOP.. + //_ptsA->SetPoint(0, x1 , y2 , z ); + //_ptsA->SetPoint(1, x2 , y2 , z ); + //_ptsB->SetPoint(0, x , y2 , z1); + //_ptsB->SetPoint(1, x , y2 , z2); + _ptsA->SetPoint(0, xx1 , y1 , z ); + _ptsA->SetPoint(1, xx2 , y1 , z ); + _ptsB->SetPoint(0, x , y1 , zz1); + _ptsB->SetPoint(1, x , y1 , zz2); + position[0] = x; + position[2] = z; + focalpoint[0] = x; + focalpoint[2] = z; } if (_direction==2) { // XY 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 ); // _ptsB->SetPoint(1, x , y2, -z2 ); - _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=xx; - _backY=yy; - _backZ=zz; - } - -//EED 24oct2010 -_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified(); - + +//EED 21 mars 2012 FLIP probleme ..PLOP.. + //_ptsA->SetPoint(0, x1 , y , z2 ); + //_ptsA->SetPoint(1, x2 , y , z2 ); + //_ptsB->SetPoint(0, x , y1, z2 ); + //_ptsB->SetPoint(1, x , y2, z2 ); + _ptsA->SetPoint(0, xx1 , y , z1 ); + _ptsA->SetPoint(1, xx2 , y , z1 ); + _ptsB->SetPoint(0, x , yy1, z1 ); + _ptsB->SetPoint(1, x , yy2, z1 ); + position[0] = x; + position[1] = y; + focalpoint[0] = x; + focalpoint[1] = y; + } // if back + if (fixAxis2D == true) + { + GetRenderer()->GetActiveCamera()->SetPosition(position); + GetRenderer()->GetActiveCamera()->SetFocalPoint(focalpoint); + } // if GetFixAxis2D + _lineAActor->GetProperty()->SetOpacity( opacityAxis ); + _lineBActor->GetProperty()->SetOpacity( opacityAxis ); + _backX = xx; + _backY = yy; + _backZ = zz; + _backFixAxis2D = fixAxis2D; + _backOpacityAxis= opacityAxis; + } // if image + +//EED 2016/02/19 + vtkImageActor *imageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor(); + imageactor->SetInterpolate( GetVtkBaseData()->GetInterpolate() ); +//EED 01nov2012 + UpdateColorWindowLevel(); wxVtkBaseView::Refresh(); } } + //------------------------------------------------------------------- int wxVtkMPR2DView::GetActualSlice() // virtual {