FLImaging 6.6.27.1
TRectUtilities.h
1#pragma once
2
3
4#include <vector>
5
6namespace FLImaging
7{
8 namespace ImageProcessing
9 {
10 class CTRectUtilities
11 {
12 private:
13 CTRectUtilities() { }
14
15 public:
16 //FLRect Get Rect
17 template<typename T>
18 static EResult GetBoundaryRect(std::vector<Base::TRect<T>>*pTRect, Foundation::CFLRect<T>*pFlrResRect)
19 {
21
22 do
23 {
24 if(!pTRect || !pFlrResRect)
25 {
27 break;
28 }
29
30 if(pTRect->size() == 0)
31 {
32 er = EResult_NoData;
33 break;
34 }
35
36 pFlrResRect->left = pTRect->at(0).left;
37 pFlrResRect->top = pTRect->at(0).top;
38 pFlrResRect->right = pTRect->at(0).right;
39 pFlrResRect->bottom = pTRect->at(0).bottom;
40
41 for(auto& iter : *pTRect)
42 {
43 pFlrResRect->left = pFlrResRect->left < iter.left ? pFlrResRect->left : iter.left;
44 pFlrResRect->top = pFlrResRect->top < iter.top ? pFlrResRect->top : iter.top;
45 pFlrResRect->right = pFlrResRect->right > iter.right ? pFlrResRect->right : iter.right;
46 pFlrResRect->bottom = pFlrResRect->bottom > iter.bottom ? pFlrResRect->bottom : iter.bottom;
47 }
48
49 er = EResult_OK;
50 }
51 while(false);
52
53 return er;
54 }
55
56 template<typename T>
57 static EResult GetBoundaryRect(std::vector<Base::TRect<T>>*pTRect, Foundation::CFLRect<T>&flrResRect)
58 {
59 return GetBoundaryRect<T>(pTRect, (Foundation::CFLRect<T>*) & flrResRect);
60 }
61
62 template<typename T>
63 static EResult GetBoundaryRect(std::vector<Base::TRect<T>>&tRect, Foundation::CFLRect<T>*pFlrResRect)
64 {
65 return GetBoundaryRect<T>((std::vector<Base::TRect<T>>*) & tRect, pFlrResRect);
66 }
67
68 template<typename T>
69 static EResult GetBoundaryRect(std::vector<Base::TRect<T>>&tRect, Foundation::CFLRect<T>&flrResRect)
70 {
71 return GetBoundaryRect<T>((std::vector<Base::TRect<T>>*) & tRect, (Foundation::CFLRect<T>*) & flrResRect);
72 }
73
74 //TRect Get Rect
75 template<typename T>
76 static EResult GetBoundaryRect(std::vector<Base::TRect<T> >*pTRect, Base::TRect<T>*pTrResRect)
77 {
79
80 do
81 {
82 if(!pTRect || !pTrResRect)
83 {
85 break;
86 }
87
88 if(pTRect->size() == 0)
89 {
90 er = EResult_NoData;
91 break;
92 }
93
94 pTrResRect->left = pTRect->at(0).left;
95 pTrResRect->top = pTRect->at(0).top;
96 pTrResRect->right = pTRect->at(0).right;
97 pTrResRect->bottom = pTRect->at(0).bottom;
98
99 for(auto& iter : *pTRect)
100 {
101 pTrResRect->left = pTrResRect->left < iter.left ? pTrResRect->left : iter.left;
102 pTrResRect->top = pTrResRect->top < iter.top ? pTrResRect->top : iter.top;
103 pTrResRect->right = pTrResRect->right > iter.right ? pTrResRect->right : iter.right;
104 pTrResRect->bottom = pTrResRect->bottom > iter.bottom ? pTrResRect->bottom : iter.bottom;
105 }
106
107 er = EResult_OK;
108 }
109 while(false);
110
111 return er;
112 }
113
114 template<typename T>
115 static EResult GetBoundaryRect(std::vector<Base::TRect<T> >&tRect, Base::TRect<T>&trResRect)
116 {
117 return GetBoundaryRect<T>((std::vector<Base::TRect<T> >*) & tRect, (Base::TRect<T>*) & trResRect);
118 }
119
120 template<typename T>
121 static EResult GetBoundaryRect(std::vector<Base::TRect<T> >&tRect, Base::TRect<T>*pTrResRect)
122 {
123 return GetBoundaryRect<T>((std::vector<Base::TRect<T> >*) & tRect, pTrResRect);
124 }
125
126 template<typename T>
127 static EResult GetBoundaryRect(std::vector<Base::TRect<T> >*pTRect, Base::TRect<T>&trResRect)
128 {
129 return GetBoundaryRect<T>(pTRect, (Base::TRect<T>*) & trResRect);
130 }
131
132
133 //FLPoint Offset
134 template<typename T>
135 static EResult Offset(std::vector<Base::TRect<T> >*pTRect, Foundation::CFLPoint<T>*pFlpOffset)
136 {
138
139 do
140 {
141 if(!pTRect || !pFlpOffset)
142 {
144 break;
145 }
146
147 if(pTRect->size() == 0)
148 {
149 er = EResult_NoData;
150 break;
151 }
152
153 for(auto& iter : *pTRect)
154 {
155 iter.left += pFlpOffset->x;
156 iter.top += pFlpOffset->y;
157 iter.right += pFlpOffset->x;
158 iter.bottom += pFlpOffset->y;
159 }
160
161 er = EResult_OK;
162 }
163 while(false);
164
165 return er;
166 }
167
168 template<typename T>
169 static EResult Offset(std::vector<Base::TRect<T> >&tRect, Foundation::CFLPoint<T>&flpOffset)
170 {
171 return Offset<T>((std::vector<Base::TRect<T> >*) & tRect, (Foundation::CFLPoint<T>*) & flpOffset);
172 }
173
174 template<typename T>
175 static EResult Offset(std::vector<Base::TRect<T> >&tRect, Foundation::CFLPoint<T>*pFlpOffset)
176 {
177 return Offset<T>((std::vector<Base::TRect<T> >*) & tRect, pFlpOffset);
178 }
179
180 template<typename T>
181 static EResult Offset(std::vector<Base::TRect<T> >*pTRect, Foundation::CFLPoint<T>&flpOffset)
182 {
183 return Offset<T>(pTRect, (Foundation::CFLPoint<T>*) & flpOffset);
184 }
185
186 //TPoint Offset
187 template<typename T>
188 static EResult Offset(std::vector<Base::TRect<T> >*pTRect, Base::TPoint<T>*pTpOffset)
189 {
191
192 do
193 {
194 if(!pTRect || !pTpOffset)
195 {
197 break;
198 }
199
200 if(pTRect->size() == 0)
201 {
202 er = EResult_NoData;
203 break;
204 }
205
206 for(auto& iter : *pTRect)
207 {
208 iter.left += pTpOffset->x;
209 iter.top += pTpOffset->y;
210 iter.right += pTpOffset->x;
211 iter.bottom += pTpOffset->y;
212 }
213
214 er = EResult_OK;
215 }
216 while(false);
217
218 return er;
219 }
220
221 template<typename T>
222 static EResult Offset(std::vector<Base::TRect<T> >&tRect, Base::TPoint<T>&tpOffset)
223 {
224 return Offset<T>((std::vector<Base::TRect<T> >*) & tRect, (Base::TPoint<T>*) & tpOffset);
225 }
226
227 template<typename T>
228 static EResult Offset(std::vector<Base::TRect<T> >&tRect, Base::TPoint<T>*pTpOffset)
229 {
230 return Offset<T>((std::vector<Base::TRect<T> >*) & tRect, pTpOffset);
231 }
232
233 template<typename T>
234 static EResult Offset(std::vector<Base::TRect<T> >*pTRect, Base::TPoint<T>&tpOffset)
235 {
236 return Offset<T>(pTRect, (Base::TPoint<T>*) & tpOffset);
237 }
238
239
240 //Type Offset
241 template<typename T>
242 static EResult Offset(std::vector<Base::TRect<T> >*pTRect, T x, T y)
243 {
245
246 do
247 {
248 if(!pTRect)
249 {
251 break;
252 }
253
254 if(pTRect->size() == 0)
255 {
256 er = EResult_NoData;
257 break;
258 }
259
260 for(auto& iter : *pTRect)
261 {
262 iter.left += x;
263 iter.top += y;
264 iter.right += x;
265 iter.bottom += y;
266 }
267
268 er = EResult_OK;
269 }
270 while(false);
271
272 return er;
273 }
274
275 template<typename T>
276 static EResult Offset(std::vector<Base::TRect<T> >&tRect, T x, T y)
277 {
278 return Offset<T>((std::vector<Base::TRect<T> >*) & tRect, x, y);
279 }
280 };
281
282 }
283}
Definition AbsoluteThreshold.h:25
EResult
결과
Definition ResultsDef.h:26
@ EResult_NoData
데이터 없음
Definition ResultsDef.h:169
@ EResult_NullPointer
비어있는 포인터
Definition ResultsDef.h:145
@ EResult_UnknownError
알려지지 않은 에러
Definition ResultsDef.h:33
@ EResult_OK
OK
Definition ResultsDef.h:41