[AI CC-CC2022] Скрипт - удаление объектов в Illustrator

  • Автор темы Автор темы Borikus
  • Дата начала Дата начала
прежде чем вдаваться в детали, обратите внимание на простой факт - у pageItem нет свойства position. у textPath оно есть, но так сравнивать довольно странно, перепишите через поэлементное сравнение

а по уму конечно надо смотреть geometricBounds, и проверять - попадают они в нужный диапазон или нет, либо сравнивать с образцом
 
Последнее редактирование:
  • Спасибо
Реакции: Drawer
исходно было:
...текстовые поля, стоящие на одном и том же месте, которые необходимо удалить...
но вы конечно правы в том, что надо искать не по совпадению координат, а по разнице соответствующих величин, не превышающей разумного допуска. Ну и не pageItem а лучше textFameItem тогда уж.
И еще тут запутка похоже:
1652451052602.png
 
Последнее редактирование:
Посмотреть вложение 151730
Но в адобовском интерпретаторе может быть иначе. Да и не кузяво так делать, конечно.
Сейчас проверил - у меня на телефоне и со степенями десятки работает, я слышал, они как то смухлевали подгонку.
Другое дело, что у топикстартера совсем иного рода проблема - он сравнивает с округленным до второго знака значением, что уж никак не допустимо. Правильно делать так: if (Math.abs(variable-value)<delta) ...
 
он сравнивает с округленным до второго знака значением

а так вообще можно?

x==(z,y)

что это за синтаксис?


position есть все-таки, да, я ошибся. но опять же, это верхний левый край, а вы в интерфейсе смотрите координаты origin для текста. ну а самое веселое - в интерфейсе координаты не совпадают с координатами внутри скрипта, так как y увеличивается снизу вверх, а не сверху вниз.
 
а так вообще можно?

x==(z,y)

что это за синтаксис?


position есть все-таки, да, я ошибся. но опять же, это верхний левый край, а вы в интерфейсе смотрите координаты origin для текста. ну а самое веселое - в интерфейсе координаты не совпадают с координатами внутри скрипта, так как y увеличивается снизу вверх, а не сверху вниз.
Ты совсем упоротый вариант взял и не прочитал что я сказал по этому поводу
Вы, наверное, не поняли что я вам сказал?

3) position совсем не в тему
 
Уже не помню какого рожна, но делал подобное в прошлом году.
Нужно нарисовать и выделить прямоугольник внутри которого помещается объект на первом артборде. После запуска скрипта объекты попадающие под это условие на всех артбордах будут выделены. Скрипт не доделан, забросил на самом начале, возможны всякого рода неожиданности :)
Код:
#target illustrator
if (app.documents.length !== 0) {
    var doc = app.activeDocument;
    if (doc.selection.length = 1) {
        $.hiresTimer;
        var d = 1      
        sr = doc.selection[0]
        sGB = sr.geometricBounds;
        var selAreaGB = new Array();
        var sel = new Array()
        cab = doc.artboards[doc.artboards.getActiveArtboardIndex()].artboardRect
        var rGB = getGbAb(cab, sGB)
    for(i=0;i<doc.artboards.length;i++){
        var abb = doc.artboards[i].artboardRect
        selAreaGB[i] = [(abb[0]+rGB[0]), (abb[1]-rGB[1]), (abb[0]+rGB[2]), (abb[1]-rGB[3])];
    }
    sc = 0
    for (p=doc.pageItems.length-1;p>=0;p--) {
        if (diff1(selAreaGB, doc.pageItems[p].geometricBounds)) {
            doc.pageItems[p].selected = true;
        }
    }
    var time = $.hiresTimer/1000000;
    alert (time.toFixed(2) + " seconds")
    }    else {
        alert ("Создайте или выделите прямоугольник внутри которого необходимо выделить объекты")
        };
}

function diff1(sagbArr, curItem) {
    compare = false
    for(i=0;i<selAreaGB.length;i++){
        dGb = [(sagbArr[i][0]-curItem[0]-d), (curItem[1]-sagbArr[i][1]-d), (curItem[2]-sagbArr[i][2]-d), (sagbArr[i][3]-curItem[3]-d)]
        if ((dGb[0]<0)&&(dGb[1]<0)&&(dGb[2]<0)&&(dGb[3]<0)) {
            compare = true
            break;
        }
    }
    return compare
}

function getGbAb(a, o) {
var GbAb = [(o[0]-a[0]), (a[1]-o[1]), (o[2]-a[0]), (a[1]-o[3])]
return GbAb
}

function diff(r, c) {
var dGb = [(r[0]-c[0]-d), (r[1]-c[1]-d), (c[2]-r[2]-d), (c[3]-r[3]-d)]
if ((dGb[0]<0)&&(dGb[1]<0)&&(dGb[2]<0)&&(dGb[3]<0)) {
return true
} else {
return false
}
}
Если известно, что размеры и координаты объекта на всех артбордах идентичны, можно просто выделить объект на первом артборде, рамочку рисовать не обязательно.
 
Последнее редактирование: