Выбор одинаковых фигур в векторных файлах

У меня есть векторный файл, содержащий более 500 кругов, диаметр кругов разный (5 мм, 5,5 мм и 10 мм). Есть ли способы выбрать все круги одинаковой формы (например, все диаметром 5 мм) и изменить цвет задней панели?

Ответы (2)

Технически иллюстратор не знает, что это круги. Я имею в виду, что они реализуют эту функцию медленно (всеми неправильными способами), и это не решит никаких проблем, не связанных с SVG. Короче говоря, внутри они просто пути. На самом деле, если быть очень педантичным иллюстратором, можно даже не делать круги, а только что-то близкое к кругу.

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

Сначала мы могли просто определить площадь объектов. Поскольку мы знаем, что площадь круга равна π r 2 . Мы можем выбрать все объекты, которые подходят для этого.

Ну пока так весело. Но это может обнаружить ряд форм, которые не являются кругами. Но мы могли бы добавить больше проверок, мы знаем, что периметр круга равен 2 π r , теперь мы в достаточно безопасном месте, но мы все еще можем выбрать кучу одинаковых вещей, так что мы могли бы добавить еще несколько проверок . и сказать, что количество точек должно быть 4 и путь закрыт. Мы могли бы пойти еще дальше и убедиться, что ограничительная рамка квадратная, а центр bb находится в средней точке, а касательные имеют определенную длину, но это немного излишне для большинства сценариев.

Вот как вы это сделаете:

#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 не предлагает возможности выбора объектов одинакового размера или размеров.

Все варианты выбора похожих объектов находятся в Select > Same:

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

Вы можете сделать это с помощью сценариев, но это не в моей компетенции.