objetsAdd/CPointImageAdd.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 CPointImage from '../objets/CPointImage'
import CPt from '../objets/CPt'
import CTransformation from '../objets/CTransformation'
import { getStr } from '../kernel/kernel'
export default CPointImage

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

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

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

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

/* Version 6.9.1 : C'est juste la droite qui dit si elle contient le point et c'est fait dans CPt.prototype.appartientDroiteParDefinition
Pour éviter les appels récursifs ce sont les droites ou les cercles qui doivent dire si, par propriété, un point image
par une transformation leur appartient
CPointImage.prototype.appartientDroiteParDefinition = function (droite) {
  // Ligne suivante modifié version 6.9.1
  // if (CPt.prototype.appartientDroiteParDefinition.call(this, droite)) return true
  if (droite.contientParDefinition(this)) return true
  let trans, vect
  const antecedent = this.antecedent
  const natTrans = this.transformation.natureTransformation()
  // Si la transormation transformme une droite en une droite paralèle, on regarde si l'antécédent appartient à une droite parallèle à droite
  if (((natTrans & CTransformation.tteTransImDtePar) !== 0) && (this.listeProprietaire.appDteParParDef(antecedent, droite))) return true
  switch (natTrans) {
    case CTransformation.homothetie :
    case CTransformation.symetrieCentrale :
      return this.transformation.centre.appartientDroiteParDefinition(droite) && antecedent.appartientDroiteParDefinition(droite)
    case CTransformation.translation :
      trans = this.transformation
      return (this.antecedent.appartientDroiteParDefinition(droite) && this.listeProprietaire.sontParDefinitionSurParallele(trans.or, trans.ex, droite)) ||
        (trans.ex.appartientDroiteParDefinition(droite) && this.listeProprietaire.sontParDefinitionSurParallele(antecedent, trans.or, droite))
    case CTransformation.translationParVect :
      vect = this.transformation.vect
      return (this.antecedent.appartientDroiteParDefinition(droite) && this.listeProprietaire.sontParDefinitionSurParallele(vect.point1, vect.point2, droite)) ||
        (vect.point2.appartientDroiteParDefinition(droite) && this.listeProprietaire.sontParDefinitionSurParallele(antecedent, vect.point1, droite))

    default : return false
  }
}
 */

CPointImage.prototype.appartientCercleParDefinition = function (cercle) {
  if (CPt.prototype.appartientCercleParDefinition.call(this, cercle)) return true
  const antecedent = this.antecedent
  const natTrans = this.transformation.natureTransformation()
  const className = cercle.className
  if ((natTrans === CTransformation.rotation) && (className === 'CCercleOA' || className === 'CCercleOR' || className === 'CCercleOAB')) {
    return (this.transformation.centre === cercle.o) && antecedent.appartientCercleParDefinition(cercle)
  } else return false
}

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

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