[ID CC-CC2021] Как скриптом выровнять фрейм по ширине многострочного текста?

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Доброго времени суток!
Искала в Яндексе, искала в rudtp... Но никак не могу найти.
Как выровнять фрейм по ширине многострочного текста?
FRAME_TO_CONTENT выравнивает только по высоте. А других подходящих предопределенных вариантов не увидела.
 

Любимцев

15 лет на форуме
Сообщения
4 199
Реакции
2 055
хм... тащемто текст распределяется по ширине фрейма, а не наоборот
Вероятно речь идет о выключке по центру (например стихах)?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Я сейчас живо представил себе результат действия такого выравнивания на параграфе в пару килознаков ;)
@catpaw , мой совет, возможно, вы и сочтете капитанским, но если какое то действие нельзя однокнопочно произвести в самом индизайне, то закодить его однострочно нельзя тем более. Причем, обратное утверждение неверно.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ну если искомая ширина вам известна, то через geometricBounds
 

К.Т.

Участник
Сообщения
323
Реакции
337
Как выровнять фрейм по ширине многострочного текста?
Во-первых, это действие имеет смысл только для текстов вроде стихов или списков, в которых абзацы не переносятся, то есть одна строка — один абзац.
Во-вторых, для этого можно назначить авторазмер фрейма по ширине с запретом разрывов строк, а когда авторазмер сработает, снять его.
 
  • Спасибо
Реакции: _MBK_

_MBK_

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Не, не мой. Искомый алгоритм пока не понятен )
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
При двойном клике по правому центральному маркеру фрейм ужимается до ширины самой длинной строки. Нужно повторить это скриптом.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Тогда все проще - цикл по строкам и ищем максимум координат последнего символа в строке
 
  • Спасибо
Реакции: catpaw

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
а, так его уменьшить надо. ну это просто, да. у символа есть свойство horizontalOffset
 
  • Спасибо
Реакции: catpaw

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Ну так и я про то
 
  • Спасибо
Реакции: catpaw

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Ну, раз мяч на моей стороне.
Как самостоятельный скрипт явно работает... но у меня с геометрией со школы клиническая недружба и мне считают что-то не то.
А второе --- я хотела бы попасть в привязанный объект из знака, в котором он сидит и не знаю, как в него "спуститься"...

JavaScript:
function main(){
var sel = app.activeDocument.selection[0];
if (app.activeDocument.selection[0].constructor.name == "TextFrame"){
alert(app.activeDocument.selection[0].constructor.name)
var Frame  = sel;
} else {
if (app.activeDocument.selection[0].constructor.name == "Character"){
alert(app.activeDocument.selection[0].contents)
var Frame  = sel.TextBoxes[0];
} else {
var Frame  = sel.parentTextFrames[0];
}
}
//
    var GB = Frame.geometricBounds;
    var Wo = GB[3]-GB[1];
    var HOff = Frame.texts[0].paragraphs[0].endHorizontalOffset;
    if ( Frame.texts[0].paragraphs[1].endHorizontalOffset < HOff ){
    HOff = Frame.texts[0].paragraphs[1].endHorizontalOffset; }
    alert("[H]"+HOff+";[1]"+GB[1]+";[3]"+GB[3]);
    Frame.geometricBounds = [GB[0],GB[1], GB[2], GB[3] - 2*(GB[3] - HOff)];
    Frame.fit(FitOptions.FRAME_TO_CONTENT);
//
} //main

app.doScript(main,undefined,undefined,UndoModes.ENTIRE_SCRIPT);
 
  • Спасибо
Реакции: _MBK_

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
  • Спасибо
Реакции: catpaw

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
а что это?

тем более выражение упрощается до 2*Hoff-GB[3]
вам же по уму нужно GB[1]+Hoff+еще чуток для зазора
чуток пригодился!
у меня частный случай, где абзацы внутри привязанного объекта по центру.

Я поняла, что horizontalOffset берется справа от знака, а слева?

И как попасть из Character внутрь привязанного объекта?
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
по-моему справа endHorizontalOffset как раз. а horizontalOffset вроде слева. но это не точно
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
...
где selection[0] — символ привязки.
Спасибо! Получилось!
А если вопрос не оффтопик, как очищать мозги индизайна после скрипта? А то у меня подозрение, что мой скрипт их засоряет.
А такой же код внутри другого скрипта капитально подвешивает.

Сумела только добавить округление до сотых, чтобы ID не умирал на счете
JavaScript:
    HOff  = HOff.toFixed(2);
    GB[3] = GB[3].toFixed(2);
но это не спасает "большой" скрипт...
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А если вопрос не оффтопик, как очищать мозги индизайна после скрипта? А то у меня подозрение, что мой скрипт их засоряет.
Перегружать индизайн
Сумела только добавить округление до сотых, чтобы ID не умирал на счете
А это помогает???