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; } }
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(); }
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()))); }
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; }
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(); }
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; } }
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()))); }
public void DrawGlyphRun(Color?foreground, DrawingPen pen, GlyphRun glyphRun) { _needFilpCoordinate = false; _DrawPathGeometry(foreground, pen, glyphRun.BuildGeometry()); _needFilpCoordinate = true; }
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); }
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)); }
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); }
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)); }
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 }