annotate Framework/Radiography/RadiographyLayerResizeTracker.cpp @ 440:a750f11892ec am-vsol-upgrade

merge default->am-vsol-upgrade
author amazy
date Fri, 28 Dec 2018 10:40:34 +0100
parents b85f635f1eb5 b70e9be013e4
children 3b4df9925db6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
439
b70e9be013e4 preparing for 2019
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 415
diff changeset
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * the License, or (at your option) any later version.
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * Affero General Public License for more details.
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 *
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 **/
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 #include "RadiographyLayerResizeTracker.h"
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "RadiographySceneCommand.h"
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include <Core/OrthancException.h>
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #include <boost/math/special_functions/round.hpp>
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 namespace OrthancStone
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 static double ComputeDistance(double x1,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 double y1,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 double x2,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 double y2)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 double dx = x1 - x2;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 double dy = y1 - y2;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 return sqrt(dx * dx + dy * dy);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 class RadiographyLayerResizeTracker::UndoRedoCommand : public RadiographySceneCommand
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 private:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 double sourceSpacingX_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 double sourceSpacingY_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 double sourcePanX_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 double sourcePanY_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 double targetSpacingX_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 double targetSpacingY_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 double targetPanX_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 double targetPanY_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 protected:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 virtual void UndoInternal(RadiographyLayer& layer) const
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 layer.SetPixelSpacing(sourceSpacingX_, sourceSpacingY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 layer.SetPan(sourcePanX_, sourcePanY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 virtual void RedoInternal(RadiographyLayer& layer) const
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 layer.SetPixelSpacing(targetSpacingX_, targetSpacingY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 layer.SetPan(targetPanX_, targetPanY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 public:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 UndoRedoCommand(const RadiographyLayerResizeTracker& tracker) :
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 RadiographySceneCommand(tracker.accessor_),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 sourceSpacingX_(tracker.originalSpacingX_),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 sourceSpacingY_(tracker.originalSpacingY_),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 sourcePanX_(tracker.originalPanX_),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 sourcePanY_(tracker.originalPanY_),
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
76 targetSpacingX_(tracker.accessor_.GetLayer().GetGeometry().GetPixelSpacingX()),
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
77 targetSpacingY_(tracker.accessor_.GetLayer().GetGeometry().GetPixelSpacingY()),
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
78 targetPanX_(tracker.accessor_.GetLayer().GetGeometry().GetPanX()),
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
79 targetPanY_(tracker.accessor_.GetLayer().GetGeometry().GetPanY())
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 };
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 RadiographyLayerResizeTracker::RadiographyLayerResizeTracker(UndoRedoStack& undoRedoStack,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 RadiographyScene& scene,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 size_t layer,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 double x,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 double y,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 Corner corner,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 bool roundScaling) :
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 undoRedoStack_(undoRedoStack),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 accessor_(scene, layer),
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 roundScaling_(roundScaling)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 if (accessor_.IsValid() &&
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
97 accessor_.GetLayer().GetGeometry().IsResizeable())
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 {
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
99 originalSpacingX_ = accessor_.GetLayer().GetGeometry().GetPixelSpacingX();
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
100 originalSpacingY_ = accessor_.GetLayer().GetGeometry().GetPixelSpacingY();
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
101 originalPanX_ = accessor_.GetLayer().GetGeometry().GetPanX();
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
102 originalPanY_ = accessor_.GetLayer().GetGeometry().GetPanY();
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 switch (corner)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 case Corner_TopLeft:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 oppositeCorner_ = Corner_BottomRight;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 break;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 case Corner_TopRight:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 oppositeCorner_ = Corner_BottomLeft;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 break;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114 case Corner_BottomLeft:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 oppositeCorner_ = Corner_TopRight;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 break;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 case Corner_BottomRight:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 oppositeCorner_ = Corner_TopLeft;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 break;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 default:
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 accessor_.GetLayer().GetCorner(oppositeX_, oppositeY_, oppositeCorner_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 double d = ComputeDistance(x, y, oppositeX_, oppositeY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 if (d >= std::numeric_limits<float>::epsilon())
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 baseScaling_ = 1.0 / d;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 else
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 // Avoid division by zero in extreme cases
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 accessor_.Invalidate();
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 void RadiographyLayerResizeTracker::Render(CairoContext& context,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 double zoom)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 void RadiographyLayerResizeTracker::MouseUp()
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 if (accessor_.IsValid() &&
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
152 accessor_.GetLayer().GetGeometry().IsResizeable())
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 undoRedoStack_.Add(new UndoRedoCommand(*this));
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 void RadiographyLayerResizeTracker::MouseMove(int displayX,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 int displayY,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 double sceneX,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 double sceneY)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 static const double ROUND_SCALING = 0.1;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 if (accessor_.IsValid() &&
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
167 accessor_.GetLayer().GetGeometry().IsResizeable())
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 double scaling = ComputeDistance(oppositeX_, oppositeY_, sceneX, sceneY) * baseScaling_;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 if (roundScaling_)
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 {
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 scaling = boost::math::round<double>((scaling / ROUND_SCALING) * ROUND_SCALING);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 RadiographyLayer& layer = accessor_.GetLayer();
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 layer.SetPixelSpacing(scaling * originalSpacingX_,
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 scaling * originalSpacingY_);
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 // Keep the opposite corner at a fixed location
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 double ox, oy;
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 layer.GetCorner(ox, oy, oppositeCorner_);
430
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
183 layer.SetPan(layer.GetGeometry().GetPanX() + oppositeX_ - ox,
b85f635f1eb5 added serialization for RadiographyScene
am@osimis.io
parents: 415
diff changeset
184 layer.GetGeometry().GetPanY() + oppositeY_ - oy);
415
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 }
c0589c3173fd finished reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 }