Mercurial > hg > orthanc-stone
annotate OrthancStone/Sources/Scene2D/ScenePoint2D.h @ 1800:2c0497d61a5d
unserialization of annotations
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 20 May 2021 12:05:15 +0200 |
parents | 9ac2a65d4172 |
children | 5a872e69c74f |
rev | line source |
---|---|
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
1739
9ac2a65d4172
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1598
diff
changeset
|
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public License |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
15 * Lesser General Public License for more details. |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
16 * |
1598
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
18 * License along with this program. If not, see |
8563ea5d8ae4
relicensing some files, cf. osimis bm26 and chu agreement on 2020-05-20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1512
diff
changeset
|
19 * <http://www.gnu.org/licenses/>. |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 #pragma once |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 #include "../Toolbox/AffineTransform2D.h" |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
26 #include "../Toolbox/LinearAlgebra.h" |
699 | 27 |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 namespace OrthancStone |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 class ScenePoint2D |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 private: |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 double x_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 double y_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 public: |
596 | 37 ScenePoint2D() : |
38 x_(0), | |
39 y_(0) | |
40 { | |
41 } | |
42 | |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 ScenePoint2D(double x, |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
44 double y) : |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 x_(x), |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 y_(y) |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 } |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 double GetX() const |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 return x_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 } |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 double GetY() const |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
56 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 return y_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 } |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 ScenePoint2D Apply(const AffineTransform2D& t) const |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 { |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 double x = x_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 double y = y_; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 t.Apply(x, y); |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 return ScenePoint2D(x, y); |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 } |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
67 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
68 const ScenePoint2D operator-(const ScenePoint2D& a) const |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
69 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
70 ScenePoint2D v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
71 v.x_ = x_ - a.x_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
72 v.y_ = y_ - a.y_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
73 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
74 return v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
75 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
76 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
77 const ScenePoint2D operator+(const ScenePoint2D& a) const |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
78 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
79 ScenePoint2D v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
80 v.x_ = x_ + a.x_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
81 v.y_ = y_ + a.y_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
82 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
83 return v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
84 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
85 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
86 const ScenePoint2D operator*(double a) const |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
87 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
88 ScenePoint2D v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
89 v.x_ = x_ * a; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
90 v.y_ = y_ * a; |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
91 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
92 return v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
93 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
94 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
95 const ScenePoint2D operator/(double a) const |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
96 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
97 ScenePoint2D v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
98 v.x_ = x_ / a; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
99 v.y_ = y_ / a; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
100 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
101 return v; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
102 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
103 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
104 static void MidPoint(ScenePoint2D& result, const ScenePoint2D& a, const ScenePoint2D& b) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
105 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
106 result.x_ = 0.5 * (a.x_ + b.x_); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
107 result.y_ = 0.5 * (a.y_ + b.y_); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
108 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
109 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
110 static double Dot(const ScenePoint2D& a, const ScenePoint2D& b) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
111 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
112 return a.x_ * b.x_ + a.y_ * b.y_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
113 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
114 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
115 static double SquaredMagnitude(const ScenePoint2D& v) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
116 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
117 return v.x_ * v.x_ + v.y_ * v.y_; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
118 } |
901
240359ab1651
Added Dot + magnitude + couple helpers in ScenePoint2D + Added ability to target several sets of 5-layer text packs stored in LayerHolder
Benjamin Golinvaux <bgo@osimis.io>
parents:
866
diff
changeset
|
119 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
120 static double Magnitude(const ScenePoint2D& v) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
121 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
122 double squaredMagnitude = SquaredMagnitude(v); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
123 if (LinearAlgebra::IsCloseToZero(squaredMagnitude)) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
124 return 0.0; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
125 return sqrt(squaredMagnitude); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
126 } |
901
240359ab1651
Added Dot + magnitude + couple helpers in ScenePoint2D + Added ability to target several sets of 5-layer text packs stored in LayerHolder
Benjamin Golinvaux <bgo@osimis.io>
parents:
866
diff
changeset
|
127 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
128 static double SquaredDistancePtPt(const ScenePoint2D& a, const ScenePoint2D& b) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
129 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
130 ScenePoint2D n = b - a; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
131 return Dot(n, n); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
132 } |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
133 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
134 static double DistancePtPt(const ScenePoint2D& a, const ScenePoint2D& b) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
135 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
136 double squaredDist = SquaredDistancePtPt(a, b); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
137 return sqrt(squaredDist); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
138 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
139 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
140 /** |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
141 Distance from point p to [a,b] segment |
901
240359ab1651
Added Dot + magnitude + couple helpers in ScenePoint2D + Added ability to target several sets of 5-layer text packs stored in LayerHolder
Benjamin Golinvaux <bgo@osimis.io>
parents:
866
diff
changeset
|
142 |
1160
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
143 Rewritten from https://www.randygaul.net/2014/07/23/distance-point-to-line-segment/ |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
144 */ |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
145 static double SquaredDistancePtSegment(const ScenePoint2D& a, const ScenePoint2D& b, const ScenePoint2D& p) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
146 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
147 ScenePoint2D n = b - a; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
148 ScenePoint2D pa = a - p; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
149 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
150 double c = Dot(n, pa); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
151 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
152 // Closest point is a |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
153 if (c > 0.0) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
154 return Dot(pa, pa); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
155 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
156 ScenePoint2D bp = p - b; |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
157 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
158 // Closest point is b |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
159 if (Dot(n, bp) > 0.0) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
160 return Dot(bp, bp); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
161 |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
162 // if segment length is very short, we approximate distance to the |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
163 // distance with a |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
164 double nq = Dot(n, n); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
165 if (LinearAlgebra::IsCloseToZero(nq)) |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
166 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
167 // segment is very small: approximate distance from point to segment |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
168 // with distance from p to a |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
169 return Dot(pa, pa); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
170 } |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
171 else |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
172 { |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
173 // Closest point is between a and b |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
174 ScenePoint2D e = pa - n * (c / nq); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
175 return Dot(e, e); |
59906485896f
fix EOL in ScenePoint2D.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
901
diff
changeset
|
176 } |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
177 } |
584
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
178 }; |
434ceeb0bcab
layers: InfoPanel, Polyline, Texture
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
179 } |
865
a29c13497557
Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents:
699
diff
changeset
|
180 |