土曜日, 3月 14, 2026

JavaScriptでAI遊び 89 
Illustratorで線幅と線形状を指定変更

普通に[線]パレットで処理出来るので意味ないですが・・・
選択したパスの線を[線幅、実線、破線、二重線]を指定します。

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、線種を破線にすると・・・

直ぐに[変更しました]が表示され・・・

指定が反映されます。

二重線は・・・

塗りがあると正しく表示しません(今後の課題)。

塗りを無しにすればこんな感じです。

ただし、オープンパスに対して実行すると・・・

三重線になってしまいます(今後の課題)。