drawGrid method

  1. @override
void drawGrid([
  1. bool drawY = true
])
override

Implementation

@override
void drawGrid([bool drawY = true]) {
  _gridElem.innerHTML = ''.toJS;
  if (points == 0) return;

  final radians = 2*pi/points.toDouble();
  final r = min(_svgElem.clientWidth, _svgElem.clientHeight)/2;
  final dx = max(_svgElem.clientWidth/2 - r, 0);
  final dy = max(_svgElem.clientHeight/2 - r, 0);

  var gridR = r - gridLineWidth - textMargin/4 - maxLabelWidth;
  List<List<double>>? outerPolygons;
  while (gridR > 10) {
    var polygons = <List<double>>[];

    for (var i = 0; i < points; i++) {
      polygons.add([
        gridR*sin((radians*i)+pi) + r + dx,
        gridR*cos((radians*i)+pi) + r + dy,
      ]);
    }

    outerPolygons ??= polygons;

    var pointStr = polygons.map((e) => e.join(' ')).join(', ');
    _gridElem.insertAdjacentHTML('beforeend', '<polygon points="$pointStr" stroke="$gridLineStrokeStyle" fill="none" stroke-width="$gridLineWidth" />'.toJS);
    gridR = gridR - pointIntervalRadiusWidth;
    if (gridR <= 10) break;
  }

  if (outerPolygons != null) {
    for (var p in outerPolygons) {
      _gridElem.insertAdjacentHTML('beforeend', '<line x1="${r+dx}" y1="${r+dy}" x2="${p[0]}" y2="${p[1]}" stroke-width="$gridLineWidth" stroke="$gridLineStrokeStyle" />'.toJS);
    }
  }

}