/// <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); }
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); }
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) ); }