Jouons avec les tableaux (Array) dans ExtendScript
September 14, 2024 | Tips | fr | en
IdExtenso embarque un module nommé ArrayAs2D
qui libère l'énergie cachée des opérateurs ExtendScript. Doté de ce jouet, vous pouvez désormais écrire du code qui additionne, multiplie, évalue des points ou des vecteurs en dimension 2. Si par exemple vous développez un script InDesign à base de courbes de Bézier ou travaillant sur des chemins polygonaux, tous les calculs de points, distances, vecteurs normalisés, etc., deviennent prodigieusement compacts…
Pour vous donner un avant-goût du bonheur de travailler avec $$.ArrayAs2D, voici un exemple de code composé au hasard mais parfaitement valide :
// Donné `myPathPoint`, instance qcq de l'objet PathPoint var A = myPathPoint.anchor; // Des points (au pif)... var P = A + [3,5]; var Q = -P + A + [7,8]/3; // ...ou des vecteurs var U = 1.25 * (A - myPathPoint.leftDirection); var V = Q + (myPathPoint.rightDirection - A); if( U > 3 ) // si la norme |U| est plus grande que 3... V += U; else V *= 4;
Chaque fois qu'un Array
se trouve comporter deux coordonnées numériques x,y, il bénéficie d'opérateurs dits surchargés qui donnent sens à l'addition ou à la soustraction, à la multiplication ou division par un scalaire, et ainsi de suite.
Nativement, JavaScript ne saurait pas interpréter le code [3,2] + 5*[6,7]
, mais avec ExtendScript nous pouvons le rendre totalement fonctionnel. Le gain est considérable : pas de variables intermédiaires, pas de calculs dissociés « en x » et « en y » à réconcilier en fin de course dans un nouvel objet.
Si votre projet met en œuvre des opérations vectorielles assez complexes, le fait de condenser les calculs fondamentaux change vraiment la donne. Avec $$.ArrayAs2D, non seulement vous pouvez sommer ou multiplier directement des points et/ou vecteurs, mais de nombreux autres raccourcis sont prêts à l'emploi :
• +[3,4]
retourne la norme du vecteur (c'est-à-dire 5).
• La distance entre deux points P et Q s'écrit simplement P|Q
.
• Si vous voulez faire l'économie de la racine carrée, vous pouvez aussi écrire P^Q
pour obtenir le carré de la distance.
• U>>V
— lisez « U vers V » — renvoie l'angle (signé) entre ces deux vecteurs.
Note. — Mais si le second opérande est un nombre α, alors U>>α
fait tourner le vecteur U de α radians; exemple : [2,3]>>Math.PI
.
• 1/U
renvoie le vecteur normalisé U/|U|, de sorte que nous avons l'égalité 1 == +(1/U)
.
• L'égalité de points (ou vecteurs) est également prise en charge, U==V
, reposant sur un epsilon-machine personnalisable si celui par défaut ne vous convient pas.
Il ne vous reste plus qu'à installer ce petit module (très léger) dans votre script IdExtenso. Il s'active ou se désactive à la demande. Lisez sa notice détaillée et entrez de plain-pied dans une nouvelle… dimension!
→ Module ArrayAs2D (IdExtenso)
→ V. aussi (en anglais) : “Operator Overloading with ExtendScript”