[AI CC-CC2021] Скрипт Fit to Select Art + 5 мм по периметру

Drawer

Участник
Сообщения
1 817
Реакции
799
1. Есть один объект или группа объектов размером 40,6 mm x 40,6 mm.
2. Задаем артбоард по размерам объекта/ов. В нашем случае это будет 40,6 mm x 40,6 mm.
3. Расширяем артбоард во все стороны на 5 mm, будет 50,6 mm x 50,6 mm.
4. Округляем размеры артбоард до целого значения, будет 51 mm x 51 mm.
Объекты остаются по центру арбоарда. Если замерить расстояние от края объекта, до края артбоарда, со всех сторон будет по 5,2 mm.
JavaScript:
doc = app.activeDocument;
var sel = doc.selection;
indent = 5;
app.executeMenuCommand('selectallinartboard');
app.executeMenuCommand('Fit Artboard to selected Art');
var gb = doc.artboards[0].artboardRect;
var aW = toMM(gb[2]-gb[0]);
var aH = toMM(gb[1]-gb[3]);
var aWInt = Math.floor(toMM(gb[2]-gb[0]));
var aHInt = Math.floor(toMM(gb[1]-gb[3]));
if (aW != aWInt) var indentW = indent+1;
if (aH != aHInt) var indentH = indent+1;
var aWNew = aWInt+indentW*2;
var aHNew = aHInt+indentH*2;
var dW = toPoint((aWNew-aW)/2);
var dH = toPoint((aHNew-aH)/2);
gbNew = [gb[0]-dW, gb[1]+dH, gb[2]+dW, gb[3]-dH]
doc.artboards[0].artboardRect = gbNew;
doc.selection = false;
for (i=0; i<sel.length; i++) {sel[i].selected = true;};

function toMM(point){
    return point * 0.35277777777778;
}
function toPoint(mm){
    return mm / 0.35277777777778;
}
 
Последнее редактирование:
  • Спасибо
Реакции: netik и Chiga

Chiga

15 лет на форуме
Сообщения
802
Реакции
519
JavaScript:
doc = app.activeDocument;
var sel = doc.selection;
indent = 5;
app.executeMenuCommand('selectallinartboard');
app.executeMenuCommand('Fit Artboard to selected Art');
var gb = doc.artboards[0].artboardRect;
var aW = toMM(gb[2]-gb[0]);
var aH = toMM(gb[1]-gb[3]);
var aWInt = Math.floor(toMM(gb[2]-gb[0]));
var aHInt = Math.floor(toMM(gb[1]-gb[3]));
if (aW != aWInt) var indentW = indent+1;
if (aH != aHInt) var indentH = indent+1;
var aWNew = aWInt+indentW*2;
var aHNew = aHInt+indentH*2;
var dW = toPoint((aWNew-aW)/2);
var dH = toPoint((aHNew-aH)/2);
gbNew = [gb[0]-dW, gb[1]+dH, gb[2]+dW, gb[3]-dH]
doc.artboards[0].artboardRect = gbNew;
doc.selection = false;
for (i=0; i<sel.length; i++) {sel[i].selected = true;};

function toMM(point){
    return point * 0.35277777777778;
}
function toPoint(mm){
    return mm / 0.35277777777778;
}
Код:
doc = app.activeDocument;
indent = 5;
var rect = doc.visibleBounds;

var width = Math.ceil(toMM(rect[2] - rect[0])) + indent * 2;
var heght = Math.ceil(toMM(rect[1] - rect[3])) + indent * 2;

var x = toMM(rect[0]) - (width - toMM(rect[2] - rect[0])) / 2;
var y = toMM(rect[1]) + (heght - toMM(rect[1] - rect[3])) / 2;

rect[0] = toPoint(x);
rect[1] = toPoint(y);
rect[2] = toPoint(x + width);
rect[3] = toPoint( y - heght);

doc.artboards[0].artboardRect = rect;

function toMM(point){
    return point * 0.35277777777778;
}
function toPoint(mm){
    return mm / 0.35277777777778;
}
 
  • Спасибо
Реакции: netik и Drawer

Drawer

Участник
Сообщения
1 817
Реакции
799
Код:
doc = app.activeDocument;
indent = 5;
var rect = doc.visibleBounds;

var width = Math.ceil(toMM(rect[2] - rect[0])) + indent * 2;
var heght = Math.ceil(toMM(rect[1] - rect[3])) + indent * 2;

var x = toMM(rect[0]) - (width - toMM(rect[2] - rect[0])) / 2;
var y = toMM(rect[1]) + (heght - toMM(rect[1] - rect[3])) / 2;

rect[0] = toPoint(x);
rect[1] = toPoint(y);
rect[2] = toPoint(x + width);
rect[3] = toPoint( y - heght);

doc.artboards[0].artboardRect = rect;

function toMM(point){
    return point * 0.35277777777778;
}
function toPoint(mm){
    return mm / 0.35277777777778;
}
На входе, файл с одним артбоардом и неким количеством размещенных на нем объектов.
'hz''))'
Ну и маски таки '))'
 
Последнее редактирование:
  • Спасибо
Реакции: Chiga

Chiga

15 лет на форуме
Сообщения
802
Реакции
519
Ты победил )
1689005633767.png
 

Drawer

Участник
Сообщения
1 817
Реакции
799
:)
Да, так кошернее будет :)
JavaScript:
doc = app.activeDocument;
var sel = doc.selection;
indent = 5;
var abIndex = doc.artboards.getActiveArtboardIndex();
doc.selectObjectsOnActiveArtboard();
doc.fitArtboardToSelectedArt(abIndex);
var gb = doc.artboards[abIndex].artboardRect;
var aW = toMM(gb[2]-gb[0]);
var aH = toMM(gb[1]-gb[3]);
var aWInt = Math.ceil(toMM(gb[2]-gb[0]));
var aHInt = Math.ceil(toMM(gb[1]-gb[3]));
var aWNew = aWInt+indent*2;
var aHNew = aHInt+indent*2;
var dW = toPoint((aWNew-aW)/2);
var dH = toPoint((aHNew-aH)/2);
var gbNew = [gb[0]-dW, gb[1]+dH, gb[2]+dW, gb[3]-dH];
doc.artboards[abIndex].artboardRect = gbNew;
doc.selection = false;
for (i=0; i<sel.length; i++) {sel[i].selected = true;};

Не по теме:
Да еще и с несколькими артбордами можно работать :) Но с "оглядкой" ...
 
Последнее редактирование:
  • Спасибо
Реакции: almastu, netik и Chiga

Drawer

Участник
Сообщения
1 817
Реакции
799
Последнее редактирование:
  • Спасибо
Реакции: Chiga

svlasov

Администратор
20 лет на форуме
Сообщения
2 227
Реакции
4 933
Я сохраню этот скриншот и буду показывать его тем, кто спрашивает, почему на форуме такое короткое время доступно для редактирования постов :)

1689010444508.png
 

Drawer

Участник
Сообщения
1 817
Реакции
799

Не по теме:

почему на форуме такое короткое время доступно для редактирования постов
Предлагаю вообще отменить такую возможность:) Будем как в старые добрые следующим постом писать:
*Если был выделен объект за границей артборда = Если был выделен какой-то объект
P.S. А в моем случае это десятки раз!
'))'

 
Последнее редактирование:

qsedftghk

фея
15 лет на форуме
Сообщения
2 032
Реакции
1 198
1689018098153.png
 

almastu

15 лет на форуме
Сообщения
535
Реакции
90

qsedftghk

фея
15 лет на форуме
Сообщения
2 032
Реакции
1 198
1689019244735.png
 

netik

Unregistered User
Топикстартер
20 лет на форуме
Сообщения
348
Реакции
111
Была задача, подгонять размеры артбоарда до целого значения. Поэтому 5 мм будут гулять.