app.scriptPreferences.enableRedraw vs app.cut();

  • Автор темы Автор темы yanis
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Здравствуйте.
Имеется Индизайн 5.5 рус. и скрипт следующего вида:
Код:
with (app) {[INDENT]...[/INDENT]
[INDENT]scriptPreferences.enableRedraw = false;[/INDENT]
[INDENT]...[/INDENT]
[INDENT]make1module(myPara); // оформить параграф по типу "1 модуль"[/INDENT]
[INDENT]...[/INDENT]
}

function make1module(myPara) {[INDENT]var myTxt = myPara.characters.itemByRange(0, (myPara.characters.length - 2));[/INDENT]
[INDENT]myTxt.select();[/INDENT]
[INDENT]app.cut(); // вырезаю текст[/INDENT]
[INDENT]...[/INDENT]
[INDENT]var myNewRectangle = myPage.rectangles.add();[/INDENT]
[INDENT]...[/INDENT]
[INDENT]var myNewTextFrame = myPage.textFrames.add();[/INDENT]
[INDENT]with (myNewTextFrame) {[/INDENT]
[INDENT=2]...[/INDENT]
[INDENT=2]insertionPoints[0].select();[/INDENT]
[INDENT=2]app.paste();[/INDENT]
[INDENT=2]...[/INDENT]
[INDENT]}[/INDENT]
[INDENT]var myGr = myPage.groups.add([myNewRectangle, myNewTextFrame]);[/INDENT]
[INDENT]myGr.select();[/INDENT]
[INDENT]app.cut(); // вырезаю группу[/INDENT]
[INDENT]myPara.insertionPoints[0].select();[/INDENT]
[INDENT]app.paste();[/INDENT]
}

Если я устанавливаю
scriptPreferences.enableRedraw = false;
не работает последний
app.paste();
ExtendScript Toolkit ругается на "Невозможно вставить текущий элемент из временного буфера".
Останавливаю, в индизайне в меню "Редактирование" последняя команда "Отменить очистить", затем - "Отменить сгруппировать". Получается, что выделение удаляется, а не вырезается в буфер.

Однако, если установлено
scriptPreferences.enableRedraw = true;
Наблюдаю кино, как изменяется текст, и все работает корректно.

Похоже, такая беда только с группой объектов (под комментарием
// вырезаю текст
в обоих случаях индиз работает корректно).

Подскажите, что с этим можно сделать?
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

А если не "cut-paste", а "copy-paste"?
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Да, забыл написать.
Пробовал - копирования также не происходит.
В момент paste() ошибка повторяется.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Вместо cut() попробуй move(), и работать быстрее будет.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

А я смогу при помощи move() вставить группу в текст?
Здесь я вырезаю параграф из текста, обрабатываю в углу страницы, затем группирую все что натворил и переношу обратно в текст (откуда взял).
В примере - самая простая группа из 2 элементов.

Вклеивать блоки внутрь текста критично - после работы этого скрипта будут выполняться следующие; также будут добавляться объекты с обтеканием, а относительная позиция "этого" модуля в тексте меняться не должна.

Добавлю, что установил обновление Adobe InDesign CS5.5 7.5.3
Ничего не изменилось.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Думаю сможешь, пробуй.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

text.move() - могу.
Спасибо за подсказку, избавился от многих cut-paste
Текстовые фреймы без группировок создаю теперь сразу внутри нужного абзаца.
А вот с группами элементов - не справляюсь, кроме как от координат 0,0 страницы.
Т.е. нужен либо cut-paste, либо move()

move() для групп:

[TABLE="width: 100%"]
[TR]
[TD]void move ([to: varies][, by: Array of Measurement Unit (Number or String)])
Moves the Group to a new location. Note: Either the 'to' or ' b y ' parameter is required; if both parameters are defined, only the to value is used.
[TABLE="width: 100%"]
[TR]
[TD][/TD]
[/TR]
[/TABLE]
[TABLE="width: 100%"]
[TR]
[TH]Parameter[/TH]
[TH]Type[/TH]
[TH]Description[/TH]
[/TR]
[TR]
[TD]to[/TD]
[TD]Array of 2 Units
Layer
Page
Spread[/TD]
[TD]The new location of the Group,in the format (x, y). Can accept: Array of 2 Units, Spread, Page or Layer. (Optional)[/TD]
[/TR]
[TR="class: lastRow"]
[TD]by[/TD]
[TD]Array of Measurement Unit (Number or String)[/TD]
[TD]The amount (in measurement units) to move the Group relative to its current position, in the format (x, y). (Optional)[/TD]
[/TR]
[/TABLE]
[/TD]
[/TR]
[/TABLE]
Подскажите, как перенести объект
var myGr = myPage.groups.add([myNewRectangle, myNewTextFrame0, myNewTextFrame1, myNewTextFrame2]);
в
myPara.insertionPoints[0]
?
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Да, здесь похоже только через cut/paste
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

А если здесь использвать anchoredObject?
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Я вчера уже не поленился с относительными координатами помучаться.
Теперь все и везде выглядит вот так:
Код:
var myNewRectangle = myPara.rectangles.add();
var myNewTextFrame0 = myNewRectangle.textFrames.add();
var myNewTextFrame1 = myNewRectangle.textFrames.add();
var myNewTextFrame2 = myNewRectangle.textFrames.add();

По мере изготовления ловил ошибки с paste() текста.
Резюме - Индиз 5.5 рус. глючит при операциях cut() и copy() при enableRedraw = false
ОС - Вин7 х86
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Прочитал весь топик от начала до конца и так и не понял, какие религиозные соображения не позволяют оставить scriptPreferences.enableRedraw = true? Это что, сильно тормозит работу? IMHO, сомнительно.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

scriptPreferences.enableRedraw = true? Это что, сильно тормозит работу?
Хотел написать, что сообщения действительно религиозные, т.к. я люблю, чтобы программа выполнялась за 2 микросекунды и комп махал хвостиком: "Хозяин, я все сделал и жду, пока твои рецепторы это заметят!"
На текущем скрипте ИМХО реальные замеры пока делать рано - там пару десятков строчек переписать можно. Код в стиле "поток мысли", и оно роль сыграет. Вот теперь только ради интереса померю :)

Сейчас разница небольшая (5% примерно) при почти боевом наборе данных:
enableRedraw = true -> 182 сек
enableRedraw = false -> 172 сек

Когда был cut/paste - прыг-скок страницы в левый верхний угол раздражал, и разница была заметна визуально.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

В таком тонком деле как адобовский скриптинг лучшее - враг хорошего, а от бобра добра не ищут. ;) И разницу в 10 секунда на двух минутах можно потерпеть во имя стабильности работы. Тем более, у меня нехорошее предчувствие, что умельцы из адобовских программеров, писали эту функцию исключительно, ориентируясь на перерисовку экрана, и сама мысль о том что в момент исполнения вставка будет производиться "вслепую" просто не укладывалась в их гениальном мозгу. '))'
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Абсолютно согласен насчет 10 секунд. И не 2 минуты, а 3 :)

Да простят модераторы за флейм...
Уже пересмотрено и работает порядка 600 строк, к которым добавится еще полстолько же до пятницы. А в среду это всё должно отработать без ошибок.
И мне интересно второй раз в жизни (первый был примерно в 2005-2006 году на CS2) написать "красявый" набор скриптов в связи с переездом на CS5.5.
У меня Дуал Кор, а у верстки - Ай7. Видео, по-старинке, и тут и там интегрированное.
Но "там" картинка может выглядеть принципиально по-другому благодаря интеловским гениям. И ОС "там" - ХР, для сохранения совместимости с еще одной штукой...

Всё неважно, сейчас разница в 10 секунд, сажусь за переписывание говнокода - померю в том объеме, какой есть.
 
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

В CS5 на XP32 cut()-paste() объекта в текст срабатывает с любым enableRedraw. Осталось узнать, что всё-таки глючит у Вас — Индизайн или ОС.
 
Статус
Закрыто для дальнейших ответов.