objetsAdd/CLieuObjetAncetreAdd.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 CLieuObjetAncetre from '../objets/CLieuObjetAncetre'
import CElementGraphique from '../objets/CElementGraphique'
import NatObj from '../types/NatObj'
import { getStr } from '../kernel/kernel'
import LieuObjetDlg from '../dialogs/LieuObjetDlg'
import $ from 'jquery'

export default CLieuObjetAncetre

/**
 * Fonction utilisée dans la boîte de dialogue ProtocoleDlg et montrant ou cachant le g Element
 * représentant graphiquement l'objet.
 * Doit être redéfini pour les lieux d'objets qui contient eux-aussi de g elements
 * @param bshow Si true on montre le g Element sinon on le cache
 */

CLieuObjetAncetre.prototype.showgElt = function (bshow) {
  CElementGraphique.prototype.showgElt.call(this, bshow)
  const g = this.g
  for (let i = 0; i < g.childNodes.length; i++) {
    const node = g.childNodes[i]
    if (node.localName === 'g') $(node).attr('visibility', bshow ? 'visible' : 'hidden')
  }
}

CLieuObjetAncetre.prototype.depDe4Rec = function (p) {
  return CElementGraphique.prototype.depDe4Rec.call(this, p) ||
    this.elementAssocie.depDe4Rec(p) || this.nombreTraces.depDe4Rec(p)
}

CLieuObjetAncetre.prototype.distancePoint = function (xp, yp, masquage, distmin) {
  // Pour les repères avec papier millimétré, les lieuxs d'objets servant à représenter le quadrillage
  // ne doivent pas être désignables à la souris. L'implémentation de prototype a pour nom "PapMilli"
  if ((!this.existe || (masquage && this.masque)) || ((this.impProto !== null) && (this.impProto.nomProto === 'PapMilli'))) return -1
  for (let i = 0; i < this.listeCopiesObjet.longueur(); i++) {
    const elg = this.listeCopiesObjet.get(i)
    if (elg.existe) {
      const d = elg.distancePoint(xp, yp, masquage, distmin)
      if ((d < distmin) && (d !== -1)) return d
    }
  }
  return -1
}

CLieuObjetAncetre.prototype.modifiableParMenu = function () {
  // Les lieux d'objets sont modifiables par l'outil de modification d'objet graphique même
  // s'ils sont des éléments finaux de construction et sont des affichages de valeur ou des affichages de texet ou de LaTeX.
  return !this.estElementFinal || this.estCapturableSouris()
}

CLieuObjetAncetre.prototype.modifDlg = function (app, callBack1, callBack2) {
  new LieuObjetDlg(app, this, true, callBack1, callBack2)
}

CLieuObjetAncetre.prototype.estCapturableSouris = function () {
  return this.elementAssocie.estDeNature(NatObj.NComOuLatexOuAffVal)
}

// Modifié par rapport à la version Java
/**
 * Fonction utilisée pour générer un nom pour le protocole de la figure
 * @returns {string}Le nom généré
 */
CLieuObjetAncetre.prototype.genereNom = function () {
  CLieuObjetAncetre.ind++
  return getStr('rlieuOb') + CLieuObjetAncetre.ind
}

CLieuObjetAncetre.prototype.setCloneTikz = function (ptel) {
  CElementGraphique.prototype.setCloneTikz.call(this, ptel)
  for (let i = 0; i < this.listeCopiesObjet.longueur(); i++) {
    const elb1 = this.listeCopiesObjet.get(i)
    const elb2 = ptel.listeCopiesObjet.get(i)
    elb1.setCloneTikz(elb2)
  }
}

CLieuObjetAncetre.prototype.positionneTikz = function (infoRandom, dimfen) {
  CElementGraphique.prototype.positionneTikz.call(this, infoRandom, dimfen)
  this.nombreTraces.positionne(infoRandom, dimfen)
  this.existe = this.existe && this.nombreTraces.existe
}

CLieuObjetAncetre.prototype.tikz = function (dimf, nomaff, coefmult, bu) {
  let ch = ''
  for (let i = 0; i < this.listeCopiesObjet.longueur(); i++) {
    const elg = this.listeCopiesObjet.get(i)
    if (elg.existe) {
      const st = elg.tikz(dimf, false, coefmult, bu)
      if (st !== '') {
        ch += st + '\n'
      }
    }
  }
  if (ch.endsWith('\n')) ch = ch.substring(0, ch.length - 1)
  return ch
}

CLieuObjetAncetre.prototype.addTikzColors = function (stb, vect) {
  stb = CElementGraphique.prototype.addTikzColors.call(this, stb, vect)
  // Il faut appeler addTikzColor pour chaque élément car ça peut par exemple
  // être un affichage de texte avec couleur de fond
  if (this.existe) stb = this.listeCopiesObjet.get(0).addTikzColors(stb, vect)
  return stb
}

CLieuObjetAncetre.prototype.estDefiniParObjDs = function (listeOb) {
  return this.elementAssocie.estDefPar(listeOb) &&
    this.nombreTraces.estDefiniParObjDs(listeOb)
}