Esempio n. 1
0
        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);
            }));
        }
Esempio n. 2
0
        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]++;
        }
Esempio n. 3
0
        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)));
        }
Esempio n. 4
0
        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();
        }