このサイトはアフィリエイト広告を利用してます

Illustratorscriptでガイドパターンを自動作成

【超時短】7種類のガイドラインを瞬時に作成できるIllustratorスクリプト

  • レイアウトのガイドラインをテンプレート化したい
  • ガイドラインを作成する手間をなくしたい
  • 効率的にデザインをしたい
  • レイアウト作業でガイドラインを毎回作成するのは、意外と手間がかかりますよね。
    そんな手間を1クリックで解消できるのが、Illustratorスクリプト【7Guidelines】です。
    このスクリプトを使えば、アートボードにぴったりのガイドラインを自動生成。煩雑な作業が一瞬で終わります。

    本記事では、【7Guidelines】の使い方やスクリプトのソースコードを詳しく解説
    効率的で論理的なデザインを実現するためのツールとして、ぜひお試しください。

    それでは、どうぞ!

    Profile
    この記事を書いている私は、DTPデザイナーとしてIllustratorの操作経験が15年以上あり、スクリプトも自ら作成し、デザイン作業の効率化を図っています。
    ブログでもスクリプトに関する記事を定期的に公開していますので、ぜひご参考にしてください。
    関連記事:「完全無料」で作業の効率化!Illustratorスクリプト特集!

    「クリエイティブ」がわかる転職エージェント

    ●「量より質」を重視した求人のご紹介
    ●「クリエイティブがわかっている」
    ●「求人企業を深く知る・密接な関係」

    【7Guidelines】スクリプトの概要

    DESCRIPTION
    まずは、【7Guidelines】とは、どのようなスクリプトなのかを説明します。

    スクリプトの機能

    【7Guidelines】は、私が自作したオリジナルスクリプトで、デザイン作業の効率を劇的に向上させるために多彩な機能を搭載しています。
    以下に主な機能をご紹介します。

    アートボードのサイズに自動対応


    アートボードのサイズに合わせて、ぴったりのガイドラインを一瞬で作成できます。

    プレビュー機能付き


    ガイドラインを作成する前に、プレビューで仕上がりを確認できるので、安心して作業を進められます。

    7パターンのガイドラインから選択可能


    デザイン内容に応じて、7種類のガイドラインパターンから最適なものを選べるので、デザインの幅が広がります。

    ・シンメトリー(縦)
    ・シンメトリー(横)
    ・日の丸
    ・3分割
    ・対角線
    ・トライアングル
    ・黄金比

    スクリプトの使い方

    本スクリプトは、以下の手順で利用できます。

    • STEP1.ファイルメニューからスクリプトを選択
    • STEP2.【7Guidelines】を選択
    • STEP3.【開く】ボタンをクリック
    • STEP4.【オフセット値】を入力
    • STEP5.【ガイドライン】を選択
    • STEP6.【プレビュー】ボタンをクリック
    • STEP7.プレビューを確認
    • STEP8.【OK】ボタンをクリック

    【7Guidelines】プレビュー

    なお、次の記事では、Illustratorスクリプトの基本的な使い方や、具体的な活用事例について詳しく解説しています。
    ぜひこちらの記事も参考にしてください。

    スクリプトのダウンロード

    【7Guidelines】は、下記からサンプルとしてダウンロードできます。


    ダウンロード:7Guidelines.jsx

    使用前に、必ず「注意事項と免責事項」をご確認ください。安全に利用していただくための重要な情報が記載されています。

    動作チェック

    このスクリプトは、以下の環境で動作確認済みです。

    ・Illustrator CS6【Windows】
    ・Illustrator CC2024【Mac】



    【7Guidelines】のスクリプトのソースコード

    SOURCE CODE
    ここでは、【7Guidelines】の動作フローと各処理条件が一目でわかるソースコードを紹介します。
    理解しやすいよう、説明用のコメントアウトも含まれていますので、参考にしながらコードの動きを確認してください。

    なお、下記の記事では、Illustratorスクリプトの自作方法について、具体的なサンプル事例を交えながら詳しく解説しています。


    スクリプト作成に興味がある方は、ぜひ参考にしてみてください。

    ソースコード

    
    if(app.documents.length > 0){
        app.coordinateSystem=CoordinateSystem.ARTBOARDCOORDINATESYSTEM; //座標値をアートボード基準
        var doc = app.activeDocument;   //アクティブドキュメントを取得
        var ruler = doc.rulerUnits; //ルーラーユニット(単位)を取得
        var unit = ruler.toString().split ('.'); //ルーラーユニット(単位)を文字列として取得
        //var sel = doc.selection; //選択中オブジェクトを取得
    
        var win = new Window ('dialog','ガイドパターン',[100,100,350,550]);
        win.graphics.font = ScriptUI.newFont(win.graphics.font.name, win.graphics.font.style, 13);  //ScriptUI.newFont(フォント名、スタイル(‘REGULAR’、‘BOLD’、‘ITALIC’、‘BOLDITALIC’)、サイズ)
        win.add('statictext',[20,20,100,40],'オフセット値:'); //テキスト
        var offSet = win.add('edittext',[103,20,140,40],'0'); //エディタテキスト
        win.add ('statictext', [145,20,300,40], unit[1]);  //単位
        offSet.active = true;   //オフセットテキストエリアにフォーカス
    
        var cb01 = win.add('radiobutton',[20,60,150,80],' シンメトリー(縦)');
        var cb02 = win.add('radiobutton',[20,90,150,110],' シンメトリー(横)');
        var cb03 = win.add('radiobutton',[20,120,150,140],' 日の丸');
        var cb04 = win.add('radiobutton',[20,150,150,170],' 3分割');
        var cb05 = win.add('radiobutton',[20,180,150,200],' 対角線');
        var cb06 = win.add('radiobutton',[20,210,150,230],' トライアングル');
        var cb07 = win.add('radiobutton',[20,245,100,265],' 黄金比');
        var panel = win.add('panel',[100,240,200,270],"",{borderStyle:'black'});
        var cb08 = panel.add('radiobutton',[5,5,50,20],' 横');
        var cb09 = panel.add('radiobutton',[55,5,105,20],' 縦');
        cb01.value = true;
        cb08.value = true;
    
        var bt01 = win.add('Button',[20,290,230,330],'プレビュー');
        var bt02 = win.add('Button',[20,340,230,380],'OK',{name:"ok"});
        var bto3 = win.add('Button',[20,390,230,430],'Cancel',{name:"cancel"});
        
        bt01.onClick = function(){
            main ();   //メイン処理を実行
            app.redraw();   //再処理
            app.undo(); //初期化
        }
    
        bt02.onClick = function(){
            win.close ();   //ウインドウパネルを閉じる
            main ();    //メイン処理を実行
        }
    
        bto3.onClick = function(){
            win.close ();   //ウインドウパネルを閉じる
        }
    
        win.show(); //ウインドウパネルの表示
    }else{
        alert ("ドキュメントがありません");
    };
    
    //単位の変換係数 ここから
    function units(num){ 
        var setNum =  eval(num.text);  //テキストを数字に変換
        var conversion;   //代入用の空変数を作成
         switch(ruler) {
        case RulerUnits.Points: //ドキュメント単位が「ポイント」の場合
            conversion = setNum;
             break;
        case RulerUnits.Picas: //ドキュメント単位が「パイカ」の場合
            conversion = Math.round((setNum * 12)  * 100) / 100;    //下三桁になるように計算
            break;
        case RulerUnits.Inches: //ドキュメント単位が「インチ」の場合
            conversion = Math.round((setNum * 72)  * 100) / 100;
            break;
        case RulerUnits.Millimeters: //ドキュメント単位が「ミリ」の場合
            conversion = Math.round((setNum * 2.8356)  * 100) / 100;
            break;
        case RulerUnits.Centimeters: //ドキュメント単位が「センチ」の場合
            conversion = Math.round((setNum * 28.356)  * 100) / 100;
            break;
        case RulerUnits.Pixels: //ドキュメント単位が「ピクセル」の場合
            conversion = setNum;
            break;
        default:
            alert("ドキュメント単位が対応していません");
        }
        return conversion;  //値を返す   
    }
    //単位の変換係数 ここから
    
    //既存レイヤーの有無を確認 ここから
    function layer(){
        var lays = doc.layers;    //レイヤーを指定
        try{
            var layObj = lays.getByName ('Layout'); //レイヤー名を取得
            doc.layers['Layout'].locked = false;
       } catch(e){
               var layObj = lays.add();  //新規レイヤー作成
               layObj.name = 'Layout' ; //レイヤー名を変更
       }
        var actLayer = doc.layers['Layout'];    //レイヤー名で指定
        doc.activeLayer =actLayer;  //指定されたレイヤをアクティブにする
    }
    //既存レイヤーの有無を確認 ここまで
      
    //メイン処理 ここから
    function main(){
         layer();//関数でレイヤ処理
         var unit = units(offSet);   //単位変換
         
        //アートボード座標の参照 ここから
        var artIndex = doc.artboards.getActiveArtboardIndex();  //アクティブアートボードの番号を参照する
        var rect = doc.artboards[artIndex].artboardRect; //アクティブアートボードの座標を取得
        var left = rect[0]; //アートボードの左
        var top = rect[1]; //アートボードの上
        var right = rect[2]; //アートボードの右
        var bottom = rect [3]; //アートボードの下
        var centerX = (right + left) / 2;   //X軸のセンターを求める
        var centerY = (top + bottom) / 2;   //Y軸のセンターを求める
        //アートボード座標の参照 ここまで
       
       //オフセット枠 作成 ここから
       var width = (right - left) - (unit *2); //横幅
       var height = (top - bottom) - (unit *2);    //縦幅
       var min = Math.min(width,height);    //横幅、縦幅を比べて短い方の値を取得
       var max = Math.max(width,height);    //横幅、縦幅を比べて長い方の値を取得
       var rect = doc.pathItems.rectangle(-unit,unit,width,height); //四角形ツール
      
       //オフセット枠 作成 ここまで
       
       //シンメトリー(縦) ここから
       if(cb01.value === true){ 
            var heightLine = doc.pathItems.add();   //パスアイテムを作成
            heightLine.setEntirePath ([[(width / 2) +unit ,-unit],[(width / 2) +unit,-height - unit]]); //座標を追加
       //シンメトリー(縦) ここまで
        //シンメトリー(横) ここから
       } else if(cb02.value === true){
           var widthLine = doc.pathItems.add();
           widthLine.setEntirePath ([[unit,(-height/2) - unit ],[width + unit,(-height/2) - unit]]);
        //シンメトリー(横) ここまで
        //日の丸 ここから    
       } else if(cb03.value === true){
           var radius = min * 61.8 /100 ; //円の半径
           var rounded = doc.pathItems.ellipse (centerY + (radius /2) ,centerX - (radius / 2),radius,radius);   //円形の作成
        //日の丸 ここまで
        //3分割 ここから    
       } else if(cb04.value === true){
           var gidWidth = width / 3;    //横幅を3分割
           var gidHeight = height / 3;  //縦幅を3分割
           for(var i = 0 ; i < 3; i++){ //Y軸に繰り返す
              for(var j = 0; j < 3; j++){//X軸に繰り返す
                   var gid = doc.pathItems.rectangle(-unit - (i * gidHeight), unit + (j * gidWidth), gidWidth, gidHeight);  //四角形の6つ作成          
               }
           }
        //3分割 ここまで
        //対角線 ここから    
        } else if(cb05.value === true){ 
            var shot = width * 38.2 /100;
            var diaLine = width * 61.8 /100;
            var diagonal = doc.pathItems.add();   //パスアイテムを作成
             diagonal.setEntirePath ([[right -unit ,top -unit],[left + unit,bottom + unit]]); //座標を追加
             
             var line01 = doc.pathItems.add();   //パスアイテムを作成
             line01.setEntirePath ([[left +unit ,top -unit],[shot +unit ,bottom + unit]]); //座標を追加
            
            var line02 = doc.pathItems.add();   //パスアイテムを作成
             line02.setEntirePath ([[right -unit ,bottom +unit],[diaLine + unit,top - unit]]); //座標を追加
        //対角線 ここまで
        //トライアングル ここから    
        } else if(cb06.value  === true){
            var triangle = doc.pathItems.add();
             triangle.setEntirePath ([[left + unit,bottom + unit],[(width / 2) + unit,top - unit],[right - unit,bottom + unit]]);
        //トライアングル ここまで
        //黄金比 ここから
        } else if(cb07.value === true){ 
            //オブジェクトのコピーから移動 ここから
            function duplicateAndTransform(obj, scale, translateX, translateY, rotateAngle, anchor) {
                var copy = obj.duplicate();
                copy.resize(scale, scale, true, true, true, true, scale, anchor);
                copy.translate(translateX, translateY);
                copy.rotate(rotateAngle);
            }
            //オブジェクトのコピーから移動 ここまで
            
            var gold = max * 61.8 / 100;
            var gold01 = gold * 61.8 / 100;
            var gold02 = gold01 * 61.8 / 100;
            var gold03 = gold02 * 61.8 / 100;
            
            var group = doc.groupItems.add();
            var goldbox01 = group.pathItems.rectangle(0 -unit, 0 + unit,gold , gold);
            //goldbox01.guides = true;
            var arc = group.pathItems.ellipse (top - unit,left + unit,gold *2,gold * 2);   //円形の作成
            arc.pathPoints[2].remove ();
            arc.pathPoints[2].remove ();  
            arc.closed = false;     
            //arc.guides = true;
    
            doc.layers['Layout'].pageItems[0].selected = true;
            var sel = doc.selection; //選択中オブジェクトを取得
            if(sel.length > 0){
                duplicateAndTransform(sel[0], 61.8, gold, top, -90, Transformation.TOPLEFT);
                doc.selection = null;
            }
            doc.layers['Layout'].pageItems[0].selected = true;
            sel = doc.selection; //選択中オブジェクトを取得
            if(sel.length > 0){
                duplicateAndTransform(sel[0], 61.8, 0, -gold01, -90, Transformation.TOPRIGHT);
                doc.selection = null;
            }
            doc.layers['Layout'].pageItems[0].selected = true;
            sel = doc.selection; //選択中オブジェクトを取得
            if(sel.length > 0){
                duplicateAndTransform(sel[0], 61.8, -gold02, 0, -90, Transformation.BOTTOMRIGHT);
                doc.selection = null;
            }
            doc.layers['Layout'].pageItems[0].selected = true;
            sel = doc.selection; //選択中オブジェクトを取得
            if(sel.length > 0){
                duplicateAndTransform(sel[0], 61.8, 0, gold03, -90, Transformation.BOTTOMLEFT);
                doc.selection = null;
            }
           for(var i= 0; i < doc.layers['Layout'].pageItems.length -1; i++){
                try{
                    doc.layers['Layout'].pageItems[i].selected = true;
                } catch(e){}
            }
            var sel = doc.selection;
            var grObj = doc.groupItems.add();
            for(var i = 0; i < sel.length ; i++){
                sel[i].move(grObj,ElementPlacement.PLACEATEND);
            }
            doc.selection = null;
            doc.layers['Layout'].pageItems[0].selected = true;
            sel = doc.selection; //選択中オブジェクトを取得
            var selCenterX = sel[0].left + sel[0].width / 2;
            var selCenterY = sel[0].top - sel[0].height / 2;
            sel[0].translate(centerX - selCenterX, centerY - selCenterY);
            if(cb08.value === false){
                doc.layers['Layout'].pageItems[0].selected = true;
                sel = doc.selection; //選択中オブジェクトを取得
                sel[0].rotate(-90);
                selCenterX = sel[0].left + sel[0].width / 2;
                selCenterY = sel[0].top - sel[0].height / 2;
                sel[0].translate(centerX - selCenterX, centerY - selCenterY);            
            }
        }
        //黄金比 ここまで
        //ガイド作成 ここから
        for(var i = 0; i < doc.layers['Layout'].pageItems.length; i++){
            try{
                doc.layers['Layout'].pageItems[i].selected = true;
            }catch(e){}
        }
        app.executeMenuCommand("makeguide");//ガイド作成
        //ガイド作成 ここから
        doc.layers['Layout'].locked = true
    }
    //メイン処理 ここまで
    



    注意事項と免責事項

    注意している女性
    【7Guidelines】は、商用利用可能です。ただし使用につきましては、下記の注意事項と免責事項を必ずお守りください。

    注意事項

    ・予期せぬエラーやデータ損失を防ぐために、スクリプト実行前には必ずデータを保存してください。
    ・事前にスクリプトの動作確認を行い、環境に適しているか確認してください。
    ・Illustratorのアップデートによりスクリプトの動作が変わる可能性があります。
    アップデート後の不具合についてはサポートできませんので、あらかじめご了承ください。

    免責事項

    ・ご利用はすべて自己責任でお願いいたします。
    ・スクリプトの使用によるトラブルや損失について、当方は一切の責任を負いません。
    ・商用利用における成果物の品質や結果に関しては、一切の責任を負いません。
    ・本スクリプトの著作権は制作者に帰属します。無断で転送・販売・配布することは禁止いたします



    まとめ:7つのガイドラインを作成する【7Guidelines】

    SUMMARY
    今回は、アートボードにぴったりのガイドラインを自動生成してくれるIllustratorスクリプト【7Guidelines】をご紹介しました。
    【7Guidelines】のポイントをおさらいすると

    ・アートボードのサイズに自動対応
    ・プレビュー機能付きで簡単に確認可能
    ・7パターンのガイドラインから自由に選択

    ガイドライン作成に時間をかけていた今までの手間を、このスクリプトで大幅に短縮できます。
    効率的で論理的なデザインワークを実現し、作業時間を節約しましょう。ぜひお試しください!

    ダウンロード:7Guidelines.jsx

    またIllustratorスクリプトについてさらに詳しく知りたくなった方には、次の記事でおすすめの書籍とWEBサイトも紹介しています。興味があればぜひ参考にしてください

    というわけで今回は以上です。
    『【超時短】7種類のガイドラインを瞬時に作成できるIllustratorスクリプト』を最後までお読みいただき、ありがとうございました。

    Illustratorスクリプトのおすすめ書籍!

    サンプルプログラム330本掲載

    また、以下の記事で今回紹介した書籍以外にもスクリプトに関する書籍を紹介しているので参考にしてください。

    ガネメ現役サラリーマン

    投稿者の過去記事

    ◇このブログでは、15年以上DTPデザイナーとして、学んできたデザインやパソコンのセキュリティ知識・参考になった書籍などを紹介しています。
    たまに、脇道にそれることもあります。

    ◇このブログはアフィリエイト広告を利用しています

    ◇取得資格
    ・情報セキュリティマネジメント
    ・ITパスポート
    ・色彩検定 2級
    ・色彩検定 UC級
    ・屋外広告士
    ・第2種電気工事士
    その他・・・・

    プロフィール

    face

    ガネメ
    鹿児島県在住
    現役サラリーマン

    ◇このブログでは、15年以上DTPデザイナーとして、学んできたデザインやセキュリティ知識、参考になった書籍などを紹介しています。
    たまに、脇道にそれることもあります

    ◇取得資格
    ・情報セキュリティマネジメント
    ・ITパスポート
    ・色彩検定 2級
    ・色彩検定 UC級
    ・屋外広告士
    ・第2種電気工事士
    その他・・・・

    詳しいプロフィールはこちら

    アーカイブ

    カテゴリー

    使用中のレンタルサーバー

    ピックアップ記事

    1. スクリプトの実行を簡略化
      デザイン効率化戦略:スクリプト実行を効率化する スクリプトを実行する手間を減らしたい…
    2. Illustratorスクリプト特集
      いつも訪問していただきありがとうございます。 もっと効率よくデザイン作業を進めたい …
    3. オブジェクト寸法を自動追加
      デザイン効率化戦略:寸法入力を効率化 図面に寸法を追加するのが手間 都度、オブジェク…




    ブログランキング・にほんブログ村へ   
    PAGE TOP