Render.ru

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

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

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

_________________________________________
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
Да, и ещё, если вы ничего не выделили и вызвали скрипт, то, само-собой, выскочит предупреждение. Если Вас это раздражает, и Вы хотите, что б комп разговаривал с вами по-человечески, то на вторую строчку скрипта впишите:
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
Вах, прошу прощения, выравния нельзя было делать через "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
> только уж больно редко это бывает нужно

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

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

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

Ну, это и так сделать можно. Выделяешь «стрелочкой с плюсиком», Ctrl+X, Ctrl+F
 
#7
:) точно! Иной раз до элементарных вещей ТАКИМИ обходными путями идёшь... :)
 
#8
у меня из file -> scrits вообще ничего не выпадает. курсор навожу - и ничего. что делать?
 
#9
Dar, а у тебя десятка? Если да, то не понимаю почему так.
И ещё, т.к. мне по работе в основном приходится делать макеты коробок, то, столкнувшись с проблемой каждый раз вычерчивать-размечать поле, и выставлять кропы, я решил всё это дело переложить на скрипты. Теперь нужно только указать L,W,H, и всё, одним нажатием вся разметка готова.
Написал их для тех видов раскладок, с которыми сталкиваюсь. Если есть на форуме люди, которым тоже приходится работать с коробками, могу эти скрипты выслать (выложить).
 
#10
Muchacho, да, 10.0.3.
То же самое с manage workgroup. А убивать аипрефс ой как не хочется... Тем более не зная, поможет ли.
 
#11
> А убивать аипрефс ой как не хочется

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

А можно поподробнее, пожалста =) Как?
 
#13
1. Помещаешь в Illustrator 10\Presets\Scripts\ (там можно ещё папки создавать, тогда потом в меню "Scripts" появятся подменю)
2. Перезагружаешь илл, и видишь, что скрипты появились в меню "Scripts"
3. Создаёшь макрос, в который добавляешь нужный скрипт (через опцию в палитре "Actions", под названием "Insert Menu Item"). При создании макроса назначаешь ему горячую клавишу.
 
#14
а я то уже подумал что у тебя в иле хоткеи настраиваются! ну подождем 11ый. сколько у адобов не было такой возможности, в 10ке она тоже получилась только продекларированной, то им мона толька кустомизацию хоткеев добавить и уже пускай 11ая будет))))))))))) шутка канечно, отличная программа иль, но вот уж чего действительно не хватает((((((((
 
#15
самое гланое то не написал!))))) агромный сенкс за скрипты! будем попробывать.
 
#16
Спасибо за скрипты!
Выравнивание маски по содержимому делает плагин Stay Put 2.3, он еще много чего делает чего стандартная палитра Align не позволяет.
>> Если есть на форуме люди, которым тоже приходится работать с коробками
Есть такие люди, интересно на скрипт посмотреть.
 
#17
Они большие, и для разных раскладок разные. Проще на мыло скинуть.

В нашей конторе сейчас пойдёт очень большая серия коробок для разных товаров, но с одинаковым дизайном. Делаю скрипт, что б весь этот "дизайн" конструировался сам (что-то, типа автовёрстки в Индизайне). Конечно, потом придётся многое подправлять, но процесс ускоряется значительно.
 
#18
Скинь хоть один посмотреть насколько это применимо.
Прямо рисуется такая картина, запустил скрипт и сидишь пьешь кофе (пиво)
а машина в это время неутомимо генерит варианты разного рода дизайна обалдевшему заказчику ;)
sergio(sobaka)mail.yourline.ru
 
#19
да, и мнебы скриптик на коробки, а то вот тут у нам как раз начались коробки под мороженое, а у меня лично на такие подвиги как скрипты мозгов не хватает))))))
 
Сверху