Код:function GetBounds() { if (bnd[0]>app.selection[i].geometricBounds[0]) bnd[0]=app.selection[i].geometricBounds[0]; if (bnd[1]<app.selection[i].geometricBounds[1]) bnd[1]=app.selection[i].geometricBounds[1]; if (bnd[2]<app.selection[i].geometricBounds[2]) bnd[2]=app.selection[i].geometricBounds[2]; if (bnd[3]>app.selection[i].geometricBounds[3]) bnd[3]=app.selection[i].geometricBounds[3]; }
{
bnd[0] = Math.min(bnd[0], app.selection[i].geometricBounds[0]);
bnd[1] = Math.min(bnd[1], app.selection[i].geometricBounds[1]);
bnd[2] = Math.max(bnd[2], app.selection[i].geometricBounds[2]);
bnd[3] = Math.max(bnd[3], app.selection[i].geometricBounds[3]);
}
Это как раз фильтруетсяНо это при выделении вертикальной (или горизонтальной) прямой линии.
function GetBounds()
{
var bnd=app.selection[0].geometricBounds;
for (var i=1;i<app.selection.length;i++)
{
if (bnd[0]>app.selection[i].geometricBounds[0]) bnd[0]=app.selection[i].geometricBounds[0];
if (bnd[1]<app.selection[i].geometricBounds[1]) bnd[1]=app.selection[i].geometricBounds[1];
if (bnd[2]<app.selection[i].geometricBounds[2]) bnd[2]=app.selection[i].geometricBounds[2];
if (bnd[3]>app.selection[i].geometricBounds[3]) bnd[3]=app.selection[i].geometricBounds[3];
}
if (bnd[0]==bnd[2]) bnd[0]-=1;
if (bnd[1]==bnd[3]) bnd[1]+=1;
return bnd;
}
if (documents.length > 0) {
if (app.selection.length>0)
with (app.activeDocument)
{
artboards[artboards.getActiveArtboardIndex()].artboardRect=GetBounds();
}
}
МедленнееНо, наверное, так быстрее.
Мы же обычно пишем высоконаруженные скрипты, для обработки порядка несколько миллионов выделенных объектов за разМедленнее
Обращение к внешней библиотеке
Ну тут же ж вопрос принципавысоконаруженные скрипты
Короче -- значит, красивее!Ну тут же ж вопрос принципа
Хочешь - попробуй прогони тест скорости Math.min и обычного сравнения
#target indesign
function fakeArray (count) {
var res = [];
while (res.length < count) {
var gb = [
Math.random() * 100,
Math.random() * 100,
Math.random() * 100,
Math.random() * 100,
]
res.push(gb);
}
return res;
}
function sortIF (arr) {
var timer = $.hiresTimer;
var res = arr[0];
for (var i = 1; i < arr.length; i++) {
if (arr[i][0] < res[0]) { res[0] = arr[i][0] };
if (arr[i][1] < res[1]) { res[1] = arr[i][1] };
if (arr[i][2] > res[2]) { res[2] = arr[i][2] };
if (arr[i][3] > res[3]) { res[3] = arr[i][3] };
}
var timer = $.hiresTimer;
return timer;
}
function sortMath (arr) {
var timer = $.hiresTimer;
var res = arr[0];
for (var i = 1; i < arr.length; i++) {
res[0] = Math.min(res[0], arr[i][0]);
res[1] = Math.min(res[1], arr[i][1]);
res[2] = Math.max(res[2], arr[i][2]);
res[3] = Math.max(res[3], arr[i][3]);
}
var timer = $.hiresTimer;
return timer;
}
function main () {
var gbarr = fakeArray(100000);
$.writeln('IF sorting:' + sortIF(gbarr));
$.writeln('Math sorting:' + sortMath(gbarr));
}
main();
В моем случае на массиве из 100 000 элементов сортировка через Math медленнее аж на 0.64 секунды!
Скрипт обрезает БЕЗ учёта толщины обводки и эффектов (мне обычно как раз так и нужно),
Alt+OAA->S обрезает с учётом толщины обводки и эффектов (для логотипов это предпочтительнее)
Это зло еще не так с большой руки - если в скрипте вместо geometricBounds использовать controlBounds - будет обрезать с учетом