sigmajs-square-with-contour.js 1.42 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
/**
 * Sigma.js WebGL Renderer Node Program
 * =====================================
 *
 * Simple program rendering nodes as triangles.
 * It does not extend AbstractNodeProgram, which works very differently, and
 * really targets the gl.POINTS drawing methods.
 * @module
 */

import { NodeDisplayData } from "sigma/types";
import { floatColor } from "sigma/utils";
13
import TriangleProgram from "./sigmajs-triangle-abstract";
14 15 16 17 18 19 20 21 22 23 24

const POINTS = 12;
const ATTRIBUTES = 5;

const ANGLE_1_1 = - (1 * Math.PI) / 4;
const ANGLE_1_2 =   (1 * Math.PI) / 4;
const ANGLE_1_3 =   (3 * Math.PI) / 4;
const ANGLE_2_1 =   (3 * Math.PI) / 4;
const ANGLE_2_2 =   (5 * Math.PI) / 4;
const ANGLE_2_3 =   (7 * Math.PI) / 4;

25
export default class NodeProgram extends TriangleProgram {
26
  constructor(gl) {
27
    super(gl, POINTS, ATTRIBUTES);
28 29
  }

30 31
  triangleDefinitions(data) {
    const gray = '#aaa';
32 33 34
    const size = data.size / 1.7;  // experimental...
    const contourSize = size + 0.8;  // experimental...

35 36 37 38
    return [ { x: data.x, y: data.y, size: contourSize, color: gray, angles: [ANGLE_1_1, ANGLE_1_2, ANGLE_1_3] },
             { x: data.x, y: data.y, size: contourSize, color: gray, angles: [ANGLE_2_1, ANGLE_2_2, ANGLE_2_3] },
             { x: data.x, y: data.y, size: size, color: data.color, angles: [ANGLE_1_1, ANGLE_1_2, ANGLE_1_3] },
             { x: data.x, y: data.y, size: size, color: data.color, angles: [ANGLE_2_1, ANGLE_2_2, ANGLE_2_3] } ];
39 40
  }
}