Ejemplo n.º 1
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    //if (clip != null)
                    //{
                    //    clip.Dispose();
                    //}
                    DrawingPen.Dispose();
                    DrawingBrush.Dispose();
                    style.BorderPattern.PropertyChanged -= BorderPattern_PropertyChanged;
                }


                mp      = null;
                style   = null;
                Drawing = null;
                //Preparing = null;


                disposedValue = true;
            }
        }
Ejemplo n.º 2
0
 public void DrawRectangle(Color?fillColor, DrawingPen pen, Rect rectangle)
 {
     BeginFigure(fillColor, pen, rectangle.Location, true);
     _stream.Shape = Shape.Rect;
     LineTo(rectangle.TopRight);
     LineTo(rectangle.BottomRight);
     LineTo(rectangle.BottomLeft);
     EndFigure();
 }
Ejemplo n.º 3
0
        public void DrawCicle(Color?fillColor, DrawingPen pen, Point center, double radius)
        {
            center  = GeometryHelper.ConvertWithTransform(center, this);
            radius *= _visual.Panel.ScaleX * _transform.ScaleX;

            var _center    = GeometryHelper.ConvertToInt32Point(center, _visual.Panel.DPIRatio);
            var _radius    = Helper.ConvertTo(radius * _visual.Panel.DPIRatio);
            var _thickness = Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio);

            _Add(new Cicle(fillColor.HasValue ? Helper.CalcColor(fillColor.Value, _transform.Opacity) : null, _center, _radius, new _DrawingPen(_thickness, Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray())));
        }
Ejemplo n.º 4
0
        public void DrawText(Color?fillColor, DrawingPen pen, string textToDraw, Typeface typeface, double emSize, Point origin)
        {
            _needFilpCoordinate = false;
            origin = new Point(origin.X, _visual.Panel.ImageHeight - origin.Y);
            var textFormat = new FormattedText(textToDraw, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, emSize, null);

            for (int i = 0; i < textToDraw.Length; i++)
            {
                var charFormat = new FormattedText(textToDraw[i].ToString(), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, emSize, Brushes.White);
                _DrawPathGeometry(fillColor, pen, charFormat.BuildGeometry(textFormat.BuildHighlightGeometry(origin, i, 1).Bounds.TopLeft));
            }
            _needFilpCoordinate = true;
        }
Ejemplo n.º 5
0
 private void _DrawPathGeometry(Color?foreground, DrawingPen pen, Geometry geometry)
 {
     if (geometry.IsEmpty())
     {
         return;
     }
     foreach (var figure in geometry.GetFlattenedPathGeometry().Figures)
     {
         BeginFigure(foreground, pen, figure.StartPoint, figure.IsClosed);
         foreach (var segment in figure.Segments)
         {
             if (segment is LineSegment)
             {
                 var line = (LineSegment)segment;
                 LineTo(line.Point);
             }
             if (segment is PolyLineSegment)
             {
                 var line = (PolyLineSegment)segment;
                 PolyLineTo(line.Points);
             }
             if (segment is BezierSegment)
             {
                 var bezier = (BezierSegment)segment;
                 BezierTo(3, new List <Point>()
                 {
                     bezier.Point1, bezier.Point2, bezier.Point3
                 });
             }
             if (segment is QuadraticBezierSegment)
             {
                 var bezier = (QuadraticBezierSegment)segment;
                 BezierTo(2, new List <Point>()
                 {
                     bezier.Point1, bezier.Point2
                 });
             }
             if (segment is PolyBezierSegment)
             {
                 var bezier = (PolyBezierSegment)segment;
                 PolyBezierTo(3, bezier.Points);
             }
             if (segment is PolyQuadraticBezierSegment)
             {
                 var bezier = (PolyQuadraticBezierSegment)segment;
                 PolyBezierTo(2, bezier.Points);
             }
         }
     }
     EndFigure();
 }
Ejemplo n.º 6
0
 public void BeginFigure(Color?fillColor, DrawingPen pen, Point begin, bool isClosed)
 {
     if (_begin == null)
     {
         _begin   = begin;
         _current = begin;
         _stream  = new CustomGeometry(fillColor.HasValue ? Helper.CalcColor(fillColor.Value, _transform.Opacity) : null, pen.Thickness < 0 ? _DrawingPen.EMPTY : new _DrawingPen(Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio), Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray()), isClosed);
     }
     else
     {
         if (_stream.IsClosed && _begin != _current)
         {
             LineTo(_begin.Value);
         }
         _stream.IsClosed = isClosed;
         _stream.SetPen(pen.Thickness < 0 ? _DrawingPen.EMPTY : new _DrawingPen(Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio), Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray()));
         _stream.SetFillColor(fillColor.HasValue ? Helper.CalcColor(fillColor.Value, _transform.Opacity) : null);
         _begin   = begin;
         _current = begin;
     }
 }
Ejemplo n.º 7
0
        private void _DrawArc(DrawingPen pen, Point center, double radius, double startRadian, double endRadian, bool isClockwise)
        {
            if (!isClockwise)
            {
                Helper.Switch(ref startRadian, ref endRadian);
            }

            center  = GeometryHelper.ConvertWithTransform(center, this);
            radius *= _visual.Panel.ScaleX * _transform.ScaleX;

            var startP = new Point(radius * Math.Cos(startRadian) + center.X, center.Y - radius * Math.Sin(startRadian));
            var endP   = new Point(radius * Math.Cos(endRadian) + center.X, center.Y - radius * Math.Sin(endRadian));

            var _center    = GeometryHelper.ConvertToInt32Point(center, _visual.Panel.DPIRatio);
            var _startP    = GeometryHelper.ConvertToInt32Point(startP, _visual.Panel.DPIRatio);
            var _endP      = GeometryHelper.ConvertToInt32Point(endP, _visual.Panel.DPIRatio);
            var _radius    = Helper.ConvertTo(radius * _visual.Panel.DPIRatio);
            var _thickness = Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio);

            _Add(new Arc(_startP, _endP, _center, new _DrawingPen(_thickness, Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray())));
        }
Ejemplo n.º 8
0
 public void DrawGlyphRun(Color?foreground, DrawingPen pen, GlyphRun glyphRun)
 {
     _needFilpCoordinate = false;
     _DrawPathGeometry(foreground, pen, glyphRun.BuildGeometry());
     _needFilpCoordinate = true;
 }
Ejemplo n.º 9
0
 public void DrawBezier(DrawingPen pen, int degree, IEnumerable <Point> points)
 {
     _DrawBezier(new _DrawingPen(Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio), Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray()), degree, points);
 }
Ejemplo n.º 10
0
 public void DrawSpline(DrawingPen pen, int degree, IEnumerable <double> knots, IEnumerable <Point> controlPoints, IEnumerable <double> weights, IEnumerable <Point> fitPoints)
 {
     _Add(new Spline(degree, knots.ToArray(), controlPoints?.Select(ctrlP => GeometryHelper.ConvertWithTransform(ctrlP, this)).ToArray(), weights.ToArray(), fitPoints?.Select(fitP => GeometryHelper.ConvertWithTransform(fitP, this)).ToArray(), new _DrawingPen(Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio), Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray()), _visual.Panel.DPIRatio));
 }
Ejemplo n.º 11
0
 public void DrawArc(DrawingPen pen, Point center, double radius, double startAngle, double endAngle, bool isClockwise)
 {
     _DrawArc(pen, center, radius, GeometryHelper.GetRadian(startAngle), GeometryHelper.GetRadian(endAngle), isClockwise);
 }
Ejemplo n.º 12
0
 public void DrawLine(DrawingPen pen, Point start, Point end)
 {
     _Add(_DrawLine(new _DrawingPen(Helper.ConvertTo(pen.Thickness * _visual.Panel.DPIRatio), Helper.CalcColor(pen.Color, _transform.Opacity), pen.Dashes == null ? null : Helper.ConvertTo(pen.Dashes).ToArray()), start, end));
 }
Ejemplo n.º 13
0
        private void EditorCanvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            #region RefreshColorList  =========================================
            _colorList.Clear();
            foreach (var(a, r, g, b) in _graph.ARGBList)
            {
                _colorList.Add(Color.FromArgb(a, r, g, b));
            }
            #endregion

            #region InitializeZoomFactor  =====================================
            if (_zoomFactor == 0)
            {
                Initialize(_graph.Extent);
                _viewExtent = _graph.Extent;

                CanvasGrid.Width  = RootCanvas.Width = EditorCanvas.Width = ActualWidth;
                CanvasGrid.Height = RootCanvas.Height = EditorCanvas.Height = ActualHeight;
            }
            #endregion

            #region CreateDrawingPen  =========================================
            var x   = _viewExtent.Xmin;
            var y   = _viewExtent.Ymin;
            var z   = _zoomFactor;
            var pen = new DrawingPen(_zoomFactor, _offset, args.DrawingSession);
            #endregion

            #region DrawEdges  ================================================
            pen.Width = 3;
            pen.Color = Colors.Magenta;
            var edges = _graph.Edges;
            for (int i = 0; i < _graph.EdgeCount; i++)
            {
                var edge   = edges[i];
                var points = edge.Points;
                var N      = (points == null) ? 0 : points.Length;
                if (N > 1)
                {
                    var ipc = edge.LineColor;
                    if (ipc == 0)
                    {
                        var i1 = edge.Node1.Color;
                        var i2 = edge.Node2.Color;
                        ipc = (i1 > i2) ? i1 : i2;
                    }
                    pen.Color = _colorList[ipc];
                    pen.Initialize((CanvasDashStyle)edge.DashStyle);

                    for (int j = 0; j < N; j++)
                    {
                        pen.DrawLine(points[j]);
                    }
                }
            }
            #endregion

            #region DrawNodes  ================================================
            for (int i = 0; i < _graph.NodeCount; i++)
            {
                var ds   = args.DrawingSession;
                var node = _graph.Nodes[i];
                pen.Color = Colors.Magenta;

                var k = node.Symbol - 2;
                if (k < 0 || k >= _graph.SymbolCount || _graph.Symbols[k].Data == null)
                {
                    pen.Color = _colorList[node.Color];
                    pen.Initialize();
                    if (node.IsNodePoint)
                    {
                        pen.DrawPoint(node);
                    }
                    else
                    {
                        pen.DrawBusBar(node.X, node.Y, node.DX, node.DY);
                    }
                }
                else if (_symbolShapes.Count == _graph.SymbolCount)
                {
                    var scale  = _zoomFactor * _graph.GraphX.SymbolScale;
                    var center = _offset + new Vector2(node.X, node.Y) * _zoomFactor;
                    var sym    = _graph.Symbols[k];
                    foreach (var shape in _symbolShapes[k])
                    {
                        shape.Draw(sender, ds, scale, center, (FlipState)node.FlipState);
                    }
                    //_drawSymbol[(int)node.FlipRotate & 7](node, sym, pen);
                }
            }
            #endregion

            #region RegionTrace  ==============================================
            pen.Width           = 2;
            pen.Style.DashStyle = CanvasDashStyle.Dot;

            if (_selector.Extent.HasArea)
            {
                pen.Color = Colors.LightGray;
                pen.DrawRectangle(_selector.Extent);
            }
            #endregion

            #region DrawRegions  ==============================================
            pen.Color = Colors.White;
            foreach (var ext in _selector.Regions)
            {
                pen.DrawRoundedRectangle(ext);
            }
            foreach (var ext in _selector.Occluded)
            {
                pen.DrawRoundedRectangle(ext, true);
            }
            #endregion
        }