[ID CC-CC2022] Про назначение клавиши на distribute vertical space и размер текстового фрейма

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

design_rm

Участник
Топикстартер
Сообщения
22
Реакции
26
Привет.
1. Хочу назначить кнопку "distribute spacing (распределить с интервалом по вертикали)" на клавишное сочетание, но такого в списке "Набор комбинаций клавиш" нет. И если вдруг есть такая возможность то хотелось бы назначить сразу две кнопки "распределить с интервалом по вертикали" со значением 5 мм и 10 мм (может какой-то скрипт есть или типа того, я в этом не понимаю, извините). Если это имеет значение то я использую распределение по ключевому объекту и иногда по границам ("Выровнять по:").
1591264747492.png

2. Есть текстовый фрейм, не доходящий до конца поля. Есть ли какая кнопка чтобы его автоматически удлинить/"развернуть" до конца поля? Я конечно могу его руками протянуть за опорную точку (или как этот квадратик внизу по середине называется, которым мы управляем размером фрейма). Но хотелось бы все сделать в один клик. Спасибо

124.png
 
1)

2020-06-04_13-16-14.png
 
2)

2020-06-04_13-18-59.png
 
Комментарий модератора: Ещё раз зададите несколько вопросо в одной теме - забаню на пару недель.
Одна тема = Один вопрос.
 
Этой кнопкой он распределяет на равные интервалы, игнорируя введенное значение. А если выделить ключевой объект, то делает интервалы 0 мм между объектами. Странная штука.


а этого у меня вообще нету, опции размера в другой вкладке. Судя по тому, что я вижу на скрине это не совсем то.
 
а этого у меня вообще нету, опции размера в другой вкладке. Судя по тому, что я вижу на скрине это не совсем то.
размеры в стилях объектов появились только в СС18, и да, это не совсем то.
Но если все фреймы начинаются на одной высоте то пойдет
 
Попросил ChatGPT скрипт, который делает то, что я просил во втором пункте (выдал правильный не с первого раза конечно, но и я по-дурацки составил задачу. Круто то, что я сказал несколько раз ему что не так делает код и он поправил все как я хотел.)
Код:
var doc = app.activeDocument;
var selection = doc.selection;
var docheight = doc.pages[0].bounds[2];
var bottomMargin = doc.marginPreferences.bottom;
for (var i=0; i<selection.length; i++) {
var frame = selection[i];
var bounds = frame.geometricBounds;
var frameheight = bounds[2] - bounds[0];
var newbounds = [bounds[0], bounds[1], (docheight - bottomMargin), bounds[3]];
frame.geometricBounds = newbounds;
}
 
  • Спасибо
Реакции: Drawer и LeonidB
Очередная рекламка нейросеточек
 
Почему сразу реклама? Человек поделился своим опытом. Я тоже теперь частенько задействую этот инструмент. И в чём в чём, а в написании кода он хорош.
 
в написании кода он хорош
Глядя на код выше так не скажешь :) Ладно, остальные странности можно списать на некорректное задание, но это зачем? :)
var frameheight = bounds[2] - bounds[0]; Как по мне такое довольно странно для программы которая пишет программу :)
Впрочем не отменяет того, что код работает и для человека не сведущего это вполне себе выход.
 
Глядя на код выше так не скажешь :)
Мы же не видели ТЗ.
Он офигенно переписывает код с одного языка на другой. Очень рекомендую. Иногда случается, что нужно что-то написать на малознакомом языке. Тогда просишь его написать на хорошо знакомом, проверяешь, просишь исправить или улучшить, а под конец "а теперь перепиши это на Clojure". И у тебя прекрасный код на незнакомом языке. Ещё он здорово переписывает с одного стиля на другой. Например с фьючерсов на стримы и т. п.
 
Последнее редактирование:
  • Спасибо
Реакции: Chiga и Drawer
Вообще, как мне показалось, он компьютерные языки понимает значительно лучше, чем человеческие. Впрочем, оно не удивительно. Они строже, менее объёмны и вариативны.
 
Код:
var doc = app.activeDocument;
var selection = doc.selection;
var docheight = doc.pages[0].bounds[2];
var bottomMargin = doc.marginPreferences.bottom;
for (var i=0; i<selection.length; i++) {
var frame = selection[i];
var bounds = frame.geometricBounds;
var frameheight = bounds[2] - bounds[0];
var newbounds = [bounds[0], bounds[1], (docheight - bottomMargin), bounds[3]];
frame.geometricBounds = newbounds;
}

С этим скриптом есть одна проблема. Значение нижнего поля скрипт берёт из параметров документа - и, соответственно, до этого поля фрейм и разгоняет. Но нижнее поле конкретной полосы может отличаться от этого значения: его можно задать другим и в шаблоне, и для отдельной полосы в диалоге "Поля и колонки") - а скрипт этого не увидит, он понимает лишь одно значение - doc.marginPreferences.bottom.

Господа скриптописатели, а можно ли как-то подредактировать данный скрипт, чтобы значение bottomMargin он брал для той полосы, на которой расположен данный текстовый фрейм, именно из настроек для ЭТОЙ полосы, а не общее для всего документа (которое может нигде и не встречаться, вообще-то)?

И второй вопрос. Можно ли на основе этого скрипта сделать вариант, который разгоняет до нижнего поля ВСЕ текстовые фреймы документа (в зависимости, конечно, от полей на соответствующих этим фреймам полосах)?
 
Последнее редактирование:
Я не ChatGPT конечно, но наверное так :)
JavaScript:
var doc = app.activeDocument;
for (var p=0; p<doc.pages.length; p++) {
    var docheight = doc.pages[p].bounds[2];
    var bottomMargin = doc.pages[p].marginPreferences.bottom;
    var pageFrames = doc.pages[p].textFrames;
    for (var i=0; i<pageFrames.length; i++) {
        var bounds = pageFrames[i].geometricBounds;
        var newbounds = [bounds[0], bounds[1], (docheight - bottomMargin), bounds[3]];
        pageFrames[i].geometricBounds = newbounds;
    };
}
 
  • Спасибо
Реакции: design_rm и LeonidB
Я не ChatGPT конечно, но наверное так :)
JavaScript:
var doc = app.activeDocument;
for (var p=0; p<doc.pages.length; p++) {
    var docheight = doc.pages[p].bounds[2];
    var bottomMargin = doc.pages[p].marginPreferences.bottom;
    var pageFrames = doc.pages[p].textFrames;
    for (var i=0; i<pageFrames.length; i++) {
        var bounds = pageFrames[i].geometricBounds;
        var newbounds = [bounds[0], bounds[1], (docheight - bottomMargin), bounds[3]];
        pageFrames[i].geometricBounds = newbounds;
    };
}
Ага, отлично, для всех работает. 'beer1'
А как сделать для одного выделенного?
 
Код:
var doc = app.activeDocument;
var selection = doc.selection;
var docheight = doc.pages[0].bounds[2];
var bottomMargin = app.activeWindow.activePage.marginPreferences.bottom;
for (var i=0; i<selection.length; i++) {
    var frame = selection[i];
    var bounds = frame.geometricBounds;
    var newbounds = [bounds[0], bounds[1], (docheight - bottomMargin), bounds[3]];
    frame.geometricBounds = newbounds;
}
 
  • Спасибо
Реакции: LeonidB и design_rm
А, размер страниц в документе тоже может быть разный... :))
Тогда заменить var docheight = doc.pages[0].bounds[2]; на var docheight = app.activeWindow.activePage.bounds[2];
 
  • Спасибо
Реакции: LeonidB и design_rm