renderLoadedImage method

void renderLoadedImage(
  1. JSONRender render,
  2. dynamic node,
  3. Element parent,
  4. ImageElement imageElement,
  5. ViewerElement<List<Point<num>>>? perspectiveFilter,
  6. ViewerElement<Rectangle<num>>? clip,
  7. ViewerElement<List<Rectangle<num>>>? rectangles,
  8. ViewerElement<List<Point<num>>>? points,
  9. DateTime? time,
  10. ValueProviderReference valueProviderRef,
)

Implementation

void renderLoadedImage(
    JSONRender render,
    dynamic node,
    Element parent,
    ImageElement imageElement,
    ViewerElement<List<Point<num>>>? perspectiveFilter,
    ViewerElement<Rectangle<num>>? clip,
    ViewerElement<List<Rectangle<num>>>? rectangles,
    ViewerElement<List<Point<num>>>? points,
    DateTime? time,
    ValueProviderReference valueProviderRef) {
  var w = imageElement.naturalWidth;
  var h = imageElement.naturalHeight;

  var inputMode = render.isInputRenderMode;

  EditionType? editionType;
  if (inputMode) {
    if (clip != null) {
      editionType = EditionType.clip;
    } else if (points != null) {
      editionType = EditionType.points;
    } else if (perspectiveFilter != null) {
      editionType = EditionType.perspective;
    }
  }

  var canvas = CanvasElement(width: w, height: h);
  var gridSize = editionType == EditionType.perspective
      ? CanvasImageViewer.gridSizeViewerElement(0.05)
      : null;

  var canvasImageViewer = CanvasImageViewer(
      canvas: canvas,
      image: imageElement,
      perspective: perspectiveFilter,
      gridSize: gridSize,
      clip: clip,
      rectangles: rectangles,
      points: points,
      time: time,
      editable: editionType);

  if (editionType == EditionType.clip) {
    var clipKeys = parseClipKeys(node);

    if (clipKeys != null) {
      valueProviderRef.valueProvider = (parent) {
        var clipKey = clipKeys[0];
        var xKey = clipKeys[1];
        var yKey = clipKeys[2];
        var wKey = clipKeys[3];
        var hKey = clipKeys[4];

        var clip = canvasImageViewer.clip!;
        clip = Rectangle<int>(clip.left.toInt(), clip.top.toInt(),
            clip.width.toInt(), clip.height.toInt());

        var nodeEdited = Map.from(node);

        if (xKey is num && yKey is num) {
          nodeEdited[clipKey] = [
            clip.left,
            clip.top,
            clip.width,
            clip.height
          ];
        } else {
          nodeEdited[clipKey] = {
            xKey: clip.left,
            yKey: clip.top,
            wKey: clip.width,
            hKey: clip.height
          };
        }

        return nodeEdited;
      };
    }
  } else if (editionType == EditionType.points) {
    valueProviderRef.valueProvider = (parent) {
      var pointsKey = canvasImageViewer.pointsKey;
      var points = canvasImageViewer.points ?? [];

      var nodeEdited = Map.from(node);

      var pointsCoords = points
          .map((p) => [p.x, p.y])
          .expand((p) => p)
          .map((n) => n.toInt())
          .toList();
      nodeEdited[pointsKey] = pointsCoords;
      return nodeEdited;
    };
  } else if (editionType == EditionType.perspective) {
    valueProviderRef.valueProvider = (parent) {
      var perspectiveKey = canvasImageViewer.perspectiveKey;
      var perspective = canvasImageViewer.perspective ?? [];

      var nodeEdited = Map.from(node);

      var perspectiveCoords = perspective
          .map((p) => [p.x, p.y])
          .expand((p) => p)
          .map((n) => n.toInt())
          .toList();
      nodeEdited[perspectiveKey] = perspectiveCoords;
      return nodeEdited;
    };
  }

  canvas.style.maxWidth = '70vw';
  canvas.style.maxHeight = '40vw';

  parent.children.clear();
  parent.children.add(canvas);

  canvasImageViewer.render();
}