objets/CPointBase.js

/*
 * MathGraph32 Javascript : Software for animating online dynamic mathematics figures
 * https://www.mathgraph32.org/
 * @Author Yves Biton (yves.biton@sesamath.net)
 * @License: GNU AGPLv3 https://www.gnu.org/licenses/agpl-3.0.html
 */
import NatObj from '../types/NatObj'
import CPointAncetrePointsMobiles from './CPointAncetrePointsMobiles'
import { zero } from '../kernel/kernel'
import CPt from './CPt'
export default CPointBase

/**
 * Classe représentant un point libre sur la figure pouvant être déplacé n'importe où.
 * @constructor
 * @extends CPointAncetrePointsMobiles
 * @param {CListeObjets} listeProprietaire  La liste propriétaire de l'objet
 * @param {CImplementationProto} impProto  null ou pointe sur la construction propriétaire de l'objet.
 * @param {boolean} estElementFinal  true si l'objet est un objet final de construction
 * @param {Color} couleur  La couleur de l'objet
 * @param {boolean} nomMasque  true si le nom de l'objet est masqué
 * @param {number} decX  Decalage horizontal du nom
 * @param {number} decY  Decalage vertical du nom
 * @param {boolean} masque  true si l'objet est masque
 * @param {string} nom  Le nom eventuel de l'objet
 * @param {number} tailleNom  Indice de la taille du nom (voir Fonte)
 * @param {MotifPoint} motif  Le motif du point
 * @param {boolean} marquePourTrace  true si le point est marqué pour la trace
 * @param {boolean} fixed  true si le point est punaisé
 * @param {number} x  abscisse du point dans le svg
 * @param {number} y  ordonnee du point sans le svg
 * @returns {void}
 */
function CPointBase (listeProprietaire, impProto, estElementFinal, couleur, nomMasque,
  decX, decY, masque, nom, tailleNom, motif, marquePourTrace, fixed, x, y) {
  // Ajout version 4.9.9.4
  if (arguments.length === 0) {
    CPointAncetrePointsMobiles.call(this, null)
  } else {
    //
    if (arguments.length === 1) CPointAncetrePointsMobiles.call(this, listeProprietaire)
    else {
      CPointAncetrePointsMobiles.call(this, listeProprietaire, impProto, estElementFinal, couleur, nomMasque,
        decX, decY, masque, nom, tailleNom, motif, marquePourTrace, fixed)
      this.x = x
      this.y = y
    }
  }
  // Ligne suivante nécessaire pour les points utilisés de façon interne
  this.dansFenetre = true
}
CPointBase.prototype = new CPointAncetrePointsMobiles()
CPointBase.prototype.constructor = CPointBase
CPointBase.prototype.superClass = 'CPointAncetrePointsMobiles'
CPointBase.prototype.className = 'CPointBase'

CPointBase.prototype.getClone = function (listeSource, listeCible) {
  const ind1 = listeSource.indexOf(this.impProto)
  return new CPointBase(listeCible, listeCible.get(ind1, 'CImplementationProto'),
    this.estElementFinal, this.couleur, this.nomMasque, this.decX, this.decY, this.masque, this.nom,
    this.tailleNom, this.motif, this.marquePourTrace, this.fixed, this.x, this.y)
}

/**
 * Fonction translatant le point de (decalagex, decalagey)
 * @param {number} decalagex
 * @param {number} decalagey
 * @returns {void}
 */
CPointBase.prototype.translateDe = function (decalagex, decalagey) {
  this.x += decalagex
  this.y += decalagey
}

CPointBase.prototype.getNature = function () {
  return NatObj.NPointBase
}

CPointBase.prototype.positionne = function (infoRandom, dimfen) {
  CPt.prototype.positionne.call(this, infoRandom, dimfen)
  this.existe = true
}

CPointBase.prototype.testDeplacement = function (dimfen, xtest, ytest, pointr, abscr) {
  pointr.x = xtest
  pointr.y = ytest
  return this.testFenetre(dimfen, xtest, ytest)
}

CPointBase.prototype.confonduAvec = function (p) {
  if (p.className === this.className) {
    return (zero(p.x - this.x) && zero(p.y - this.y))
  } else return false
}

/**
 * Zoome les coordonnées du point d'un facteur rapport par rapport au point
 * de coordonnées (xcentre, ycentre)
 * @param {number} xcentre
 * @param {number} ycentre
 * @param {number} rapport
 * @returns {void}
 */
CPointBase.prototype.zoom = function (xcentre, ycentre, rapport) {
  this.x = xcentre + rapport * (this.x - xcentre)
  this.y = ycentre + rapport * (this.y - ycentre)
}
// Non adapaté JavaScript : adaptePourHauteResolution(double coef)
// Pour cet objet x et y ne sont pas calculés mais lus dans le flux d'objets

CPointBase.prototype.read = function (inps, list) {
  CPointAncetrePointsMobiles.prototype.read.call(this, inps, list)
  this.x = inps.readDouble()
  this.y = inps.readDouble()
}

CPointBase.prototype.write = function (oups, list) {
  CPointAncetrePointsMobiles.prototype.write.call(this, oups, list)
  oups.writeDouble(this.x)
  oups.writeDouble(this.y)
}