Изменение размера плавной формы в Illustrator, Photoshop или InDesign

Можно ли изменить размер группы фигур и сохранить расстояние между ними? Я пробовал это в Photoshop, Illustrator, InDesign, Muse, Sketch, но безуспешно. Может есть плагин для этого?

введите описание изображения здесь

Ответы (2)

Вы можете легко вручную перераспределить интервал в несколько кликов:

введите описание изображения здесь

Это будет перемещать объекты для регулировки интервала, так что это не идеально.

Кроме этого, ваш лучший вариант, вероятно, состоит в том, чтобы использовать какой-либо атрибут внешнего вида для создания смещения и выравнивания самих объектов без пробела...

Например, в Illustrator с эффектом Offset Path для заливки фигур:

введите описание изображения здесь

После изменения размера (убедитесь, что функция «Масштабирование обводки и эффекты » отключена):

введите описание изображения здесь

Вы можете сделать это с любым количеством атрибутов в зависимости от вашего варианта использования; обводка, путь смещения, интервал вставки в InDesign и т. д. Суть в том, чтобы сохранить интервал как атрибут отдельно от относительного позиционирования объектов.

Вот скрипт для Illustator, который сделает это с шириной, введенной пользователем. Для простоты я написал его только для изменения размера по горизонтали, и он работает только в том случае, если элементы находятся в группе, которая является первым выбором.

#target illustrator

var group = activeDocument.selection[0];
var toWidth = prompt ("Resize to width (pts):", Math.ceil (group.width));
if (group.typename == "GroupItem") {ResizePreserveMargins (group, toWidth);}

function ResizePreserveMargins (group, toWidth)
{ var count, i, items, item, margins=[], width=toWidth, margin, x=0;
  items = SortLeftToRight (group.pageItems);
  count = items.length;
  for (i=0; i<count-1; i++)
  { item = items[i];
    margin = items[i+1].left - item.left - item.width;
    margins.push (margin);
    width -= margin + item.width;
  }
  width -= items[count-1].width;

  for (i=0; i<count; i++)
  { item = items[i];
    if (i) {item.left = x + margins[i-1];}
    item.width += width/count;
    x = item.left + item.width;
  }
}

function SortLeftToRight (items)
{ var lefts=[], sorts=[], i, j, count, count2, item;
  count = items.length;
  // Gather & sort item left values
  for (i=0; i<count; i++) {lefts.push (items[i].left);}
  lefts.sort (function (a,b) {return a-b;});
  // Add left-to-right sorted items to final list
  for (i=0; i<count; i++)
  { item = items[i];
    count2 = lefts.length;
    for (j=0; j<count2; j++)
    { if (items[i].left == lefts[j])
      { sorts.push (item);
        lefts.splice (j,1);
        break;
      }
    }
  }
  return sorts.reverse ();
}
очень хороший сценарий! лучшее решение до сих пор :) Спасибо!