Skip to content

Instantly share code, notes, and snippets.

@AlexeyNik
Last active July 22, 2020 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlexeyNik/e2848fb2c95614caabbd89837940d3d8 to your computer and use it in GitHub Desktop.
Save AlexeyNik/e2848fb2c95614caabbd89837940d3d8 to your computer and use it in GitHub Desktop.
// координаты выделенных объектов c учетом 'clipped' элементов
var Bds = doc.selection;
var coord = getGeometricSelect(Bds);
function getGeometricSelect(item) {
var el, el1;
// координаты первого элемента
el1 = getVisibleBounds(item[0], true);
// перебираем оставшиеся
for (var p = 1; p < item.length; p++) {
el = getVisibleBounds(item[p], true);
if (el1[0] > el[0]) el1[0] = el[0];
if (el1[1] < el[1]) el1[1] = el[1];
if (el1[2] < el[2]) el1[2] = el[2];
if (el1[3] > el[3]) el1[3] = el[3];
}
// alert(el1);
return el1;
}
// определяет координаты объекта с учетом 'clipped' (guides - ?)
function getVisibleBounds(item, geometric) {
var bounds;
// проверяем griou есть у нее свойство 'clipped'
if (item.typename == 'GroupItem' && item.clipped) {
var clippingItem;
// смотрим на все элементы в группе, чтобы найти элемент 'clipped'
for (var i = 0; i < item.pageItems.length; i++) {
// у дочернего элемента будет установлено свойство `clipping`
if (item.pageItems[i].clipping) {
// нашли clipping элемент!
clippingItem = item.pageItems[i];
break;
// сделать то же самое для 'CompoundPathItems'
} else if (item.pageItems[i].typename == "CompoundPathItem") {
if (item.pageItems[i].pathItems[0].clipping) {
clippingItem = item.pageItems[i];
break;
}
}
}
// находим координаты 'clipped' элемента
bounds = geometric ? clippingItem.geometricBounds : clippingItem.visibleBounds;
} else {
// или для нормального элемента коррдинаты
bounds = geometric ? item.geometricBounds : item.visibleBounds;
}
return bounds;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment