オブジェクトをアンカーポイントでカットして、セグメントをバラバラにします。
function splitPathPreservingHandles() {
var doc = app.activeDocument;
var sel = doc.selection;
if (!(sel && sel.length > 0)) {
alert("パスを選択してください。");
return;
}
for (var i = 0; i < sel.length; i++) {
if (sel[i].typename !== "PathItem") continue; // パスアイテムのみ処理
var path = sel[i];
var points = path.pathPoints;
var newPaths = [];
// クローズパスかどうか
var isClosed = path.closed;
for (var j = 0; j < points.length - 1; j++) {
createNewSegment(doc, points[j], points[j + 1],
path, newPaths);
}
// クローズパスの場合、最終セグメントと最初のセグメントを分割
if (isClosed) {
createNewSegment(doc, points[points.length - 1],
points[0], path, newPaths);
}
path.remove(); // 元のパスを削除
}
alert("選択したパスをハンドルを保持して分割しました。");
}
// 指定された2点を結ぶ新しいセグメントを作成
function createNewSegment(doc, startPoint, endPoint,
originalPath, newPaths) {
var newPath = doc.pathItems.add();
newPath.setEntirePath([
[startPoint.anchor[0], startPoint.anchor[1]],
[endPoint.anchor[0], endPoint.anchor[1]]
]);
var newPoints = newPath.pathPoints;
newPoints[0].leftDirection = startPoint.leftDirection;
newPoints[0].rightDirection = startPoint.rightDirection;
newPoints[1].leftDirection = endPoint.leftDirection;
newPoints[1].rightDirection = endPoint.rightDirection;
newPath.stroked = originalPath.stroked;
newPath.strokeColor = originalPath.strokeColor;
newPath.fillColor = originalPath.fillColor;
newPath.filled = false; // 塗りなし
newPaths.push(newPath);
}
splitPathPreservingHandles();
サンプルオブジェクトを選択して実行すれば・・・
セグメントだけがのこります。ただし、処理直後はアウトライン表示にしないと確認できません。全選択で任意の色を設定すると良いでしょう。
ダイレクト選択ツールでバラバラを確認できます。