enter image description here I want to replicate this pattern in Ai. However, I am unable to replicate the small detail that these lines are not aligned in a straight line and instead point towards a point in the canvas, more like how iron filings align themselves to face a magnet.

Any assistance is greatly appreciated, thanks!

  • What have you tried? Have you checked the 3d tools in illustrator? That might help.
    – Luciano
    Commented Oct 20, 2016 at 13:25
  • I'm certain there is a duplicate of this somewhere but I cannot for the life of me find it
    – Cai
    Commented Oct 20, 2016 at 18:44

3 Answers 3


The best way I can think of is to use EFFECTS - BLUR - RADIAL BLUR, but this rasterizes your lines.

Step 1: make rows and columns of dots: Make 1 dot, hold Shift + Option/alt and drag over a copy, then Command/Control + D to duplicate it across the top at equal spaces. Then select the row, hold Shift + Option/alt and drag it down roughly square, and then Command/Control + D to duplicate it down to fill the board. You can get more technical if you want of course, but I'm too lazy for that. radial blur step 1

Step 2: Selecting only the dots (I put mine in a separate layer first) Go to EFFECTS - BLUR - RADIAL BLUR

effects - blur - radial blur

Step 3: choose your settings, be sure to choose ZOOM. For a 5x3 inch pieces, these were my settings:

radial blur settings

You should get somthing like this: enter image description here

So just play around with the settings until you're happy with the result. I usually create multiple copies of the "dots" layer, so I can go back and forth easier.

  • Great use of the Radial Blur!
    – Silly-V
    Commented Jan 18, 2017 at 20:16

This is likely achieved using some kind of automatic software process because indeed, as the lines are all the same length (including the awkward middle one), they were somehow arranged "like metal filings on a magnet". However, the approach I thought of was using the Blend tool. It's more work when the shapes face different ways though. First, I tried to use stroked lines: I put a slanted line at one corner of the artboard and reflected a copy of it to the other side. Then I used Blend to make a blend of a single row of these dashes. I thought it was going to be easy to just reflect it to the bottom and blend the two new blends, but it was not so: the result was a "Z" blend of the top row and the bottom row connected by a diagonal line. So, I went back and expanded the blend rows so that my dashes became thin rectangles, and made compound paths just in case. Still, when reflected and blended with its reflection, these rows of slanted rectangles didnt give the expected result because it just wasn't blending the right way and formed curvy configurations. However, when I took the bottom row and made it flat (scale vertically to very very little size), it formed a good look for half of the pattern. Since this worked OK, I reflected this vertically to form the complete box. The problem is that still, the lines are not the same length all around - so it may take more processing of unknown kind to make them look more like the example.

Completed pattern using Blend tool

The layer structure


I found this script rotateTowardPoint.jsx to be helpful:

// 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(){
            rotateToPoint( sels, conf );

        win.btnGroup.cancelBtn.onClick = function(){
    } 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;



  • 1
    Can you explain how can your script be used to solve the current problem? We're looking for answers with some explanation, not just a link and some code.
    – Luciano
    Commented Oct 16, 2018 at 10:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.