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

  • Автор темы Автор темы Slx1
  • Дата начала Дата начала

Slx1

Топикстартер
15 лет на форуме
Сообщения
946
Реакции
106
Господа, а не попадался кому аналог ID скрипта Swap Places (Просто меняются местами два фрейма относительно координат, соответствующих transform reference point.)?
Именно просто смена мест, без искажений и трансформаций объектов
Спасибо за любую помощь
 
Это пишется в две строки
 
Точнее в три
JavaScript:
var tmp=app.activeDocument.selection[0].position;
app.activeDocument.selection[0].position=app.activeDocument.selection[1].position;
app.activeDocument.selection[1].position=tmp;
 
  • Спасибо
Реакции: Slx1
Точнее в три
JavaScript:
var tmp=app.activeDocument.selection[0].position;
app.activeDocument.selection[0].position=app.activeDocument.selection[1].position;
app.activeDocument.selection[1].position=tmp;

круто! работает!
только на масках глючит
 
Для начала вопрос что выделяется - маска или вся группа?
 
Ну это можно было предвидеть - наверное, сама маска передвигается, а содержимое остается на месте?

Вроде все передвигается, только координаты берутся по маске
 

Вложения

  • 2222.png
    2222.png
    766.2 КБ · Просм.: 255
Вроде все передвигается, только координаты берутся по маске
О! Это просто замечательно!
Но тогда в три строки не получится, придется реальные размеры маскированной части считать, а это довольно замороченно
 
Их не посчитать. Надо брать от clipping path
 
у меня такая функция для определения размеров
Код:
function getBounds(obj)
{
        if(obj.typename!="GroupItem") return obj.geometricBounds;
      
       if(obj.clipped)
        for(var i=0;i<obj.pageItems.length;i++)
        {
            if(obj.pageItems[i].clipping) return obj.pageItems[i].geometricBounds;
        }
    
        var result = getBounds(obj.pageItems[0]);
         for(var i=1;i<obj.pageItems.length;i++)
        {
            var currBounds = getBounds(obj.pageItems[i]);
            result[0] = Math.min(result[0],currBounds[0]);
            result[2] = Math.max(result[2],currBounds[2]);
            result[1] = Math.max(result[1],currBounds[1]);
            result[3] = Math.min(result[3],currBounds[3]);
        }
        
       return result;
}
 
  • Спасибо
Реакции: Килгор Траут
Ну у тебя по клиппингу считается, а на приведенном примере явно клиппинг больше, чем контент
 
обычно наоборот ) кому нужна маска, которая ничего не маскирует
 
Ну на примере она частично маскирует
А вообще говоря, топикстартер не уточнял что именно ему надо и по какому месту объекта позицию считать?
 
ну можно пересечение поискать у маски и всего контента, да
 
Коллеги, да я попробовал в примере маску которая частично скрывает объекты а частично "торчит", такое часто попадается
в принципе если будет по маске считать координаты было бы очень круто!

то есть центром группы считаем центр маски
 
Последнее редактирование:
во не могу точно понять, но центр сьезжает
 

Вложения

  • 333.png
    333.png
    790.8 КБ · Просм.: 294