Сегодня ночью мне не спалось, и, шо б занять чем-то мозги, а заодно и помочь человечеству, я решил написать несколько скриптов для задач, решение которых стандартными средствами Илла для меня кажется не очень удобным. Сразу говорю, что я не программист, посему не исключаю что что-то можно было бы сделать изящней, так что, если будут замечания или идеи пишите. (не исключаю что что-то подобное уже где-то существует)
Примечание: во всех скриптах будет использоваться объект-ОБРАЗЕЦ, на основе которого будут выполняться трансформации или выравнивание. Этот объект должен находиться на палитре слоёв ниже всех остальных выделенных.
_________________________________________
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\ и, создав макрос, вызывать через горячие клавиши. (если кому-то это, конечно, надо)
Примечание: во всех скриптах будет использоваться объект-ОБРАЗЕЦ, на основе которого будут выполняться трансформации или выравнивание. Этот объект должен находиться на палитре слоёв ниже всех остальных выделенных.
_________________________________________
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\ и, создав макрос, вызывать через горячие клавиши. (если кому-то это, конечно, надо)