[ID CC-CC2022] Как получить порядок объектов (кто выше, кто ниже) на странице?

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

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
Как получить порядок объектов (кто выше, кто ниже) на странице? Если просто 2 прямоугольника - index показывает уровень. Но если это прямоугольник, и группа - то у обоих индекс - 0
 
А как вы объекты перебирете? pageItemы вроде как по порядку следования упорядочены
 
В данном случае это был selection. Подниматься по родителям до pages и там перебирать через pageItems? Не будет ли там нюансов если объект на pasteboard?
 
А порядок в селекшне какой?
 
не получается. порядок в selection идет вероятно по времени создания объекта в документе. Создали прямоугольник - в selection он будет последним, даже если его перемещали на самый низ...
 

Вложения

  • Untitled-1.png
    Untitled-1.png
    23.3 КБ · Просм.: 314
В общем эмипирическим путем вычислено - порядок в selection определяется как выделять - например через Shift или мышкой - какой объект попал в выделение последним - тот и будет последним в массиве.
Index действительно показывает уровень расположения на странице. Единственная проблема - если брать индекс у не группированных объектов - все работает. Если брать у нескольких разных групп - тоже работает.
А вот если смесь групп и простых объектов - начинается наложения. В общем у групп в Indesign свой индекс, у не группированных - свой, и они спокойно совпадают (0,1,2,3,4,... 0,1,2,3,4...)
 
С pageItem ситуация похожа - порядок в массиве коррелирует с последовательностью создания объектов, но не их уровнем (выше-ниже) на странице... :(
Единственное что приходит на ум - это клонировать (duplicate) все объекты, запоминать id элементов группы рекурсивно (а вдруг группа в группе), разгруппировывать клонированные (оригиналы не трогать так как могут слететь эффекты (например dropsadow) которые потом не восстановишь) и сравнивать уже index разгруппированных объектов, после чего удалять ненужные копии. Но ещё плюс сопоставлять id оригиналов и копий при duplicate ... в общем это жесть..
Неужели нет более простого способа?
 
_MBK_ - спасибо за ссылку. Есть над чем подумать и этот путь явно проще.
P.S. сорри - у меня одного ссылка не открывается на прямую? переадресовывает на главную Adobe Support Community

Читал из кеша google если что....
 
Читал из кеша google если что....
Да. Глупые адобовские индусы недавно похоронили комьюнити 'RIP' *(
В двух словах до чего там договорились - перебирают все pageItems и формируют массив из id к которому потом быстро напрямую обращаются
JavaScript:
var zOrderById = {}, 
    itemZO = pgItems.everyItem().index, 
    itemIds = pgItems.everyItem().id, 
    i = pgItems.length; 
 
while( i-- ) 
    { 
    zOrderById[itemIds[i]] = itemZO[i]; 
    } 
 
//Then you can use zOrderById[ pgItems[ i ].id ] to retrieve the z-order of the i-indexed item in the pgItems collection:
 
alert( zOrderById[ pgItems[0].id ] ); // => 0 
alert( zOrderById[ pgItems[1].id ] ); // => 2 
alert( zOrderById[ pgItems[2].id ] ); // => 1
 
  • Спасибо
Реакции: Vadim_PDF
Да, я понял, костыль, но это тысячекратно лучше, чем я предложил :) Спасибо!