objets/CCercleOR.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 CElementLigne from './CElementLigne'
import CCercle from './CCercle'
import CValeur from './CValeur'
export default CCercleOR

/**
 * Cercle défini par son centre et un calcul donnant son rayon.
 * @constructor
 * @extends CCercle
 * @param {CListeObjets} listeProprietaire  La liste propriétaire.
 * @param {CImplementationProto} impProto  null ou la consruction proprietaire.
 * @param {boolean} estElementFinal  true si élément final de construction.
 * @param {Color} couleur
 * @param {boolean} masque  true si l'objet est masqué
 * @param {StyleTrait} style  le style de tracé.
 * @param {CPt} o  Le centre du cercle.
 * @param {CValeur} r  Calcul donnant le rayon.
 * @param {boolean} [inPixels=false]  Si true le rayon est en pixels et n'utilise pas la longueur unité de la figure.
 * @returns {CCercleOR}
 */
function CCercleOR (listeProprietaire, impProto, estElementFinal, couleur,
  masque, style, o, r, inPixels) {
  if (arguments.length === 1) CElementLigne.call(this, listeProprietaire)
  else {
    CCercle.call(this, listeProprietaire, impProto, estElementFinal, couleur, masque, style)
    this.o = o
    this.r = r
    this.inPixels = inPixels
  }
  this.coefMult = 1
}
CCercleOR.prototype = new CCercle()
CCercleOR.prototype.constructor = CCercleOR
CCercleOR.prototype.superClass = 'CCercle'
CCercleOR.prototype.className = 'CCercleOR'

CCercleOR.prototype.numeroVersion = function () {
  return 2
}
CCercleOR.prototype.getClone = function (listeSource, listeCible) {
  const ind1 = listeSource.indexOf(this.o)
  const ind2 = listeSource.indexOf(this.impProto)
  const rClone = this.r.getClone(listeSource, listeCible)
  return new CCercleOR(listeCible, listeCible.get(ind2, 'CImplementationProto'),
    this.estElementFinal, this.couleur, this.masque, this.style.getClone(), listeCible.get(ind1, 'CPt'), rClone, this.inPixels)
}
CCercleOR.prototype.ajouteAntecedents = function (liste) {
  liste.add(this.o)
}
CCercleOR.prototype.initialisePourDependance = function () {
  CCercle.prototype.initialisePourDependance.call(this)
  this.r.initialisePourDependance()
}
CCercleOR.prototype.depDe = function (p) {
  if (this.elementTestePourDependDe === p) return this.dependDeElementTeste
  // Modification version 6.4.9
  /*
  return this.memDep(CCercle.prototype.depDe.call(this, p) ||
    this.o.depDe(p) || this.r.depDe(p) || this.listeProprietaire.pointeurLongueurUnite.depDe(p))
  */
  const ret = CCercle.prototype.depDe.call(this, p) || this.o.depDe(p) || this.r.depDe(p)
  if (this.inPixels) return this.memDep(ret)
  else return this.memDep(ret || this.listeProprietaire.pointeurLongueurUnite.depDe(p))
}
CCercleOR.prototype.dependDePourBoucle = function (p) {
  // Modification version 6.4.9
  /*
  return ((p === this) || this.o.dependDePourBoucle(p) || this.r.dependDePourBoucle(p)) ||
    this.listeProprietaire.pointeurLongueurUnite.dependDePourBoucle(p)
  */
  const ret = (p === this) || this.o.dependDePourBoucle(p) || this.r.dependDePourBoucle(p)
  if (this.inPixels) return ret
  else return ret || this.listeProprietaire.pointeurLongueurUnite.dependDePourBoucle(p)
}
CCercleOR.prototype.positionne = function (infoRandom, dimfen) {
  this.r.positionne(infoRandom, dimfen)
  const plongUnite = this.listeProprietaire.pointeurLongueurUnite
  // Modification version 4.6.3
  this.existe = this.o.existe && this.r.existe
  if (!this.inPixels) this.existe = this.existe && plongUnite.existe
  if (this.existe) {
    this.centreX = this.o.x
    this.centreY = this.o.y
    if (this.inPixels) this.rayon = this.r.rendValeur() * this.coefMult
    else this.rayon = this.r.rendValeur() * this.listeProprietaire.pointeurLongueurUnite.rendLongueur()
    CCercle.prototype.positionne.call(this, infoRandom, dimfen)
  }
}
// Ajout version 6.3.0
CCercleOR.prototype.positionneFull = function (infoRandom, dimfen) {
  this.r.dejaPositionne = false
  this.positionne(infoRandom, dimfen)
}
CCercleOR.prototype.confonduAvec = function (p) {
  if (p.className === this.className) {
    return (this.o === p.o) && this.r.confonduAvec(p.r)
  } else return false
}
CCercleOR.prototype.remplacePoint = function (ancienPoint, nouveauPoint) {
  if (this.o === ancienPoint) this.o = nouveauPoint
}
CCercleOR.prototype.read = function (inps, list) {
  CCercle.prototype.read.call(this, inps, list)
  const ind1 = inps.readInt()
  this.o = list.get(ind1, 'CPt')
  this.r = new CValeur()
  this.r.read(inps, list)
  if (this.nVersion >= 2) this.inPixels = inps.readBoolean()
  else this.inPixels = false
}
CCercleOR.prototype.write = function (oups, list) {
  CCercle.prototype.write.call(this, oups, list)
  const ind1 = list.indexOf(this.o)
  oups.writeInt(ind1)
  this.r.write(oups, list)
  oups.writeBoolean(this.inPixels)
}