■まずは水平垂直からのお試し版です。斜め線はむずいので後日!
おつかれさまです。@gorolibです。
急に思い立って、線を二重線にするスクリプトを作りました。
たまーに重要があるんですが、皆様どうされていますでしょうか?
オープンパスならコピー、クローズドパスならオフセット、最近はアピアランスで線追加+オフセット、というところでしょうか。
まあコピーなんかはオプション+矢印キーにて、キー入力分だけ(シフトも押せばその10倍)移動+コピーができますが、そのときのキー入力値が「ちょうどよい二重線の幅」とは限りませんよね。
でなんだかいつもチマチマしてしまうんです…。アピアランスパネルもチマチマしてますしねぇ…。
そこでスクリプトを思い立ちましたが、
こりゃむずい!
いえ、水平垂直のオープンパス、対称系のクローズドパスはいいんですけど、斜め線とか自由図形(パスツールで描いたような)ものの二重線はどうやったらいいか
???
でございます。おそらく以前から作成を試みては行き詰まっている「オフセットをスクリプトで実装する」のと同じ問題にぶち当たってしまいました…。
■オフセット処理ってむずいのか!
なんせ斜め線は斜めに平行にコピーしなくちゃならないので、おそらく
サイン・コサイン・タンジェント
という三角関数の世界がやってくるのです!ウワオ(ますおか岡田風)
そんなの数Ⅱの教科書みないとわかんないよ(笑)なので、今回は機能限定版です。
・水平のオープンパス
・垂直のオープンパス
・一部のクローズドパス
が対称です。オープンパスの斜め、自由なクローズドパスはできまへん。
「一部の」と書いたのは自分でもよくわからないから(なんだそりゃ!)
正方形や正円はできる。でも途中でデコボコのあるやつはだめ。二重線の間隔は見た目の距離(つまり線幅と線幅の間)で1ミリとっているのですが、デコボコがあるとうまくいかんスねぇ。
機能限定版なので、無料にてどうぞ使ってやってください。
<スクリプトファイル名>
(無料ダウンロードにてご利用ください)
<使い方>
(1)パスアイテムを選びます。
(2)このスクリプトを起動します。
<仕様>
(1)選択オブジェクトの線を二重線にします。
(2)選択された線がちょうど中心になるように、両側に線を作ります。
(3)選択された線はガイドに変更します。
(4)線幅がないものには反応しません。
(5)二重線の間隔(線幅の端から線幅の端まで)は1ミリ固定です。
■カスタマイズのキモっ!
仕様5について。1ミリ固定は5行目の
AKI = 1/ptEQ
にて設定しています。2ミリにしたい場合は、
AKI = 2/ptEQ
0.5ミリにしたい場合は、
AKI = 0.5/ptEQ
にします。
■ダウンロードはこちらから
ソースも公開します。
━━━━━
DOC = activeDocument
SEL = DOC.selection
LAY = DOC.activeLayer
ptEQ = 25.4/72
AKI = 1/ptEQ
MAINfn();
function MAINfn(){
for(s=0; s<SEL.length; s++){
SELfn(SEL[s])
}
}
function SELfn(SELz){
if(SELz.strokeWidth == 0)return false
TRN = (AKI + SELz.strokeWidth)/2
if(SELz.closed == true){
CLOSEfn(SELz)
} else {
OPENfn(SELz)
}
}
function OPENfn(SELz){
BND = SELz.geometricBounds
x1 = BND[0]
y1 = BND[1]
x2 = BND[2]
y2 = BND[3]
if((x1 != x2) && (y1 != y2))return false
if(x1 == x2){
TRNy = 0
TRNx = TRN
LINEfn(SELz)
TRNx = -TRN
LINEfn(SELz)
} else {
TRNx = 0
TRNy = TRN
LINEfn(SELz)
TRNy = -TRN
LINEfn(SELz)
}
GUIDEfn(SELz)
}
function CLOSEfn(SELz){
W1 = SELz.width
H1 = SELz.height
Wout = W1 + TRN*2
Win = W1 - TRN*2
Hout = H1 + TRN*2
Hin = H1 - TRN*2
BAIx = Wout / W1 * 100
BAIy = Hout / H1 * 100
RECTfn(SELz)
BAIx = Win / W1 * 100
BAIy = Hin / H1 * 100
RECTfn(SELz)
GUIDEfn(SELz)
}
function LINEfn(SELz){
LINE = SELz.duplicate()
LINE.translate(TRNx,TRNy)
LINE.selected = false
}
function RECTfn(SELz){
RECT = SELz.duplicate()
RECT.resize(BAIx,BAIy)
RECT.selected = false
}
function GUIDEfn(SELz){
SELz.guides = true
SELz.selected = false
}
━━━━━
お役に立てれば幸いです!ではでは出羽の海。
コメント
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。