/*virtual*/ void Line::Enumerate(FILE * file)
{
- fprintf(file, "LINE (%lf,%lf) (%lf,%lf)\n", position.x, position.y, endpoint.x, endpoint.y);
+ fprintf(file, "LINE %i (%lf,%lf) (%lf,%lf)\n", layer, position.x, position.y, endpoint.x, endpoint.y);
}
}
+/*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.