Bonjour, Je vous donne un de mes premiers scripts (du temps de la version CS2) qui pourra certainement vous satisfaire. /*bd_bordure_selection.js
Autor Landry René
Trace le contour de la sélection (voir variable typeObjet)
sous forme d'un rectangle qui aura pour dimensions les limites de la sélection,
les couleurs fond et contour sont fixées aux lignes 20 et 21
avec choix de l'un des 3 modes pour ces limites :
V pour visibleBounds incluant le contour visible (plus performent que C))
C pour controlBounds epaisseur du contour.incluse.
G pour GeometriquBounds hors épaisseur du contour
Le rectangle sera placé en arrière-plan
Possibilité de saisir un autre décalage supérieur à 0 pour obtenir un cadre,
la valeur par défaut est 0, l'unité est l'unité choisie pour "Générales" (Préférences),
pour forcer l'unité en point, écrire pt après la valeur numérique.
(les objets ne son pas détruits).
le rectangle est placé sous la sélection et est sélectionné
*/
//Initialisation------------------------------
var factOpacite = 50;
var dec = 0;
var epContour = 1;
var mode = "v";
var nomObjet = "entourRect";
var contourColor = macmykColor(0,62.18,94.12,0);
var fondColor = macmykColor(88,77,0,0)
// La chaine typeObjet permet de faire une restriction en supprimant des types d'objets
var typeObjet = "PathItem SymbolItem TextFrame GroupItem PageItem";
typeObjet+=" CompoundPathItem GraphItem MeshItem PlacedItem RasterItem PluginItem";
//---------------------------------------------
if ( app.documents.length > 0 ) {
var docRef = app.activeDocument;
var selectedItems = selection;
var endIndex = selectedItems.length;
if ( endIndex > 0) {
var monUnite, unite;
var p; //compteur
var PlaceLayer, rang = 0;
app.defaultStroked = true;
app.defaultFilled = true;
var p1x = new Array(), p1y = new Array(), p2x = new Array(), p2y = new Array();
var p1xx, p2xx, p1yy, p2yy;
var larg, haut;
uniteMesure();
var reg = new RegExp("^[vcg]{1}$", "gi");
do {
mode = prompt("Mode ( v c g ) ?\r Visible Control Geometric ",mode,"De Ellere");
}
while (!saisie(mode,2) || !mode == null);
if( mode != null && mode != "") { // echap1
mode = mode.toLowerCase();
do
{
dec = prompt("Décalage ? en "+monUnite,dec,"De Ellere");
if (dec != null) {
dec = dec.toLowerCase();
if (dec.indexOf("pt",0) != -1) {
unite = 1;
dec = dec.substring(0,dec.indexOf("pt"));
}
}
}
while (!dec == null || !saisie(dec,1));
if (dec != null && dec != "") { //echap2
dec = parseFloat(dec)*unite;
for (p = 0; p< endIndex; p++) // restriction éventuelle de type d'objet
if (typeObjet.indexOf(selectedItems[p].typename) == -1) selectedItems[p].selected = false;
selectedItems = selection;
endIndex = selectedItems.length;
for (p = 0; p < endIndex; p++) {
var objetSelect = selectedItems[p];
PlaceLayer = objetSelect.parent;
while (PlaceLayer.name != docRef.layers[rang].name) rang++;
switch (mode) {
case "v": var rect = objetSelect.visibleBounds; break;
case "c": var rect = objetSelect.controlBounds; break;
case "g": var rect = objetSelect.geometricBounds;
}
p1x[p]= rect[0]; p1y[p] = rect[1]; p2x[p] = rect[2]; p2y[p] = rect[3];
p1xx = mini(p1x); p2xx = maxi(p2x);
p1yy = maxi(p1y); p2yy = mini(p2y);
}
docRef.selection = false;
larg = (p2xx-p1xx)+dec*2;
haut=(p1yy-p2yy)+dec*2;
var objetRect = docRef.layers[rang].pathItems.rectangle(p1yy+dec,p1xx-dec,larg,haut);
objetRect.selected = true;
objetRect.name = nom(nomObjet);
objetRect.opacity = factOpacite;
objetRect.strokeColor = contourColor;
objetRect.fillColor = fondColor;
arrierePlan(objetRect);
} // echap2
} // echap
}
else alert("Au revoir, une sélection est obligatoire","De Elleere");
}
else alert("Pour l'exécution de ce sript un document doit être ouvert !","Script Alerte de Elleere !");
//------------------------------
function arrierePlan(objet)
{ // Place objet en arrière plan
objet.zOrder(ZOrderMethod.SENDTOBACK);
}
function macmykColor(c,m,j,k)
{ //cree une nouvelle couleur CMJN
var cmykColor = new CMYKColor();
cmykColor.cyan = c;
cmykColor.magenta = m;
cmykColor.yellow = j;
cmykColor.black = k;
return cmykColor;
}
function maxi(tab)
{ // Donne la valeur maximale d'un tableau
for (var i = 0, max = -Infinity; i < tab.length; i++) max = Math.max(tab[i],max);
return max;
}
function mini(tab)
{ // Donne la valeur minimale d'un tableau
for (var i = 0, min = Infinity; i < tab.length; i++) min = Math.min(tab[i],min);
return min;
}
function nom(nomPageItem)
{ // Empeche les noms identiques, retourne le nom suivi d'un indice
var nom, indice = 1;
for (var k = docRef.pageItems.length-1; k >= 0; k--)
{
nom = docRef.pageItems[k].name;
if (nom.indexOf(nomPageItem,0)!= -1) indice++;
}
return nomPageItem+" "+indice;
}
function saisie(chaine,test)
{
if (chaine == null || chaine == "") return true;
switch (test) {
case (1): if (!isNaN(chaine)) if (chaine >= 0) return true; break;
case (2): if (reg.test(chaine)) return true;
}
return false;
}
function uniteMesure()
{
var uniteMesure = new Array();
uniteMesure[0] = new Array("Centimeters","Inches","Millimeters","Picas","Points","Qs","Pixels");
uniteMesure[1] = new Array("cm","in","mm","Pc","Pt","Q","px");
uniteMesure[2] = new Array("28.34645","72","2.834645","12","1","0,709","1");
var regleUniteDoc = "*"+docRef.rulerUnits; // * ex de résultat rulerUnits.Inches
monUnite = regleUniteDoc.substring(regleUniteDoc.lastIndexOf(".")+1);
for (var i = 0; i < uniteMesure[0].length; i++ )
if (uniteMesure[0][i] == monUnite){
monUnite = uniteMesure[1][i];
unite = parseFloat(uniteMesure[2][i]);
continue;
}
} René
... View more