[ID CC-CC2021] Выровнять фреймы по направляющим, возможно?

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Господа, возможно ли реализовать через скриптинг, выравнивание фреймов по ближайшим направляющим ( в пределах определенного расстояния, конечно)
Нужно увеличивать фреймы, без изменения содержимого
Спасибо за любую помощь!
 

Вложения

  • 111.png
    111.png
    1.1 МБ · Просм.: 298

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Нужно увеличивать фреймы
А в чем проблема то - увеличивайте geometricBounds - содержимое просто перераспределится по фреймам не изменяясь
Или как именно вам надо?
 

afalbert

10 лет на форуме
Сообщения
120
Реакции
88
Господа, возможно ли реализовать через скриптинг, выравнивание фреймов по ближайшим направляющим
Наверно возможно, но мне кажется проще и правильней использовать стили объектов. Там можно задать размер и положение относительно полей
 

Slx1

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

afalbert

10 лет на форуме
Сообщения
120
Реакции
88
ну да, если они все разные, то надо скрипт
 

afalbert

10 лет на форуме
Сообщения
120
Реакции
88
Добрый день, вы нашли скрипт? Если нет, могу поделиться своей поделкой. у меня есть скрипт который притягивает выделенные объекты к ближайшим гайдам. только у меня сс2018
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Добрый день, вы нашли скрипт? Если нет, могу поделиться своей поделкой. у меня есть скрипт который притягивает выделенные объекты к ближайшим гайдам. только у меня сс2018

Здравствуйте!
Увы, ничего подходящего пока не попадалось
С удовольствием попробовал бы ваше решение
 

afalbert

10 лет на форуме
Сообщения
120
Реакции
88
попробуйте:
 
  • Спасибо
Реакции: Slx1

Килгор Траут

Участник
Сообщения
48
Реакции
2
попробуйте:
Большое спасибо за скрипт! Еще бы найти то же самое для baseline!
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Есть скрипт с привязкой к Документ Грид
подойдет?
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
JavaScript:
 with (app) {
 try {
         for (i = 0; i < selection.length; i++) {
                 newBounds = selection[i].geometricBounds;
                 gridStepH = activeDocument.gridPreferences.horizontalGridlineDivision / activeDocument.gridPreferences.horizontalGridSubdivision;
                 gridStepV = activeDocument.gridPreferences.verticalGridlineDivision / activeDocument.gridPreferences.verticalGridSubdivision;
                 
                 delta0 = mod(newBounds[0], gridStepV);
                 delta2 = mod(newBounds[2], gridStepV);
                 delta1 = mod(newBounds[1], gridStepH);
                 delta3 = mod(newBounds[3], gridStepH);
 
                 newBounds[0]  = newBounds[0] - delta0;
                 newBounds[2]  = newBounds[2] - delta2;
                 if (newBounds[2] == newBounds[0]) {
                         if (delta0 * delta0 < delta2 * delta2) {
                                 newBounds[2]  = newBounds[2] + gridStepV;
                         } else {
                                 newBounds[0]  = newBounds[0]  - gridStepV;
                         }
                 }
         
                 newBounds[1]  = newBounds[1] - delta1;
                 newBounds[3]  = newBounds[3] - delta3;
                 if (newBounds[3] == newBounds[1]) {
                         if (delta1 * delta1 < delta3 * delta3) {
                                 newBounds[3]  = newBounds[3] + gridStepH;
                         } else {
                                 newBounds[1]  = newBounds[1]  - gridStepH;
                         }
                 }
         
                 selection[i].geometricBounds = newBounds;
         }
 } catch(e) {}
}
 
function mod(division, divider) {
 while (division > 0) {
         division = division - divider;
 }
 if (division > -divider / 2)
         return division
 else
         return division + divider;
}
 
  • Спасибо
Реакции: Килгор Траут

Килгор Траут

Участник
Сообщения
48
Реакции
2
JavaScript:
 with (app) {
try {
         for (i = 0; i < selection.length; i++) {
                 newBounds = selection[i].geometricBounds;
                 gridStepH = activeDocument.gridPreferences.horizontalGridlineDivision / activeDocument.gridPreferences.horizontalGridSubdivision;
                 gridStepV = activeDocument.gridPreferences.verticalGridlineDivision / activeDocument.gridPreferences.verticalGridSubdivision;
                
                 delta0 = mod(newBounds[0], gridStepV);
                 delta2 = mod(newBounds[2], gridStepV);
                 delta1 = mod(newBounds[1], gridStepH);
                 delta3 = mod(newBounds[3], gridStepH);

                 newBounds[0]  = newBounds[0] - delta0;
                 newBounds[2]  = newBounds[2] - delta2;
                 if (newBounds[2] == newBounds[0]) {
                         if (delta0 * delta0 < delta2 * delta2) {
                                 newBounds[2]  = newBounds[2] + gridStepV;
                         } else {
                                 newBounds[0]  = newBounds[0]  - gridStepV;
                         }
                 }
        
                 newBounds[1]  = newBounds[1] - delta1;
                 newBounds[3]  = newBounds[3] - delta3;
                 if (newBounds[3] == newBounds[1]) {
                         if (delta1 * delta1 < delta3 * delta3) {
                                 newBounds[3]  = newBounds[3] + gridStepH;
                         } else {
                                 newBounds[1]  = newBounds[1]  - gridStepH;
                         }
                 }
        
                 selection[i].geometricBounds = newBounds;
         }
} catch(e) {}
}

function mod(division, divider) {
while (division > 0) {
         division = division - divider;
}
if (division > -divider / 2)
         return division
else
         return division + divider;
}
Огромное спасибо! То, что надо!