Код: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 - будет обрезать с учетом
