Skip to content

Instantly share code, notes, and snippets.

@Yamonov
Last active October 28, 2025 14:48
Show Gist options
  • Select an option

  • Save Yamonov/1c466bfdc788800e87d3473d17c29e53 to your computer and use it in GitHub Desktop.

Select an option

Save Yamonov/1c466bfdc788800e87d3473d17c29e53 to your computer and use it in GitHub Desktop.
Illustrator:同じカラーを選択をUIにし、ついでにグローバルスウォッチを作成
(function () {
if (app.documents.length === 0) return;
if (app.selection && app.selection.length > 1) {
alert("複数のオブジェクトが選択されています。1つだけ選択して実行してください。");
return;
}
var base = [];
if (app.selection) for (var i = 0; i < app.selection.length; i++) base.push(app.selection[i]);
var dlg = new Window("dialog", "共通の色で選択");
var pnl = dlg.add("panel", undefined, "共通");
pnl.orientation = "row";
var rbFill = pnl.add("radiobutton", undefined, "塗り");
var rbStroke = pnl.add("radiobutton", undefined, "線");
rbFill.value = true;
var cbMake = dlg.add("checkbox", undefined, "スウォッチ作成");
cbMake.value = false;
var g = dlg.add("group");
g.alignment = "right";
g.add("button", undefined, "キャンセル", { name: "cancel" });
var btnOK = g.add("button", undefined, "OK", { name: "ok" });
btnOK.onClick = function () {
if (!cbMake.value) { dlg.close(1); return; }
var doc = app.activeDocument;
var src = base && base.length ? base[0] : null;
var col = null;
if (src) {
if (rbFill.value && src.filled) col = src.fillColor;
else if (rbStroke.value && src.stroked) col = src.strokeColor;
}
if (!col) { dlg.close(1); return; }
if (col.typename === "SpotColor" && col.spot && col.spot.color)
col = col.spot.color;
if (!(col.typename === "RGBColor" || col.typename === "CMYKColor" || col.typename === "GrayColor")) {
dlg.close(1);
return;
}
var swName = (col.typename === "RGBColor") ?
"RGB-" + col.red + "-" + col.green + "-" + col.blue :
(col.typename === "CMYKColor") ?
"CMYK-" + col.cyan + "-" + col.magenta + "-" + col.yellow + "-" + col.black :
"Gray-" + col.gray;
for (var s = doc.swatches.length - 1; s >= 0; s--)
try { if (doc.swatches[s].name === swName) doc.swatches[s].remove(); } catch (_) { }
for (var p = doc.spots.length - 1; p >= 0; p--)
try { if (doc.spots[p].name === swName) doc.spots[p].remove(); } catch (_) { }
var sp = doc.spots.add();
// Illustratorの挙動対策:まず color、次に spotKind、最後に name
sp.color = col;
sp.spotKind = SpotColorKind.SPOTPROCESS;
sp.name = String(swName);
dlg.close(1);
};
rbFill.onClick = apply;
rbStroke.onClick = apply;
function apply() {
app.selection = base;
app.executeMenuCommand(rbFill.value ? "Find Fill Color menu item" : "Find Stroke Color menu item");
try { if (typeof refreshUI === "function") refreshUI(); } catch (_) { }
try { $.sleep(200); } catch (_) { }
try { app.redraw(); } catch (_) { }
}
apply();
dlg.show();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment