スクラッチ&スクラップ

簡単なプログラミングや電子工作など。しょうもない工作の記録。

イラレで破線だけ選択するスクリプト

CADからエクスポートしたDXFをイラレで開くと破線が太くてバランスが悪い

f:id:macrochelys99:20180119000213p:plain:w300
ここにギヤボックスがあるじゃろ?

f:id:macrochelys99:20180119004659p:plain:w300
これをこうして...

f:id:macrochelys99:20180119004724p:plain:w300
こうじゃ


破線だけ拾う機能ぐらい標準で実装されていても良さそうですが、現バージョンの CC2018 にそのような機能は無いようです。

プラグイン導入

Adobe Illustrator plugins - rj-graffix
このサイトの中の Select Menu というプラグインです。私の環境では動きませんでした

【2018.3.22 追記】
プラグインのバージョンアップの通知がきたので、更新したら動くようになりました!

f:id:macrochelys99:20180119001712p:plain:w300

[選択] → [オブジェクト] の中のメニューがもりっと増えたので、[Dashed Paths] を選べば破線が選択されると思ったのですが不発でした。無料のプラグインなのでもし動いたのならこれを使えば良いでしょう。

Illustratorプラグイン PlugX-Search+2
こちらのプラグインは有料でバージョンも CC2014 までなので試していません。

スクリプト、書こう。

#target "illustrator"
(function(){
  function selectDash(obj){
    for(var i=0; i<obj.length; i++){
      switch(obj[i].typename){
        case "GroupItem":
          selectDash(obj[i].pageItems);
          break;
        case "PathItem":
          if(obj[i].strokeDashes.length > 0){
            obj[i].selected = true;
          }else{
            obj[i].selected = false;
          }
          break;
      }
    }
  }
  
  try {
    if (app.documents.length > 0 ) {
      var doc = app.activeDocument;
      if(confirm("破線パスを選択状態にするスクリプト\n非表示のレイヤー、ロックされたレイヤーは無視します。\n\n続行しますか?") == false) return;
      for(var lay=0; lay < doc.layers.length; lay++){
        if(doc.layers[lay].visible == true && doc.layers[lay].locked == false){
          selectDash(doc.layers[lay].pageItems);
        }
      }
      if(doc.selection.length > 0){
        alert("破線パスを選択しました : " + doc.selection.length + "/" + doc.pathItems.length);
      } else {
        alert("破線パスはありませんでした");
      }
    } else {
      throw new Error('ドキュメントが開かれていません。');
    }
  }
  catch(e) {
    alert( e.message, "スクリプト警告", true);
  }
})()

このスクリプトの欠点は、とても遅いこと。冒頭のギアボックスでは、4300のパスから3500の破線を拾うのに 2分ぐらいかかりました。

改良の余地

破線・一点鎖線・二点鎖線、破線属性がついていたら全部選択してしまいましたが、「破線パスを1本選択して実行したら、同じ破線パターンのみ選択」とかできたらもっと実用的かな。

[2018.06.04 追記]
特性の破線パターンのみ選択するスクリプトの記事を書きました。
macrochelys99.hatenablog.jp