/// <summary> /// Start drawing a Figure flow (continuous),must call <see cref="EndFigures"/> to end this Figure or combine Figures(generate by <see cref="BeginFigure(PenF, Color?, PointF, bool)"/>) /// </summary> public void BeginFigure(PenF pen, Color?fillColor, PointF begin, bool isClosed) { pen.Color = _transform.Transform(pen.Color); if (fillColor.HasValue) { fillColor = _transform.Transform(fillColor.Value); } if (_begin.HasValue) { if (_subGeo.IsClosed && _begin != _current) { _LineTo(_begin.Value, true); } else { _subGeo.UnClosedLine = _DrawLine(PenF.NULL, _current.Value, _begin.Value); } } begin = _transform.Transform(begin); _begin = begin; _current = begin; _subGeo = new _SimpleGeometry(pen, fillColor, _begin.Value, isClosed); if (_geo == null) { _geo = new _ComplexGeometry() { _bounds = RectF.Empty } } ; _geo.AddChild(_subGeo); }
public void DrawArrow(Color fillColor, PointF origin, float height, float width, VectorF direction, bool isFixedSize) { fillColor = _transform.Transform(fillColor); origin = _transform.Transform(origin); direction = _transform.Transform(-direction); direction.Normalize(); if (isFixedSize) { _primitives.Add(new _Arrow(origin, height, width, direction, fillColor)); } else { var p1 = origin + direction * height; var v = new VectorF(direction.Y, -direction.X); var wd = v * width / 2; var p2 = p1 + wd; p1 -= wd; var geo = new _ComplexGeometry(); var subgeo = new _SimpleGeometry(PenF.NULL, fillColor, origin, false); subgeo.StreamTo(new _Line(origin, p1, PenF.NULL)); subgeo.StreamTo(new _Line(p1, p2, PenF.NULL)); subgeo.StreamTo(new _Line(p2, origin, PenF.NULL)); geo.AddChild(subgeo); geo.Close(); _primitives.Add(geo); } }
public void AddChild(_SimpleGeometry child) { if (_children == null) { _children = new List <_SimpleGeometry>(); } _children.Add(child); }
private void _DrawRectangle(PenF pen, Color?fillColor, params PointF[] points) { var geo = new _ComplexGeometry(); var subgeo = new _SimpleGeometry(pen, fillColor, points[0], false); subgeo.StreamTo(new _Line(points[0], points[1], pen)); subgeo.StreamTo(new _Line(points[1], points[2], pen)); subgeo.StreamTo(new _Line(points[2], points[3], pen)); subgeo.StreamTo(new _Line(points[3], points[0], pen)); geo.AddChild(subgeo); geo.Close(); _primitives.Add(geo); }