[AI CC-CC2022] Получить размер объекта обрезанного Clipping Mask

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

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Проблема заключается в следующем. Есть объект обтравленный Clipping Mask. Соответственно в Java Script нет ни одного свойства, ни у одного из элементов, который бы возвращал размеры видимого объекта. Здесь не путать с visibleBounds, т.к. последний просто выдает размеры без обводки. Если Clipping Mask является первым, ну в крайнем случаем вторым элементом в группе, то проблем с получением размеров особо нет, через одну-двухуровневую проверку на clipping== true соответствующего элемента. Но вот если скажем объекты находятся в группе, а первый элемент в группе другой групповой объект, а только под этим объектом находится группа с ClippingMask, то тут уже что-то пока не придумал, как получить размер этой маски.
При этом перебрать все элементы группы, тоже не пойму как, так как внутри группы содержатся другие группы, а pageItems захватывает только элементы самого верхнего уровня. Единственное исключение document.pageIterms, вот тут перебирает все элементы вне зависимости от того находятся они в группе или нет.
В общем в идеале нужно получить размер объекта, также как это видно внутри самого Иллюстратора когда выделяешь, там он показывает размеры только обтравленные маской. Подошел бы даже вариант с захватом этих объектов через Action, но и там эта возможность отсутствует.
 
Из вашего очень сумбурного обьяснения я понял, что, вероятно, вам надо получить видимые размеры обьекта, обтравленного маской или как?
 
Да, именно так. Но маска может быть не на самом верху объекта.
Ну, т.е. например: Group\Group\ClippingGroup
 
Последнее редактирование:
Получить размеры пересечения обьекта и маски средствами javascript нереально. А проблема нахождения маски в группе решается довольно просто, хотя и несколько заднепроходно: перебираются все пэйджитемы, с проверкой родителя, у маски это будет группа непосредственно
 
Как перебрать элементы скажем такой группы:
Group(Path, Group( Path, Path))

Просто перебрать, без проверок.
 
Последнее редактирование:
Никак, только через все паситемы с проверкой на родителя. Если вы надеетесь на массив pathItems самой группы, то разочарую вас
 
Ну в документе может быть несколько объектов (например сеты), а проверить нужно только выделенную. Об этом и говорил, что в выделенной группе не могу получить все pageItems, возвращаются только первого уровня.
 
Ну в документе может быть несколько объектов (например сеты), а проверить нужно только выделенную. Об этом и говорил, что в выделенной группе не могу получить все pageItems, возвращаются только первого уровня.
Особенностью индийского программирования является отсутствие четкой иерархической организации обьектов сверху вниз. То есть, если снизу родителя проследить хоть как то можно (но не всегда) , то сверху найти все дочерние обьекты, к сожалению, нельзя. Поэтому только так, других методов медицина не знает
 
На самом деле вы не представляете себе глубину кроличьей норы. Если бы хотя бы детей первого уровня можно было бы отследить у обьекта, то хотя бы рекурсивно перебрать можно было. Ан нет, нельзя, как это грустно звучит
 
  • Спасибо
Реакции: angelp
Спасибо Вам, за ответы) Я думал может я чего не понимаю, хотя исходя из документации вроде ничего и не придумаешь. Думал может как executeMenuCommand, команды есть, а в документации нет))
 
Я вам даже больше скажу, в иллюстраторе полно объектов к которым из модели доступа нет от слова совсем.
Приходится изгаляться вытаскивая их непосредственно из распакованного AI
 
Короче придумал супер заднепроходный способ получения размера)))
executeMenuCommand('Fit Artboard to selected Art'); а потом получаем размер артборда. Ну соответственно можно все обернуть в создание отдельного артборда, получение размера и его последующего удаления.
 
  • Спасибо
Реакции: Leha_Ygli и _MBK_
Люблю извращенные решения 'cooll)' 'thank'
1586263760630.png
 
У ClippingMask не может быть обводки)
 
Может порыться вот тут поможет?
Это решение лучше - клип клипнутая область не обязательно прямоугольники
Запросто может статься так что пересечение боксов довольно большое, а реального пересечения нет вообще
 
На самом деле это вообще супергениальный способ понять из иллюстраторовского скрипта - пересекаются ли объекты произвольной формы ':=)'
 
В моем примере так там вообще был CompoundPath был маской, а свойства в скрипте Clipping нет))
 
Да, это проблема, индусы почему то забыли это свойство добавить группе и компаунду
 
Группу можно проверить на Clipped