Mercurial > hg > orthanc-stone
diff Framework/Radiography/RadiographyLayerResizeTracker.cpp @ 476:a95090305dd4 am-touch-events
Introduced ControlPoint instead of Corner in the trackers and layers + drawing mask from the ControlPoints
author | am@osimis.io |
---|---|
date | Wed, 13 Feb 2019 12:04:02 +0100 |
parents | 3b4df9925db6 |
children | 4f2416d519b4 |
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyLayerResizeTracker.cpp Tue Feb 12 12:22:13 2019 +0100 +++ b/Framework/Radiography/RadiographyLayerResizeTracker.cpp Wed Feb 13 12:04:02 2019 +0100 @@ -85,9 +85,7 @@ RadiographyLayerResizeTracker::RadiographyLayerResizeTracker(UndoRedoStack& undoRedoStack, RadiographyScene& scene, size_t layer, - double x, - double y, - Corner corner, + const ControlPoint& startControlPoint, bool roundScaling) : undoRedoStack_(undoRedoStack), accessor_(scene, layer), @@ -101,31 +99,32 @@ originalPanX_ = accessor_.GetLayer().GetGeometry().GetPanX(); originalPanY_ = accessor_.GetLayer().GetGeometry().GetPanY(); - switch (corner) + size_t oppositeControlPointType; + switch (startControlPoint.index) { - case Corner_TopLeft: - oppositeCorner_ = Corner_BottomRight; + case ControlPoint_TopLeftCorner: + oppositeControlPointType = ControlPoint_BottomRightCorner; break; - case Corner_TopRight: - oppositeCorner_ = Corner_BottomLeft; + case ControlPoint_TopRightCorner: + oppositeControlPointType = ControlPoint_BottomLeftCorner; break; - case Corner_BottomLeft: - oppositeCorner_ = Corner_TopRight; + case ControlPoint_BottomLeftCorner: + oppositeControlPointType = ControlPoint_TopRightCorner; break; - case Corner_BottomRight: - oppositeCorner_ = Corner_TopLeft; + case ControlPoint_BottomRightCorner: + oppositeControlPointType = ControlPoint_TopLeftCorner; break; default: throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); } - accessor_.GetLayer().GetCorner(oppositeX_, oppositeY_, oppositeCorner_); + accessor_.GetLayer().GetControlPoint(startOppositeControlPoint_, oppositeControlPointType); - double d = ComputeDistance(x, y, oppositeX_, oppositeY_); + double d = ComputeDistance(startControlPoint.x, startControlPoint.y, startOppositeControlPoint_.x, startOppositeControlPoint_.y); if (d >= std::numeric_limits<float>::epsilon()) { baseScaling_ = 1.0 / d; @@ -168,7 +167,7 @@ if (accessor_.IsValid() && accessor_.GetLayer().GetGeometry().IsResizeable()) { - double scaling = ComputeDistance(oppositeX_, oppositeY_, sceneX, sceneY) * baseScaling_; + double scaling = ComputeDistance(startOppositeControlPoint_.x, startOppositeControlPoint_.y, sceneX, sceneY) * baseScaling_; if (roundScaling_) { @@ -180,10 +179,10 @@ scaling * originalSpacingY_); // Keep the opposite corner at a fixed location - double ox, oy; - layer.GetCorner(ox, oy, oppositeCorner_); - layer.SetPan(layer.GetGeometry().GetPanX() + oppositeX_ - ox, - layer.GetGeometry().GetPanY() + oppositeY_ - oy); + ControlPoint currentOppositeCorner; + layer.GetControlPoint(currentOppositeCorner, startOppositeControlPoint_.index); + layer.SetPan(layer.GetGeometry().GetPanX() + startOppositeControlPoint_.x - currentOppositeCorner.x, + layer.GetGeometry().GetPanY() + startOppositeControlPoint_.y - currentOppositeCorner.y); } } }