Source: Shape.js

/**
 * @author Antonio Raúl Guijarro Contreras <alu0101100494@ull.edu.es>
 * @file Declaración de la clase Shape. Generalización de metodos y atributos de las
 * figuras.
 * @copyright Antonio Raúl Guijarro Contreras 2020
 * @since 13.03.2020
 */

'use strinc'


/** 
 * Clase padre de las figuras. Almacena métodos para poder dibujar dentro de un canvas
 * las figuras que hereden de él.
*/
class Shape {

  /**
   * @static Almacena todos los posibles bordes, es decir, si son redondeados,
   * cuadrados o butt.
   */
  static lineCap = {
    butt: 'butt',
    round: 'round',
    square: 'square'
  }

  /**
   * @static Almacena un conjunto de patrones para el stroke. Línea continua, discontinua con varias
   * distancias y patrones de separación
   */
  static dashLine = {
    continuous: [],
    discontinuousVeryShort: [1, 1],
    discontinuousShort: [10, 10],
    discontinuousLong: [20, 5],
    discontinuousMediumDot: [15, 3, 3, 3],
    discontinuousLong3Dot: [20, 3, 3, 3, 3, 3, 3, 3],
    discontinuousLongShort: [12, 3, 3]
  }

  /**
   * Constructor de la clase Shape.
   * @param {string} color Color en formato CSS
   * @class Shape
   */
  constructor(color = 'black') {
    this.lineCap = Shape.lineCap.square;
    this.fillStyle = color;
    this.strokeStyle = color;
    this.strokeWidth = 1;
    this.rotate = 0;
    this.scale = [1, 1];
    this.isDiscontinuous = false;
    this.distanceDiscontinuous = [10 ,10];
  }


  /* istanbul ignore next   */
  /**
   * Asienta los atributos de la figura para ser dibujada.
   * @param {context} ctx Contexto del canvas.
   */
  baseDraw(ctx) {
    if (ctx != null) {
      ctx.beginPath();
      if (this.isDiscontinuous) {
        ctx.setLineDash(this.distanceDiscontinuous);
      } else {
        ctx.setLineDash([0, 0]);
      }
      ctx.lineWidth = this.strokeWidth;
      ctx.lineCap = this.lineCap;
      ctx.fillStyle = this.fillStyle;
      ctx.strokeStyle = this.strokeStyle;
      ctx.rotate(this.rotate);
      ctx.scale(...this.scale);
    }
  }
}

export default Shape;