objetsAdd/CDroiteAncetreAdd.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 { chaineNombre, colineaires, distancePointPoint } from '../kernel/kernel'
import CDroiteAncetre from '../objets/CDroiteAncetre'
import NatObj from '../types/NatObj'
import Vect from '../types/Vect'
import { projetteOrtho } from 'src/kernel/kernelVect'

export default CDroiteAncetre

/**
 * Fonction utilisée par le protocole de la figure et renvoyant soit le nom de la droite (donnée lors de la boîte
 * de dialogue de protocole soit la chaîne de caractères décriavnt la doite ((OA) par exemple).
 * @returns {string}
 */
CDroiteAncetre.prototype.getNom = function () {
  return this.nom // Ne pas utiliser getName car dans l'historique on regarde si getNom() est vide et si ou on affecte
  // un nom à la droite
}

CDroiteAncetre.prototype.distancePointPourDemiPlan = function (xp, yp) {
  if (!this.existe) return -1
  else {
    projetteOrtho(xp, yp, this.point_x, this.point_y, this.vect, this.pointr)
    return distancePointPoint(xp, yp, this.pointr.x, this.pointr.y)
  }
}

CDroiteAncetre.prototype.distancePoint = function (xp, yp, masquage) {
  let dis
  if (!(this.existe) || (masquage && this.masque)) return -1
  else {
    projetteOrtho(xp, yp, this.point_x, this.point_y, this.vect, this.pointr)
    dis = distancePointPoint(xp, yp, this.pointr.x, this.pointr.y)
    return dis
  }
}

/**
 * Fonction  servant à savoir si un point
 * est par définition sur une droite. Renverra true par exemple
 * si la droite est définie par deux points et le point est un de ces deux points
 * ou si le point est lié à la droite
 * @param {CElementGraphique} d
 * @returns {boolean}
 */
CDroiteAncetre.prototype.contientParDefinition = function (d) {
  return false
}

/**
 * Fonction utilisée pour générer un nom pour le protocole de la figure
 * @returns {string}Le nom généré
 */
CDroiteAncetre.prototype.genereNom = function (ch) {
  if (arguments.length === 0) return this.listeProprietaire.genereNomPourPointOuDroite('d', true)
  CDroiteAncetre.ind++
  return ch + CDroiteAncetre.ind
}

CDroiteAncetre.prototype.coincideAvec = function (p) {
  if (p.getNature() !== NatObj.NDroite) return false
  const vec = new Vect(p.point_x, p.point_y, this.point_x, this.point_y)
  return (colineaires(this.vect, p.vect) && colineaires(vec, this.vect))
}

CDroiteAncetre.prototype.tikz = function (dimf, nomaff, coefmult, bu) {
  if (this.horsFenetre) return '' // Par exemple pour un segment aux extrémités confondues
  const list = this.listeProprietaire
  let x1 = list.tikzXcoord(this.xext1, dimf, bu)
  let y1 = list.tikzYcoord(this.yext1, dimf, bu)
  const x2 = list.tikzXcoord(this.xext2, dimf, bu)
  const y2 = list.tikzYcoord(this.yext2, dimf, bu)
  let ch = '\\draw ' + this.tikzLineStyle(dimf, coefmult) + '(' + chaineNombre(x1, 3) + ',' + chaineNombre(y1, 3) + ')--' +
    '(' + chaineNombre(x2, 3) + ',' + chaineNombre(y2, 3) + ');'
  if (nomaff) {
    if (this.nomMasque || this.nom === '') return ch
    ch = ch + '\n'
    const style = 'below right,' + this.tikzCouleur() + ','
    x1 = list.tikzXcoord(this.xNom + this.decX - 7, dimf, bu)
    y1 = list.tikzYcoord(this.yNom + this.decY + 4, dimf, bu)
    ch += '\\node at ' + '(' + chaineNombre(x1, 3) + ', ' + chaineNombre(y1, 3) +
      ') [align=left,inner sep = 0pt, outer sep = 0pt,' + style +
      'font= \\sf ' + this.tikzFont(dimf, this.tailleNom, coefmult, bu) + '] {' + this.tikzNom() + '};'
  }
  return ch
}