]> Shamusworld >> Repos - architektonas/blobdiff - src/line.cpp
Mirror tool now works successfully for all object types. :-D
[architektonas] / src / line.cpp
index 956b9bdd3c7174c16041885ed43100e758f2ff67..b7abc9ad6bb62939cb9ddd5102a65d25d7bcadf3 100644 (file)
@@ -581,57 +581,26 @@ same reference number.
 }
 
 
-/*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;
 }