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”