Render.ru

Корректное выравнивание шрифтов (и их resize)

#1
Меня всегда бесило что выровнять текстовой объект через Align невозможно - текст выравнивается не по своему начертанию, а по всяким-там линиям выносных элементов, границам текстового блока (бывает что это не нужно) и прочим невидимым деталям. По тем же причинам было невозможно и корректно изменять размеры текстового объекта. Для того, шо б боле не волноваться по этому поводу я написал такие скрипты
1) Align текстового объекта по левому краю
2) Align текстового объекта по правому краю
3) Align текстового объекта по верху
4) Align текстового объекта по низу
5) Align текстового объекта по горизонтальному центру
6) Align текстового объекта по горизонтальному центру
7) Пропорциональное изменение размера текстового объекта по ширине
8) Пропорциональное изменение размера текстового объекта по высоте

Во всех этих скриптах объектом по которому равняются/трансформируются является самый нижний (по глубине) из выделенных объектов. Итак:

//Align текстового объекта по левому краю
mySelection = activeDocument.selection;
if (mySelection.length>0){
if (mySelection instanceof Array){
goal=mySelection[mySelection.length-1];
for (i=0; i<(mySelection.length-1); i++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=outline.position[0]-goal.position[0];
outline.remove();
obj.position=Array((obj.position[0]-dist),(obj.position[1]))
}else{
obj.position=Array((goal.position[0]),(obj.position[1]));
}
}
}
}else{}


//Align текстового объекта по правому краю
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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=(outline.position[0]+outline.width)-rightPoint;
outline.remove();
obj.position=Array((obj.position[0]-dist),(obj.position[1]))
}else{
obj.position=Array((rightPoint-obj.width),(obj.position[1]));
}
}
}
}else{}


//Align текстового объекта по верху
mySelection = activeDocument.selection;
if (mySelection.length>0){
if (mySelection instanceof Array){
goal=mySelection[mySelection.length-1];
for (i=0; i<(mySelection.length-1); i++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=outline.position[1]-goal.position[1];
outline.remove();
obj.position=Array((obj.position[0]),(obj.position[1]-dist))
}else{
obj.position=Array((obj.position[0]),(goal.position[1]));
}
}
}
}else{}


//Align текстового объекта по низу
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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=(outline.position[1]-outline.height)-bottomPoint;
outline.remove();
obj.position=Array((obj.position[0]),(obj.position[1]-dist))
}else{
obj.position=Array((obj.position[0]),(bottomPoint+obj.height));
}
}
}
}else{}


//Align текстового объекта по горизонтальному центру
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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=(outline.position[0]+outline.width/2)-centerPoint;
outline.remove();
obj.position=Array((obj.position[0]-dist),(obj.position[1]))
}else{
obj.position=Array((centerPoint-(obj.width/2)),(obj.position[1]));
}
}
}
}else{}


//Align текстового объекта по горизонтальному центру
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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
dist=(outline.position[1]-outline.height/2)-centerPoint;
outline.remove();
obj.position=Array((obj.position[0]),(obj.position[1]-dist))
}else{
obj.position=Array((obj.position[0]),(centerPoint+(obj.height/2)));
}
}
}
}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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
ratio=100/(outline.width/goal.width);
outline.remove();
}else{
ratio=100/(obj.width/goal.width);
}
obj.resize(ratio,ratio,true,true,true,true,ratio)
}
}
}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++){
obj=mySelection;
if(obj.typename=='TextArtItem'){
outl=obj.duplicate();
outline=outl.createOutline();
ratio=100/(outline.height/goal.height);
outline.remove();
}else{
ratio=100/(obj.height/goal.height);
}
obj.resize(ratio,ratio,true,true,true,true,ratio)
}
}
}else{}
 
Сверху