Forums Développement Multimédia

Aller au contenu

- - - - -

Symétrie (horizontale et verticale)

PAO

  • Vous ne pouvez pas répondre à ce sujet
Aucune réponse à ce sujet

#1 elle-ere

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 372 messages

Posté 29 November 2021 - 12:19 PM

Bonjour à tous,
C'est juste pour réveiller un peu le forum...
Script pour Illustrator
Symétries horizontale ou verticale d'un objet,
// centre de symétrie point origine globale
var chemin = [[12,12],[60,60],[70,30]];
var point = [0,0]; // point centre de symétrie

//JavaScript Document for Illustrator
// symetrie-centre04.js
// Symétries horizontale ou verticale d'un objet,
// centre de symétrie point origine globale
// H flip matrix - feel free to change to (100,-100) for vertical flip, etc.
var coulCroix1 = macmjnColor(0,100,100,0);
var coulCroix2 = macmjnColor(100,25,25,0);
var coulPathItem = macmjnColor(0,0,0,100);
var closed = true;
  var docRef = app.activeDocument;
  var chemin = [[12,12],[60,60],[70,30]];
  var point = [0,0]; // point centre de symétrie
          ligne = traceLigne(docRef,chemin,coulPathItem,1,true,"Global");
        // pathItem dans Repère règles globales
          symetrieHorizVert(ligne,point,0,true);
          symetrieHorizVert(ligne,point,1,true);
          symetrieHorizVert(docRef.pathItems[0],point,0,true);
        //Affichage du repère global
          croix(docRef,[0,0],4,60,1.2,coulCroix1,"Repère global");
        // pathItem dans Repère règles plan de travail
          var destination = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
          var source = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
          var point1;
                for (var i = 0; i < chemin.length; i++) {
                  point1 = chemin[i]; // point est un tableau de 2 nombres
                  point1 = docRef.convertCoordinate(point1,source,destination);
                  chemin[i] = point1;
                }
          ligne = traceLigne(docRef,chemin,coulPathItem,1,true,"Plan de travail");
          point = docRef.convertCoordinate(point,source,destination);
          symetrieHorizVert(ligne,point,0,true);
          symetrieHorizVert(ligne,point,1,true);
          symetrieHorizVert(docRef.pathItems[0],point,0,true);
        //Affichage du repère Plan de Travail
          croix(docRef,point,4,50,1.2,coulCroix2,"Repère Plan de Travail")
// -----
function attribus(atObjet,ep,macouleur,p)
{ // propiétés d'un objet PathItem
        with (atObjet) {
          stroked = true;
          filled = false;
          strokeColor = macouleur;
          strokeWidth = ep;
          if (p) strokeDashes = [2, 1.5];
        }
}
// -----
function croix(placeDoc,p,nbSeg,longueur,ep,coulCroix,ident)
{ // crée une croix centrée sur le point de référence p
   var dupObjet;
   var groupCroix = placeDoc.groupItems.add();
   groupCroix.name = ident;
   var seg1 = traceLigne(groupCroix,[p,[p[0]+longueur,p[1]]],coulCroix,ep,false,"seg");
          for (var i = 1; i < nbSeg; i++) {
          dupObjet = seg1.duplicate(groupCroix,ElementPlacement.PLACEATEND);
          dupObjet.rotate(360*i/nbSeg,undefined,undefined,undefined,undefined,Transformation.LEFT);
          }
        return groupCroix;
}
// -----
function macmjnColor(c,m,j,n)
{ // cree une nouvelle couleur CMJN
  var cmykColor = new CMYKColor();
  cmykColor.cyan = c;
  cmykColor.magenta = m;
  cmykColor.yellow = j;
  cmykColor.black = n;
  return cmykColor;
}
// -----
function traceLigne (placeDoc,tableau,maCouleur,ep,closed,ident)
{ // trace une suite de segments de droite
        var ligne = placeDoc.pathItems.add();
                ligne.name = ident;
                ligne.setEntirePath(tableau);
                attribus(ligne,ep,maCouleur,undefined);
                if (closed) ligne.closed = true;
        return ligne;
}
// -----
function symetrieHorizVert(obj,p,i,duplique)
{ // Symétrie H ou V de obj centre de symétrie point p, i = 0 pour H et 1 pour V
var m, pos, xy, LH, XY0, dec, dxy, dup;
        m = i ? app.getScaleMatrix(100,-100) : app.getScaleMatrix(-100,100);
        pos = obj.position;
          xy = pos[i]; // abcisse ou ordonnée du point supérieur gauche de obj
          XY0 = p[i]; // abcisse ou ordonnée du centre de symétrie
          LH = i ? obj.height : obj.width;
          if (XY0 <= xy) {
                dec = i ? xy-(XY0+LH) : xy-XY0;
                dxy = -(LH+2*dec);
          }
                else {
                dec = i ? XY0-xy : XY0-(xy+LH);
                dxy = LH+2*dec;
                }
          dup = duplique ? obj.duplicate(docRef) : obj;
          dup.transform(m); //for each dup apply the flip matrix
          if (!i) {dup.translate(dxy,0);}
                else {dup.translate(0,dxy);}
}
 
René



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)