Ejemplo n.º 1
0
        public override void Draw(DrawingContext ctx, Matrix matrix)
        {
            if (!this.shouldDraw)
            {
                return;
            }
            bool  flag        = this.AdornerSet is RectangleGeometryAdornerSetBase;
            Point anchorPoint = this.GetAnchorPoint(matrix);
            Brush brush       = this.IsActive ? (flag ? FeedbackHelper.GetActiveBrush(AdornerType.ClipPath) : this.ActiveBrush) : this.InactiveBrush;
            Pen   pen         = flag ? FeedbackHelper.GetThinPen(AdornerType.ClipPath) : this.ThinPen;
            Rect  targetRect  = this.TargetRect;
            AdornerRenderLocation location = AdornerRenderLocation.Outside;

            if (this.DesignerContext.SelectionManager.ElementSelectionSet != null && this.DesignerContext.SelectionManager.ElementSelectionSet.Selection.Count > 1 && !this.ElementSet.AdornsMultipleElements)
            {
                location = AdornerRenderLocation.Inside;
            }
            SizeAdorner.DrawSizeAdorner(ctx, anchorPoint, this.EdgeFlags, matrix, brush, pen, targetRect, location);
            if (!this.IsActive)
            {
                return;
            }
            Matrix transformMatrix = this.ElementSet.GetTransformMatrix(this.DesignerContext.ActiveView.ViewRoot);

            SizeAdorner.DrawDimensions(ctx, matrix, transformMatrix, pen, targetRect, this.EdgeFlags);
        }
Ejemplo n.º 2
0
        public static void DrawSizeAdorner(DrawingContext drawingContext, Point anchorPoint, EdgeFlags edgeFlags, Matrix matrix, Brush brush, Pen pen, Rect bounds, AdornerRenderLocation location)
        {
            if (SizeAdorner.SkipAdorner(edgeFlags, matrix, bounds))
            {
                return;
            }
            Vector vector1 = new Vector(1.0, 0.0) * matrix;
            Vector vector2 = new Vector(0.0, 1.0) * matrix;

            vector1.Normalize();
            vector2.Normalize();
            double num1    = matrix.Determinant < 0.0 ? -1.0 : 1.0;
            Point  point   = anchorPoint;
            Matrix matrix1 = new Matrix(0.0, 1.0 * num1, -1.0 * num1, 0.0, 0.0, 0.0);
            Matrix matrix2 = new Matrix(0.0, -1.0 * num1, 1.0 * num1, 0.0, 0.0, 0.0);
            Vector vector3 = vector1 * matrix1;
            Vector vector4 = vector2 * matrix2;
            Vector vector5 = vector1 * 8.0;
            Vector vector6 = vector2 * 8.0;

            if (location == AdornerRenderLocation.Inside)
            {
                switch (edgeFlags & EdgeFlags.TopOrBottom)
                {
                case EdgeFlags.None:
                    vector1      = vector4;
                    anchorPoint -= 0.5 * (5.0 - pen.Thickness) * vector2;
                    point       += vector2 * 0.5 * 8.0;
                    break;

                case EdgeFlags.Top:
                    vector2      = vector3;
                    anchorPoint += 0.5 * pen.Thickness * vector2;
                    point       += vector2 * 8.0;
                    break;

                case EdgeFlags.Bottom:
                    vector2      = vector3;
                    anchorPoint -= (5.0 - 0.5 * pen.Thickness) * vector2;
                    break;
                }
                switch (edgeFlags & EdgeFlags.LeftOrRight)
                {
                case EdgeFlags.None:
                    anchorPoint -= 0.5 * (5.0 - pen.Thickness) * vector1;
                    point       += vector1 * 0.5 * 8.0;
                    break;

                case EdgeFlags.Left:
                    anchorPoint += 0.5 * pen.Thickness * vector1;
                    point       += vector1 * 8.0;
                    break;

                case EdgeFlags.Right:
                    anchorPoint -= (5.0 - 0.5 * pen.Thickness) * vector1;
                    break;
                }
            }
            else
            {
                switch (edgeFlags & EdgeFlags.TopOrBottom)
                {
                case EdgeFlags.None:
                    vector1      = vector4;
                    anchorPoint -= 0.5 * (5.0 - pen.Thickness) * vector2;
                    point       += vector2 * 0.5 * 8.0;
                    break;

                case EdgeFlags.Top:
                    vector2      = vector3;
                    anchorPoint -= (5.0 - 0.5 * pen.Thickness) * vector2;
                    break;

                case EdgeFlags.Bottom:
                    vector2      = vector3;
                    anchorPoint += 0.5 * pen.Thickness * vector2;
                    point       += vector2 * 8.0;
                    break;
                }
                switch (edgeFlags & EdgeFlags.LeftOrRight)
                {
                case EdgeFlags.None:
                    anchorPoint -= 0.5 * (5.0 - pen.Thickness) * vector1;
                    point       += vector1 * 0.5 * 8.0;
                    break;

                case EdgeFlags.Left:
                    anchorPoint -= (5.0 - 0.5 * pen.Thickness) * vector1;
                    break;

                case EdgeFlags.Right:
                    anchorPoint += 0.5 * pen.Thickness * vector1;
                    point       += vector1 * 8.0;
                    break;
                }
            }
            StreamGeometry        streamGeometry1        = new StreamGeometry();
            StreamGeometryContext streamGeometryContext1 = streamGeometry1.Open();

            streamGeometryContext1.BeginFigure(point - vector5, true, true);
            streamGeometryContext1.LineTo(point - vector5 - vector6, false, false);
            streamGeometryContext1.LineTo(point - vector6, false, false);
            streamGeometryContext1.LineTo(point, false, false);
            streamGeometryContext1.Close();
            streamGeometry1.Freeze();
            drawingContext.DrawGeometry((Brush)Brushes.Transparent, (Pen)null, (System.Windows.Media.Geometry)streamGeometry1);
            double                num2                   = 5.0 - pen.Thickness;
            Vector                vector7                = vector1 * num2;
            Vector                vector8                = vector2 * num2;
            StreamGeometry        streamGeometry2        = new StreamGeometry();
            StreamGeometryContext streamGeometryContext2 = streamGeometry2.Open();

            streamGeometryContext2.BeginFigure(anchorPoint, true, true);
            streamGeometryContext2.LineTo(anchorPoint + vector8, true, false);
            streamGeometryContext2.LineTo(anchorPoint + vector7 + vector8, true, false);
            streamGeometryContext2.LineTo(anchorPoint + vector7, true, false);
            streamGeometryContext2.Close();
            streamGeometry2.Freeze();
            drawingContext.DrawGeometry(brush, pen, (System.Windows.Media.Geometry)streamGeometry2);
        }