1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Несколько скриптов

Тема в разделе "Adobe Illustrator", создана пользователем -, 2 июн 2003.

  1. Guest

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

    Примечание: во всех скриптах будет использоваться объект-ОБРАЗЕЦ, на основе которого будут выполняться трансформации или выравнивание. Этот объект должен находиться на палитре слоёв ниже всех остальных выделенных.

    _________________________________________
    1. Подгон ширины объектов под ОБРАЗЕЦ
    // Ширина всех выделенных объектов (можно даже выделить отдельные
    // внутри групп или Compound Path) подгоняется под ОБРАЗЕЦ.

    mySelection = activeDocument.selection;
    if (mySelection instanceof Array) {
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    ratio = 100/(mySelection.width/goal.width);
    mySelection.resize(ratio,100)}}

    _________________________________________
    2. Подгон высоты объектов под ОБРАЗЕЦ
    // Высота всех выделенных объектов (так же можно выделить отдельные
    // внутри групп или Compound Path) подгоняется под ОБРАЗЕЦ.

    mySelection = activeDocument.selection;
    if (mySelection instanceof Array) {
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    ratio = 100/(mySelection.height/goal.height);
    mySelection.resize(100,ratio)}}

    _________________________________________
    3. Пропорциональная трансформация по ширине ОБРАЗЦА
    // Высота и ширина выделенных (можно выделить
    // по-отдельности, и внутри групп и Compound Path)
    // объектов пропорционально изменяется по ширине ОБРАЗЦА.
    // Так же, масштабируются и Scale, заливки и эффекты

    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    ratio = 100/(mySelection.width/goal.width);
    mySelection.resize(ratio,ratio,true,true,true,true,ratio)}}

    _________________________________________
    4. Пропорциональная трансформация по высоте ОБРАЗЦА
    // Высота и ширина выделенных (можно выделить
    // по-отдельности, и внутри групп и Compound Path)
    // объектов пропорционально изменяется по высоте ОБРАЗЦА.
    // Так же, масштабируются и Scale, заливки и эффекты

    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    ratio = 100/(mySelection.height/goal.height);
    mySelection.resize(ratio,ratio,true,true,true,true,ratio)}}


    Дальше идёт то, чего лично мне часто не хватало - выравнивания, работающие и внутри групп (и Compound Path). Примечание: если выделены все объекты в группе, то объектом считается вся группа, она и выравнивается.
    _________________________________________
    //По левому краю
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.left=goal.left;}}

    _________________________________________
    //По правому краю
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    rightPoint=goal.left+goal.width;
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.left=rightPoint-mySelection.width}}

    _________________________________________
    //По центру
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    centerPoint=goal.left+(goal.width/2);
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.left=centerPoint-(mySelection.width/2)}}

    _________________________________________
    //По верху
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.top=goal.top}}

    _________________________________________
    //По низу
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    bottomPoint=goal.top-goal.height;
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.top=bottomPoint+mySelection.height}}

    _________________________________________
    //По вертикальному центру
    mySelection = activeDocument.selection;
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    centerPoint=goal.top-(goal.top/2);
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.top=centerPoint+(mySelection.top/2)}}

    При желании скрипты можно поместить в Illustrator 10\Presets\Scripts\ и, создав макрос, вызывать через горячие клавиши. (если кому-то это, конечно, надо)
     
  2. Guest

    Да, и ещё, если вы ничего не выделили и вызвали скрипт, то, само-собой, выскочит предупреждение. Если Вас это раздражает, и Вы хотите, что б комп разговаривал с вами по-человечески, то на вторую строчку скрипта впишите:
    if (mySelection.length>0){
    а в конец скрипта вставьте:
    }else{ alert("Nothing selected!")}

    Вот что получилось из первого скрипта:
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array) {
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    ratio = 100/(mySelection.width/goal.width);
    mySelection.resize(ratio,100)}}
    }else{alert("Nothing selected!")}
     
  3. Guest

    Вах, прошу прощения, выравния нельзя было делать через "left" и "top"
    Все выравнивания исправил, и теперь всё работает корректно. (блин, нашёл себе занятие на ночь)
    ___________________
    По левому краю
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((goal.position[0]),(mySelection.position[1]));}}}else{}

    ___________________
    По правому краю
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    rightPoint=goal.position[0]+goal.width;
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((rightPoint-mySelection.width),(mySelection.position[1]));}}}else{}

    ___________________
    По центру
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    centerPoint=goal.position[0]+(goal.width/2);
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((centerPoint-(mySelection.width/2)),(mySelection.position[1]));}}}else{}

    ___________________
    По верху
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((mySelection.position[0]),(goal.position[1]));}}}else{}

    ___________________
    По низу
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    bottomPoint=goal.position[1]-goal.height;
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((mySelection.position[0]),(bottomPoint+mySelection.height));}}}else{}

    ___________________
    По вертикальному центру
    mySelection = activeDocument.selection;
    if (mySelection.length>0){
    if (mySelection instanceof Array){
    goal=mySelection[mySelection.length-1];
    centerPoint=goal.position[1]-(goal.height/2);
    for (i=0; i<(mySelection.length-1); i++){
    mySelection.position=Array((mySelection.position[0]),(centerPoint+(mySelection.height/2)));}}}else{}

    Таким же макаром можно сделать и выравнивание с учётом Stroke, только уж больно редко это бывает нужно
     
  4. Guest

    > только уж больно редко это бывает нужно

    Не так уж и редко. Тем более, Stoke — лишь небольшая часть Appearnce, а оно может сильно отличаться от исходного объекта и формой и размером.

    А скрипты, я так понял, нужно из Блокнота сохранить с расширенем... Каким? JS?
     
  5. Guest

    Да, каждый скрипт в отдельный файл с js-расширением. Сегодня я даже сам (во время работы над достаточно сложным макетом) удивился насколько применимые штуки создал. Задал им всем горячие клавиши. Это ж такой кайф, выполняя выравнивание не думать о том, разгруппированы ли выравниваемые объекты или находятся в разных группах. Теперь к стандартной Align не прикасаюсь.
    Так же, как оказалось, не раз надо было пропорционально подгонять ширину одного объекта под другой.

    Будет ещё свободное время, думаю надо бы сделать штуку, что б одним нажатием клавиши "выдёргивать" конкретный объект из группы, не прибегая к палитре слоёв. Ещё часто приходится делать выравнивание группы не по левому или правому краю, а, допустим, по левому краю какого-то объекта, находящегося в группе (например, работая с "маскированным" растром, часто приходится делать Align для маски, но так, что б и растр перемещался с ней).
     
  6. Guest

    > что б одним нажатием клавиши "выдёргивать" конкретный объект из группы

    Ну, это и так сделать можно. Выделяешь «стрелочкой с плюсиком», Ctrl+X, Ctrl+F
     
  7. Guest

    :) точно! Иной раз до элементарных вещей ТАКИМИ обходными путями идёшь... :)
     
  8. Guest

    у меня из file -> scrits вообще ничего не выпадает. курсор навожу - и ничего. что делать?
     
  9. Guest

    Dar, а у тебя десятка? Если да, то не понимаю почему так.
    И ещё, т.к. мне по работе в основном приходится делать макеты коробок, то, столкнувшись с проблемой каждый раз вычерчивать-размечать поле, и выставлять кропы, я решил всё это дело переложить на скрипты. Теперь нужно только указать L,W,H, и всё, одним нажатием вся разметка готова.
    Написал их для тех видов раскладок, с которыми сталкиваюсь. Если есть на форуме люди, которым тоже приходится работать с коробками, могу эти скрипты выслать (выложить).
     
  10. Guest

    Muchacho, да, 10.0.3.
    То же самое с manage workgroup. А убивать аипрефс ой как не хочется... Тем более не зная, поможет ли.
     
  11. Guest

    > А убивать аипрефс ой как не хочется

    Может оказаться достаточным убийство Plug-in Cache.ARTX
    Он лежит рядом с AIPrefs.
     
  12. Guest

    >Задал им всем горячие клавиши...

    А можно поподробнее, пожалста =) Как?
     
  13. Guest

    1. Помещаешь в Illustrator 10\Presets\Scripts\ (там можно ещё папки создавать, тогда потом в меню "Scripts" появятся подменю)
    2. Перезагружаешь илл, и видишь, что скрипты появились в меню "Scripts"
    3. Создаёшь макрос, в который добавляешь нужный скрипт (через опцию в палитре "Actions", под названием "Insert Menu Item"). При создании макроса назначаешь ему горячую клавишу.
     
  14. Guest

    а я то уже подумал что у тебя в иле хоткеи настраиваются! ну подождем 11ый. сколько у адобов не было такой возможности, в 10ке она тоже получилась только продекларированной, то им мона толька кустомизацию хоткеев добавить и уже пускай 11ая будет))))))))))) шутка канечно, отличная программа иль, но вот уж чего действительно не хватает((((((((
     
  15. Guest

    самое гланое то не написал!))))) агромный сенкс за скрипты! будем попробывать.
     
  16. Guest

    Спасибо за скрипты!
    Выравнивание маски по содержимому делает плагин Stay Put 2.3, он еще много чего делает чего стандартная палитра Align не позволяет.
    >> Если есть на форуме люди, которым тоже приходится работать с коробками
    Есть такие люди, интересно на скрипт посмотреть.
     
  17. Guest

    Они большие, и для разных раскладок разные. Проще на мыло скинуть.

    В нашей конторе сейчас пойдёт очень большая серия коробок для разных товаров, но с одинаковым дизайном. Делаю скрипт, что б весь этот "дизайн" конструировался сам (что-то, типа автовёрстки в Индизайне). Конечно, потом придётся многое подправлять, но процесс ускоряется значительно.
     
  18. Guest

    Скинь хоть один посмотреть насколько это применимо.
    Прямо рисуется такая картина, запустил скрипт и сидишь пьешь кофе (пиво)
    а машина в это время неутомимо генерит варианты разного рода дизайна обалдевшему заказчику ;)
    sergio(sobaka)mail.yourline.ru
     
  19. Guest

    да, и мнебы скриптик на коробки, а то вот тут у нам как раз начались коробки под мороженое, а у меня лично на такие подвиги как скрипты мозгов не хватает))))))
     

Поделиться этой страницей