[AI CC-CC2021] Скрипт Unclipping Mask.


Не по теме:
Скрипт будет крайне не полезен для файлов импортированных из других приложений, например Corel Draw, когда в clipping mask лежит единственный объект - прямоугольник с градиентной заливкой.
Такие ситуации возникают редко, но всё-же хочется увидеть/написать скрипт который: создает массив объектов с clipping mask для работы цикла, и по циклу: если в clipping mask содержится единственный объект, то запоминает его параметры заливки, удаляет его, и к clipping mask, которая уже не clipping mask применяет эту заливку.

 

Не по теме:
Скрипт будет крайне не полезен для файлов импортированных из других приложений, например Corel Draw, когда в clipping mask лежит единственный объект - прямоугольник с градиентной заливкой.
Такие ситуации возникают редко, но всё-же хочется увидеть/написать скрипт который: создает массив объектов с clipping mask для работы цикла, и по циклу: если в clipping mask содержится единственный объект, то запоминает его параметры заливки, удаляет его, и к clipping mask, которая уже не clipping mask применяет эту заливку.

Выложите файл/файлы для тестирования, попробую и такой скрипт написать.
 
Кстати, я решил поменять название скрипта на более соответствующее его функционалу. Возможно зря я это сделал. Скрипт теперь называется Expand Clipping Mask. Хотя ссылка на ресурс осталась прежней и по ней доступно оба варианта с разными названиями, но одинаковым функционалом.
 

Не по теме:
Скрипт будет крайне не полезен для файлов импортированных из других приложений, например Corel Draw, когда в clipping mask лежит единственный объект - прямоугольник с градиентной заливкой.
Такие ситуации возникают редко, но всё-же хочется увидеть/написать скрипт который: создает массив объектов с clipping mask для работы цикла, и по циклу: если в clipping mask содержится единственный объект, то запоминает его параметры заливки, удаляет его, и к clipping mask, которая уже не clipping mask применяет эту заливку.


Ну написал. Правда, с использованием action. В общем, перед запуском скрипта нужно будет создать экшен New Graphic Style в наборе My Actions. В экшене запишите только одно действие, как вы нажимаете на пиктограмму New Graphic Style в палитре Graphic Styles. Затем удалите все стили из этой палитры, оставив только [Default]. Теперь можно приступать. Выделяете все и запускаете Expand Clipping Mask (экс-Unclipping Mask), который разберет "самую большую" маску. Затем выполняете код, приведенный ниже:
JavaScript:
var doc = app.activeDocument;
app.executeMenuCommand('deselectall');
for (var i = 0; i < doc.pageItems.length; i++) {
    if (doc.pageItems[i].typename == 'GroupItem' && doc.pageItems[i].clipped == true) {
        if (doc.pageItems[i].pageItems.length == 2) {
            var clipPath = doc.pageItems[i].pageItems[0];
            var clipContent = doc.pageItems[i].pageItems[1];
            clipContent.selected = true;
            app.doScript('New Graphic Style', 'My Actions');
            doc.graphicStyles[1].applyTo(clipPath);
            doc.graphicStyles[1].remove();
            doc.pageItems[i].selected = true;
            app.executeMenuCommand('releaseMask');
            clipContent.remove();
            app.executeMenuCommand('deselectall');
            }
      }
};
alert ('Is done!');

И будет вам щастье!
 
Последнее редактирование:
Не обработанными остались только маски, содержимое которых больше или меньше одного элемента. Таких масок две штуки. Но это можно и руками сделать. :)
 
Если что, могу в ресурсы потом выложить. Надо только над названием скрипта подумать хорошенько, чтобы не повторять своих собственных ошибок. '))'
 
Не обработанными остались только маски, содержимое которых больше или меньше одного элемента. Таких масок две штуки. Но это можно и руками сделать. :)
Хотя зачем руками - есть же Expand Clipping Mask (экс-Unclipping Mask) ;)
 
Ну написал. Правда, с использованием action. В общем, перед запуском скрипта нужно будет создать экшен New Graphic Style в наборе My Actions. В экшене запишите только одно действие, как вы нажимаете на пиктограмму New Graphic Style в палитре Graphic Styles. Затем удалите все стили из этой палитры, оставив только [Default]. Теперь можно приступать. Выделяете все и запускаете Expand Clipping Mask (экс-Unclipping Mask), который разберет "самую большую" маску. Затем выполняете код, приведенный ниже:
JavaScript:
var doc = app.activeDocument;
app.executeMenuCommand('deselectall');
for (var i = 0; i < doc.pageItems.length; i++) {
    if (doc.pageItems[i].typename == 'GroupItem' && doc.pageItems[i].clipped == true) {
        if (doc.pageItems[i].pageItems.length == 2) {
            var clipPath = doc.pageItems[i].pageItems[0];
            var clipContent = doc.pageItems[i].pageItems[1];
            clipContent.selected = true;
            app.doScript('New Graphic Style', 'My Actions');
            doc.graphicStyles[1].applyTo(clipPath);
            doc.graphicStyles[1].remove();
            doc.pageItems[i].selected = true;
            app.executeMenuCommand('releaseMask');
            clipContent.remove();
            app.executeMenuCommand('deselectall');
            }
      }
};
alert ('Is done!');

И будет вам щастье!
А почему не хотите экшн на лету генерить из скрипта а на пользователей сваливаете? Нехорошо.
 
Я с утюга, погуглите по форуму полно ж примеров приводили.
 
Другой недостаток приведенного выше кода, я вижу в том, что он не универсальный. В нем (скрипте) делается допущение, что контур маски будет первым элементом в группе-маске, а жизни так бывает не всегда. Особенно при импорте из сторонних программ. Это, конечно, тоже поправимо. Если возникнет острая необходимость - могу и это допилить. Заодно и экшн на лету генерить из скрипта можно заколбасить. Мотивации $ только не хватает.
 
Последнее редактирование:
В принципе понятно. Интересно, а где временный файл с экшеном создается в таком случае? var f = new File('~/_ttt.aia');
Что это значит? ~/
Как раз так делать нельзя - на актуальных версиях винды каталог запросто может быть заблокирован для записи. Нельзя и в каталоге скрипта, поскольку очень часто многим хочется скрипт поместить в иллюстраторовская папку, дабы он в файловом меню автоматически отображался, да и со scriptbay проблемы будут. Правильнее всего, наверное, или в папку документа писать (если он сохранен) или во временную папку иллюстратора.
 
Что-то типа того? Или я ошибаюсь, путая temp c backup data? Путь то у разных версий разный...

C:\Users\[username]\AppData\Roaming\Adobe\Adobe Illustrator 19 Settings\en_US\x64\DataRecovery

Может лучше ("правильней") как-то так?

C:\Windows\Temp
 
Последнее редактирование:
Тильда в пути файла означает папку пользователя. Как правило, туда запись открыта.
 
  • Спасибо
Реакции: romaya