Render.ru

Доработанные скрипты

#1
Внёс я некоторые исправления и доработки в такие вот скрипты:
1) Распределение объектов с Clipping Mask, действующее и внутри групп (в том числе разных). Отрегулирована некоторая некорректность в работе с группами.
2) Замена объектов одним, с подстройкой размера. (теперь скрипт работает с учётом Clipping Mask)
3) Замена вставленного растра линкованным. (теперь глубина вложенности в группе не имеет значения)


Итак, вот они:
//Распределение объектов с Clipping Mask по горизонтали
mySelection = activeDocument.selection;
function defWidth(obj){
if(obj.typename=='GroupItem'){
width=0;
if(obj.clipped){
width=obj.pageItems[0].width;
}else if(obj.groupItems.length>0){
width=rightSide(obj)-leftSide(obj);
}else{
width=obj.width;
}
}else{
width=obj.width;
}
return width;
}
function rightSide(obj){
if(obj.typename=='GroupItem'){
right=obj.position[0];
if(obj.clipped){
right=obj.pageItems[0].position[0]+obj.pageItems[0].width;
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
ri=objIn.pageItems[0].position[0]+objIn.pageItems[0].width;
}else{
ri=rightSide(objIn)
}
if(ri>right){
right=ri
}
}
}else{
right=obj.position[0]+obj.width;
}
}else{
right=obj.position[0]+obj.width;
}
return right;
}
function leftSide(obj){
if(obj.typename=='GroupItem'){
left=obj.position[0]+obj.width;
if(obj.clipped){
left=obj.pageItems[0].position[0];
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
le=objIn.pageItems[0].position[0];
}else{
le=leftSide(objIn);
}
if(le<left){
left=le
}
}
}else{
left=obj.position[0];
}
}else{
left=obj.position[0];
}
return left;
}
function positionLeft(a,b){
return leftSide(a)-leftSide(b);
}
function positionRight(a,b){
return rightSide(b)-rightSide(a);
}

if (mySelection.length>0){
if (mySelection instanceof Array){
ObjArr=new Array();
ObjArr=mySelection;
ObjArr.sort(positionRight);
second=ObjArr[0];
ObjArr.sort(positionLeft);
first=ObjArr[0];
len=leftSide(second)-rightSide(first);
SumWidths=0;
for(i=0;i<ObjArr.length;i++){
if((ObjArr!=first)&&(ObjArr!=second)){
SumWidths+=defWidth(ObjArr);
}
}
otr=(len-SumWidths)/(ObjArr.length-1);
for(i=1;i<(ObjArr.length);i++){
if((ObjArr!=first)&&(ObjArr!=second)){
difr=leftSide(ObjArr)-ObjArr.position[0];
q=i
if(ObjArr[i-1]==second){
q--;
}
ObjArr.position=Array((rightSide(ObjArr[q-1])+(otr-difr)),(ObjArr.position[1]));
}
}
}
}



//Распределение объектов с Clipping Mask по вертикали
mySelection = activeDocument.selection;
function defHeight(obj){
if(obj.typename=='GroupItem'){
height=0;
if(obj.clipped){
height=obj.pageItems[0].height;
}else if(obj.groupItems.length>0){
height=topSide(obj)-bottomSide(obj);
}else{
height=obj.height;
}
}else{
height=obj.height;
}
return height;
}
function bottomSide(obj){
if(obj.typename=='GroupItem'){
bottom=obj.position[1];
if(obj.clipped){
bottom=obj.pageItems[0].position[1]-obj.pageItems[0].height;
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
bot=objIn.pageItems[0].position[1]-objIn.pageItems[0].height;
}else{
bot=bottomSide(objIn)
}
if(bot<bottom){
bottom=bot
}
}
}else{
bottom=obj.position[1]-obj.height;
}
}else{
bottom=obj.position[1]-obj.height;
}
return bottom;
}
function topSide(obj){
if(obj.typename=='GroupItem'){
top=obj.position[1]-obj.height;
if(obj.clipped){
top=obj.pageItems[0].position[1];
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
t=objIn.pageItems[0].position[1];
}else{
t=topSide(objIn)
}
if(t>top){
top=t
}
}
}else{
top=obj.position[1];
}
}else{
top=obj.position[1];
}
return top;
}
function positionTop(a,b){
return topSide(b)-topSide(a);
}
function positionBottom(a,b){
return bottomSide(a)-bottomSide(b);
}

if (mySelection.length>0){
if (mySelection instanceof Array){
ObjArr=new Array();
ObjArr=mySelection;
ObjArr.sort(positionBottom);
second=ObjArr[0];
ObjArr.sort(positionTop);
first=ObjArr[0];
len=bottomSide(first)-topSide(second);
SumHeights=0;
for(i=0;i<ObjArr.length;i++){
if((ObjArr!=first)&&(ObjArr!=second)){
SumHeights+=defHeight(ObjArr);
}
}
otr=(len-SumHeights)/(ObjArr.length-1);
for(i=1;i<(ObjArr.length);i++){
if((ObjArr!=first)&&(ObjArr!=second)){
difr=ObjArr.position[1]-topSide(ObjArr);
q=i;
if(ObjArr[i-1]==second){
q--;
}
ObjArr.position=Array((ObjArr.position[0]),(bottomSide(ObjArr[q-1])-(otr-difr)));
}
}
}
}



//Замена объектов одним, с подстройкой размера
function defWidth(obj){
if(obj.typename=='GroupItem'){
width=0;
if(obj.clipped){
width=obj.pageItems[0].width;
}else if(obj.groupItems.length>0){
width=rightSide(obj)-leftSide(obj);
}else{
width=obj.width;
}
}else{
width=obj.width;
}
return width;
}
function rightSide(obj){
if(obj.typename=='GroupItem'){
right=obj.position[0];
if(obj.clipped){
right=obj.pageItems[0].position[0]+obj.pageItems[0].width;
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
ri=objIn.pageItems[0].position[0]+objIn.pageItems[0].width;
}else{
ri=rightSide(objIn)
}
if(ri>right){
right=ri
}
}
}else{
right=obj.position[0]+obj.width;
}
}else{
right=obj.position[0]+obj.width;
}
return right;
}
function leftSide(obj){
if(obj.typename=='GroupItem'){
left=obj.position[0]+obj.width;
if(obj.clipped){
left=obj.pageItems[0].position[0];
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
le=objIn.pageItems[0].position[0];
}else{
le=leftSide(objIn);
}
if(le<left){
left=le
}
}
}else{
left=obj.position[0];
}
}else{
left=obj.position[0];
}
return left;
}
function defHeight(obj){
if(obj.typename=='GroupItem'){
height=0;
if(obj.clipped){
height=obj.pageItems[0].height;
}else if(obj.groupItems.length>0){
height=topSide(obj)-bottomSide(obj);
}else{
height=obj.height;
}
}else{
height=obj.height;
}
return height;
}
function bottomSide(obj){
if(obj.typename=='GroupItem'){
bottom=obj.position[1];
if(obj.clipped){
bottom=obj.pageItems[0].position[1]-obj.pageItems[0].height;
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
bot=objIn.pageItems[0].position[1]-objIn.pageItems[0].height;
}else{
bot=bottomSide(objIn)
}
if(bot<bottom){
bottom=bot
}
}
}else{
bottom=obj.position[1]-obj.height;
}
}else{
bottom=obj.position[1]-obj.height;
}
return bottom;
}
function topSide(obj){
if(obj.typename=='GroupItem'){
top=obj.position[1]-obj.height;
if(obj.clipped){
top=obj.pageItems[0].position[1];
}else if(obj.groupItems.length>0){
for(a=0;a<obj.groupItems.length;a++){
objIn=obj.groupItems[a];
if(objIn.clipped){
t=objIn.pageItems[0].position[1];
}else{
t=topSide(objIn)
}
if(t>top){
top=t
}
}
}else{
top=obj.position[1];
}
}else{
top=obj.position[1];
}
return top;
}
mySelection = activeDocument.selection;
if (mySelection.length>0){
if (mySelection instanceof Array){
goal=mySelection[0];
goalLeft=leftSide(goal);
goalWidth=defWidth(goal);
goalTop=topSide(goal);
goalHeight=defHeight(goal);
for (i=1; i<(mySelection.length); i++){
currItem=mySelection;
currLeft=leftSide(currItem);
currWidth=defWidth(currItem);
currTop=topSide(currItem);
currHeight=defHeight(currItem);
centerPoint=currLeft+(currWidth/2);
centerPointVert=currTop-(currHeight/2);
ratio=100/(goalWidth/currWidth);
ratioV=100/(goalHeight/currHeight);
newItem=goal.duplicate();
difrLeft=goalLeft-newItem.position[0];
difrTop=goalTop-newItem.position[1];
if(ratio<ratioV){
newItem.resize(ratio,ratio,true,true,true,true,ratio)
}else{
newItem.resize(ratioV,ratioV,true,true,true,true,ratioV)
};
difrLeft=leftSide(newItem)-newItem.position[0];
difrTop=newItem.position[1]-topSide(newItem);
newItem.position=Array(((centerPoint-difrLeft)-(defWidth(newItem)/2)),((centerPointVert+difrTop)+(defHeight(newItem)/2)));
newItem.artworkKnockout=currItem.artworkKnockout;
newItem.clipping=currItem.clipping;
newItem.isIsolated=currItem.isIsolated;
newItem.evenodd=currItem.evenodd;
if(currItem.polarity){
newItem.polarity=currItem.polarity
}
newItem.moveBefore(currItem);
currItem.remove()
}
}
}else{}



//Замена вставленного растра линкованным
mySelection = activeDocument.selection;
function deembed(obj){
if(obj.typename=="GroupItem"){
if(obj.groupItems.length>0){
for(q=0;q<obj.groupItems.length;q++){
deembed(obj.groupItems[q])
}
}else{
for(q=0;q<obj.rasterItems.length;q++){
deembed(obj.rasterItems[q])
}
}
}else if(obj.typename=="RasterItem"){
try{
if(obj.file.exists){
obj.embedded = false
}
}catch(exc){}
}
}

if (mySelection.length>0){
for(i=0;i<(mySelection.length);i++){
deembed(mySelection)
}
}else{}
 
#2
Muchaco, открывай свой сайт, аналогичный батушевскому. Чего скромничаешь?
 
#4
Надо, конечно надо.
Исправления будет легче ослеживать, чем по форуму рыскать.
Ну и должна же страна своих героев знать ;)
 
#5
может общими усилиями типа http://www.illustratoranswers.com/ зделаем
только для русскоязычных пользователей Илля
типсы триксы обучалки всякие экшены скрипты и все такое
 
#6
Да, жаль что хороший адрес — www.illustrator.ru — застолблён, скажем так, не самым удачным образом.

Застолбить ещё один, более полезный и, главное, более живой (обновляющийся) было не вредно для всех.
 
#9
Скажите, какое наполнение должно быть у сайта? Что б он был посещаемым, он должен быть лучше других. Итак, может подумаем, чем его можно наполнить, что б он был принципиально интереснее остальных русскоязычных сайтов по полиграфии? И ещё, это должен быть сайт исключительно по Иллу?
 
#10
Да, и ещё один нюанс. Если проект предполагается некоммерческим, т.е., делаться будет только на энтузиазме создателей, то есть опасность того, что рано или поздно создатели найдут более денежное "времяпровождение", и проект "зависнет".
 
#11
Зачем изобретать велосипед? Просто оправлять на уже раскрученные сайты свои статьи и скрипты.

На rudtp, например, на батушевский сайт, на на graphics.ru в конце концов — новости и статьи с уроками, что здесь лежат — тоска ведь зелёная, не так ли?
И у Батушева, и здесь, есть форум, т.е. обсуждать статьи, уроки, скрипты, можно не отходя от кассы.
 
#12
1) я думаю что только по иллу должен быть сайт (Web, Prepress, Design) по полиграфии сложно что-то достойное сделать
2) наполнение: если взять половину форума и оформить подобающим образом вот и наполнение
надо вынести в отдельный топик и все обсудить
 
#13
А я думаю, что не стоит замыкаться в рамках AI.
Он ведь не «всё в одном», он чать большого целого. Он и ценность имеет не сам по себе, а именно в контексте рабочего процесса, в котором участвует.

Если сайт будет жить достаточно долго, то время от времени акцеты наверняка будут смещаться то в сторону AI, то в сторону PhS или InD, или Acrobat-а или ещё чего-нибудь из «общих вопросов».

Начать, конечно, можно с AI, но заранее ограничивать не стоит. Я так думаю.

Да вон, кстати, недавно открывшийся http://azbuka-dtp.by.ru/index.html . Взять, да помочь автору наполнить сайт интересными и полезными вещами. Начало там хорошее.
 
#14
ну как бы у Батушева все что звязано с ИнДи
RuDTP общие воросы обзуждает
чисто по Иллу ничего нет на русском языке
 
#15
Ну тогда кашернее всего было бы сделать illustrator.rudtp.ru, по аналогии с батушевским. И соседство хорошее будет.
 
#17
ну да
а там уже можно и в другие места передавать с разрешения Ж))
тем более я думаю это дело чести учитывая кол-во сайтов по Корелу Ж))
давай в отдельный топик перенесем обсуждение
 
#18
А может сразу к Стасу?
Хотя, прежде,чем обращаться, нужно хоть что-нибудь накидать, чтобы не с пустыми руками.
 
#20
Шляпа, а про какого это стаса ты говоришь?

И ещё, кто будет заниматься самим созданием и обслуживанием сайта? (в случае, если речь идёт о СОЗДАНИИ сайта).
В кое-каком наполнении-то я, по мере свободного времени могу помогать.
 
Сверху