Overblog
Editer la page Suivre ce blog Administration + Créer mon blog
/ / /































La petite image en haut a gauche montre les lattes de départ: bien alignées et de meme taille.

L'image du bas est produite par le script: 3 rangées de 30 lattes chacun.


/************************************************************************
   Parquet aleatoire
 ************************************************************************
 On part d'un ensemble de lattes de parquet disposees verticalement.
 Chaque latte doit etre dans un calque different de nom : "Ln", n=1..N
 Les lattes sont les unes a cote des autres (c'est plus simple. Sinon on
 peut retrouver leurs coordonnees par .bounds).
 Chaque latte doit avoir la meme largeur et la meme hauteur (c'est plus
 simple, sinon on peut les adapter par .resize).
 Le resultat est produit dans le nouveau calque "Parquet".
 ************************************************************************
 17/08/2009 V1r01 Habaki: Creation
 ************************************************************************/
var Doc = app.activeDocument;
var RulerUnits = app.preferences.rulerunits;
app.preferences.rulerunits = Units.PIXELS;

/*--------------------------------------------------*
                 Parametres
 *--------------------------------------------------*/
  var LName = "L";  // Prefixe des noms des calques de lattes
  var LNb    = 9;  // Nombre de lattes disponibles
  var FCols  = 30;  // Nb de colonnes du parquet
  var FRows  = 3;  // Nb de rangees
/*--------------------------------------------------*/
try{
  var LHeight;   // Hauteur des lattes
  var LWidth;   // Largeur des lattes
  var ColY;   // Deplacement Y des colonnes
  var FL, LL0, LL;  // layers
  var LNum, LNumLast;
  var col,row;
  var Coord;
 
  // Lecture dimensions de la latte 1
  // Coordonnees : TopLeftX,TopLeftY,BottomRightX,BottomRightY
  Coord = Doc.artLayers.getByName(LName + 1).bounds;
  LHeight = Coord[3] - Coord[1];
  LWidth  = Coord[2] - Coord[0];
 
  // Calque resultat
  FL = Doc.artLayers.add();
  FL.name = "Parquet";
  Doc.activeLayer = FL;
 
  // Lattes de la colonne precedente
  // On veut eviter de juxtaposer deux fois la meme
  LNumLast = new Array();
  for (row=0; row < FRows; row++) LNumLast[row] = 0;
 
  // Les colonnes
  for (col=0; col < FCols; col++) {
    ColY = Math.floor(Math.random() * LHeight /2);
    ColY += LHeight + 20; // Creer le plancher 20 pixels sous les lattes
   
    // Les rangees d'une colonne
    for (row=0; row < FRows; row++) {
      do {
        // Tirage d'une latte
        LNum = Math.floor(Math.random()*0.999*LNb)+1;
      } while (LNumLast[row] == LNum); // Pas deux fois de suite la meme
      LNumLast[row] = LNum;
     
      // La latte
      LL0 = Doc.artLayers.getByName(LName + LNum);
     
      LL = LL0.duplicate();
      // Deplace
      LL.translate((col - LNum +1) * LWidth, ColY + row * LHeight);
      // Retourne
      if (Math.random() >= 0.5) LL.rotate(180, AnchorPosition.MIDDLECENTER);
     
      // Fusionne au resultat
      LL.move(FL, ElementPlacement.PLACEBEFORE);
      LL.merge();
    } // for
  } // for

}catch(ex){
  alert(ex.message);
}

Partager cette page
Repost0
Published by Habaki - dans Scripts

Catégories