21 if (this->isAutoZoom())
22 return this->calculateZoomCenter_SmallestFitROI();
25 return this->calculateCenter_FitToolIntoViewport();
30 if (this->isAutoZoom())
31 return this->calculateZoom_FitROIKeepCenter();
37 bool SliceAutoViewportCalculator::isAutoZoom()
const
42 Vector3D SliceAutoViewportCalculator::findCenterShift_s()
46 Vector3D pt_s = this->findVirtualTooltip_s();
47 DoubleBoundingBox3D BB_s = this->findStaticBox();
48 shift = this->findShiftFromBoxToTool_s(BB_s, pt_s);
64 Vector3D SliceAutoViewportCalculator::findVirtualTooltip_s()
71 DoubleBoundingBox3D SliceAutoViewportCalculator::findStaticBox()
74 followTooltipBoundary =
constrainValue(followTooltipBoundary, 0.0, 0.5);
84 Vector3D SliceAutoViewportCalculator::findShiftFromBoxToTool_s(DoubleBoundingBox3D BB_s,
Vector3D pt_s)
88 for (
unsigned i=0; i<2; ++i)
90 if (pt_s[i] < BB_s[2*i])
91 shift[i] += pt_s[i] - BB_s[2*i];
92 if (pt_s[i] > BB_s[2*i+1])
93 shift[i] += pt_s[i] - BB_s[2*i+1];
102 Vector3D SliceAutoViewportCalculator::findShiftFromBoxToROI(DoubleBoundingBox3D bb, DoubleBoundingBox3D roi)
106 for (
unsigned i=0; i<2; ++i)
108 if (roi[2*i ] < bb[2*i ])
109 shift[i] += roi[2*i ] - bb[2*i ];
110 if (roi[2*i+1] > bb[2*i+1])
111 shift[i] += roi[2*i+1] - bb[2*i+1];
117 SliceAutoViewportCalculator::ReturnType SliceAutoViewportCalculator::calculateZoomCenter_SmallestFitROI()
132 DoubleBoundingBox3D roi_s =
mROI_s;
134 DoubleBoundingBox3D roi_sc =
transform(T, roi_s);
139 double zoom = this->findZoomRequiredToIncludeRoi(
mBB_s, roi_sc);
146 Vector3D shift = this->findShiftFromBoxToROI(bb_zoomed, roi_s);
149 retval.center_shift_s = shift;
150 retval.zoom = 1.0/zoom;
155 SliceAutoViewportCalculator::ReturnType SliceAutoViewportCalculator::calculateCenter_FitToolIntoViewport()
160 retval.center_shift_s = this->findCenterShift_s();
165 SliceAutoViewportCalculator::ReturnType SliceAutoViewportCalculator::calculateZoom_FitROIKeepCenter()
169 DoubleBoundingBox3D roi_s =
mROI_s;
174 double zoom = this->findZoomRequiredToIncludeRoi(
mBB_s, roi_s);
176 retval.zoom = 1.0/zoom;
253 double SliceAutoViewportCalculator::findZoomRequiredToIncludeRoi(DoubleBoundingBox3D base, DoubleBoundingBox3D roi)
257 for (
int i=0; i<2; ++i)
259 double base_max = fabs(std::max(base[2*i], base[2*i+1]));
260 double roi_max = fabs(std::max(roi[2*i], roi[2*i+1]));
261 scale = std::max(scale, roi_max/base_max);