/*virtual*/ bool Line::Collided(Vector point)
{
+/*
+what we can do here is set ignoreClicks to true to keep other objects that are
+selected from deselecting themselves. Will that fuck up something else? Not sure
+yet... :-/
+*/
// Someone told us to fuck off, so we'll fuck off. :-)
if (ignoreClicks)
return false;
}
-/*virtual*/ void Line::Rotate(Vector point, double angle)
+/*virtual*/ void Line::Rotate(Point point, double angle)
{
+ Point l1 = Geometry::RotatePointAroundPoint(position, point, angle);
+ Point l2 = Geometry::RotatePointAroundPoint(endpoint, point, angle);
+ position = l1;
+ endpoint = l2;
}
-/*virtual*/ void Line::Scale(Vector point, double amount)
+/*virtual*/ void Line::Scale(Point point, double amount)
{
}
-/*virtual*/ Object * Line::Mirror(Vector p1, Vector p2)
+/*virtual*/ void Line::Mirror(Point p1, Point p2)
{
-#if 1
Point l1 = Geometry::MirrorPointAroundLine(position, p1, p2);
Point l2 = Geometry::MirrorPointAroundLine(endpoint, p1, p2);
- return new Line(l1, l2);
-#else
- Vector normal = Vector::Normal(p1, p2);
- Vector p4 = position + normal;
-
- // Find the intersection of the line and position + normal to the line
- double px = (((p1.x * p2.y) - (p1.y * p2.x)) * (position.x - p4.x))
- - ((p1.x - p2.x) * ((position.x * p4.y) - (position.y * p4.x)));
- double py = (((p1.x * p2.y) - (p1.y * p2.x)) * (position.y - p4.y))
- - ((p1.y - p2.y) * ((position.x * p4.y) - (position.y * p4.x)));
- double d = ((p1.x - p2.x) * (position.y - p4.y))
- - ((p1.y - p2.y) * (position.x - p4.x));
-
- // px = (x1y2 - y1x2)(x3 - x4) - (x1 - x2)(x3y4 - y3x4)
- // py = (x1y2 - y1x2)(y3 - y4) - (y1 - y2)(x3y4 - y3x4)
- // d = (x1 - x2)(y3 - y4) - (y1 - y2)(x3 - x4) = 0 if lines are parallel
- // Intersection is (px / d, py / d)
-
- Vector v1(px / d, py / d);
-
-// Vector normal = Vector::Normal(p1, p2);
- p4 = endpoint + normal;
-
- // Find the intersection of the line and endpoint + normal to the line
- px = (((p1.x * p2.y) - (p1.y * p2.x)) * (endpoint.x - p4.x))
- - ((p1.x - p2.x) * ((endpoint.x * p4.y) - (endpoint.y * p4.x)));
- py = (((p1.x * p2.y) - (p1.y * p2.x)) * (endpoint.y - p4.y))
- - ((p1.y - p2.y) * ((endpoint.x * p4.y) - (endpoint.y * p4.x)));
- d = ((p1.x - p2.x) * (endpoint.y - p4.y))
- - ((p1.y - p2.y) * (endpoint.x - p4.x));
+ position = l1;
+ endpoint = l2;
+}
- Vector v2(px / d, py / d);
-#if 0
- Vector v3 = position - v1;
- Vector v4 = endpoint - v2;
+/*virtual*/ void Line::Save(void)
+{
+ Object::Save();
+ oldEndpoint = endpoint;
+}
- Vector v5 = v1 + -v3;
- Vector v6 = v2 + -v4;
-#else
- Vector v5 = v1 + v1 - position;
- Vector v6 = v2 + v2 - endpoint;
-#endif
- return new Line(v5, v6);
-#endif
+/*virtual*/ void Line::Restore(void)
+{
+ Object::Restore();
+ endpoint = oldEndpoint;
}