]> Shamusworld >> Repos - architektonas/blobdiff - src/line.cpp
Added infrastructure to support mirror tool, cross compile script.
[architektonas] / src / line.cpp
index 7085308f9fe12eb2e3687f3469e23fde2b2971fb..8425e62356e5062cee58b39a50da4793e0c11090 100644 (file)
@@ -575,6 +575,57 @@ same reference number.
 }
 
 
+/*virtual*/ Object * Line::Mirror(Vector p1, Vector p2)
+{
+#if 0
+       return NULL;
+
+double Vector::Parameter(Vector v1, Vector v2, Vector p)
+{
+       // Geometric interpretation:
+       // The parameterized point on the vector lineSegment is where the normal of
+       // the lineSegment to the point intersects lineSegment. If the pp < 0, then
+       // the perpendicular lies beyond the 1st endpoint. If pp > 1, then the
+       // perpendicular lies beyond the 2nd endpoint.
+
+       Vector lineSegment = v2 - v1;
+       double magnitude = lineSegment.Magnitude();
+       Vector pointSegment = p - v1;
+       double t = lineSegment.Dot(pointSegment) / (magnitude * magnitude);
+       return t;
+}
+
+
+// Return the normal to the linesegment formed by the passed in points.
+// (Not sure which is head or tail, or which hand the normal lies)
+/*static*/ Vector Vector::Normal(Vector v1, Vector v2)
+#endif
+
+       double t1 = Vector::Parameter(p1, p2, position);
+       double t2 = Vector::Parameter(p1, p2, endpoint);
+
+       Vector unit = Vector(p1, p2).Unit();
+       Vector v1 = unit * t1;
+       Vector v2 = unit * t2;
+
+//     Vector normal = Vector::Normal(p1, p2);
+       // Get the points normal to position & endpoint to the line passed in
+       // (these are tails)
+       Vector v3 = p1 + v1;
+       Vector v4 = p1 + v2;
+
+       // Make our mirrored vectors
+       Vector v5 = -(position - v3);
+       Vector v6 = -(endpoint - v4);
+
+       // Find the points
+       Vector v7 = v3 + v5;
+       Vector v8 = v4 + v6;
+
+       return new Line(v7, v8);
+}
+
+
 void Line::SetDimensionOnLine(Dimension * dimension/*=NULL*/)
 {
        // If they don't pass one in, create it for the caller.