dl
dl
base
dl_type_create.h
浏览该文件的文档.
1
12
#pragma once
13
14
#include <cmath>
15
#include <string>
16
#include <optional>
17
18
#include "
dl_type_def.h
"
19
#include "
dl_type_convert.h
"
20
#include "
dl_type_op.h
"
21
#include "
base/dl_concept.h
"
22
23
namespace
dl
24
{
25
26
//------------------------Quad----------------------
31
struct
QuadParam
32
{
33
Size
_size
;
// 原始大小
34
Position
_anchor
;
// 锚点位置
35
float
_scaleX
= 1.0f;
// X缩放比例
36
float
_scaleY
= 1.0f;
// Y缩放比例
37
float
_rotate
= 0.0f;
// 旋转角度
38
bool
_filpX
=
false
;
// 是否在X轴翻转
39
bool
_filpY
=
false
;
// 是否在Y轴翻转
40
// 以下覆盖上面的值
41
std::string
_exAnchor
;
// 不为空则计算锚点
42
std::optional<float>
_exScale
;
43
};
44
48
inline
constexpr
Quad
createQuad
(
const
Position
& p0,
const
Position
& p1,
const
Position
& p2,
const
Position
& p3)
49
{
50
return
{ p0, p1, p2, p3 };
51
}
52
58
inline
constexpr
Quad
createQuad
(
const
Position
& lt,
const
Position
& rb)
59
{
60
return
{ lt, {rb[0], lt[1]}, rb, {lt[0], rb[1]} };
61
}
62
63
inline
constexpr
Quad
createQuad
(
const
Rect
& rect)
64
{
65
return
createQuad
(
toPosition
(rect[0], rect[1]),
toPosition
(rect[2], rect[3]));
66
}
67
68
inline
constexpr
Quad
createQuad
(
const
RectF
& rect)
69
{
70
return
createQuad
({ rect[0], rect[1] }, { rect[2], rect[3] });
71
}
72
75
inline
Quad
createQuad
(
const
Position
& p0,
const
Position
& p1,
Float
d)
76
{
77
Float
at = atan2f(p1[1] - p0[1], p1[0] - p0[0]);
78
79
Float
dy = d * cosf(at) / 2_f;
80
Float
dx = d * sinf(at) / 2_f;
81
return
{
82
p0 +
Position
{dx, -dy},
83
p1 +
Position
{dx, -dy},
84
p1 +
Position
{-dx, dy},
85
p0 +
Position
{-dx, dy} };
86
}
87
92
template
<IsBase T>
93
constexpr
Quad
createQuad
(
T
size,
bool
center =
true
)
94
{
95
if
(center)
96
{
97
Float
size_half = (
Float
)size / 2_f;
98
return
{
Position
{-size_half, -size_half},
Position
{ size_half, -size_half },
99
Position
{size_half, size_half},
Position
{-size_half, size_half} };
100
}
101
else
102
{
103
return
{
Position
{},
Position
{(
Float
)size, 0},
104
Position
{(
Float
)size, (
Float
)size},
Position
{0, (
Float
)size} };
105
}
106
}
107
108
113
inline
constexpr
Quad
createQuad
(
Position
size,
bool
center =
true
)
114
{
115
if
(center)
116
{
117
Float
w_half = size[0] / 2.0f;
118
Float
h_half = size[1] / 2.0f;
119
return
{
Position
{-w_half, -h_half},
Position
{ w_half, -h_half },
Position
{w_half, h_half},
Position
{-w_half, h_half} };
120
}
121
else
122
{
123
return
{
Position
{},
Position
{size[0], 0},
Position
{size[0], size[1]},
Position
{0, size[1]} };
124
}
125
}
126
131
constexpr
Quad
createQuad
(
Size
size,
bool
center =
true
)
132
{
133
return
createQuad
(
toPosition
(size), center);
134
}
135
140
Quad
createQuad
(
const
QuadParam
& param);
141
142
//------------------------Rect----------------------
147
constexpr
Rect
createRect
(
const
Size
& size)
148
{
149
return
{ 0, 0, (int)size[0], (
int
)size[1] };
150
}
151
constexpr
Rect
createRect
(
const
Position
& size)
152
{
153
return
{ 0, 0, (int)size[0], (
int
)size[1] };
154
}
155
160
constexpr
Rect
createRect
(
const
Point
& lt,
const
Size
& size)
161
{
162
return
{ lt[0], lt[1], lt[0] + (int)size[0], lt[1] + (
int
)size[1] };
163
}
164
169
constexpr
Rect
createRect
(
const
Point
& lt,
const
Point
& rb)
170
{
171
return
{ lt[0], lt[1], rb[0], rb[1] };
172
}
173
174
//------------------------RectU----------------------
179
constexpr
RectU
createRectU
(
const
Size
& size)
180
{
181
return
{ 0, 0, size[0], size[1] };
182
}
183
187
constexpr
RectU
createRectU
(
unsigned
size)
188
{
189
return
{ 0, 0, size, size };
190
}
191
196
constexpr
RectU
createRectU
(
const
PointU
& lt,
const
Size
& size)
197
{
198
return
{ lt[0], lt[1], lt[0] + size[0], lt[1] + size[1] };
199
}
200
201
//------------------------RectF----------------------
206
constexpr
RectF
createRectF
(
const
Position
& size)
207
{
208
return
{ 0, 0, size[0], size[1] };
209
}
210
215
constexpr
RectF
createRectF
(
const
Position
& lt,
const
Position
& size)
216
{
217
return
{ lt[0], lt[1], lt[0] + size[0], lt[1] + size[1] };
218
}
219
225
constexpr
RectF
createRectLTRB
(
const
Position
& lt,
const
Position
& rb)
226
{
227
return
{ lt[0], lt[1], rb[0], rb[1] };
228
}
229
230
}
dl_concept.h
用于模板限定,更好的报错信息
dl_type_convert.h
类型转换
dl_type_def.h
通用类型定义
dl_type_op.h
通用类型运算
dl
定义
dl_array.h:22
dl::Position
Position2 Position
定义
dl_type_def.h:44
dl::createRectF
constexpr RectF createRectF(const Position &size)
创建一个RectF,依据大小
定义
dl_type_create.h:206
dl::toPosition
constexpr Array< Position::value_type, N > toPosition(const Array< T, N > &a)
转换到Position,已知长度
定义
dl_type_convert.h:47
dl::Float
float Float
定义
dl_type_def.h:38
dl::KeyCode::T
@ T
定义
dl_input.h:121
dl::createRect
constexpr Rect createRect(const Size &size)
创建一个Rect,依据大小
定义
dl_type_create.h:147
dl::PointU
Point2U PointU
定义
dl_type_def.h:34
dl::createRectU
constexpr RectU createRectU(const Size &size)
创建一个RectU,依据大小
定义
dl_type_create.h:179
dl::RectF
Position4 RectF
定义
dl_type_def.h:52
dl::Rect
Point4 Rect
定义
dl_type_def.h:50
dl::RectU
Point4U RectU
定义
dl_type_def.h:51
dl::createQuad
constexpr Quad createQuad(const Position &p0, const Position &p1, const Position &p2, const Position &p3)
创建一个Quad
定义
dl_type_create.h:48
dl::Quad
Array< Position, 4 > Quad
定义
dl_type_def.h:55
dl::createRectLTRB
constexpr RectF createRectLTRB(const Position <, const Position &rb)
创建一个RectF,依据左上角和右下角
定义
dl_type_create.h:225
dl::Size
PointU Size
定义
dl_type_def.h:35
dl::Point
Point2 Point
定义
dl_type_def.h:26
dl::QuadParam
四边形参数设置
定义
dl_type_create.h:32
dl::QuadParam::_filpX
bool _filpX
定义
dl_type_create.h:38
dl::QuadParam::_anchor
Position _anchor
定义
dl_type_create.h:34
dl::QuadParam::_size
Size _size
定义
dl_type_create.h:33
dl::QuadParam::_rotate
float _rotate
定义
dl_type_create.h:37
dl::QuadParam::_scaleX
float _scaleX
定义
dl_type_create.h:35
dl::QuadParam::_exScale
std::optional< float > _exScale
定义
dl_type_create.h:42
dl::QuadParam::_exAnchor
std::string _exAnchor
定义
dl_type_create.h:41
dl::QuadParam::_scaleY
float _scaleY
定义
dl_type_create.h:36
dl::QuadParam::_filpY
bool _filpY
定义
dl_type_create.h:39
制作者
1.13.1