objetsAdd/CDroiteImageAdd.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
 */
import CDroiteImage from '../objets/CDroiteImage'
import CDroite from '../objets/CDroite'
import CTransformation from '../objets/CTransformation'
import { getStr } from '../kernel/kernel'

export default CDroiteImage

CDroiteImage.prototype.infoHist = function () {
  return this.getName() + ' : ' + getStr('chinfo34') + ' ' + this.antecedent.getNom() + ' ' +
    getStr('par') + ' ' + this.transformation.complementInfo()
}

CDroiteImage.prototype.antecedentDirect = function () {
  return this.transformation
}

CDroiteImage.prototype.modifiableParMenu = function () {
  return !this.estElementFinal && this.transformation.imageModifiableParMenu()
}

CDroiteImage.prototype.contientParDefinition = function (po) {
  if (po.estPointImage()) {
    if (CDroite.prototype.contientParDefinition.call(this, po)) return true
    const dteAntecedent = this.antecedent
    const ptAntecedent = po.antecedent
    if (ptAntecedent.appartientDroiteParDefinition(dteAntecedent)) {
      const trans = po.transformation
      // Par toutes les transformations usuelles l'image d'une droite est une droite
      if ((this.transformation === trans) && (trans.natureTransformation !== CTransformation.inversion)) {
        return true
      }
      // On regarde si la droite est image par une transformation transformant une droite par une droite parallèle
      if ((this.transformation.natureTransformation() & CTransformation.tteTransImDtePar) !== 0) {
        // Si la transformation associé au point image n'est pas la même que celle associée à la droite image
        const natTrans = trans.natureTransformation()
        switch (natTrans) {
          case CTransformation.homothetie :
          case CTransformation.symetrieCentrale :
            return trans.centre.appartientDroiteParDefinition(dteAntecedent)
          // Dans le cas d'une translation, si l'origine de la translation est sur la droite antécédent
          // et son extrémité sur la droite image et si le point antécédent est sur la droite antcécédent
          // ou encore s'ils sont tous les trois sur la droite antécédent
          // la droite contient le point image
          case CTransformation.translation :
            return (trans.or.appartientDroiteParDefinition(dteAntecedent) && trans.ex.appartientDroiteParDefinition(this)) ||
              (trans.or.appartientDroiteParDefinition(dteAntecedent) && trans.ex.appartientDroiteParDefinition(dteAntecedent))
          case CTransformation.translationParVect : {
            const vect = trans.vecteurTrans
            return (vect.point1.appartientDroiteParDefinition(dteAntecedent) && vect.point2.appartientDroiteParDefinition(this)) ||
              (vect.point1.appartientDroiteParDefinition(dteAntecedent) && vect.point2.appartientDroiteParDefinition(dteAntecedent))
          }
          default :
            return false
        }
      }
    }
  }
  return false
}

/* Abandonné version 6.9.1
CDroiteImage.prototype.estParalleleParDefinition = function (dte) {
  return (dte === this) ||
    (((this.transformation.natureTransformation() & CTransformation.tteTransImDtePar) !== 0) &&
    (this.antecedent.estParalleleParDefinition(dte) || dte.estParalleleParDefinition(this.antecedent)))
}
 */

CDroiteImage.prototype.depDe4Rec = function (p) {
  if (this.elementTestePourDependDePourRec === p) return this.dependDeElementTestePourRec
  return this.memDep4Rec(CDroite.prototype.depDe4Rec.call(this, p) ||
    this.antecedent.depDe4Rec(p) || this.transformation.depDe4Rec(p))
}

/**
 * Fonction qui renvoie true seulement pour les objets qui sont des objets images d'un autre par une transformation
 * @returns {boolean}
 */
CDroiteImage.prototype.estImageParTrans = function () {
  return true
}

CDroiteImage.prototype.estDefiniParObjDs = function (listeOb) {
  return this.antecedent.estDefPar(listeOb) &&
  this.transformation.estDefPar(listeOb)
}