예제 #1
0
        /// <summary>
        /// 绘制未完成的编辑线段状态;
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="canvasProxy"></param>
        private void DrawEditingLineState(ICanvas canvas, ICanvasScreenConvertable canvasProxy)
        {
            //绘制未完成状态;
            var editingLine = new Line2D(MousePositionTracker.LastMouseDownPosition, MousePositionTracker.CurrentHoverPosition);

            LineDrawExtensions.DrawEditingLine(canvas, canvasProxy, editingLine);
        }
예제 #2
0
        public override void Draw(ICanvas canvas, ICanvasScreenConvertable canvasProxy)
        {
            //绘制与RelatedLine2D两个端点的关系;
            var lineWithStart = new Line2D(RelatedLine2D.Start, Position);
            var lineWidthEnd  = new Line2D(Position, RelatedLine2D.End);

            LineDrawExtensions.DrawEditingLineOutLines(canvas, canvasProxy, lineWithStart);
            LineDrawExtensions.DrawEditingLineLengthString(canvas, canvasProxy, lineWithStart);

            LineDrawExtensions.DrawEditingLineOutLines(canvas, canvasProxy, lineWidthEnd);
            LineDrawExtensions.DrawEditingLineLengthString(canvas, canvasProxy, lineWidthEnd);

            base.Draw(canvas, canvasProxy);
        }
예제 #3
0
        public override void Draw(ICanvas canvas, ICanvasScreenConvertable canvasProxy)
        {
            var line2D = GetPreviewLine2D(MousePositionTracker.CurrentHoverPosition);

            line2D = line2D ?? Line2D;
            var direction = line2D.Direction;

            if (direction == null)
            {
                return;
            }
            var vDir           = direction.X > 0 ? new Vector2D(-direction.Y, direction.X) : new Vector2D(direction.Y, -direction.X);
            var screenDis      = 36d;
            var unitDis        = canvasProxy.ToUnit(screenDis);
            var measureLineDis = vDir * unitDis;

            MeasureLineP = new Line2D(line2D.Start + vDir * unitDis, line2D.End + vDir * unitDis);
            canvas.DrawLine(MeasurePenP, MeasureLineP);



            var verticalLineTimes = 1.2;

            MeasureLineV0 = new Line2D(
                line2D.Start,
                line2D.Start + vDir * unitDis * verticalLineTimes
                );
            MeasureLineV1 = new Line2D(
                line2D.End,
                line2D.End + vDir * unitDis * verticalLineTimes
                );

            canvas.DrawLine(MeasurePenV, MeasureLineV0);
            canvas.DrawLine(MeasurePenV, MeasureLineV1);


            if (IsSelected)
            {
                LineDrawExtensions.DrawSelectedLineState(MeasureLineP, canvas, canvasProxy, SelectionPen);
                LineDrawExtensions.DrawSelectedLineState(MeasureLineV0, canvas, canvasProxy, SelectionPen);
                LineDrawExtensions.DrawSelectedLineState(MeasureLineV1, canvas, canvasProxy, SelectionPen);
            }

            //line2D = outlineParaLine;

            var middlePoint = MeasureLineP.MiddlePoint;

            if (middlePoint == null)
            {
                return;
            }
            var    text  = $"{line2D.Length.ToString(LengthFormat)}";
            double width = 0;
            var    chars = text.ToCharArray();

            for (int i = 0; i < chars.Length; i++)
            {
                width += canvasProxy.GetCharScreenSize(chars[i]).Width;
            }
            width = -canvasProxy.ToUnit(width * Constants.TipFontSize_LengthMeasurement);
            var height = canvasProxy.ToUnit(canvasProxy.GetCharScreenSize(chars[0]).Height *Constants.TipFontSize_LengthMeasurement * 1.15);
            var a      = direction.AngleWith(Vector2D.BasisX);

            a = direction.X * direction.Y > 0 ? a : -a;
            var vec = new Vector2D(width / 2 * Math.Cos(-a) + height * Math.Sin(-a), -width / 2 * Math.Sin(-a) + height * Math.Cos(-a));

            middlePoint = middlePoint + vec;
            canvas.DrawText(
                $"{line2D.Length.ToString(LengthFormat)}",
                Constants.TipFontSize_LengthMeasurement,
                TextForeground_LengthMeasurement,
                middlePoint, Math.PI / 2 - vDir.AngleFrom(Vector2D.BasisX)
                );
        }