renderNode method

  1. @override
void renderNode(
  1. RenderInfo<Renderinstruction> renderInfo,
  2. RenderContext renderContext,
  3. NodeProperties nodeProperties
)

Renders a symbol for a node.

Implementation

@override
void renderNode(RenderInfo renderInfo, RenderContext renderContext, NodeProperties nodeProperties) {
  if (symbolImage == null) return;
  if (renderContext is! UiRenderContext) throw Exception("renderContext is not UiRenderContext ${renderContext.runtimeType}");
  if (renderInfo is! RenderInfoNode) throw Exception("renderInfo is not RenderInfoNode ${renderInfo.runtimeType}");

  Mappoint previous = nodeProperties.getCoordinatesAbsolute();
  MapRectangle boundary = symbolImage!.getBoundary();

  MappointRelative relative = previous.offset(renderContext.reference).offset(0, renderinstruction.dy);

  UiMatrix? matrix;
  if (renderinstruction.rotate) {
    // if we do not rotate theta will be 0, which is correct
    double radians = renderInfo.rotateRadians;
    if (radians != 0) {
      matrix = UiMatrix();
      matrix.rotate(radians, pivotX: boundary.left, pivotY: boundary.top);
    }
  }

  renderContext.canvas.drawPicture(
    symbolImage: symbolImage!,
    matrix: matrix,
    left: relative.dx + boundary.left,
    top: relative.dy + boundary.top,
    paint: fill,
  );

  // renderContext.canvas.drawCircle(relative.dx + boundary.left, relative.dy + boundary.top, 5, UiPaint.fill(color: 0xffff0000));
  // renderContext.canvas.drawCircle(relative.dx, relative.dy, boundary.getWidth() / 2, UiPaint.stroke(color: 0x80ff0000));
}