選択したオブジェクトの塗りと線を別オブジェクトとして分離します。複合パスにも対応していますが、解除してから処理した方が賢明です。
// 塗りと線を分離して複製(PathItem と CompoundPathItem に対応)
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません。");
}
var doc = app.activeDocument;
var sel = doc.selection;
if (sel.length === 0) {
alert("塗りと線を分離したいオブジェクトを選択してください。");
}
// メイン処理:選択オブジェクトに対して再帰処理
for (var i = sel.length - 1; i >= 0; i--) {
processItem(sel[i]);
}
// 処理対象:PathItem / CompoundPathItem / GroupItem
function processItem(item) {
if (item.typename === "PathItem") {
separateStrokeFill(item);
}
else if (item.typename === "CompoundPathItem") {
// 複合パス内の要素を処理
for (var j = 0; j < item.pathItems.length; j++) {
separateStrokeFill(item.pathItems[j], item); // 複合パス親を渡す
}
item.remove(); // 親の CompoundPathItem を削除
}
else if (item.typename === "GroupItem") {
// グループ内のオブジェクトを再帰処理
for (var k = item.pageItems.length - 1; k >= 0; k--) {
processItem(item.pageItems[k]);
}
item.remove(); // 元のグループも削除
}
}
// 塗りと線を複製・分離する
function separateStrokeFill(pathItem, parentToReplace) {
var hasFill = pathItem.filled;
var hasStroke = pathItem.stroked;
if (!hasFill && !hasStroke) return;
if (hasFill) {
var fillCopy = pathItem.duplicate();
fillCopy.stroked = false;
fillCopy.filled = true;
if (parentToReplace) fillCopy.move(parentToReplace, _
ElementPlacement.PLACEBEFORE);
}
if (hasStroke) {
var strokeCopy = pathItem.duplicate();
strokeCopy.filled = false;
strokeCopy.stroked = true;
if (parentToReplace) strokeCopy.move(parentToReplace, _
ElementPlacement.PLACEBEFORE);
}
pathItem.remove();
}
alert("塗りと線を複合パスも含めて分離しました!");
グループ化している場合は解除し、オブジェクトを選択して実行します。
処理後は線だけのオブジェクトの上に塗りのオブジェクトが配置されます。
重なって同じ位置に再描画するので、ずらせばバラバラになって居ることを確認できます。




