Стереть все направляющие скриптом

  • Автор темы Автор темы qsedftghk
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 036
Реакции
1 200
Чего-то сижу туплю. Поставить guides не проблема, хоть вдоль, хоть поперёк. А вот удалить все сразу.... Может кто подтолкнёт в правильном направлении?

Буквально недавно аналогичные действия делал на vba под корел, ну, дак там ничего сложного и нету, а здесь, чего-то недогоняю...
 
Ответ: Стереть все направляющие скриптом

нет под рукой илла но имхо View > Clear Guides
 
Ответ: Стереть все направляющие скриптом

xm__ сказал(а):
...имхо View > Clear Guides
Шутку оценил.
Вы, думаете, что в разделе "Скрипты и скриптинг для Adobe Illustrator" я буду спрашивать про то, где тыкать мышкой в интерфейсе ила?
Я имел ввиду, как удалить все направляющие скриптом. Причём направляющие могут быть заблокированы или сгруппированы...
 
Ответ: Стереть все направляющие скриптом

я, конечно, не скриптер, но есть подозрение, что придется перебирать все PathItem в документе, проверять их свойство guides на истинность, и при выполнении удалять.
Отдельной коллекции гайдов в объектной модели я не обнаружил.
 
Ответ: Стереть все направляющие скриптом

Я примерно так и делаю (перебором), но видимо ручки кривоваты...
Код:
for (i = 0; i < app.activeDocument.pathItems.length; i++ )
 {
   if (app.activeDocument.pathItems[i].guides) app.activeDocument.pathItems[i].remove();
 }
Почему-то не удаляет одну направляющую. А если направляющие были сгруппированы - то не удаляет две направляющие. =(
 
Ответ: Стереть все направляющие скриптом

Думаю, что так, но еще придется перебрать и TextPath. Не знаю как можно создать Guide, чтобы она была объектом TextPath, но описание свидетельствует о такой возможности.

AirGraph.
 
Ответ: Стереть все направляющие скриптом

qsedftghk сказал(а):
Почему-то не удаляет одну направляющую. А если направляющие были сгруппированы - то не удаляет две направляющие. =(

Ничего странного не вижу. Вы модифицируете length массива pathItems по ходу выполнения цикла, удаляя из него элементы. Именно так и должно выполняться.

AirGraph.
 
Ответ: Стереть все направляющие скриптом

Приветствую, AirGraph.

Проблема в том, что вышеприведенный код не удаляет направляющие до конца. Почти всё время остается одна или две (в случае, когда направляющие сгруппированы) направляющие. Не пойму из-за чего так.

Не очень догоняю, как перебрать TextPath, ох, уж эта объектная модель...
 
Ответ: Стереть все направляющие скриптом

Да нет, дело не в этом. Просто надо сначала отобрать из массива PathItems объекты guides, затолкав их во вновь созданный массив методом push, а потом уже пробежать по этому массиву с хвоста, удаляя все элементы подряд.

С TextPath надо вообще отдельно разбираться. Обратил внимание, что этот объект не имеет метода remove... Класс! Ну это как с объектами типа Brush, ни создать ни удалить из скрипта. Long Live Adobe Illustrator Team! ;-)

AirGraph.
 
Ответ: Стереть все направляющие скриптом

AirGraph сказал(а):
А вот за это памятник тебе при жизни =)
Код:
var mas =[];

for (i = 0; i < app.activeDocument.pathItems.length; i++ )
 {
  if (app.activeDocument.pathItems[i].guides) mas.push(app.activeDocument.pathItems[i]);
 }
 
while (mas.length)
 {
  ree=mas.pop();
  ree.remove();
 }

Вот таким макаром всё заработало. AirGraph - большущее спасибо.
 
Ответ: Стереть все направляющие скриптом

За памятник - спасибо, но твой цикл while будет выполняться дольше моего цикла for, потому как в теле твоего цикла выполняется кроме remove (как и в моем) еще и pop и присвоение, не говоря уже о том, что чисто теоретически for при компиляции быстрее while при прочих равных, как я помню. ;-) Если же продолжать преподавание программирования, то рекомендую, также, более прозрачные идентификаторы, нечто в духе guidesArray, а не mas, что само по себе, конечно же, дело вкуса, как и =[]; а не new Array();

Удачи!

AirGraph.
 
Ответ: Стереть все направляющие скриптом

целиком и полностью соглашусь, просто код сейчас находится в состоянии эксперимента, поэтому особо не парюсь на названия и время исполнения, хотя согласен, нужно как-то привыкать к правильнописанию...
 
Ответ: Стереть все направляющие скриптом

Еще забыли добавить проверку на locked слоя.

Это всё хорошо, но как только объектов будет 10-20К, перебор будет идти долго. Есть еще один способ, выполнить экшн, который удалит направляющие, но и тут не без сюрпризов. Т.к. если направляющих нет, то появится окно, которое не закрыть нормально. В общем, всё через жожоба.
 
Ответ: Стереть все направляющие скриптом

По мне - лишь бы скрипт работал как мне нужно, а уж как долго - это мало волнующий фактор, ибо в это время я могу и что-нибудь другое делать =)

В любом случае, Steve, спасибо за участие.
 
Ответ: Стереть все направляющие скриптом

Скрипт удаляет все guides из активного документа. Все locked layers остаются таковыми. Что-то у меня, правда, на МАС_е, в CS2 app.redraw(); не выполняется, хотя скрипт все исправно удаляет и слов плохих не говорит. Кому интересно - милости прошу.

AirGraph.
 

Вложения

Ответ: Стереть все направляющие скриптом

гы. посмотрю работу мастера =). Спасибо.
 
Ответ: Стереть все направляющие скриптом

Вот от большого безделья доделал проверки на открытые документы, сообщения о количестве удаленных объектов и прочие малозначительные вещи... ;-)

AirGraph.
 

Вложения

Ответ: Стереть все направляющие скриптом

я не успеваю следить за новинками=) =)
 
Ответ: Стереть все направляющие скриптом

Проверил в CS3 - все работает как надо, и без app.redraw(); перерисовывает в лучшем виде результаты удаления линеек. ;-) А в CS2 и на G4 и на G5 и с app.redraw(); и без оного ничего не перерисовывается.
Вывод: кто собрался пользоваться скриптом, прибейте в последнем варианте скрипта строку 30, а именно: app.redraw();

AirGraph.
 
Ответ: Стереть все направляющие скриптом

AirGraph сказал(а):
Проверил в CS3 - все работает как надо
А у меня нет в СS2. Если guide(s) находятся в группе, то не удаляются.
основная проблема в том, что doc.pathItems.length!=сумме pathItems.length со всех слоев. Поэтому, надо отдельно проверить слои на locked, а guides искать в коллекции doc.pathItems, вместо doc.layers.pathItems.
 
Статус
Закрыто для дальнейших ответов.