addCapGeometry method

void addCapGeometry(
  1. Vector2 center,
  2. Vector2 p1,
  3. Vector2 p2,
  4. bool joinIsOnLeftSide,
  5. bool start,
  6. num u,
)

Implementation

void addCapGeometry(Vector2 center, Vector2 p1, Vector2 p2, bool joinIsOnLeftSide, bool start, num u) {
  // param center: End point of the path
  // param p1, p2: Left and right cap points

  switch (style["strokeLineCap"]) {
    case 'round':
      if (start) {
        makeCircularSector(center, p2, p1, u, 0.5);
      } else {
        makeCircularSector(center, p1, p2, u, 0.5);
      }

      break;

    case 'square':
      if (start) {
        tempV2_1.sub2(p1, center);
        tempV2_2.setValues(tempV2_1.y, -tempV2_1.x);

        tempV2_3.add2(tempV2_1, tempV2_2).add(center);
        tempV2_4.sub2(tempV2_2, tempV2_1).add(center);

        // Modify already existing vertices
        if (joinIsOnLeftSide) {
          tempV2_3.copyIntoArray(vertices, 1 * 3);
          tempV2_4.copyIntoArray(vertices, 0 * 3);
          tempV2_4.copyIntoArray(vertices, 3 * 3);
        } else {
          tempV2_3.copyIntoArray(vertices, 1 * 3);
          tempV2_3.copyIntoArray(vertices, 3 * 3);
          tempV2_4.copyIntoArray(vertices, 0 * 3);
        }
      } else {
        tempV2_1.sub2(p2, center);
        tempV2_2.setValues(tempV2_1.y, -tempV2_1.x);

        tempV2_3.add2(tempV2_1, tempV2_2).add(center);
        tempV2_4.sub2(tempV2_2, tempV2_1).add(center);

        final vl = vertices.length;

        // Modify already existing vertices
        if (joinIsOnLeftSide) {
          tempV2_3.copyIntoArray(vertices, vl - 1 * 3);
          tempV2_4.copyIntoArray(vertices, vl - 2 * 3);
          tempV2_4.copyIntoArray(vertices, vl - 4 * 3);
        } else {
          tempV2_3.copyIntoArray(vertices, vl - 2 * 3);
          tempV2_4.copyIntoArray(vertices, vl - 1 * 3);
          tempV2_4.copyIntoArray(vertices, vl - 4 * 3);
        }
      }

      break;

    case 'butt':
    default:

      // Nothing to do here
      break;
  }
}