paint method

  1. @override
void paint(
  1. InfinityModelConfig config,
  2. InfinityModelController controller,
  3. PaintViewPort viewPort,
  4. Point3D model,
  5. Matrix4 matrix,
  6. int vertexIndex,
  7. Float32List zIndices,
  8. Int32List colors,
  9. Float32List vertices,
)
override

Fills the buffer with the Model3D data.

Implementation

@override
void paint(
  InfinityModelConfig config,
  InfinityModelController controller,
  PaintViewPort viewPort,
  Point3D model,
  Matrix4 matrix,
  int vertexIndex,
  Float32List zIndices,
  Int32List colors,
  Float32List vertices,
) {
  _p.setFrom(model.position);
  matrix.perspectiveTransform(_p);

  // z-index
  zIndices[vertexIndex ~/ 3 + 0] = _p.z;
  zIndices[vertexIndex ~/ 3 + 1] = _p.z;

  final pointPosition = vertexIndex * 2;
  if (viewPort.isVectorVisible(_p)) {
    // if point has a label, ask viewport to render it after meshes
    if ((model.label ?? '').isNotEmpty) {
      final labelColor = model.color ?? config.defaultColorPoints;
      final fontSize =
          ((model.width ?? config.defaultPointWidth) * controller.scale * 4)
              .clamp(8.0, 24.0);
      viewPort.addLabel(model.label!, _p.x, _p.y, labelColor,
          fontSize: fontSize);
    }
    // color
    final vertexColor = model.color?.value ?? config.defaultColorPoints.value;
    colors[vertexIndex + 0] = vertexColor;
    colors[vertexIndex + 1] = vertexColor;
    colors[vertexIndex + 2] = vertexColor;
    colors[vertexIndex + 3] = vertexColor;
    colors[vertexIndex + 4] = vertexColor;
    colors[vertexIndex + 5] = vertexColor;

    // vertex
    final dx = (model.width ?? config.defaultPointWidth) * 0.5;
    vertices[pointPosition + 00] = _p.x - dx;
    vertices[pointPosition + 01] = _p.y - dx;
    vertices[pointPosition + 02] = _p.x - dx;
    vertices[pointPosition + 03] = _p.y + dx;
    vertices[pointPosition + 04] = _p.x + dx;
    vertices[pointPosition + 05] = _p.y + dx;
    vertices[pointPosition + 06] = _p.x + dx;
    vertices[pointPosition + 07] = _p.y + dx;
    vertices[pointPosition + 08] = _p.x + dx;
    vertices[pointPosition + 09] = _p.y - dx;
    vertices[pointPosition + 10] = _p.x - dx;
    vertices[pointPosition + 11] = _p.y - dx;
  } else {
    vertices[pointPosition + 00] = 0;
    vertices[pointPosition + 01] = 0;
    vertices[pointPosition + 02] = 0;
    vertices[pointPosition + 03] = 0;
    vertices[pointPosition + 04] = 0;
    vertices[pointPosition + 05] = 0;
    vertices[pointPosition + 06] = 0;
    vertices[pointPosition + 07] = 0;
    vertices[pointPosition + 08] = 0;
    vertices[pointPosition + 09] = 0;
    vertices[pointPosition + 10] = 0;
    vertices[pointPosition + 11] = 0;
  }
}