Illustratorでドット絵を作成していて[パスファインダー]>[合体]等で任意のオブジェクトを合体させると余分なアンカーポイントが出来てしまいます。そんな時は[オブジェクト]>[ラスタライズ]で画像に変換したから、[オブジェクト]>[画像トレース]>[カラー]等で調整すると余分なポイントのない形状を得ることが出来ますが、精度は期待できません。そこでScriptを作成してみました。処理はグループ化されていないことが条件です。
// ============================
// 多角形のコーナー以外のアンカーポイントを削除
// ============================
(function() {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません。");
return;
}
var doc = app.activeDocument;
if (doc.selection.length === 0) {
alert("パスオブジェクトを選択してください。");
return;
}
for (var i = 0; i < doc.selection.length; i++) {
var path = doc.selection[i];
if (path.typename !== "PathItem") continue;
var pts = path.pathPoints;
var removeList = [];
for (var j = 0; j < pts.length; j++) {
var prev = pts[(j - 1 + pts.length) % pts.length];
var curr = pts[j];
var next = pts[(j + 1) % pts.length];
// 3点が一直線上なら削除候補
if (isCollinear(prev.anchor, curr.anchor, next.anchor)) {
removeList.push(j);
}
}
// インデックスずれ防止のため逆順に削除
for (var k = removeList.length - 1; k >= 0; k--) {
pts[removeList[k]].remove();
}
}
alert("多角形のコーナー以外のアンカーポイントを削除しました。");
// ---- 関数群 ----
// 3点が一直線上にあるか(外積で判定)
function isCollinear(p1, p2, p3) {
var dx1 = p2[0] - p1[0];
var dy1 = p2[1] - p1[1];
var dx2 = p3[0] - p2[0];
var dy2 = p3[1] - p2[1];
return Math.abs(dx1 * dy2 - dy1 * dx2) < 0.001;
}
})();
18×22で396マスを色分けし、[選択]>[共通]>[カラー(塗り)]で同一色を選択後に[パスファインダー]>[合体]を実行します。