普通に[線]パレットで処理出来るので意味ないですが・・・
選択したパスの線を[線幅、実線、破線、二重線]を指定します。
if (app.documents.length === 0) {
alert("ドキュメントがありません");
exit();
}
var doc = app.activeDocument;
var sel = doc.selection;
if (!sel || sel.length === 0) {
alert("パスを選択してください");
exit();
}
// ---- UI ----
var dlg = new Window("dialog", "ストローク設定");
dlg.orientation = "column";
dlg.add("statictext", undefined, "線幅 (pt)");
var weightInput = dlg.add("edittext", undefined, "2");
weightInput.characters = 6;
dlg.add("statictext", undefined, "線種");
var typeList = dlg.add("dropdownlist",
undefined, ["実線", "破線", "二重線"]);
typeList.selection = 0;
var btns = dlg.add("group");
btns.add("button", undefined, "OK");
btns.add("button", undefined, "キャンセル");
if (dlg.show() !== 1) exit();
var strokeWeight = parseFloat(weightInput.text);
var strokeType = typeList.selection.text;
// ---- 処理 ----
for (var i = 0; i < sel.length; i++) {
if (!(sel[i] instanceof PathItem)) continue;
var p = sel[i];
p.stroked = true;
p.strokeWidth = strokeWeight;
if (strokeType === "実線") {
p.strokeDashes = [];
}
if (strokeType === "破線") {
p.strokeDashes = [strokeWeight * 2, strokeWeight * 2];
}
if (strokeType === "二重線") {
// 元の線
p.strokeDashes = [];
// 複製して外側の線を作る
var p2 = p.duplicate();
p2.strokeWidth = strokeWeight * 0.5;
// Offset Path エフェクト適用
var offset = strokeWeight * 1.2;
var effectXML =
'<LiveEffect name="Adobe Offset Path">' +
'<Dict data="R mlim 4 R ofst ' + offset + '"/>' +
'</LiveEffect>';
p2.applyEffect(effectXML);
}
}
alert("ストロークを変更しました");
サンプル形状・・・
実行すると表示されるパレットで・・・
線幅を5pt、線種を破線にすると・・・
直ぐに[変更しました]が表示され・・・
指定が反映されます。
二重線は・・・
塗りがあると正しく表示しません(今後の課題)。
塗りを無しにすればこんな感じです。
ただし、オープンパスに対して実行すると・・・
三重線になってしまいます(今後の課題)。











