X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvSlicer.cxx;h=03ecaaaff126bcf49f27ddb5643c3b4b6d470e0a;hb=61d57d331b0459560f6714c0c6bb8298868a662e;hp=d50a422f3d928e0da48b969c7b5decd85f81b36a;hpb=e896ba3b14844f2769652b8b3230b73914acd5ee;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index d50a422..03ecaaa 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -1145,32 +1145,39 @@ void vvSlicer::SetColorLevel(double level) // Returns the min an the max value in a 41x41 region around the mouse pointer void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max) { + //Get mouse pointer position in view coordinates double fLocalExtents[6]; + for(int i=0; i<3; i++) + { + fLocalExtents[i*2 ] = mCurrent[i]; + fLocalExtents[i*2+1] = mCurrent[i]; + } + this->Renderer->WorldToView(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); + this->Renderer->WorldToView(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); + for(int i=0; i<3; i++) + { + if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???) + { + fLocalExtents[i*2 ] -= 0.2; + fLocalExtents[i*2+1] += 0.2; + } + } + this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); + this->Renderer->ViewToWorld(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); + + //Convert to image pixel coordinates (rounded) int iLocalExtents[6]; for(int i=0; i<3; i++) { - //Define corners of an area on the screen - if(SliceOrientation != i) - { - fLocalExtents[i*2 ] = mCurrent[i]-20; - fLocalExtents[i*2+1] = mCurrent[i]+20; - } - else - { - fLocalExtents[i*2 ] = mCurrent[i]; - fLocalExtents[i*2+1] = mCurrent[i]; - } - - //Convert to image pixel coordinates fLocalExtents[i*2 ] = (fLocalExtents[i*2 ] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; - - //Round - iLocalExtents[i*2 ] = lrint(fLocalExtents[i*2 ]); - iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]); - } - ClipDisplayedExtent(iLocalExtents, this->GetInput()->GetExtent()); + iLocalExtents[i*2 ] = lrint(fLocalExtents[i*2 ]); + 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]); + } vtkSmartPointer voiFilter = vtkExtractVOI::New(); voiFilter->SetInput(this->GetInput());