■これも念願!超はかどる!ただ完全に私的仕様なので無料です(笑)   

(クリックで動きます)
タイトルなし


おつかれさまです。@gorolibです。

完全に私的仕様のスクリプトが完成しましたが、あまりにも私的なので無料公開いたします(笑)

いわゆるラフスケッチをトレースする手順ですね。まとめると以下のようになります。

<要件>
━━━━━
(1)ラフスケッチのスキャン画像を配置する
(2)トリミングライン(4辺)をガイドで描く
(3)トリミング用の長方形を描く
(4)配置画像と長方形を同時選択してクリッピングマスクをかける
(5)アートボード大に拡大する
(6)アートボードの中央に配置する
(7)新規テンプレートレイヤーを作成する
(8)そのテンプレートレイヤーの階層を最背面にする


むがああっ!(疲弊したなんらかの音)


そう、まいどまいど大変なんですよねぇ。いったいみなさんどうされていらっしゃるのか…(もっとカンタンな方法があるのでしょうか)。

特に要件3については、いまだにイラストレーターのバグがあり、
「配置画像がうしろにあるとき、ガイドの交差をスマートガイドでひろえない」んです!

参考:イラストレーターでスマートガイドの交差が表示されない件


なので手順としてはいったん配置画像を隠して(コントロール3)、スマートガイドをオンにして長方形をガイドの交差で描き、隠したものを再表示して、両方とも再選択してクリッピングマスクをかけている、というこれまた「ぐふぅ」な状況です。


というわけで今回は要件3〜要件8をスクリプトで実施します。


今回、オブジェクトの選択はまったく不要です\(^o^)/自分で言っちゃいますけど、


今回もすごくいい!


です(おめでたくてスミマセン…)


(クリックで動きます)
タイトルなし


<スクリプトファイル名>
(無料。ダウンロードにてご利用ください)

 
<使い方>
(1)リンク画像をひとつ配置します
(2)トリミングライン(4辺)のガイドを引きます
(3)このスクリプトを実行します。

<仕様>
(1)オブジェクト選択は不要ですが、選択していても起動します
(2)アクティブレイヤーにリンク画像がひとつだけ必要です(複数の場合は反応しません)
(3)アクティブレイヤーにガイドが4辺必要です
(4)ガイドで囲まれた範囲を長方形にします
(5)その長方形を使って配置画像にクリッピングマスクをかけます
(6)クリッピングマスク画像をアートボード大に拡大します
(7)それをアートボードの中央に配置します
(8)新規テンプレートレイヤーに移動します
(9)新規テンプレートレイヤーの階層は最背面にします


■同士の方へ


勉強不足でしたが「テンプレートレイヤーにする」というプロパティはないんですね…。知りませんでした。こんな感じで実装しています。

TEMP = DOC.layers.add()
TEMP.dimPlacedImages = true
TEMP.print = false
TEMP.name = "template"

…(なんらかの処理。最後にロック)…

TEMP.locked = true



■カスタマイズのキモっ!


今回カスタマイズのキモはありすぎるので、省略させてください(汗)
そのかわりにソースを公開いたします。


お役に立てれば幸いです!ではでは出羽の海。


■ダウンロードはこちらから


(無料。ダウンロードにてご利用ください)


ソースも公開します。


G148_ClipByGuide.jsx
━━━━━
DOC = activeDocument
LAY = DOC.activeLayer

PATH = LAY.pathItems
PLACE = LAY.placedItems

ABD = DOC.artboards
RCT = ABD[ABD.getActiveArtboardIndex()].artboardRect
STB = app.preferences.getBooleanPreference("includeStrokeInBounds")

MAINfn()

function MAINfn(){
if(PLACE.length != 1) return false

NEWfn()

TEMP = DOC.layers.add()
TEMP.dimPlacedImages = true
TEMP.print = false
TEMP.name = "template"

LAY = TEMP

GRP = LAY.groupItems.add()
NEW.move(GRP,ElementPlacement.PLACEATBEGINNING)
PLACE[0].move(GRP,ElementPlacement.PLACEATEND)
GRP.clipped = true

BND1 = BNDfn(GRP)

W0 = BND1[2]-BND1[0]
H0 = BND1[1]-BND1[3]
W2 = RCT[2]-RCT[0]
H2 = RCT[1]-RCT[3]

BAIx = W2/W0*100
BAIy = H2/H0*100

if(BAIx < BAIy){
BAI = BAIx
} else {
BAI = BAIy
}

GRP.resize(BAI,BAI)

BND2 = BNDfn(GRP)

TRNx = (RCT[0]+RCT[2])/2 - (BND2[0]+BND2[2])/2
TRNy = (RCT[1]+RCT[3])/2 - (BND2[1]+BND2[3])/2

GRP.translate(TRNx,TRNy)
DOC.activeLayer.zOrder(ZOrderMethod.SENDTOBACK)
TEMP.locked = true
}


function NEWfn(){
Ax0 = []
Ay0 = []

for (p=0; p<PATH.length; p++){

BND = PATH[p].geometricBounds

if((PATH[p].guides == true)&&(PATH[p].closed == false)){
if(BND[0]==BND[2]){
Ax0.push(BND[0])
} else if(BND[1]==BND[3]){
Ay0.push(BND[1])
}
}
}

if(Ax0.length<2) return false
if(Ay0.length<2) return false

Mx = Ax0.length -1 
My = Ay0.length -1 

Ax1 = SORTfn1(Ax0)
Ay1 = SORTfn2(Ay0)

T1 = Ay1[0]
L1 = Ax1[0]
W1 = Ax1[Mx]-L1
H1 = T1-Ay1[My]

NEW = LAY.pathItems.rectangle(T1, L1, W1, H1)
}


function BNDfn(SELz){
if(SELz.typename == "GroupItem" && SELz.clipped == true){
BNDz = SELz.pageItems[0].geometricBounds
} else if (STB == true){
BNDz = SELz.visibleBounds
} else {
BNDz = SELz.geometricBounds
}
return BNDz
}


function SORTfn1(f10){
f11=[]
for(i=0;i<f10.length;i++) f11.push(f10[i])
f11.sort(function(a,b){
if(a > b){
return -1
} else if(a < b){
return 1
} else {
return 0
}
})
return f11
}


function SORTfn2(f20){
f21=[]
for(i=0;i<f20.length;i++) f21.push(f20[i])
f21.sort(function(a,b){
if(a < b){
return -1
} else if(a > b){
return 1
} else {
return 0
}
})
return f21
}
━━━━━