objetsAdd/CValeurAdd.js

/*
 * Created by yvesb on 10/10/2016.
 */
/*
 * 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
 */

// Modifié version 6.3.0
import CValeur from '../objets/CValeur'
import NatObj from '../types/NatObj'
import CCalcul from '../objets/CCalcul'
export default CValeur

CValeur.prototype.depDe4Rec = function (p) {
  return this.calcul.depDe4Rec(p)
}

/**
 * Fonction changeant le calcul de l'objet
 * @param {CCb} calc
 * @returns {void}
 */
CValeur.prototype.donneCalcul = function (calc) {
  this.calcul = calc
  this.dejaPositionne = false
}

/**
 * Fonction rendant true si le calcul associé pointe sur val
 * @param {CValDyn} val
 * @returns {boolean}
 */
CValeur.prototype.pointeSur = function (val) {
  if (this.calcul.className === 'CResultatValeur') {
    return this.calcul.valeurAssociee === val
  } else return false
}

/**
 * Fonction renvoyant un pointeur sur un point ayant pour pour abscisse this
 * dans le cas où this est constant ou se réfère à la même valeur
 * Renvoie null si aucun élément ne répond à la recherhce
 * @param {CListeObjets} list La liste dans laquelle se fait la recherche
 * @param repere Le repère dans lequel on cherche un point de coordonnées (this.valeur, 0)
 * @returns {CPointBase|null} Pointeur sur le point trouvé ou null sinon
 */
CValeur.prototype.existePtAbs = function (list, repere) {
  for (const elb of list.col) {
    if (elb.estDeNature(NatObj.NPointDansRepere) && (elb.rep === repere) &&
      elb.abs.confonduAvec(this) && elb.ord.estConstant() && (elb.ord.valeur === 0)) {
      return elb
    }
  }
  return null
}

CValeur.prototype.estDefiniParObjDs = function (listeOb) { // Modifié version 6.3.0
  // return this.calcul.estDefiniParObjDs(listeOb);
  const calc = this.calcul
  return calc.estConstant() ? true : calc.estDefiniParObjDs(listeOb)
}

/**
 * Fonction servant dans les outils implémentant un prototype
 * Si this.calcul est une référence à une valeur déjà existante, revoie ce pointeur
 * Sinon rajouté à la liste Prinipale de l'application un nouveau calcul dont le nom
 * commence par name
 * @param {MtgApp|MtgAppLecteur} app L'application propriétaire
 * @param {string} name Le début du nom du calcul éventuellement créé
 * @param {boolean} bChiffreImpose i true le nom du calcul généré doit commencer par un chiffre
 * @returns {CCalcul|CValDyn|undefined} pas tres sûr du type…
 */
CValeur.prototype.getCalcForImpProto = function (app, name, bChiffreImpose) {
  let valeur
  const list = app.listePr
  if (this.calcul.className === 'CResultatValeur') {
    valeur = this.calcul.valeurAssociee
  } else {
    const nom = list.genereNomPourCalcul(name, bChiffreImpose)
    const calcul = new CCalcul(list, null, false, nom, this.calcul.chaineCalculSansPar(null), this.calcul)
    app.ajouteElement(calcul)
    valeur = calcul
  }
  return valeur
}