/// <inheritdoc/> public override void Draw(object dc, Core2D.Shapes.XQuadraticBezier quadraticBezier, double dx, double dy, ImmutableArray <Core2D.Data.XProperty> db, Core2D.Data.Database.XRecord r) { var _gfx = dc as XGraphics; double x1 = quadraticBezier.Point1.X; double y1 = quadraticBezier.Point1.Y; double x2 = quadraticBezier.Point1.X + (2.0 * (quadraticBezier.Point2.X - quadraticBezier.Point1.X)) / 3.0; double y2 = quadraticBezier.Point1.Y + (2.0 * (quadraticBezier.Point2.Y - quadraticBezier.Point1.Y)) / 3.0; double x3 = x2 + (quadraticBezier.Point3.X - quadraticBezier.Point1.X) / 3.0; double y3 = y2 + (quadraticBezier.Point3.Y - quadraticBezier.Point1.Y) / 3.0; double x4 = quadraticBezier.Point3.X; double y4 = quadraticBezier.Point3.Y; if (quadraticBezier.IsFilled) { var path = new XGraphicsPath(); path.AddBezier( _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); if (quadraticBezier.IsStroked) { _gfx.DrawPath( ToXPen(quadraticBezier.Style, _scaleToPage, _sourceDpi, _targetDpi), ToXSolidBrush(quadraticBezier.Style.Fill), path); } else { _gfx.DrawPath( ToXSolidBrush(quadraticBezier.Style.Fill), path); } } else { if (quadraticBezier.IsStroked) { _gfx.DrawBezier( ToXPen(quadraticBezier.Style, _scaleToPage, _sourceDpi, _targetDpi), _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); } } }
/// <inheritdoc/> public override void Draw(object dc, Core2D.Shapes.XQuadraticBezier quadraticBezier, double dx, double dy, ImmutableArray <Core2D.Data.XProperty> db, Core2D.Data.Database.XRecord r) { if (!quadraticBezier.IsStroked && !quadraticBezier.IsFilled) { return; } var dxf = dc as DxfDocument; var style = quadraticBezier.Style; var dxfSpline = CreateQuadraticSpline( quadraticBezier.Point1.X + dx, quadraticBezier.Point1.Y + dy, quadraticBezier.Point2.X + dx, quadraticBezier.Point2.Y + dy, quadraticBezier.Point3.X + dx, quadraticBezier.Point3.Y + dy); if (quadraticBezier.IsFilled) { var fill = ToColor(style.Fill); var fillTransparency = ToTransparency(style.Fill); var bounds = new List <HatchBoundaryPath> { new HatchBoundaryPath( new List <EntityObject> { (Spline)dxfSpline.Clone() }) }; var hatch = new Hatch(HatchPattern.Solid, bounds, false); hatch.Layer = _currentLayer; hatch.Color = fill; hatch.Transparency.Value = fillTransparency; dxf.AddEntity(hatch); } if (quadraticBezier.IsStroked) { var stroke = ToColor(style.Stroke); var strokeTansparency = ToTransparency(style.Stroke); var lineweight = ToLineweight(style.Thickness); dxfSpline.Layer = _currentLayer; dxfSpline.Color = stroke; dxfSpline.Transparency.Value = strokeTansparency; dxfSpline.Lineweight = lineweight; dxf.AddEntity(dxfSpline); } }