X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMeshActor.cxx;h=1d6f19b2465cf680439c19a440b890c4cd96f4b2;hb=58f6f4201ec9091b5150f6576da25bfedeabbdce;hp=4dad40ba8d8df2bb39e71d347e42230955a200c4;hpb=0083c3fb2c66812489631c7551709d121de51625;p=clitk.git diff --git a/vv/vvMeshActor.cxx b/vv/vvMeshActor.cxx index 4dad40b..1d6f19b 100644 --- a/vv/vvMeshActor.cxx +++ b/vv/vvMeshActor.cxx @@ -1,5 +1,23 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ #include "vvMeshActor.h" #include "clitkCommon.h" +#include #include #include #include @@ -9,98 +27,119 @@ #include vvMeshActor::vvMeshActor() : - mCutDimension(NULL), mMesh(NULL), - mMarching(NULL), mMapper(NULL), - mActor(NULL), - mSuperpostionMode(false), mTimeSlice(0) + mCutDimension(0), mMesh(NULL), + mMarching(NULL), mMapper(NULL), + mActor(NULL), + mSuperpostionMode(false), mTimeSlice(0) {} vvMeshActor::~vvMeshActor() { - mMarching->Delete(); - mMapper->Delete(); - mActor->Delete(); + mMarching->Delete(); + mMapper->Delete(); + mActor->Delete(); } void vvMeshActor::Init(vvMesh::Pointer mesh,int time_slice,vvImage::Pointer vf) { - mMesh=mesh; + mMesh=mesh; - mMarching=vtkMarchingSquares::New(); - mTimeSlice=time_slice; - if (static_cast(time_slice)GetNumberOfMeshes()) - mMarching->SetInput(mMesh->GetMask(time_slice)); - else - mMarching->SetInput(mMesh->GetMask(0)); - mMarching->SetValue(0,0.5); - //mMarching->Update(); + mMarching=vtkMarchingSquares::New(); + mTimeSlice=time_slice; + if (static_cast(time_slice)GetNumberOfMeshes()) { +#if VTK_MAJOR_VERSION <= 5 + mMarching->SetInput(mMesh->GetMask(time_slice)); +#else + mMarching->SetInputData(mMesh->GetMask(time_slice)); +#endif + } else { +#if VTK_MAJOR_VERSION <= 5 + mMarching->SetInput(mMesh->GetMask(0)); +#else + mMarching->SetInputData(mMesh->GetMask(0)); +#endif + } + mMarching->SetValue(0,0.5); + //mMarching->Update(); - mMapper=vtkPolyDataMapper::New(); - mMapper->SetInput(mMarching->GetOutput()); - //The following line allows to display the contour over the image - //(http://www.nabble.com/What-happens-when-two-actors-are-at-the-same-depth--td23175458.html) - vtkMapper::SetResolveCoincidentTopologyToPolygonOffset(); - mActor=vtkActor::New(); - mActor->SetMapper(mMapper); - mActor->SetPickable(false); - mActor->GetProperty()->EdgeVisibilityOn(); - mActor->GetProperty()->SetEdgeColor(mMesh->r,mMesh->g,mMesh->b); - mActor->GetProperty()->SetLineWidth(2.); + mMapper=vtkPolyDataMapper::New(); +#if VTK_MAJOR_VERSION <= 5 + mMapper->SetInput(mMarching->GetOutput()); +#else + mMapper->SetInputConnection(mMarching->GetOutputPort()); +#endif + //The following line allows to display the contour over the image + //(http://www.nabble.com/What-happens-when-two-actors-are-at-the-same-depth--td23175458.html) + vtkMapper::SetResolveCoincidentTopologyToPolygonOffset(); + mActor=vtkActor::New(); + mActor->SetMapper(mMapper); + mActor->SetPickable(false); + mActor->GetProperty()->EdgeVisibilityOn(); + mActor->GetProperty()->SetEdgeColor(mMesh->r,mMesh->g,mMesh->b); + mActor->GetProperty()->SetLineWidth(2.); + mActor->GetProperty()->SetOpacity(0.995); //in order to get VTK to turn on the alpha-blending in OpenGL } void vvMeshActor::SetCutSlice(double slice) { - mCutSlice=slice; - vtkImageData* mask; - if (static_cast(mTimeSlice)GetNumberOfMasks()) - mask=mMesh->GetMask(mTimeSlice); - else - mask=mMesh->GetMask(0); - int* dims=mask->GetDimensions(); - int mask_slice=(slice-mask->GetOrigin()[mCutDimension])/mask->GetSpacing()[mCutDimension]; - switch (mCutDimension) - { - case 0: - mMarching->SetImageRange(mask_slice,mask_slice,0,dims[1],0,dims[2]); - break; - case 1: - mMarching->SetImageRange(0,dims[0],mask_slice,mask_slice,0,dims[2]); - break; - case 2: - mMarching->SetImageRange(0,dims[0],0,dims[1],mask_slice,mask_slice); - break; - default: - assert(false); - } - mMarching->Update(); + //DD("SetCutSlice"); + //DD(slice); + mCutSlice=slice; + vtkImageData* mask; + if (static_cast(mTimeSlice)GetNumberOfMasks()) + mask=mMesh->GetMask(mTimeSlice); + else + mask=mMesh->GetMask(0); + int* dims=mask->GetDimensions(); + int mask_slice=(slice-mask->GetOrigin()[mCutDimension])/mask->GetSpacing()[mCutDimension]; + switch (mCutDimension) { + case 0: + mMarching->SetImageRange(mask_slice,mask_slice,0,dims[1],0,dims[2]); + break; + case 1: + mMarching->SetImageRange(0,dims[0],mask_slice,mask_slice,0,dims[2]); + break; + case 2: + mMarching->SetImageRange(0,dims[0],0,dims[1],mask_slice,mask_slice); + break; + default: + assert(false); + } + mMarching->Update(); } void vvMeshActor::SetTimeSlice(int time) { - mTimeSlice=time; - if (static_cast(time)GetNumberOfMasks()) - mMarching->SetInput(mMesh->GetMask(time)); - else - mMarching->SetInput(mMesh->GetMask(0)); - SetCutSlice(mCutSlice); //We need to find the new mask cut slice, - //since masks do not all have the same origin + mTimeSlice=time; + if (static_cast(time)GetNumberOfMasks()) { +#if VTK_MAJOR_VERSION <= 5 + mMarching->SetInput(mMesh->GetMask(time)); +#else + mMarching->SetInputData(mMesh->GetMask(time)); +#endif + } else { +#if VTK_MAJOR_VERSION <= 5 + mMarching->SetInput(mMesh->GetMask(0)); +#else + mMarching->SetInputData(mMesh->GetMask(0)); +#endif + } + SetCutSlice(mCutSlice); //We need to find the new mask cut slice, + //since masks do not all have the same origin } void vvMeshActor::SetSlicingOrientation(unsigned int d) { - mCutDimension=d; + mCutDimension=d; } void vvMeshActor::ToggleSuperposition() { - DD("Warning: superposition not implemented"); + DD("Warning: superposition not implemented"); // std::cout << "vvMeshActor::ToggleSuperposition size = " << mMeshes.size() << std::endl; - if (! mSuperpostionMode && mMesh->GetNumberOfMeshes() > 1) - { - mSuperpostionMode=true; - } - else - { - mSuperpostionMode=false; - } + if (! mSuperpostionMode && mMesh->GetNumberOfMeshes() > 1) { + mSuperpostionMode=true; + } else { + mSuperpostionMode=false; + } }