Зачем?Коллеги, а для иллюстратора такой скрипт сложно сделать?
Зачем?
С предварительной группировкой-разгруппировкой можно экшн записать
Объекты могут находиться на разных слоях, группировка-разгруппировка переместит их на один слой. Я бы воспользовался функцией установки позиции. Да и макрос попроще будет
Нетдля иллюстратора такой скрипт сложно сделать?
Ой, не заметил что тему перенесли))Нет - в смысле "не сложно"
Это расценивать как предложение работы?
На котором иллюстратор запустить можно? Оригинально-скупи нормальный утюг
if ( app.documents.length > 0 ) {
var ad=app.activeDocument;
var ar=ad.artboards[ad.artboards.getActiveArtboardIndex()].artboardRect;
var cX=(ar[0]+ar[2])/2;
var cY=(ar[1]+ar[3])/2;
var cnt=new Array();
var x1=0;
var x2=0;
var y1=0;
var y2=0;
var first=true;
for (var j=0;j<ad.pageItems.length;j++)
{
pi=ad.pageItems[j];
if ((pi.parent.typename=="Layer") && (pi.selected))
{
cnt.push(pi);
if (first || (x1<pi.controlBounds[0])) x1=pi.controlBounds[0];
if (first || (x2>pi.controlBounds[2])) x2=pi.controlBounds[2];
if (first || (y1<pi.controlBounds[3])) y1=pi.controlBounds[3];
if (first || (y2>pi.controlBounds[1])) y2=pi.controlBounds[1];
first=false;
}
}
cx=(x1+x2)/2;
cy=(y1+y2)/2;
if (cnt.length)
for (var j=0;j<cnt.length;j++)
{
cnt[j].translate(cX-cx,cY-cy);
}
else alert("No selection!");
} else alert("No document!");
На самом деле, в реале все оказалось сложнее, как обычно, индусы рогаток навставляли на каждом шагу, но в итоге получилось как то так:
if ( app.documents.length > 0 ) {
var ad=app.activeDocument;
var ar=ad.artboards[ad.artboards.getActiveArtboardIndex()].artboardRect;
var cX=(ar[0]+ar[2])/2;
var cY=(ar[1]+ar[3])/2;
var cnt=new Array();
var x1=0;
var x2=0;
var y1=0;
var y2=0;
var first=true;
for (var j=0;j<ad.pageItems.length;j++)
{
pi=ad.pageItems[j];
if ((pi.parent.typename=="Layer") && (pi.selected))
{
cnt.push(pi);
if (first || (x1<pi.controlBounds[0])) x1=pi.controlBounds[0];
if (first || (x2>pi.controlBounds[2])) x2=pi.controlBounds[2];
if (first || (y1<pi.controlBounds[3])) y1=pi.controlBounds[3];
if (first || (y2>pi.controlBounds[1])) y2=pi.controlBounds[1];
if (first || (x1<pi.controlBounds[2])) x1=pi.controlBounds[2];
if (first || (x2>pi.controlBounds[0])) x2=pi.controlBounds[0];
if (first || (y1<pi.controlBounds[1])) y1=pi.controlBounds[1];
if (first || (y2>pi.controlBounds[3])) y2=pi.controlBounds[3];
first=false;
}
}
cx=(x1+x2)/2;
cy=(y1+y2)/2;
if (cnt.length)
for (var j=0;j<cnt.length;j++)
{
cnt[j].translate(cX-cx,cY-cy);
}
else alert("No selection!");
} else alert("No document!");
Попробуйте вот так
Ну какбэ фразаУ меня при использование этого скрипта для одной монтажной области все отлично, но вот если использовать для 100 монтажных областей то не центрует точно:
ad.artboards[ad.artboards.getActiveArtboardIndex()]
намекает на то что скрипт центрирует на активном артборде