Illustratorにはシンボルという機能があります。書類の中で何回も使うオブジェクトをシンボルとして登録しておくとリンクのように扱われ,後から変更しやすくなる便利な機能です。
Illustrator CC 2015からは従来のシンボル(スタティックシンボル)に加え,ダイナミックシンボルという形式が追加されました。スタティックでは配置したシンボルの色を部分的に変えられませんが,ダイナミックにするとできるようになります。
ではいつもダイナミックシンボルにすればいいかと言うと,そうではありません。スタティックシンボルの静的で変更できない特性もまた長所なので,状況によって使い分けたいところです。個人的にはスタティックシンボルのほうが活躍の機会が多いと感じます。
問題は新しくシンボルを作るとき,初期設定ではダイナミックシンボルになることです。スタティックシンボルにしたい場合は毎回ラジオボタンを押す動作をしなければいけません。結構面倒ですね。
そこで今回は選択したアイテムをスタティックシンボルとして登録するJavaScriptを紹介します。
こちらのファイルをダウンロードしてください。
newStaticSymbol.jsx
ただの newStaticSymbol.jsx と newStaticSymbolWithOpt.jsx の2つが入っています。どちらも選択したアイテム全体で1つのスタティックシンボルとして登録する動作をします。
newStaticSymbol.jsx は,「新規シンボル 1」のような適当な名前でシンボルを作ります。
newStaticSymbolWithOpt.jsx は,シンボル名を指定するダイアログを開き,その名前でシンボルを生成します。
そのほかの設定は,下記のようになります。
- 書き出しタイプ:ムービークリップ
- 基準点:天地左右センター
- 9 スライスの拡大・縮小用ガイドを有効にする:オフ
- レイヤー構成は保持しない(一番前面のアイテムの階層でグループ化する)
使いかたは,スタティックシンボルにしたいオブジェクトを選択し,スクリプトを実行するだけです。
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
コードはこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
/** * @file 選択しているアイテムをもとにスタティックシンボルを作成する。名前は適当につける * @version 1.0.0 * @author sttk3.com * @copyright (c) 2019 sttk3.com */ //#target 'illustrator' (function() { // config var showDialog = false ; // シンボル名指定ダイアログを開くか var useTransformRefPoint = false ; // 変形パネルの基準点をシンボル登録時の基準点に流用するか if(app.documents.length <= 0) {return ;} var doc = app.documents[0] ; var sel = doc.selection ; if(sel.length <= 0) {return ;} // ダイアログを開く設定なら開く var destName ; if(showDialog) { destName = prompt('シンボル名を指定', '') ; } // 名前を指定するか,その名前がすでに使われているかを確認する var ifChangeName = false ; if(destName && destName != '') { // 名前が使われていていたら終了 if(existsSymbol(doc, destName)) { alert('この名前は既に存在します。別の名前を入力してください。') ; return ; } ifChangeName = true ; } /* シンボルの基準点を指定する 0 1 2 3 4 5 6 7 8 */ var symbolRefPoints = [ SymbolRegistrationPoint.SYMBOLTOPLEFTPOINT, SymbolRegistrationPoint.SYMBOLTOPMIDDLEPOINT, SymbolRegistrationPoint.SYMBOLTOPRIGHTPOINT, SymbolRegistrationPoint.SYMBOLMIDDLELEFTPOINT, SymbolRegistrationPoint.SYMBOLCENTERPOINT, SymbolRegistrationPoint.SYMBOLMIDDLERIGHTPOINT, SymbolRegistrationPoint.SYMBOLBOTTOMLEFTPOINT, SymbolRegistrationPoint.SYMBOLBOTTOMMIDDLEPOINT, SymbolRegistrationPoint.SYMBOLBOTTOMRIGHTPOINT ] ; var destRefPoint ; if(useTransformRefPoint) { destRefPoint = symbolRefPoints[app.preferences.getIntegerPreference('plugin/Transform/AnchorPoint')] ; } else { destRefPoint = symbolRefPoints[4] ; // センター固定 } // 複数のアイテムをグループ化しソースとする app.executeMenuCommand('group') ; var srcItem = doc.selection[0] ; // もとあった座標を記録する var srcBounds = srcItem.visibleBounds ; // グループをシンボルに登録する。名前が指定されればそれに変更する try { var newSymbol = doc.symbols.add(srcItem, destRefPoint) ; } catch(e) { alert(e) ; app.redraw() ; app.undo() ; return ; } if(ifChangeName) {newSymbol.name = destName ;} // シンボルをもとのアイテムがあった場所に配置する var newInstance = srcItem.layer.symbolItems.add(newSymbol) ; newInstance.move(srcItem, ElementPlacement.PLACEBEFORE) ; newInstance.position = [srcBounds[0], srcBounds[1]] ; // グループを削除する srcItem.remove() ; // 配置したシンボルを選択する doc.selection = [newInstance] ; return newInstance ; /** * 指定した名前のシンボルが存在するかどうかを真偽値で返す。存在するときtrue * @param {Document} doc 対象のdocument * @param {String} symbolName シンボルの名前 * @return {Bolean} */ function existsSymbol(doc, symbolName) { var res = false ; try { doc.symbols.getByName(symbolName) ; res = true ; } catch(e) { // skip } return res ; } })() ; |
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。