public static void DrawDimension(DrawingContext drawingContext, ElementLayoutAdornerType edge, Matrix matrix, Matrix rootMatrix, Pen pen, Rect bounds, double scale) { Point point1; Point point2; switch (edge) { case ElementLayoutAdornerType.Left: point1 = bounds.TopLeft; point2 = bounds.BottomLeft; break; case ElementLayoutAdornerType.Top: point1 = bounds.TopLeft; point2 = bounds.TopRight; break; case ElementLayoutAdornerType.Right: point1 = bounds.TopRight; point2 = bounds.BottomRight; break; case ElementLayoutAdornerType.Bottom: point1 = bounds.BottomLeft; point2 = bounds.BottomRight; break; default: throw new NotSupportedException(); } double length = ((point2 - point1) * rootMatrix).Length; Point point3 = bounds.TopLeft + 0.5 * (bounds.BottomRight - bounds.TopLeft); Point point4 = point1 * matrix; Point point5 = point2 * matrix; Point point6 = point3 * matrix; Vector vector1 = point4 + 0.5 * (point5 - point4) - point6; vector1.Normalize(); Vector vector2 = point5 - point4; vector2.Normalize(); Vector overflowDirection = new Vector(vector2.Y, -vector2.X); if (overflowDirection * vector1 < 0.0) { overflowDirection = -overflowDirection; } Point point7 = point4 - 0.5 * pen.Thickness * vector2; Point point8 = point5 + 0.5 * pen.Thickness * vector2; Vector vector3 = scale * 7.0 * overflowDirection; Vector vector4 = scale * 22.0 * overflowDirection; drawingContext.DrawLine(pen, point7 + vector3, point7 + vector4); drawingContext.DrawLine(pen, point8 + vector3, point8 + vector4); Point a = point4 + scale * 17.5 * overflowDirection; Point b = point5 + scale * 17.5 * overflowDirection; string text = length.ToString("0.###", (IFormatProvider)CultureInfo.CurrentCulture); SizeAdorner.DrawLineAndText(drawingContext, a, b, overflowDirection, pen, pen.Brush, text, scale); }
public static void DrawDimensions(DrawingContext drawingContext, Matrix matrix, Matrix rootMatrix, Pen pen, Rect bounds, EdgeFlags edgeFlags) { if ((edgeFlags & EdgeFlags.LeftOrRight) != EdgeFlags.None) { ElementLayoutAdornerType edge = (edgeFlags & EdgeFlags.Top) != EdgeFlags.None ? ElementLayoutAdornerType.Top : ElementLayoutAdornerType.Bottom; SizeAdorner.DrawDimension(drawingContext, edge, matrix, rootMatrix, pen, bounds, 1.0); } if ((edgeFlags & EdgeFlags.TopOrBottom) == EdgeFlags.None) { return; } ElementLayoutAdornerType edge1 = (edgeFlags & EdgeFlags.Left) != EdgeFlags.None ? ElementLayoutAdornerType.Left : ElementLayoutAdornerType.Right; SizeAdorner.DrawDimension(drawingContext, edge1, matrix, rootMatrix, pen, bounds, 1.0); }
public ElementLayoutLockAdorner(AdornerSet adornerSet, ElementLayoutAdornerType type) : base(adornerSet, type == ElementLayoutAdornerType.Left || type == ElementLayoutAdornerType.Right) { this.type = type; }