private Task SetCLines() { return(Task.Run(() => { var rt = new RotateTransform(90); rt.Freeze(); var Points = new List <Point>(); if (CursorIndent == 0) { Points.Add(new Point(CursorArea, 0)); Points.Add(new Point(4096, 0)); } else { double s = CursorArea; while (s < 4096) { Points.Add(new Point(s, 0)); s += CursorDash; Points.Add(new Point(s, 0)); s += CursorIndent; } } Dispatcher.Invoke(() => { using var dcCH = CursorLinesVisual.RenderOpen(); for (int i = 0; i < Points.Count; i += 2) { dcCH.DrawLine(LinesPen, Points[i], Points[i + 1]); } dcCH.PushTransform(rt); for (int i = 0; i < Points.Count; i += 2) { dcCH.DrawLine(LinesPen, Points[i], Points[i + 1]); } dcCH.PushTransform(rt); for (int i = 0; i < Points.Count; i += 2) { dcCH.DrawLine(LinesPen, Points[i], Points[i + 1]); } dcCH.PushTransform(rt); for (int i = 0; i < Points.Count; i += 2) { dcCH.DrawLine(LinesPen, Points[i], Points[i + 1]); } }); SetCursor(CurrentCursor); })); }
public void Rotate(real x, real y, real Alpha) { if (PointOutside.Check(ref x, ref y)) { return; } RotateTransform rt = new RotateTransform(); rt.Angle = -Alpha; rt.CenterX = x; rt.CenterY = y; if (rt.CanFreeze) { rt.Freeze(); } FCanvas.PushTransform(rt); GraphicsSave[GraphicsSave.Count - 1]++; }
protected override void OnRender(DrawingContext dc) { base.OnRender(dc); if (drawing == null) { drawing = GetDrawing(); if (drawing == null) { return; } } var cellSize = CellSize; var rotate = new RotateTransform(-(int)Cell.Direction * 45, cellSize / 2, cellSize / 2); rotate.Freeze(); dc.PushTransform(rotate); dc.DrawDrawing(drawing); dc.Pop(); // 防止鼠标事件穿透 dc.DrawRectangle(Brushes.Transparent, null, new Rect(new Size(cellSize, cellSize))); }
public override void Draw(DrawingContext dc) { if (StaticLoopFigures.Count > 0) { return; } var width = Width.CachedValue.AsDouble; var height = Height.CachedValue.AsDouble; var len = Math.Sqrt(width * width + height * height); var angle = Math.Atan2(height, width); FigureText.FormattedText.MaxTextWidth = len; FigureText.FormattedText.SetForegroundBrush(FigureColor.Brush); var x = X.CachedValue.AsDouble; var y = Y.CachedValue.AsDouble; var t = new RotateTransform(angle * 180.0 / Math.PI, x, y); t.Freeze(); dc.PushTransform(t); dc.DrawText(FigureText.FormattedText, new Point(x, y - FigureText.FormattedText.Height)); dc.Pop(); }