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

Статус
Закрыто для дальнейших ответов.

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;
Наблюдаю кино, как изменяется текст, и все работает корректно.

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

Подскажите, что с этим можно сделать?
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

А если не "cut-paste", а "copy-paste"?
 

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Да, забыл написать.
Пробовал - копирования также не происходит.
В момент paste() ошибка повторяется.
 

LeshikSan

15 лет на форуме
Сообщения
266
Реакции
185
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Вместо cut() попробуй move(), и работать быстрее будет.
 

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

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

Добавлю, что установил обновление Adobe InDesign CS5.5 7.5.3
Ничего не изменилось.
 

LeshikSan

15 лет на форуме
Сообщения
266
Реакции
185
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Думаю сможешь, пробуй.
 

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

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

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.
ParameterTypeDescription
toArray of 2 Units
Layer
Page
Spread
The new location of the Group,in the format (x, y). Can accept: Array of 2 Units, Spread, Page or Layer. (Optional)
byArray of Measurement Unit (Number or String)The amount (in measurement units) to move the Group relative to its current position, in the format (x, y). (Optional)
Подскажите, как перенести объект
var myGr = myPage.groups.add([myNewRectangle, myNewTextFrame0, myNewTextFrame1, myNewTextFrame2]);
в
myPara.insertionPoints[0]
?
 

LeshikSan

15 лет на форуме
Сообщения
266
Реакции
185
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

Да, здесь похоже только через cut/paste
 

Alexxxander

15 лет на форуме
Сообщения
193
Реакции
25
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

А если здесь использвать anchoredObject?
 

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: 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
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

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

Когда был cut/paste - прыг-скок страницы в левый верхний угол раздражал, и разница была заметна визуально.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

yanis

Участник
Топикстартер
Сообщения
7
Реакции
0
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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

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

Всё неважно, сейчас разница в 10 секунд, сажусь за переписывание говнокода - померю в том объеме, какой есть.
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: app.scriptPreferences.enableRedraw vs app.cut();

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