31 if (b.
empty())
return;
44 a = std::fmod(a, 360.0);
45 if (a < 0) a += 360.0;
46 if (a >= 360.0) a -= 360.0;
54 if (a == 0.0)
return p;
55 if (a == 90.0)
return {p.
y, -p.
x};
56 if (a == 180.0)
return {-p.
x, -p.
y};
57 if (a == 270.0)
return {-p.
y, p.
x};
58 const double r = a * std::numbers::pi / 180.0;
59 const double c = std::cos(r), s = std::sin(r);
60 const double x =
static_cast<double>(p.
x), y =
static_cast<double>(p.
y);
TM_HD marks functions that must compile identically for host and device.
Point rotate(Point p, double deg)
Rotates p by deg degrees the way KiCad does: positive angles turn counter-clockwise on screen in KiCa...
Coord kiround(double v)
Rounds half away from zero, like KiCad's KiROUND.
double norm_deg(double a)
Normalises degrees to [0, 360).
std::int64_t Coord
Engine coordinate: signed 64-bit nanometres.
constexpr Box inflated(Coord d) const
constexpr void add(const Box &b)
Coord y1
empty when x1 < x0
constexpr bool empty() const
constexpr void add(Point p)
constexpr bool intersects(const Box &b) const
TM_HD friend constexpr Point operator+(Point a, Point b)
TM_HD friend constexpr Point operator-(Point a, Point b)
TM_HD friend constexpr bool operator==(Point a, Point b)