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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
прежде чем вдаваться в детали, обратите внимание на простой факт - у pageItem нет свойства position. у textPath оно есть, но так сравнивать довольно странно, перепишите через поэлементное сравнение

а по уму конечно надо смотреть geometricBounds, и проверять - попадают они в нужный диапазон или нет, либо сравнивать с образцом
 
Последнее редактирование:
  • Спасибо
Реакции: Drawer

almastu

15 лет на форуме
Сообщения
535
Реакции
90
исходно было:
...текстовые поля, стоящие на одном и том же месте, которые необходимо удалить...
но вы конечно правы в том, что надо искать не по совпадению координат, а по разнице соответствующих величин, не превышающей разумного допуска. Ну и не pageItem а лучше textFameItem тогда уж.
И еще тут запутка похоже:
1652451052602.png
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Посмотреть вложение 151730
Но в адобовском интерпретаторе может быть иначе. Да и не кузяво так делать, конечно.
Сейчас проверил - у меня на телефоне и со степенями десятки работает, я слышал, они как то смухлевали подгонку.
Другое дело, что у топикстартера совсем иного рода проблема - он сравнивает с округленным до второго знака значением, что уж никак не допустимо. Правильно делать так: if (Math.abs(variable-value)<delta) ...
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
он сравнивает с округленным до второго знака значением

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

x==(z,y)

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


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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
а так вообще можно?

x==(z,y)

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


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

3) position совсем не в тему
 

Drawer

Участник
Сообщения
1 755
Реакции
775
Уже не помню какого рожна, но делал подобное в прошлом году.
Нужно нарисовать и выделить прямоугольник внутри которого помещается объект на первом артборде. После запуска скрипта объекты попадающие под это условие на всех артбордах будут выделены. Скрипт не доделан, забросил на самом начале, возможны всякого рода неожиданности :)
Код:
#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
}
}
Если известно, что размеры и координаты объекта на всех артбордах идентичны, можно просто выделить объект на первом артборде, рамочку рисовать не обязательно.
 
Последнее редактирование: