X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.cxx;h=256981fba78528394cb9f21b67828f7efefc94f8;hb=48d8569538b93bf923de2f8d5c4b9db51640978f;hp=9552a387f061770d527c20bd4f1aefbec2753e1d;hpb=58ff4b2d68e8d357669628bb231d2691d14f1b45;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 9552a38..256981f 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -64,6 +64,7 @@ #include #include #include +#include vtkCxxRevisionMacro(vvSlicer, "DummyRevision"); vtkStandardNewMacro(vvSlicer); @@ -140,6 +141,7 @@ vvSlicer::vvSlicer() this->WindowLevel->Delete(); this->WindowLevel = vvImageMapToWLColors::New(); this->InstallPipeline(); + } //------------------------------------------------------------------------------ @@ -1176,8 +1178,8 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max) { if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???) { - fLocalExtents[i*2 ] -= 0.2; - fLocalExtents[i*2+1] += 0.2; + fLocalExtents[i*2 ] -= 0.2; + fLocalExtents[i*2+1] += 0.2; } } this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); @@ -1194,17 +1196,24 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max) iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]); if(iLocalExtents[i*2 ]>iLocalExtents[i*2+1]) - std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); + std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); } - + vtkSmartPointer voiFilter = vtkExtractVOI::New(); voiFilter->SetInput(this->GetInput()); voiFilter->SetVOI(iLocalExtents); + voiFilter->Update(); + if (!voiFilter->GetOutput()->GetNumberOfPoints()) + { + min = 0; + max = 0; + return; + } vtkSmartPointer accFilter = vtkImageAccumulate::New(); accFilter->SetInput(voiFilter->GetOutput()); accFilter->Update(); - + min = *(accFilter->GetMin()); max = *(accFilter->GetMax()); } @@ -1279,10 +1288,9 @@ void vvSlicer::Render() pixel2 << (int)Y; pixel3 << (int)Z; temps << mCurrentTSlice; - double value = this->GetInput()->GetScalarComponentAsDouble( - (int)X, - (int)Y, - (int)Z,0); + double value = this->GetInput()->GetScalarComponentAsDouble(lrint(X), + lrint(Y), + lrint(Z),0); std::stringstream val; val << value; @@ -1408,3 +1416,8 @@ void vvSlicer::PrintSelf(ostream& os, vtkIndent indent) //---------------------------------------------------------------------------- + + + + +