Mercurial > hg > orthanc-stone
annotate Samples/Common/MeasureToolsToolbox.h @ 645:1e9ed656318e
Merge + ongoing measure work
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 13 May 2019 15:12:56 +0200 |
parents | |
children | 62f6ff016085 |
rev | line source |
---|---|
645
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
1 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
2 * Stone of Orthanc |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
6 * |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
11 * |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
16 * |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
19 **/ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
20 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
21 #include <Framework/Scene2D/PolylineSceneLayer.h> |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
22 #include <Framework/Scene2D/Scene2D.h> |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
23 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
24 namespace OrthancStone |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
25 { |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
26 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
27 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
28 This function will create a square around the center point supplied in |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
29 scene coordinates, with a side length given in canvas coordinates. The |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
30 square sides are parallel to the canvas boundaries. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
31 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
32 void AddSquare(PolylineSceneLayer::Chain& chain, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
33 const Scene2D& scene, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
34 const ScenePoint2D& centerS, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
35 const double& sideLength); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
36 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
37 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
38 Creates an arc centered pm c that goes |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
39 - from a point r1: |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
40 - so that r1 belongs to the p1,c line |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
41 - so that the distance from c to r1 equals radius |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
42 - to a point r2: |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
43 - so that r2 belongs to the p2,c line |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
44 - so that the distance from c to r2 equals radius |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
45 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
46 if clockwise is true, the arc is drawn from r1 to r2 with increasing |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
47 angle values. Otherwise, the angle values decrease. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
48 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
49 Warning: the existing chain content will be wiped out. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
50 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
51 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
52 void AddArc( |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
53 PolylineSceneLayer::Chain& chain |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
54 , const Scene2D& scene |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
55 , const ScenePoint2D& p1 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
56 , const ScenePoint2D& c |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
57 , const ScenePoint2D& p2 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
58 , const double& radiusS |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
59 , const bool clockwise |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
60 , const int subdivisionsCount = 63); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
61 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
62 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
63 Creates an arc (open curve) with "numSubdivisions" |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
64 (N + 1 points) from start angle to end angle. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
65 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
66 if clockwise is true, the arc is drawn from start to end |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
67 by increasing the angle values. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
68 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
69 otherwise, the angle value decreases from start to end. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
70 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
71 Warning: the existing chain content will be wiped out. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
72 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
73 void AddArc( |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
74 PolylineSceneLayer::Chain& chain |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
75 , const Scene2D& scene |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
76 , const ScenePoint2D& centerS |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
77 , const double& radiusS |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
78 , const double startAngleRad |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
79 , const double endAngleRad |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
80 , const bool clockwise |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
81 , const int subdivisionsCount = 63); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
82 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
83 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
84 Creates a circle (closed curve) with "numSubdivisions" |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
85 (N points) |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
86 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
87 Warning: the existing chain content will be wiped out. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
88 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
89 void AddCircle(PolylineSceneLayer::Chain& chain, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
90 const Scene2D& scene, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
91 const ScenePoint2D& centerS, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
92 const double& radiusS, |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
93 const int numSubdivisions = 63); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
94 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
95 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
96 Adds or subtracts 2*pi as many times as need to shift the specified |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
97 angle to a value such as: 0 <= value < 2*pi |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
98 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
99 double NormalizeAngle(double angle); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
100 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
101 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
102 Returns the angle magnitude between the p1,c and p2,c lines. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
103 The returned angle is between 0 and 2*pi |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
104 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
105 If the angle is between 0 and pi, this means that the shortest arc |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
106 from p1 to p2 is clockwise. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
107 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
108 If the angle is between pi and 2*pi, this means that the shortest arc |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
109 from p1 to p2 is COUNTERclockwise. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
110 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
111 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
112 double MeasureAngle( |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
113 const ScenePoint2D& p1 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
114 , const ScenePoint2D& c |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
115 , const ScenePoint2D& p2); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
116 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
117 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
118 RadiansToDegrees |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
119 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
120 double RadiansToDegrees(double angleRad); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
121 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
122 /** |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
123 This function will return the coordinates of a point that: |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
124 - belongs to the two bisecting lines of the p1 c p2 angle. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
125 - is a distance d from c. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
126 Among the four possible points, the one returned will be the one belonging |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
127 to the *smallest* half-plane defined by the [c,p1[ and [c,p2[ half-lines. |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
128 */ |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
129 void GetPositionOnBisectingLine( |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
130 ScenePoint2D& result |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
131 , const ScenePoint2D& p1 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
132 , const ScenePoint2D& c |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
133 , const ScenePoint2D& p2 |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
134 , const double d); |
1e9ed656318e
Merge + ongoing measure work
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
135 } |