2015-05-21 2 views
2

Используя простой массив app.selection[x], вы можете применить преобразование к любому объекту в выборе, независимо. Но как мне применить преобразование ко всему отобранному вместе?InDesign extendScript: Как преобразовать весь выбор?

Например: внутри InDesign я могу выбрать два бок о боковых объекта и перевернуть их по горизонтали, заставляя их переключаться местами и переворачивать.

InDesign Screenshot: Example 1

Внутри скрипта, можно настроить таргетинг на каждый объект в выборе, но они не будут меняться местами; они останутся в одном месте и перевернут.

for (var x = 0; x < app.selection.length; x++){ 
    app.selection[x].absoluteFlip = Flip.HORIZONTAL; 
} 

InDesign Screenshot: Example 2

я мог группе выбор, применить преобразование, затем разгруппировать, когда закончил, но это кажется ненужным наливом, что может замедлить код. Я могу легко сделать это вручную внутри InDesign, поэтому следует следовать, что есть способ доступа к app.selection как к единому объекту, а не к массиву. Существует ли такой объект?

ответ

1

На самом деле это не решение, но стоит отметить, что я не думаю, что absoluteFlip - это выполняемое действие, но состояние, указывающее, если элемент перевернулся. Он доступен для записи, поэтому вы можете установить состояние, но я думаю, что происходит при использовании меню для переключения: flipItem: http://jongware.mit.edu/idcs6js/pc_PageItem.html#flipItem, , в котором вы можете установить «вокруг» координаты. Теперь получение источника поля выбора по какой-либо причине не является простым (или, может быть, оно есть, но я не знаю, как), но вы можете либо использовать координаты первого объекта, чтобы установить начало координат, чтобы вы могли перевернуть его вокруг разных координат в зависимости от порядка выбора. Или вы можете сортировать массив, чтобы найти оставили большинство координат (или в зависимости от того требуется), как это:

var selection_array = app.selection; 
    selection_array.sort(function(a, b){return a.visibleBounds[1]-b.visibleBounds[1]}) 
    var flip_origin = [selection_array[0].visibleBounds[1],selection_array[0].visibleBounds[0]] 
    for(i=0;i<app.selection.length;i++){ 
     app.selection[i].flipItem(Flip.HORIZONTAL, flip_origin); 
    } 

Не уверен, что это проще и быстрее, чем группировка и разгруппировка хотя.

+0

Ницца! Я бы предположил, что «центральная точка» должна быть центром всего выбора, поэтому сначала нужно перебрать все элементы. (... Я, я бы взял ярлык здесь и сгруппировал все и прочитал * его * центр, а затем разгруппировался. Но это делает остальную часть этой рутины довольно бессмысленной.) – usr2564301

+0

@Jongware Да, я думаю, что через меню это принимает координаты, появляющиеся на панели инструментов, которые в основном являются координатами «группы выбора». Но по какой-то причине я не могу получить их из javascript. Это должно быть где-то, но я не знаю, где. Так что, возможно, легче сгруппировать. –

+0

Это смешно, когда мне нужно решение такого вопроса, как InDesign, я всегда искал «jongware» как одно из моих ключевых слов. : P В любом случае, спасибо Жюльен за это объяснение, я как бы задумывался об этом.МНОГО БОЛЬШЕ альтернативы написанию нескольких утверждений «если», устанавливающих состояние absoluteFlip в противоположность его текущему состоянию. И ваше решение избежать группировки очень умно, независимо от того, окажется ли оно быстрее. Я отдам! –

0

Рассмотрите изменение размера. Он имеет «индивидуальный/глобальный» параметр: void resize (in: меняется, от: меняется, по: ResizeMethods, values: Array of меняется [, resizeIndividually: bool = true] [, учитываяRulerUnits: bool = false]) Изменить размер элемент страницы.

+1

Если я правильно понимаю, изменение размера является прототипом функции элементов страницы. Это означает, что мне сначала нужно будет настроить таргетинг на элемент, а затем применить функцию, например: 'app.selection [x] .resize()' ... который оставляет меня обратно на квадрат. –

+0

Вы можете временно группировать объекты, применять преобразование, затем разгруппировать ... – Loic

Смежные вопросы