X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvImageContour.cxx;h=7318640f78d287209c4533c20605786ea33391f3;hb=996a050b898c093fa00462b1a4aa78b9a515cb2a;hp=ae6459cbd38d68949c33dd61493647b1654b2f43;hpb=a60043d19405389a5f452f42a8d7c42f23624734;p=clitk.git diff --git a/vv/vvImageContour.cxx b/vv/vvImageContour.cxx index ae6459c..7318640 100644 --- a/vv/vvImageContour.cxx +++ b/vv/vvImageContour.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvImageContour.cxx,v $ Language: C++ - Date: $Date: 2010/02/07 09:24:46 $ - Version: $Revision: 1.1 $ + Date: $Date: 2010/03/05 10:32:33 $ + Version: $Revision: 1.5 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2010 @@ -26,48 +26,118 @@ =========================================================================*/ #include "vvImageContour.h" +#include +#include +#include +#include +#include +#include +#include +#include //------------------------------------------------------------------------------ vvImageContour::vvImageContour() { - mClipper = vtkImageClip::New(); - mSquares = vtkMarchingSquares::New(); - mSquaresMapper = vtkPolyDataMapper::New(); - mSquaresActor = vtkActor::New(); + mTSlice = -1; + mSlice = 0; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ vvImageContour::~vvImageContour() { - + for (unsigned int i = 0; i < mSlicer->GetImage()->GetVTKImages().size(); i++) { + mSlicer->GetRenderer()->RemoveActor(mSquaresActorList[i]); + } + mSquaresActorList.clear(); + mSquaresList.clear(); + mClipperList.clear(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvImageContour::setSlicer(vvSlicer * slicer) { - mSlicer = slicer; - mClipper->SetInput(slicer->GetImage()->GetFirstVTKImageData()); - mSquares->SetInput(mClipper->GetOutput()); - mSquaresMapper->SetInput(mSquares->GetOutput()); - mSquaresMapper->ScalarVisibilityOff(); - mSquaresActor->SetMapper(mSquaresMapper); - mSquaresActor->GetProperty()->SetColor(1.0,0,0); - mSquaresActor->SetPickable(0); - mSlicer->GetRenderer()->AddActor(mSquaresActor1); - mSquares->Update(); + mSlicer = slicer; + + for (unsigned int numImage = 0; numImage < mSlicer->GetImage()->GetVTKImages().size(); numImage++) { + vtkImageClip * mClipper = vtkImageClip::New(); + vtkMarchingSquares * mSquares = vtkMarchingSquares::New(); + vtkPolyDataMapper * mSquaresMapper = vtkPolyDataMapper::New(); + vtkActor * mSquaresActor = vtkActor::New(); + + mClipper->SetInput(mSlicer->GetImage()->GetVTKImages()[numImage]); + mSquares->SetInput(mClipper->GetOutput()); + mSquaresMapper->SetInput(mSquares->GetOutput()); + mSquaresMapper->ScalarVisibilityOff(); + mSquaresActor->SetMapper(mSquaresMapper); + mSquaresActor->GetProperty()->SetColor(1.0,0,0); + mSquaresActor->SetPickable(0); + mSquaresActor->VisibilityOff(); + mSlicer->GetRenderer()->AddActor(mSquaresActor); + + mSquaresActorList.push_back(mSquaresActor); + mSquaresList.push_back(mSquares); + mClipperList.push_back(mClipper); + } +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +void vvImageContour::setColor(double r, double g, double b) { + for(unsigned int i=0; iGetProperty()->SetColor(r,g,b); + } } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvImageContour::update() { - int slice = mSlicer->GetSlice(); - int tslice = mCurrentSliceManager->GetSlicer(0)->GetTSlice(); - DD(tslice); - DD(slice); +void vvImageContour::hideActors() { + if (!mSlicer) return; + mSlice = mSlicer->GetSlice(); + for(unsigned int i=0; iVisibilityOff(); + } +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +void vvImageContour::showActors() { + if (!mSlicer) return; + mSlice = mSlicer->GetSlice(); + mTSlice = mSlicer->GetTSlice(); + // for(unsigned int i=0; iVisibilityOn(); + update(mValue); + //} +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +void vvImageContour::update(double value) { + mValue= value; + if (!mSlicer) return; + + // how to not update if not visible ? + + mSlice = mSlicer->GetSlice(); + // Only change actor visibility if tslice change + if (mTSlice != mSlicer->GetTSlice()) { + if (mTSlice != -1) + mSquaresActorList[mTSlice]->VisibilityOff(); + mTSlice = mSlicer->GetTSlice(); + mSquaresActorList[mTSlice]->VisibilityOn(); + } + + vtkMarchingSquares * mSquares = mSquaresList[mTSlice]; + vtkImageClip * mClipper = mClipperList[mTSlice]; + vtkActor * mSquaresActor = mSquaresActorList[mTSlice]; - // mClipper->SetInput(mCurrentSliceManager->GetSlicer(0)->GetInput()); + // Do it + mSquares->SetValue(0,value); int* extent = mSlicer->GetImageActor()->GetDisplayExtent(); mClipper->SetOutputWholeExtent(extent[0],extent[1],extent[2], @@ -82,44 +152,37 @@ void vvImageContour::update() { switch (i) { case 0: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > mSlice) { mSquaresActor->SetPosition(1,0,0); - // mSquaresActor2->SetPosition(1,0,0); } else { mSquaresActor->SetPosition(-1,0,0); - // mSquaresActor2->SetPosition(-1,0,0); } break; case 2: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > mSlice) { mSquaresActor->SetPosition(0,1,0); - // mSquaresActor2->SetPosition(0,1,0); } else { mSquaresActor->SetPosition(0,-1,0); - // mSquaresActor2->SetPosition(0,-1,0); } break; case 4: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > mSlice) { mSquaresActor->SetPosition(0,0,1); - // mSquaresActor2->SetPosition(0,0,1); } else { mSquaresActor->SetPosition(0,0,-1); - // mSquaresActor2->SetPosition(0,0,-1); } break; } mSquares->Update(); - // mSquares2->Update(); } //------------------------------------------------------------------------------