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

angelp

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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Из вашего очень сумбурного обьяснения я понял, что, вероятно, вам надо получить видимые размеры обьекта, обтравленного маской или как?
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Да, именно так. Но маска может быть не на самом верху объекта.
Ну, т.е. например: Group\Group\ClippingGroup
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Получить размеры пересечения обьекта и маски средствами javascript нереально. А проблема нахождения маски в группе решается довольно просто, хотя и несколько заднепроходно: перебираются все пэйджитемы, с проверкой родителя, у маски это будет группа непосредственно
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Как перебрать элементы скажем такой группы:
Group(Path, Group( Path, Path))

Просто перебрать, без проверок.
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Никак, только через все паситемы с проверкой на родителя. Если вы надеетесь на массив pathItems самой группы, то разочарую вас
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Ну в документе может быть несколько объектов (например сеты), а проверить нужно только выделенную. Об этом и говорил, что в выделенной группе не могу получить все pageItems, возвращаются только первого уровня.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Ну в документе может быть несколько объектов (например сеты), а проверить нужно только выделенную. Об этом и говорил, что в выделенной группе не могу получить все pageItems, возвращаются только первого уровня.
Особенностью индийского программирования является отсутствие четкой иерархической организации обьектов сверху вниз. То есть, если снизу родителя проследить хоть как то можно (но не всегда) , то сверху найти все дочерние обьекты, к сожалению, нельзя. Поэтому только так, других методов медицина не знает
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
На самом деле вы не представляете себе глубину кроличьей норы. Если бы хотя бы детей первого уровня можно было бы отследить у обьекта, то хотя бы рекурсивно перебрать можно было. Ан нет, нельзя, как это грустно звучит
 
  • Спасибо
Реакции: angelp

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Спасибо Вам, за ответы) Я думал может я чего не понимаю, хотя исходя из документации вроде ничего и не придумаешь. Думал может как executeMenuCommand, команды есть, а в документации нет))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Я вам даже больше скажу, в иллюстраторе полно объектов к которым из модели доступа нет от слова совсем.
Приходится изгаляться вытаскивая их непосредственно из распакованного AI
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Короче придумал супер заднепроходный способ получения размера)))
executeMenuCommand('Fit Artboard to selected Art'); а потом получаем размер артборда. Ну соответственно можно все обернуть в создание отдельного артборда, получение размера и его последующего удаления.
 
  • Спасибо
Реакции: Leha_Ygli и _MBK_

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Люблю извращенные решения 'cooll)' 'thank'
1586263760630.png
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
У ClippingMask не может быть обводки)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Может порыться вот тут поможет?
Это решение лучше - клип клипнутая область не обязательно прямоугольники
Запросто может статься так что пересечение боксов довольно большое, а реального пересечения нет вообще
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
На самом деле это вообще супергениальный способ понять из иллюстраторовского скрипта - пересекаются ли объекты произвольной формы ':=)'
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
В моем примере так там вообще был CompoundPath был маской, а свойства в скрипте Clipping нет))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 209
Реакции
10 848
Да, это проблема, индусы почему то забыли это свойство добавить группе и компаунду
 

angelp

Участник
Топикстартер
Сообщения
50
Реакции
4
Группу можно проверить на Clipped