acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
__basic.h
1#pragma once
2
3
4#include "angle.h"
5
6
7//#include "_geometry2d.h"
8
9
10#include "_concept.h"
11
12
13// inline auto left(const ::i32_rectangle &rectangle) { return rectangle.left; }
14// inline auto top(const ::i32_rectangle &rectangle) { return rectangle.top; }
15// inline auto left(const ::i64_rectangle & rectangle) { return rectangle.left; }
16// inline auto top(const ::i64_rectangle & rectangle) { return rectangle.top; }
17// inline auto left(const ::f32_rectangle & rectangle) { return rectangle.left; }
18// inline auto top(const ::f32_rectangle & rectangle) { return rectangle.top; }
19// inline auto left(const ::f64_rectangle & rectangle) { return rectangle.left; }
20// inline auto top(const ::f64_rectangle & rectangle) { return rectangle.top; }
21
22
23//template < typename TARGET, typename SOURCE >
24//inline TARGET & _001CopyRect(TARGET & prectTarget, const SOURCE & prectSource);
25
26
27
28
29template < typename SIZE_BASE_TYPE, typename POINT_BASE_TYPE, typename RECTANGLE_BASE_TYPE >
30class size_type;
31
32template < typename POINT_BASE_TYPE, typename SIZE_BASE_TYPE, typename RECTANGLE_BASE_TYPE >
33class point_type;
34
35template < typename RECTANGLE_BASE_TYPE, typename POINT_TYPE, typename SIZE_TYPE >
36class rectangle_type;
37
38template < typename POINT_TYPE >
40
41
42
43
44
45
46inline ::i32 area(::i32 cx, ::i32 cy) { return (cx < 0 && cy < 0 ? -1 : 1) * cx * cy; }
47inline ::i64 area(::i64 cx, ::i64 cy) { return (cx < 0 && cy < 0 ? -1 : 1) * cx * cy; }
48inline ::f64 area(::f64 cx, ::f64 cy) { return (cx < 0. && cy < 0. ? -1. : 1.) * cx * cy; }
49
50
51
52struct ::i64_size;
53struct ::i64_point;
54struct ::i64_rectangle;
55//::i32_size;
56//class i64_size;
57//class f64_size;
58//::i32_point;
59//class i64_point;
60//class ::f64_point;
61//::f64_rectangle;
62//::i64_rectangle;
63//::f64_rectangle;
64
65typedef uchar uch;
66
67struct ::i64_point;
68struct ::i64_size;
69struct ::i64_rectangle;
70struct ::f64_point;
71struct ::f64_size;
72struct ::f64_rectangle;
73
74
75
76
77//inline ::f32 i32muldiv(::f32 f, ::i32 iNum, ::i32 iDen);
78//inline ::f64 i32muldiv(::f64 d, ::i32 iNum, ::i32 iDen);
79//inline ::i32 i32muldiv(::i32 i, ::i32 iNum, ::i32 iDen);
80//#ifndef WINDOWS
81//inline ::i64 MulDiv(::i64 nNumber, ::i32 iNum, ::i32 iDen);
82//#endif
83//inline ::i64 i32muldiv(::i64 i, ::i64 iNum, ::i64 iDen);
84
85
86template < prototype_integral INTEGRAL1, prototype_integral INTEGRAL2, prototype_integral INTEGRAL3, prototype_integral INTEGRAL_RESULT = typename ::largest_type_of_3 < INTEGRAL1, INTEGRAL2, INTEGRAL3 >::type >
87inline INTEGRAL_RESULT muldiv(INTEGRAL1 i, INTEGRAL2 iNumerator, INTEGRAL3 iDenominator);
88
89
90template < prototype_rectangle RECTANGLE >
91inline auto width(const RECTANGLE & rectangle) { return rectangle.right - rectangle.left; }
92
93template < prototype_rectangle RECTANGLE >
94inline auto height(const RECTANGLE & rectangle) { return rectangle.bottom - rectangle.top; }
95
96template < prototype_rectangle RECTANGLE >
97inline auto area(const RECTANGLE & rectangle) { return maximum(width(rectangle), 0) * maximum(height(rectangle), 0); }
98
99
100template < prototype_rectangle RECTANGLE >
101inline auto left(const RECTANGLE & rectangle) { return rectangle.left; }
102
103template < prototype_rectangle RECTANGLE >
104inline auto top(const RECTANGLE & rectangle) { return rectangle.top; }
105
106
107
108template < prototype_XYDim XYDim >
109inline auto width(const XYDim & rectangle) { return rectangle.Width; }
110
111template < prototype_XYDim XYDim >
112inline auto height(const XYDim & rectangle) { return rectangle.Height; }
113
114template < prototype_XYDim XYDim >
115inline auto area(const XYDim & rectangle) { return maximum(rectangle.Width, 0) * maximum(rectangle.Height, 0); }
116
117
118template < prototype_XYDim XYDim >
119inline auto left(const XYDim & rectangle) { return rectangle.X; }
120
121template < prototype_XYDim XYDim >
122inline auto top(const XYDim & rectangle) { return rectangle.Y; }
123
124
125//template < prototype_rectangle RECTANGLE, prototype_XYDim XYDim >
126//inline void copy(RECTANGLE & rectangle, const XYDim & xydim)
127//{
128//
129// rectangle.left = (decltype(rectangle.left)) xydim.X;
130// rectangle.top = (decltype(rectangle.top)) xydim.Y;
131// rectangle.right = (decltype(rectangle.right))(xydim.X + xydim.Width);
132// rectangle.bottom = (decltype(rectangle.bottom))(xydim.Y + xydim.Height);
133//
134//}
135//
136//
137//template < prototype_XYDim XYDim, prototype_rectangle RECTANGLE >
138//inline void copy(XYDim & xydim, const RECTANGLE & rectangle)
139//{
140//
141// xydim.X = (decltype(xydim.X)) rectangle.left;
142// xydim.Y = (decltype(xydim.Y)) rectangle.top;
143// xydim.Width = (decltype(xydim.Width))(rectangle.right + rectangle.left);
144// xydim.Height = (decltype(xydim.Height))(rectangle.bottom + rectangle.top);
145//
146//}
147
148
149
150//inline bool contains(const ::i32_rectangle &rectangle, const ::i32_point & point) { return ::rectangle_contains(rectangle, point.x, point.y); }
151//inline ::i32_rectangle & null(::i32_rectangle & rectDst) { return ::null_rect(rectDst); }
152//inline bool is_equal(const ::i32_rectangle &rect1, const ::i32_rectangle &rect2) { return ::rect_equals(rect1, rect2); }
153//inline ::i32_rectangle & inflate(::i32_rectangle & rectangle, ::i32 x, ::i32 y) { return ::rect_inflate_point(rectangle, x, y); }
154//inline ::i32_rectangle & deflate(::i32_rectangle & rectangle, ::i32 x, ::i32 y) { return ::rect_deflate_point(rectangle, x, y); }
155//inline ::i32_rectangle & offset(::i32_rectangle & rectangle, ::i32 x, ::i32 y) { return ::offset_rect(rectangle, x, y); }
156//inline bool intersect(::i32_rectangle & rectangle, const ::i32_rectangle &rect1, const ::i32_rectangle &rect2) { return ::intersect_rect(rectangle, rect1, rect2); }
157//inline ::i32_rectangle & unite(::i32_rectangle & rectangle, const ::i32_rectangle &rect1, const ::i32_rectangle &rect2) { return ::union_rect(rectangle, rect1, rect2); }
158//inline ::i32 width(const ::i32_rectangle &rectangle) { return ::rect_width(rectangle); }
159//inline ::i32 height(const ::i32_rectangle &rectangle) { return ::rect_height(rectangle); }
160//inline ::i32 area(const ::i32_rectangle &rectangle) { return ::rect_area(rectangle); }
161//inline bool is_empty(const ::i32_rectangle &rectangle) { return ::is_rect_empty(rectangle); }
162//inline void swap_left_right(::i32_rectangle & rectangle) noexcept { ::__swap(rectangle.left, rectangle.right); }
163
164//inline ::i32 width(const ::i32_rectangle &rectangle) { return ::width(&rectangle); }
165//inline ::i32 height(const ::i32_rectangle &rectangle) { return ::height(&rectangle); }
166//inline ::i32 area(const ::i32_rectangle &rectangle) { return ::area(&rectangle); }
167//inline bool is_empty(const ::i32_rectangle &rectangle) { return ::is_empty(&rectangle); }
168//inline void swap_left_right(::i32_rectangle & rectangle) noexcept { ::swap_left_right(&rectangle); }
169
170
171
172//inline bool is_empty(::i32_size & size) { return size.cx <= 0 || size.cy <= 0; }
173//inline bool is_empty(::i64_size & size) { return size.cx <= 0 || size.cy <= 0; }
174//inline bool is_empty(::f32_size & size) { return size.cx <= 0.f || size.cy <= 0.f; }
175//inline bool is_empty(::f64_size & size) { return size.cx <= 0. || size.cy <= 0.; }
176
177
178
179
180
181
182
183
184//inline bool contains(const ::i64_rectangle & rectangle, const ::i32_point & point) { return ::rectangle_contains(rectangle, point.x, point.y); }
185//inline ::i64_rectangle & null(::i64_rectangle & rectDst) { return ::null_rect(rectDst); }
186//inline bool is_equal(const ::i64_rectangle & rect1, const ::i64_rectangle & rect2) { return ::rect_equals(rect1, rect2); }
187//inline ::i64_rectangle & inflate(::i64_rectangle & rectangle, ::i64 x, ::i64 y) { return ::rect_inflate_point(rectangle, x, y); }
188//inline ::i64_rectangle & deflate(::i64_rectangle & rectangle, ::i64 x, ::i64 y) { return ::rect_deflate_point(rectangle, x, y); }
189//inline ::i64_rectangle & offset(::i64_rectangle & rectangle, ::i64 x, ::i64 y) { return ::offset_rect(rectangle, x, y); }
190//inline bool intersect(::i64_rectangle & rectangle, const ::i64_rectangle & rect1, const ::i64_rectangle & rect2) { return ::intersect_rect(rectangle, rect1, rect2); }
191//inline ::i64_rectangle & unite(::i64_rectangle & rectangle, const ::i64_rectangle & rect1, const ::i64_rectangle & rect2) { return ::union_rect(rectangle, rect1, rect2); }
192//inline ::i64 width(const ::i64_rectangle & rectangle) { return ::rect_width(rectangle); }
193//inline ::i64 height(const ::i64_rectangle & rectangle) { return ::rect_height(rectangle); }
194//inline ::i64 area(const ::i64_rectangle & rectangle) { return ::rect_area(rectangle); }
195//inline bool is_empty(const ::i64_rectangle & rectangle) { return ::is_rect_empty(rectangle); }
196//inline void swap_left_right(::i64_rectangle & rectangle) noexcept { ::__swap(rectangle.left, rectangle.right); }
197
198//inline ::i64 width(const ::i64_rectangle & rectangle) { return ::width(&rectangle); }
199//inline ::i64 height(const ::i64_rectangle & rectangle) { return ::height(&rectangle); }
200//inline ::i64 area(const ::i64_rectangle & rectangle) { return ::area(&rectangle); }
201//inline bool is_empty(const ::i64_rectangle & rectangle) { return ::is_empty(&rectangle); }
202//inline void swap_left_right(::i64_rectangle & rectangle) noexcept { ::swap_left_right(&rectangle); }
203
204
205
206
207
208//inline bool contains(const ::f32_rectangle & rectangle, const ::f32_point & point) { return ::rectangle_contains(rectangle, point.x, point.y); }
209//inline ::f32_rectangle & null(::f32_rectangle & rect) { return ::null_rect(rect); }
210//inline bool is_equal(const ::f32_rectangle & rect1, const ::f32_rectangle & rect2) { return ::rect_equals(rect1, rect2); }
211//inline ::f32_rectangle & inflate(::f32_rectangle & rectangle, ::f32 x, ::f32 y) { return ::rect_inflate_point(rectangle, x, y); }
212//inline ::f32_rectangle & deflate(::f32_rectangle & rectangle, ::f32 x, ::f32 y) { return ::rect_deflate_point(rectangle, x, y); }
213//inline ::f32_rectangle & offset(::f32_rectangle & rectangle, ::f32 x, ::f32 y) { return ::offset_rect(rectangle, x, y); }
214//inline bool intersect(::f32_rectangle & rectangle, const ::f32_rectangle & rect1, const ::f32_rectangle & rect2) { return ::intersect_rect(rectangle, rect1, rect2); }
215//inline ::f32_rectangle & unite(::f32_rectangle & rectangle, const ::f32_rectangle & rect1, const ::f32_rectangle & rect2) { return ::union_rect(rectangle, rect1, rect2); }
216//inline ::f32 width(const ::f32_rectangle & rectangle) { return ::rect_width(rectangle); }
221//inline ::f32 area(const ::f32_rectangle & rectangle) { return ::rect_area(rectangle); }
222//inline bool is_empty(const ::f32_rectangle & rectangle) { return ::is_rect_empty(rectangle); }
223//inline void swap_left_right(::f32_rectangle & rectangle) noexcept { ::__swap(rectangle.left, rectangle.right); }
224
225//inline ::f32 width(const ::f32_rectangle& rectangle) { return ::width(&rectangle); }
227//inline ::f32 area(const ::f32_rectangle& rectangle) { return ::area(&rectangle); }
228//inline bool is_empty(const ::f32_rectangle& rectangle) { return ::is_empty(&rectangle); }
229//inline void swap_left_right(::f32_rectangle& rectangle) noexcept { ::swap_left_right(&rectangle); }
230
231
232
233
234//inline bool contains(const ::f64_rectangle & rectangle, const ::f64_point & point) { return ::rectangle_contains(rectangle, point.x, point.y); }
235//inline ::f64_rectangle & null(::f64_rectangle & rect) { return ::null_rect(rect); }
236//inline bool is_equal(const ::f64_rectangle & rect1, const ::f64_rectangle & rect2) { return ::rect_equals(rect1, rect2); }
237//inline ::f64_rectangle & inflate(::f64_rectangle & rectangle, ::f64 x, ::f64 y) { return ::rect_inflate_point(rectangle, x, y); }
238//inline ::f64_rectangle & deflate(::f64_rectangle & rectangle, ::f64 x, ::f64 y) { return ::rect_deflate_point(rectangle, x, y); }
239//inline ::f64_rectangle & offset(::f64_rectangle & rectangle, ::f64 x, ::f64 y) { return ::offset_rect(rectangle, x, y); }
240
241template < prototype_rectangle RECTANGLE >
242inline RECTANGLE & rate_deflate(RECTANGLE & rectangle, ::f64 dLeftRate, ::f64 dRightRate, ::f64 dTopRate, ::f64 dBottomRate);
243
244
245//inline bool intersect(::f64_rectangle & rectangle, const ::f64_rectangle & rect1, const ::f64_rectangle & rect2) { return ::intersect_rect(rectangle, rect1, rect2); }
246//inline ::f64_rectangle & unite(::f64_rectangle & rectangle, const ::f64_rectangle & rect1, const ::f64_rectangle & rect2) { return ::union_rect(rectangle, rect1, rect2); }
247//inline ::f64 width(const ::f64_rectangle & rectangle) { return ::rect_width(rectangle); }
249//inline ::f64 area(const ::f64_rectangle & rectangle) { return ::rect_area(rectangle); }
250//inline bool is_empty(const ::f64_rectangle & rectangle) { return ::is_rect_empty(rectangle); }
251//inline void swap_left_right(::f64_rectangle & rectangle) noexcept { ::__swap(rectangle.left, rectangle.right); }
252
253//inline ::f64 width(const ::f64_rectangle & rectangle) { return ::width(&rectangle); }
254//inline ::f64 height(const ::f64_rectangle& rectangle) { return ::height(&rectangle); }
255//inline ::f64 area(const ::f64_rectangle & rectangle) { return ::area(&rectangle); }
256//inline bool is_empty(const ::f64_rectangle & rectangle) { return ::is_empty(&rectangle); }
257//inline void swap_left_right(::f64_rectangle & rectangle) noexcept { ::swap_left_right(&rectangle); }
258
259//inline ::i64_point & operator -= (::i64_point & point, const ::i64_point & pointOffset) { ::point_sub(point, pointOffset); return point; }
260//inline ::i64_point & operator += (::i64_point & point, const ::i64_point & pointOffset) { ::point_add(point, pointOffset); return point; }
261//inline ::f32_point & operator -= (::f32_point & point, const ::f32_point & pointOffset) { ::point_sub(point, pointOffset); return point; }
262//inline ::f32_point & operator += (::f32_point & point, const ::f32_point & pointOffset) { ::point_add(point, pointOffset); return point; }
263//inline ::f64_point & operator -= (::f64_point & point, const ::f64_point & pointOffset) { ::point_sub(point, pointOffset); return point; }
264//inline ::f64_point & operator += (::f64_point & point, const ::f64_point & pointOffset) { ::point_add(point, pointOffset); return point; }
265
266
267
268//inline ::i64_rectangle& operator -= (::i64_rectangle& rectangle, const ::i64_point& point) { ::rect_sub(rectangle, point); return rectangle; }
269//inline ::i64_rectangle& operator += (::i64_rectangle& rectangle, const ::i64_point& point) { ::rect_add(rectangle, point); return rectangle; }
270//inline ::f32_rectangle& operator -= (::f32_rectangle& rectangle, const ::f32_point& point) { ::rect_sub(rectangle, point); return rectangle; }
271//inline ::f32_rectangle& operator += (::f32_rectangle& rectangle, const ::f32_point& point) { ::rect_add(rectangle, point); return rectangle; }
272//inline ::f64_rectangle& operator -= (::f64_rectangle& rectangle, const ::f64_point& point) { ::rect_sub(rectangle, point); return rectangle; }
273//inline ::f64_rectangle& operator += (::f64_rectangle& rectangle, const ::f64_point& point) { ::rect_add(rectangle, point); return rectangle; }
274
275//inline bool deflate(::i32_rectangle & rectangle, const ::i32_rectangle & prectParam);
276
277
278#include "_point.h"
279#include "_size.h"
280#include "_rectangle.h"
281
282
283
284#include "types.h"
285
286
287
288
289
290//inline bool get_bounding_box(::f64_rectangle & rectangleBounding, const ::i32_rectangle &rectangle)
291//{
292//
293// copy(rectangleBounding, rectangle);
294//
295// return true;
296//
297//}
298
299
300//inline bool get_bounding_box(::i32_rectangle & rectangleBounding, const ::f64_rectangle & rectangle)
301//{
302//
303// copy(rectangleBounding, rectangle);
304//
305// return true;
306//
307//}
308
309
310//inline bool get_bounding_box(::f64_rectangle & rectangleBounding, const ::f64_rectangle & rectangle)
311//{
312//
313// copy(rectangleBounding, rectangle);
314//
315// return true;
316//
317//}
318
319
320
321
322
323
324
325
326//#ifdef UNIVERSAL_WINDOWS
327//
328//inline void copy(i32_rectangle & rectDst, const ::winrt::Windows::Foundation::Rect * prectSrc)
329//{
330// rectDst->left = (::i32) prectSrc->X;
331// rectDst->top = (::i32)prectSrc->Y;
332// rectDst->right = (::i32) (prectSrc->X + prectSrc->Width);
333// rectDst->bottom = (::i32) (prectSrc->Y + prectSrc->Height);
334//}
335//
336//inline void copy(::winrt::Windows::Foundation::Rect& rectDst, i32_rectangle* prectSrc)
337//{
338// rectDst->X = (::f32) prectSrc->left;
339// rectDst->Y = (::f32) prectSrc->top;
340// rectDst->Width = (::f32) prectSrc->width();
341// rectDst->Height = (::f32) prectSrc->height();
342//}
343//
344//#endif
345
346
347
348//#ifdef UNIVERSAL_WINDOWS
349//
350//inline ::winrt::Windows::Foundation::Rect ScaleRect(::winrt::Windows::Foundation::Rect rectangle, ::f64 scale)
351//{
352//
353// rectangle.X = (::f32)(rectangle.X*scale);
354// rectangle.Y = (::f32)(rectangle.Y* scale);
355// rectangle.Width = (::f32)(rectangle.Width * scale);
356// rectangle.Height = (::f32)(rectangle.Height*scale);
357//
358// return rectangle;
359//
360//}
361//
362//
363//#endif
364
365
366
367
368
369
370#include "arc.h"
371
372#include "_line.h"
373
374#include "lines.h"
375
376#include "ellipse.h"
377
378
379//template < prototype_point POINT >
380//inline ::string as_string(const POINT & point);
381//
382//
383//template < prototype_size SIZE >
384//inline ::string as_string(const SIZE & size);
385//
386
387
388
389//
390//inline auto ::i32_point(const ::i32_size & size) noexcept { return ::i32_point(size.cx, size.cy); }
391//inline auto __point64(const ::i64_size & size) noexcept { return ::i64_point(size.cx, size.cy); }
392//inline auto __pointf(const ::f32_size & size) noexcept { return ::f32_point(size.cx, size.cy); }
393//inline auto __pointd(const ::f64_size & size) noexcept { return ::f64_point(size.cx, size.cy); }
394//
395
396
397
398
399
Definition point_array.h:25
Definition point.h:12
Definition rectangle.h:49
Definition size.h:11