Cambio de tamaño de forma fluida en Illustrator, Photoshop o InDesign

¿Es posible cambiar el tamaño de un grupo de formas y mantener la distancia bloqueada entre ellas? Probé esto en Photoshop, Illustrator, InDesign, Muse, Sketch pero sin éxito. Tal vez hay un complemento para eso?

ingrese la descripción de la imagen aquí

Respuestas (2)

Puede redistribuir manualmente el espacio con unos pocos clics con bastante facilidad:

ingrese la descripción de la imagen aquí

Sin embargo, eso moverá los objetos para ajustar el espaciado, por lo que no es lo ideal.

Aparte de eso, su mejor opción probablemente sea usar algún atributo de apariencia para crear el desplazamiento y alinear los objetos sin espacio...

Entonces, en Illustrator con un efecto de ruta compensada en el relleno de las formas, por ejemplo:

ingrese la descripción de la imagen aquí

Después de cambiar el tamaño (asegúrese de que Scale Strokes & Effects esté desactivado):

ingrese la descripción de la imagen aquí

Puede hacer esto con cualquier número de atributos dependiendo de su caso de uso; un trazo, una ruta de desplazamiento, espaciado de inserción en InDesign, etc. El punto es mantener el espaciado como un atributo separado del posicionamiento relativo de los objetos.

Aquí hay una secuencia de comandos para Illustator que hará esto con un ancho ingresado por el usuario. Para simplificar, solo lo he escrito para el cambio de tamaño horizontal, y solo funciona si los elementos están en un grupo que es la primera selección.

#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 ();
}
muy buen guion! la mejor solución hasta ahora :) ¡Gracias!