Selección de las mismas formas en archivos vectoriales

Tengo un archivo vectorial que contiene más de 500 círculos, el diámetro de los círculos es diferente (5 mm, 5,5 mm y 10 mm). ¿Hay alguna forma de seleccionar todos los círculos de la misma forma (por ejemplo, todos los de 5 mm de diámetro) y cambiar el color de fondo?

Respuestas (2)

Técnicamente el ilustrador no sabe que son círculos. Me refiero a que están implementando esta función lentamente (de forma incorrecta), y en realidad no resolvería ningún problema que no esté relacionado con los SVG. Para resumir, internamente son solo caminos. De hecho si uno es ilustrador realmente pedante ni siquiera puede hacer círculos, solo algo parecido al círculo.

Entonces, obviamente, el ilustrador no puede seleccionar círculos, ya que no tiene idea de tales cosas. Sin embargo, eso no significa que no podamos detectarlos, solo necesitamos una forma un poco diferente de definir lo que estamos buscando.

Primero, solo pudimos detectar el área de los objetos. Como sabemos que el área a del círculo es π r 2 . Podemos seleccionar todos los objetos que califiquen para esto.

Bueno, hasta ahora tan divertido. Pero esto podría detectar una serie de formas que no son círculos. Pero podríamos agregar más controles, sabemos que el perímetro de un círculo es 2 π r , ahora estamos en un terreno bastante seguro, pero aún podríamos seleccionar un montón de cosas que son iguales, así que también podríamos agregar más controles. y decir que el número de puntos será 4 y el camino está cerrado. Podríamos ir aún más lejos y asegurarnos de que el cuadro delimitador sea cuadrado y el centro bb esté en el punto promedio, y que las tangentes tengan una longitud específica, pero eso es un poco exagerado para la mayoría de los escenarios.

Así es como lo harías:

#target illustrator

var objs = app.activeDocument.pageItems;
traverseSceneObjects(objs, selectCircle);

//Define radius to appenf to selection
var radius = 10;

var circle_perimeter = 2 * Math.PI * mm2points(radius); 
var circle_area = Math.PI * Math.pow(mm2points(radius), 2); 

function selectCircle(item){
    if ( compare(item.length, circle_perimeter) &&
         compare(item.area, circle_area) &&
         item.pathPoints.length == 4 &&
         item.closed
        )
         item.selected = true;
}


function traverseSceneObjects(pageItems, func){

    for (var iter=0 ; iter<pageItems.length; iter++ ){
        var item = pageItems[iter];
        var typename = item.typename;

        // apply action or get the subitems of object
        if (typename === "PathItem"){
            func(item);


        } else if (typename === "GroupItem") {
            traverseSceneObjects( item.pageItems );

        } else if (typename === "CompoundPathItem" ) {
            traverseSceneObjects( item.pathItems );
        }

    }

}

function compare(a, b){
    return Math.abs( a - b) < 0.01 * a;
}


function mm2points(mm){
    return 2.83464567 * mm;  
}

Illustrator no ofrece la posibilidad de seleccionar objetos que tengan el mismo tamaño o dimensiones.

Todas las opciones para seleccionar objetos similares están en Select > Same:

ingrese la descripción de la imagen aquí

Es posible que pueda lograr esto a través de secuencias de comandos, pero eso está fuera de mi timonera.