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

オブジェクト寸法を自動追加

図面作成の革命!寸法追加の手間を軽減するIllustratorスクリプト

デザイン効率化戦略:寸法入力を効率化

  • 図面に寸法を追加するのが手間
  • 都度、オブジェクトのサイズを確認するのが手間
  • 複数のオブジェクトだと寸法ツールでも時間がかかる
  • 今までオブジェクトに寸法を追加するには、オブジェクトのサイズを確認したり、ラインツールとテキストツールを切り替えるなど、時間と労力がかかってきましたが、IllustratorCC2024からは「寸法ツール」が追加されてからは、寸法入力が効率的におこなえるようになりました。

    ですが、一つ一つオブジェクトに寸法を追加していく作業は「寸法ツール」でも大変手間です。

    そこで、選択したオブジェクトのサイズを自動で計測し、寸法線と寸法値を追加するIllustratorスクリプトを紹介します。

    このスクリプトを使えば、寸法追加にかかっていた手間が軽減されますので、図面作成やパッケージデザインをされている方は、ぜひ活用してください

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

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

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

    【scaleAdd】スクリプトの概要

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

    【scaleAdd】の機能

    【scaleAdd】は、私が自作したオリジナルスクリプトで、オブジェクトに寸法を追加する際に役立つスクリプトです。
    以下で主な機能をご紹介します。

    • 複数のオブジェクトに対応
    • ドキュメント内で選択された複数のオブジェクトに寸法を同時に追加できる。

    • サイズを計測
    • ドキュメント内で選択されたオブジェクトの個数やサイズを計測してくれる

    • 設定ダイアログの表示・設定
    • スクリプトを実行するとダイアログが表示され以下の設定を行える

      ・「縦・横」「上・下」「右・左」で寸法表示の位置の設定
      ・フォントサイズの設定
・寸法を表示する距離の設定
      ・「原寸・1/10・指定」の縮尺率の設定


    • スクリプトの常駐
    • 一度【scaleAdd】を起動したらIllustratorが立ち上がっている間は、スクリプトが起動したままになります。

    スクリプトの使い方

    【scaleAdd】は、以下の手順で利用できます。
    スクリプトの使い方手順

    • STEP1.【scaleAdd】を起動
    • STEP2.ダイアログで設定をおこなう
    • STEP3.寸法を追加するオブジェクトを選択
    • STEP4.「寸法表示」ボタンで実行

    scaleAddのプレビュー

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

    【scaleAdd】のダウンロード

    【scaleAdd】は、こちらからサンプルとしてダウンロードできます。
使用前に、必ず「注意事項と免責事項」をご確認ください。安全に利用していただくための重要な情報が記載されています。

    ダウンロード:scaleAdd.jsx

    ダウンロードができない方は、次の章でソースコードを公開しているのでテキストエディタにコピーしてお使いくだい。
    まだ、テキストエディタをお持ちでない方は、下記で「無料で使えるテキストエディタ」を紹介しているので参考にしてください。

    関連記事:無料で使えるVS CodeでIllustratorスクリプトの開発環境を整えよう

    動作チェック

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

    ・Illustrator 2024【Mac】

    もし、スクリプトが動作しない場合は、下記の記事を参考にしてください

    関連記事:Illustratorスクリプトが動かない時の簡単解決法5選



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

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

    ソースコード

    
     //illustratorを起動させる
    #target illustrator 
    //スクリプトが実行する仮空間を#targetengineで設定
    #targetengine "main"
    
    var unity = {};//空オブジェクトの作成 結合用
    (function(){//即時実行関数は、定義と同時に実行される関数式のことを指します。
        //ウィンドウの設定ここから
        var win = new Window("palette", "寸法線"); 
    win.orientation = "column";  
    win.alignChildren = ["fill", "top"]; // 要素を適切に配置
    
    // ヨコ寸法
    var chkG = win.add("group");
    chkG.orientation = "row";
    chkG.alignChildren = ["left", "center"];
    var chkbox1 = chkG.add("checkbox", undefined, "ヨコ寸法");
    var radioGroup1 = chkG.add("panel", undefined); // パネルでグループ化
    radioGroup1.orientation = "row";
    var btn01 = radioGroup1.add("radiobutton", undefined, "上");
    var btn02 = radioGroup1.add("radiobutton", undefined, "下");
    
    // タテ寸法
    var chkbox2 = chkG.add("checkbox", undefined, "タテ寸法");
    var radioGroup2 = chkG.add("panel", undefined);
    radioGroup2.orientation = "row";
    var btn03 = radioGroup2.add("radiobutton", undefined, "左");
    var btn04 = radioGroup2.add("radiobutton", undefined, "右");
    
    // フォントサイズ
    var fontG = win.add("group");
    fontG.orientation = "row";
    fontG.alignChildren = ["left", "center"];
    fontG.add("statictext", undefined, "フォントサイズ:");
    var font = fontG.add("edittext", undefined, "10");
    font.characters = 3; 
    fontG.add("statictext", undefined, "pt");
    
    // 引出し距離
    fontG.add("statictext", undefined, " 引出し距離:");
    var drawer = fontG.add("edittext", undefined, "7");
    drawer.characters = 3;
    fontG.add("statictext", undefined, "mm");
    
    // 縮尺率
    var scaleG = win.add("group");
    scaleG.orientation = "row";
    scaleG.alignChildren = ["left", "center"];
    scaleG.add("statictext", undefined, "縮尺率:");
    var scaleGroup = scaleG.add("panel", undefined);
    scaleGroup.orientation = "row";
    var btn07 = scaleGroup.add("radiobutton", undefined, "原寸"); 
    var btn08 = scaleGroup.add("radiobutton", undefined, "1 / 10"); 
    var btn09 = scaleGroup.add("radiobutton", undefined, "その他: 1 /"); 
    var scale = scaleGroup.add("edittext", undefined, "");
    scale.characters = 5;
    
    /*var scaleG2 = win.add("group");
    scaleG2.orientation = "row";
    scaleG2.alignChildren = ["right", "center"];*/
    
    
    // 寸法表示ボタン
    var clickBtn = win.add("button", undefined, "寸法表示");
    
    // ダイアログ表示
    win.show();
    
    
        //初期設定ここから
        chkbox1.value = true;
        btn01.value = true;
        btn02.value = false;
        chkbox2.value = true;
        btn03.value = false;
        btn04.value = true;
        btn07.value = true;
        btn08.value = false;
        btn09.value = false;
        //初期設定ここまで
        //ウィンドウの設定ここまで
    
    
        clickBtn.onClick = function(){
            //BridgeTalk
            var bt = new BridgeTalk(); //Adobe 異なるアプリ間でデータの処理結果を貰ってくる
            bt.target= BridgeTalk.appSpecifier; //BridgeTalk.appSpecifierは、AdobeのスクリプトエンジンであるBridgeTalkのプロパティで、現在実行中のアプリケーションを指定するために使用されます
            bt.body = "unity.main();";  //スクリプトを実行する空間を#targetengineで設定
            bt.send(); //処理の実行
        };//clickBtn.onClick
    
        //ptからmm換算ここから
        unity.value =function (set){
            var ptSize = new UnitValue(set, "pt"); //pt
            var ptMm = ptSize.as("mm"); //単位をmmに変換
            var conv = Math.round(ptMm  * 1000) / 1000; //少数点第3位
            var ed = conv * 1;  //原寸
            if( btn08.value === true){  //1/10
                var ed = conv * 10;  
            }else if( btn09.value === true){    //その他
                var ygyg =  eval(scale.text);   
                var ed= conv * ygyg;
            };
            return ed ;
        };
        //ptからmm換算ここまで
    
        //CMYKを設定し、CMYKカラーオブジェクトを返す ここから
        unity.setCMYK = function(c,m,y,k){
            var CMYK = new CMYKColor();
            CMYK.cyan = c;
            CMYK.magenta = m;
            CMYK.yellow = y;
            CMYK.black = k;
            return CMYK
        };
        //CMYKを設定し、CMYKカラーオブジェクトを返す ここまで
        
        //テキスト ここから
        unity.text = function(layer,dim,axis1,axis2,just){
           var fontSize =  eval(font.text);                                                  //フォントサイズ
            var txtObj = layer.textFrames.add();                                        //テキストフレーム         
            txtObj.contents = unity.value(dim) + "mm";                              //横幅の寸法を表示
            txtObj.position = [axis1, axis2];                                               //横幅の寸法を表示位置
            txtObj.paragraphs[0].textFont = app.textFonts["ArialMT"];       //フォント指定
            txtObj.paragraphs[0].justification =  just;                                 //文字のセンター揃え
            txtObj.paragraphs[0].fillColor = unity.setCMYK(0,0,0,50);           //文字の塗り指定
            txtObj.paragraphs[0].size = fontSize;                                       //文字サイズ
            txtObj.note = "数値";                                                               //属性のノート欄に記入     
        }    
        //テキスト ここまで
            
        //寸法線 ここから
        unity.line= function (group,axis1,axis2) {    
            var line = group.pathItems.add();                   //グループ化
            line.setEntirePath([axis1,axis2]);                      //パス座標の指定
            line.filled = false;                                           //塗り指定なし
            line.stroked = true;                                       //線指定あり
            line.strokeWidth = 0.283;                              //線幅
            line.strokeColor = unity.setCMYK(0,0,0,50);     //線の塗り指定
            line.note = "寸法線";                                          //属性値
         } 
        //寸法線 ここまで
     
        //寸法線 三角 ここから
         unity.triangle= function (group,axis1,axis2,axis3) {    
            var triangle = group.pathItems.add();
            triangle.setEntirePath([axis1,axis2,axis3]);
            triangle.filled = true;                                           //塗り指定なし
            triangle.stroked = false;                                       //線指定あり
             triangle.fillColor = unity.setCMYK(0,0,0,50);     //線の塗り指定
            triangle.closed = true;   //パスを閉じる
            triangle.note = "寸法線 線端"; //属性値
         } 
        //寸法線 三角 ここまで
        
        //メイン処理 ここから
        unity.main= function () {    
            var doc = activeDocument;
            var selObj = doc.selection;
            var layerName = '寸法';
            
            //テキストを数字に変換ここから
            var drawerMm =  eval(drawer.text);              //引き出し距離
            var d= new UnitValue(drawerMm, "mm");           //ptの換算
            var dpt = d.as("pt");                                            //単位をptに変換
            //テキストを数字に変換ここまで
            
            //レイヤー作成 ここから
            try{
                var layer = doc.layers.getByName (layerName);
            } catch(e){
                var newLayer = doc.layers.add();
                newLayer.name = layerName;
           }   
            doc.activeLayer = doc.layers[layerName];    //指定レイヤーをアクティブに
            var aLayer = doc.activeLayer;
            //レイヤー作成 ここまで
             
           for (var i=0; i < selObj.length; i++){
                //オブジェクトの計測ここから
                if(selObj[i].typename === "GroupItem" && selObj[i].clipped === true){   //クリッピング
                    var width = selObj[i].pageItems[0].width;                        //オブジェクトの横幅を計る
                    var height = selObj[i].pageItems[0].height;                      //オブジェクトの縦幅を計る         
                    var x1 = selObj[i].pageItems[0].geometricBounds[0];        //オブジェクトのX座標 左
                    var y1 = selObj[i].pageItems[0].geometricBounds[1];        //オブジェクトのY座標 上
                    var x2 = selObj[i].pageItems[0].geometricBounds[2];        //オブジェクトのX座標 右
                    var y2 = selObj[i].pageItems[0].geometricBounds[3];        //オブジェクトのY座標 下
                } else {
                    var width = selObj[i].width;                        //オブジェクトの横幅を計る
                    var height = selObj[i].height;                      //オブジェクトの縦幅を計る         
                    var x1 = selObj[i].geometricBounds[0];        //オブジェクトのX座標 左
                    var y1 = selObj[i].geometricBounds[1];        //オブジェクトのY座標 上
                    var x2 = selObj[i].geometricBounds[2];        //オブジェクトのX座標 右
                    var y2 = selObj[i].geometricBounds[3];        //オブジェクトのY座標 下
                }
    
                //オブジェクトの計測ここまで        
                
                var groupWidth = aLayer.groupItems.add(); // 新しいグループを作成
                var groupHeight = aLayer.groupItems.add(); // 新しいグループを作成
                
                //横幅の設定ここから
                if(chkbox1.value === true){                  //チェックボックスにチェックされている場合
                    if(unity.value(width) > 0){                                                           //横幅が0以上の場合
                        if(btn01.value === true){
                            unity.text (aLayer,width,x1 + (width / 2),y1 + (dpt + 30),Justification.CENTER);    //寸法
                            unity.line(groupWidth,[x1,y1 + dpt],[x1 , y1 + (dpt + 22.677)]);        //寸法補助線 左
                            unity.line(groupWidth,[x2,y1 + (dpt + 22.677)],[x2,y1 +dpt]);        //寸法補助線 右
                            unity.line(groupWidth,[x1 + 3.333,y1 + (dpt + 14.027 )],[x2 - 3.333,y1 + (dpt + 14.027 )]);        //寸法線
                            unity.triangle(groupWidth,[x1,y1 + (dpt + 14.027 )],[x1 + 3.333,y1 + (dpt + 12.355)],[x1 + 3.333,y1 + (dpt + 15.699)]);        //線端 三角形 左
                            unity.triangle(groupWidth,[x2,y1 + (dpt + 14.027 )],[x2 - 3.333,y1 + (dpt + 12.355)],[x2 - 3.333,y1 + (dpt + 15.699)]);        //線端 三角形 右
                        } else {
                            unity.text (aLayer,width,x1 + (width / 2),y2 - (dpt +16.56),Justification.CENTER);
                            unity.line(groupWidth,[x1,y2 - dpt],[x1 , y2 - (dpt + 22.677)]);        //寸法補助線 左
                            unity.line(groupWidth,[x2,y2 - (dpt + 22.677)],[x2,y2 - dpt]);        //寸法補助線 右
                            unity.line(groupWidth,[x1 + 3.333,y2 - (dpt + 14.027 )],[x2 - 3.333,y2 - (dpt + 14.027 )]);        //寸法線
                            unity.triangle(groupWidth,[x1,y2 - (dpt + 14.027 )],[x1 + 3.333,y2 - (dpt + 12.355)],[x1 + 3.333,y2 - (dpt + 15.699)]);        //線端 三角形 左
                           unity.triangle(groupWidth,[x2,y2 - (dpt + 14.027 )],[x2 - 3.333,y2 - (dpt + 12.355)],[x2 - 3.333,y2 - (dpt +15.699)]);        //線端 三角形 右
                        };
                    };            
                };
                //横幅の設定ここまで
            
                //縦幅の設定ここから
                if(chkbox2.value === true){
                    if(unity.value(height) > 0){                                                               //縦幅の設定               
                        if(btn03.value === true){
                            unity.text (aLayer,height,x1 - (dpt + 15),y1 - (height / 2.2),Justification.RIGHT); //寸法
                            unity.line(groupHeight,[x1 - dpt,y1],[x1 - (dpt + 22.677) , y1]);        //寸法補助線 上
                            unity.line(groupHeight,[x1 - (dpt + 22.677),y2 ],[x1 - dpt,y2]);        //寸法補助線 下
                            unity.line(groupHeight,[x1 - (dpt + 14.027 ),y1 - 3.333],[x1- (dpt + 14.027 ) ,y2 + 3.333]);        //寸法線
                            unity.triangle(groupHeight,[x1 - (dpt + 14.027),y1],[x1 - (dpt + 12.355),y1 - 3.333],[x1 - (dpt + 15.699),y1 - 3.333]);        //線端 三角形 上
                           unity.triangle(groupHeight,[x1 - (dpt + 14.027 ),y2],[x1 - (dpt + 12.355),y2 + 3.333],[x1 - (dpt +15.699),y2 + 3.333]);        //線端 三角形 下
                         }else{
                            unity.text (aLayer,height,x2 + (dpt + 15) ,y1 - (height / 2.2),Justification.LEFT);//寸法
                            unity.line(groupHeight,[x2 + dpt,y1],[x2 + (dpt + 22.677) , y1]);        //寸法補助線 上
                            unity.line(groupHeight,[x2 + (dpt + 22.677),y2 ],[x2 + dpt,y2]);        //寸法補助線 下
                            unity.line(groupHeight,[x2 + (dpt + 14.027 ),y1 - 3.333],[x2 + (dpt + 14.027 ) ,y2 + 3.333]);        //寸法線
                            unity.triangle(groupHeight,[x2 + (dpt + 14.027),y1],[x2 + (dpt + 12.355),y1 - 3.333],[x2 + (dpt + 15.699),y1 - 3.333]);        //線端 三角形 上
                           unity.triangle(groupHeight,[x2 + (dpt + 14.027 ),y2],[x2 + (dpt + 12.355),y2 + 3.333],[x2 + (dpt +15.699),y2 + 3.333]);        //線端 三角形 下
                         };
                     };
                };
                //縦幅の設定ここまで
         
          };//for
          //繰り返し作業ここまで
        };//function  unity.main
        //メイン処理 ここまで
        win.center();
        win.show();
    })();
    

    なお下記の記事では、Illustratorスクリプトを自作する方法についてスクリプトコードの事例を交え解説しているのでよければ参考にしてください。



    注意事項と免責事項

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

    注意事項

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

    免責事項

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



    【自動で寸法を追加する】スクリプトのまとめ

    summary
    本記事では、選択したオブジェクトに自動で寸法を追加してくれるIllustratorスクリプトを紹介しました。
    このスクリプトを使えば、今までの寸法追加にかかっていた手間が軽減されるのでIllustratorで図面を作成するさいは、ぜひこのスクリプトを活用してください。

    ダウンロード:scaleAdd.jsx

    というわけで今回は以上です。
    『図面作成の革命!寸法追加の手間を軽減するIllustratorスクリプト』を最後までお読みいただきありがとうございました。

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

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

    また、下記の記事では今回紹介した【Illustrator自動化 基本編】以外にもスクリプトに関する書籍を紹介しているので参考にしてください。

    ガネメ現役サラリーマン

    投稿者の過去記事

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

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

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

    コメント

    1. この記事へのコメントはありません。

    1. この記事へのトラックバックはありません。

    CAPTCHA


    プロフィール

    face

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

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

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

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

    アーカイブ

    カテゴリー

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

    ピックアップ記事

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




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