mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-03-25 08:36:54 +01:00
56 lines
1.1 KiB
C++
56 lines
1.1 KiB
C++
#ifdef WINDOWS
|
|
#include "Line.h"
|
|
|
|
void CLine::rotateDegreesAround_internal(float f, const Coord &p) {
|
|
pos = pos.rotateDegreesAround(f, p);
|
|
pos2 = pos2.rotateDegreesAround(f, p);
|
|
}
|
|
inline float fMAX(float a, float b) {
|
|
if (a > b)
|
|
return a;
|
|
return b;
|
|
}
|
|
inline float fMIN(float a, float b) {
|
|
if (a < b)
|
|
return a;
|
|
return b;
|
|
}
|
|
float CLine::moveTowards(const Coord &tg, float dt) {
|
|
const float l2 = pos.distSq(pos2); // i.e. |w-v|^2 - avoid a sqrt
|
|
float t = fMAX(0, fMIN(1, Coord::dot(tg - pos, pos2 - pos) / l2));
|
|
const Coord projection = pos + t * (pos2 - pos); // Projection falls on the segment
|
|
Coord dir = tg - projection;
|
|
float rem = dir.normalize();
|
|
if (rem < dt) {
|
|
}
|
|
else {
|
|
pos += dir * dt;
|
|
pos2 += dir * dt;
|
|
}
|
|
return rem;
|
|
}
|
|
void CLine::recalcBoundsSelf() {
|
|
bounds.clear();
|
|
bounds.addPoint(Coord(0, 0));
|
|
bounds.addPoint(pos2 - getPosition());
|
|
}
|
|
|
|
CShape *CLine::cloneShape() {
|
|
CLine *n = new CLine();
|
|
n->pos = this->pos;
|
|
n->pos2 = this->pos2;
|
|
this->cloneShapeTo(n);
|
|
return n;
|
|
}
|
|
void CLine::drawShape() {
|
|
g_style_shapes.apply();
|
|
glBegin(GL_LINES);
|
|
glVertex2f(getX(), getY());
|
|
glVertex2f(pos2.getX(), pos2.getY());
|
|
glEnd();
|
|
}
|
|
|
|
|
|
#endif
|
|
|