Bonjour Marcos, Une solution qui semble fonctionner comme tu l'entends. René. // JavaScript Document
// dialog 21 reduced.js
// Sat, 12 August 2023 20:09:03 GMT
// Of lANDRY René - elleere.
// At the suggestion of Marcos Adriano
// INIT -----------------------
var title = "Multiplicar e distribuir";
var monUnit = "cm"; // cm mm in pt ou px
var q = 30; // cantidad // regPref1
var g = 0; // canal/gouttière // regPref2 (Assinar - Autorizado)
// Posición izquierda y superior del primer elemento (x,y)
var posUnit = "mm"; // cm mm in pt ou px
var X0 = 30; // posUnit
var Y0 = -15; // posUnit
// Margem direita
var XD = 20; // posUnit
// Largura da implantação horizontal
var wAb = true; // se true a largura da prancheta ativa
var wCt = 1290; // se wAb == false // posUnit
// Dimensões do objeto selecionado
var geom = false; // visible-bounds flase senão geometric-bounds true
//----------------------------
var unit = new UnitValue(1 + monUnit).as('pt');
var unitPos = new UnitValue(1 + posUnit).as('pt');
var regPref1 = /^[\d]{1,5}$/; // del 1 a 5 Figuras
var regPref2 = /^[0-9.-]{1,15}$/; // del 1 a 15 Figuras
var sel; // Objeto selecionado
// -------
function main() {
if (selection.length > 0) {
var sel = selection[0]; // Objeto selecionado
app.selection = null; // alert(sel)
createDialog(sel);
}
else {
alert("Selecione pelo menos um objeto!.");
}
}
// -------
if (app.documents.length > 0) {main();}
else {alert("Um documento deve ser aberto e um objeto selecionado!");}
// -------
function createDialog(sel) {
var res = "dialog { \
txt: '', \
orientation: 'column', alignChildren: 'left', \
properties:{ closeButton: false }\
addr1: Group { orientation: 'row', \
s: StaticText { text:'cantidad:' ,characters: 15 }, \
e: EditText { preferredSize: [80, 20]}, \
} \
addr2: Group { orientation: 'row', \
s: StaticText { text:'' ,characters: 15 }, \
e: EditText { preferredSize: [80, 20] }, \
} \
v: Group { orientation: 'row', \
s: StaticText { text:'Visualiz', characters:15 }, \
vckbox: Checkbox { text: ' - Click Test -' } \
} \
btnPnl: Group { orientation: 'row', \
okBtn: Button { text:'OK', properties:{ name:'ok' } }, \
cancelBtn: Button { text:'ESC', properties:{name:'cancel' } } \
} \
} \
";
var w = new Window (res);
w.location = [100,300];
w.text = title;
var e = w.addr1.e; e.text = q;
e.active = true;
var b = w.addr2.e; b.text = g;
w.addr2.s.text = "Calha em " + monUnit+ ":";
var vb = w.v.vckbox;
var mode = false;
var er = false; //
e.onChange = function () {
if ( e.text*1 != q) {
er = init(); mode = true;
}
if (vb.value && !er) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
redraw();
e.active = true;
}
} //
b.onChange = function () {
if ( b.text*1 != g) {
er = init(); mode = true;
}
if (vb.value && !er) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
redraw();
e.active = true;
}
} //
vb.onClick = function() {
if ( vb.value ) {
er = init();
if ( !er ) {traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);}
redraw();
e.active = true;
}
else {
refrech(sel);
er = init();
e.active = true;
}
} //
w.btnPnl.okBtn.onClick = function () {
mode = false;
if ( e.text*1 != q || b.text*1 != g ) {
er = init(); mode = true;
}
if (!er) {
if ( !vb.value ) {traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);}
else if ( mode ) {
refrech(sel);
traitement(sel,X0,Y0,XD,q,g,unit,unitPos,geom,wAb,wCt);
}
}
w.close();
} //
w.btnPnl.cancelBtn.onClick = function() {
if ( vb.value == true ) {
refrech(sel);
sel.selected = true;
}
w.close();
} //
function init() {
var er = false;
if (saisie(e.text,regPref1) && e.text != '0' ) {q = e.text*1;}
else {beep(); er = true;}
if (saisie(b.text,regPref2) ) {g = b.text*1;}
else {beep(); er = true;}
return er;
} //
function refrech(sel) {
app.executeMenuCommand("undo");
redraw(); sel.selected = false;
}
w.show();
}
// -------
function prop(Bounds) {return [Bounds[2]-Bounds[0],Bounds[1]-Bounds[3]];}
// -------
function saisie(chaine,reg) {
if (reg.test(chaine)) return true; return false;
}
// -------
function traitement(obj,X0,Y0,XD,q,g,unit,unitPos,geo,wAb,fixe) {
// Define a posição do objtet[0] selecionado em relação à prancheta
g *= unit;
var doc = app.activeDocument,
vBs = !geo ? obj.visibleBounds : obj.geometricBounds,
propi = prop(vBs),
W = propi[0],
H = propi[1],
difw = (W - obj.width)/2, //pt
dec = W + g,
idx = doc.artboards.getActiveArtboardIndex(),
ab = doc.artboards[idx],
rect = ab.artboardRect,
posX = rect[0] + X0 * unitPos + difw,
posY = rect[1] + Y0 * unitPos - difw,
posXAtual = posX,
posYAtual = posY,
wCont = wAb ? rect[2] : rect[0] + fixe;
grd = doc.groupItems.add();
for (var i = 0; i < q; i++) {
if ( (posXAtual + W - difw) > (wCont - XD*unitPos)) {
posXAtual = posX;
posYAtual -= H + g;
}
var novaCopia = obj.duplicate(grd);
novaCopia.position = [posXAtual,posYAtual];
posXAtual += dec;
}
}
// -------
... View more