
パスのアンカーポイントのハンドルが異なる向きを向いている場合に、それらを一直線に揃えてみました。
// 選択されたパスの折れたハンドルを修正して滑らかにする
(function () {
if (app.documents.length === 0) {
alert("ドキュメントを開いてください");
return;
}
var sel = app.activeDocument.selection;
if (sel.length === 0) {
alert("パスオブジェクトを選択してください");
return;
}
for (var i = 0; i < sel.length; i++) {
if (sel[i].typename === "PathItem") {
fixHandles(sel[i]);
}
}
function fixHandles(path) {
var pts = path.pathPoints;
for (var j = 0; j < pts.length; j++) {
var p = pts[j];
// コーナーポイントはスキップ
if (p.pointType === PointType.CORNER) continue;
var anchor = p.anchor;
var left = p.leftDirection;
var right = p.rightDirection;
// 方向線の角度を揃える
var vecL = [left[0] - anchor[0], left[1] - anchor[1]];
var vecR = [right[0] - anchor[0], right[1] - anchor[1]];
var lenL = Math.sqrt(vecL[0] * vecL[0] + vecL[1] * vecL[1]);
var lenR = Math.sqrt(vecR[0] * vecR[0] + vecR[1] * vecR[1]);
// 左右の長さの平均を使って対称化
var len = (lenL + lenR) / 2;
// 左ハンドルの角度を基準にする(右は反対方向)
var angle = Math.atan2(vecL[1], vecL[0]);
if (lenL === 0 && lenR !== 0) {
// 左がゼロなら右を基準
angle = Math.atan2(vecR[1], vecR[0]) + Math.PI;
}
// 左ハンドル
p.leftDirection = [
anchor[0] + Math.cos(angle) * len,
anchor[1] + Math.sin(angle) * len
];
// 右ハンドル(反対方向)
p.rightDirection = [
anchor[0] - Math.cos(angle) * len,
anchor[1] - Math.sin(angle) * len
];
// スムーズポイントに変更
p.pointType = PointType.SMOOTH;
}
}
alert("ハンドルを修正しました");
})();

私はIllustratorもタブレットペン利用なので、ブラシで自由曲線を描くことが多いです。
生成したパスを単純化させると、ハンドルが折れて生成されることが多いので・・・
スクリプトを実行(※)すると・・・
※ハンドルがある点を滑らか化
左右のハンドルを一直線に揃え、
長さは左右の平均値にする
コーナーポイントは変更しない
ハンドルは水平に変更されます。
元のパスの複製を予め作成して、ガイドに変更してから修正すれば・・・
折れてないハンドルのパスが出来ます。でも、最初からペンツールで修正した方が速かった感じですね。ちなみに、出来る時と出来ない時があり、状況整理中です(>_<)





