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);
}