X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.cxx;h=2224a9ac9748dd6abb32b09a79185048f93137fc;hb=6e49247d08fe0af01c2a9cf53dba97ddd307077c;hp=cba898cc431f06e80b10fab19d2f6191130ca890;hpb=bcd98a7cb45fd4c3b5a41bc8cefa89f5790aca27;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index cba898c..2224a9a 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -130,7 +130,7 @@ vvSlicer::vvSlicer() legend->SetVisibility(0); legend->SetLabelFormat("%.1f"); this->GetRenderer()->AddActor(legend); - showFusionLegend = true; + showFusionLegend = false; this->WindowLevel->Delete(); this->WindowLevel = vvImageMapToWLColors::New(); @@ -1168,33 +1168,38 @@ void vvSlicer::SetOverlayColorLevel(double level) //---------------------------------------------------------------------------- // Returns the min an the max value in a 41x41 region around the mouse pointer -void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max, vtkImageData *image) +void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max, vtkImageData *image, vtkTransform *transform) { //Get mouse pointer position in view coordinates - double fLocalExtents[6]; + double corner1[3]; + double corner2[3]; for(int i=0; i<3; i++) { - fLocalExtents[i*2 ] = mCurrent[i]; - fLocalExtents[i*2+1] = mCurrent[i]; + corner1[i] = mCurrent[i]; + corner2[i] = 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]); + this->Renderer->WorldToView(corner1[0], corner1[1], corner1[2]); + this->Renderer->WorldToView(corner2[0], corner2[1], corner2[2]); + + // In view coordinates, x is the slicer width and y is the slicer height are the in-plane axis + int w, h; + this->Renderer->GetTiledSize(&w, &h); + corner1[0] -= 0.2*h/(double)w; + corner2[0] += 0.2*h/(double)w; + corner1[1] -= 0.2; + corner2[1] += 0.2; + this->Renderer->ViewToWorld(corner1[0], corner1[1], corner1[2]); + this->Renderer->ViewToWorld(corner2[0], corner2[1], corner2[2]); //Convert to image pixel coordinates (rounded) + transform->TransformPoint(corner1, corner1); + transform->TransformPoint(corner2, corner2); int iLocalExtents[6]; for(int i=0; i<3; i++) { - fLocalExtents[i*2 ] = (fLocalExtents[i*2 ] - image->GetOrigin()[i])/image->GetSpacing()[i]; - fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - image->GetOrigin()[i])/image->GetSpacing()[i]; + corner1[i] = (corner1[i] - image->GetOrigin()[i])/image->GetSpacing()[i]; + corner2[i] = (corner2[i] - image->GetOrigin()[i])/image->GetSpacing()[i]; - iLocalExtents[i*2 ] = lrint(fLocalExtents[i*2 ]); - iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]); + iLocalExtents[i*2 ] = lrint(corner1[i]); + iLocalExtents[i*2+1] = lrint(corner2[i]); if(iLocalExtents[i*2 ]>iLocalExtents[i*2+1]) std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); @@ -1242,12 +1247,12 @@ double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, double X, doubl //---------------------------------------------------------------------------- void vvSlicer::Render() { - if (this->mFusion && showFusionLegend) { + if (this->mFusion && mFusionActor->GetVisibility() && showFusionLegend) { legend->SetLookupTable(this->GetFusionMapper()->GetLookupTable()); legend->UseOpacityOn(); legend->SetVisibility(1); } - else if (this->GetWindowLevel()->GetLookupTable()) {// && !this->mOverlay && !this->mFusion) { + else if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay) { legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable()); legend->UseOpacityOff(); legend->SetVisibility(1);