Угловая сетка со стрелками

введите описание изображения здесьПривет, ребята, я только что сделал это вручную в Illustrator, но хочу сделать это в гораздо большем масштабе. У кого-нибудь есть идея, как автоматизировать этот процесс или есть скрипт, который делает что-то подобное? Спасибо!

Кроме того, вот как я это сделал — есть ли вообще способ проще?введите описание изображения здесь

Ответы (3)

Есть отличный скрипт — Rotate Toward Point от Hiroyuki Sato . Сценарий поворачивает объекты в выделении по направлению к центру объекта переднего плана.

Обязательно поместите «выбранный» объект (тот, к которому вы хотите повернуться) сверху.

Щелкните правой кнопкой мыши → Упорядочить → На передний план ( Shift+ Ctrl+ ])

Вы просто выбираете все и запускаете скрипт.

         До после

До После

( В этом видео также показан скрипт в действии — сначала он распределяет их по пути, а затем поворачивает к центральному человеку)


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


Код ниже

// rotateTowardPoint.jsx

// rotates the objects in the selection toward the center of the foreround object.
// USAGE: select the objects and run this script.

// test env: Adobe Illustrator CC (Win/Mac)

// Copyright(c) 2014 Hiroyuki Sato
// http://shspage.blogspot.jp/
// This script is distributed under the MIT License.
// See the LICENSE file for details.

// Fri, 14 Feb 2014 21:08:40 +0900

function main(){
    // settings:
    // extract_groups: rotates each item in the groups, otherwise rotates each groups  (checkbox value)
    // show_dialog: shows a dialog before execution, otherwise shows no dialog
    var conf = {
        extract_groups : false,
        show_dialog : true
    }

    if(documents.length < 1) return;

    var sels = activeDocument.selection;
    if( sels.length < 2 ) return;

    if( conf.show_dialog){
        var win = new Window("dialog", "rotateTowardPoint");
        win.alignChildren = "fill";

        win.chk = win.add("checkbox", undefined, "extract groups");

        win.btnGroup = win.add("group", undefined );
        win.btnGroup.alignment = "center";
        win.btnGroup.okBtn = win.btnGroup.add("button", undefined, "OK");
        win.btnGroup.cancelBtn = win.btnGroup.add("button", undefined, "Cancel");

        var getValues = function(){
            conf.extract_groups = win.chk.value;
        }

        win.btnGroup.okBtn.onClick = function(){
            getValues();
            rotateToPoint( sels, conf );
            win.close();
        }

        win.btnGroup.cancelBtn.onClick = function(){
            win.close();
        }
        win.show();
    } else {
        rotateToPoint( sels, conf );
    }
}

function rotateToPoint( sels, conf ){
    var target = sels[0];

    if( conf.extract_groups ){
        sels = extractGroup( sels.slice(1) );
    } else {
        sels = sels.slice(1);
    }

    // gets the center of the foreground object.
    // the other objects are rotated toward this point.
    var point = getCenter( target );

    for(var i = 0; i < sels.length; i++){
        var t = getAngle( point, getCenter(sels[i]));
        sels[i].rotate( t - 90, true, true, true, true, Transformation.CENTER );
    }
}

function getCenter(p){
    return [p.left + p.width / 2,
            p.top - p.height / 2];
}

function getAngle(p1, p2){
    return Math.atan2(p2[1] - p1[1],
                      p2[0] - p1[0]) * 180 / Math.PI;
}

function extractGroup( s, r ){
    if( r == undefined ) r = [];

    for( var i = 0; i < s.length; i++){
        if( s[i].typename == "GroupItem" ){
            extractGroup( s[i].pageItems, r );
        } else {
            r.push( s[i] );
        }
    }

    return r;
}

main();

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

Его можно сделать, дублируя бленды стрелок и заменяя шипы.

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

  • Создайте шипы, смешивая два угла, разверните их и разгруппируйте.

шипы

  • Создайте смесь между горизонтальной и вертикальной стрелкой

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

  • Выберите переходы стрелок и один из углов и замените позвоночник

позвоночник

Результат

результат

Я бы использовал «Эффект» > «Исказить и трансформировать» > «Трансформировать».

Нарисуйте вертикальный ряд стрелок. Нижняя точка используется как точка вращения.

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

Сгруппируйте все это.

Выберите Effect > Distort & Transform > Transformиз меню

Установите исходную точку в нижний левый угол :

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

Затем добавьте необходимое количество отрицательных градусов в поле «Угол » и необходимое количество копий в поле « Копии » .

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

Щелкните Okay. Выберите Object > Expand Appearance, затем Object > Ungroup(дважды) и удалите то, что вам не нужно.

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

Illustrator также сделает за вас математические расчеты, если это необходимо....

Если вы знаете, что вам нужны 8 углов стрелок в 90-градусной секции, вы можете вставить 360/32в поле « Угол », а затем вставить 8в поле «Копии».

360 градусов круга / 4 секции по 8 столбцов в каждой секции, так что 8x4 = 32, таким образом 360/32

Illustrator рассчитает градус угла, чтобы разместить 8 копий в одном квадранте круга. Выйдите из поля «Ангел», затем вернитесь и просто добавьте знак минус (-) перед углом, чтобы они повернулись вправо.

Жаль, что нет возможности перекоса
Это здорово, но есть ли способ создать сетку, как в исходном посте?
@JoshK-H Если аспект сетки обязателен , я искренне считаю, что либо ваш существующий метод, либо метод, опубликованный Danielillo, являются лучшими решениями. Я не фанат javascript в этом случае, потому что ни одна из стрелок не выровнена ни с чем. Мой метод выравнивает стрелки друг с другом, указывая на центральное место. Метод Даниэльо выравнивает стрелки по прямоугольной сетке, указывая на центральное место. JavaScript просто меняет углы стрелок. -- Но это не мой проект :)