[AI CC-CC2021] аналог Swap Places для AI

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
А! Тогда значит не от маски считает а от общего бокса
Надо наверное посчитать центр маски (перебором всех объектов) , смещение его отностительно центра boundingBox и прибавлять эти смещения к position
Тоже не сахар :(
 
  • Спасибо
Реакции: Slx1

Daani

Участник
Сообщения
5
Реакции
2
Я для себя модифицировала скрипт Джона Вундеса. Я программировать не очень умею, поэтому он не очень аккуратный, но зато работает с масками. Есть две версии, одна меняет местами относительно центра, а вторая по верхнему правому углу.
 
  • Спасибо
Реакции: Slx1

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Я для себя модифицировала скрипт Джона Вундеса. Я программировать не очень умею, поэтому он не очень аккуратный, но зато работает с масками. Есть две версии, одна меняет местами относительно центра, а вторая по верхнему правому углу.

Круто! работает! Большое спасибо!
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Я программировать не очень умею

А можете так же сделать чтобы тут с масками работало?
Большое спасибо заранее!

JavaScript:
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!");
 

Daani

Участник
Сообщения
5
Реакции
2
Так вроде работает:

JavaScript:
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 pos=0;
 
 var first=true;
 for (var j=0;j<ad.pageItems.length;j++)
   {
       pi=ad.pageItems[j];

       if (pi.clipped) {
       pos = pi.pathItems[0].controlBounds;
       } else {
       pos = pi.controlBounds;
       }
              
       if ((pi.parent.typename=="Layer") && (pi.selected))
       {
           cnt.push(pi);
           if (first || (x1<pos[0])) x1=pos[0];
           if (first || (x2>pos[2])) x2=pos[2];
           if (first || (y1<pos[3])) y1=pos[3];
           if (first || (y2>pos[1])) y2=pos[1];
           if (first || (x1<pos[2])) x1=pos[2];
           if (first || (x2>pos[0])) x2=pos[0];
           if (first || (y1<pos[1])) y1=pos[1];
           if (first || (y2>pos[3])) y2=pos[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!");
 
  • Спасибо
Реакции: Slx1

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Так вроде работает:

JavaScript:
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 pos=0;

var first=true;
for (var j=0;j<ad.pageItems.length;j++)
   {
       pi=ad.pageItems[j];

       if (pi.clipped) {
       pos = pi.pathItems[0].controlBounds;
       } else {
       pos = pi.controlBounds;
       }
             
       if ((pi.parent.typename=="Layer") && (pi.selected))
       {
           cnt.push(pi);
           if (first || (x1<pos[0])) x1=pos[0];
           if (first || (x2>pos[2])) x2=pos[2];
           if (first || (y1<pos[3])) y1=pos[3];
           if (first || (y2>pos[1])) y2=pos[1];
           if (first || (x1<pos[2])) x1=pos[2];
           if (first || (x2>pos[0])) x2=pos[0];
           if (first || (y1<pos[1])) y1=pos[1];
           if (first || (y2>pos[3])) y2=pos[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!");

Супер! Спасибо!