All files / scripts Shape.js

100% Statements 11/11
50% Branches 2/4
100% Functions 1/1
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82                                                                                            122x 122x 122x 122x 122x 122x 122x 122x 122x                                                     1x
/**
 * @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;