Skip to content

Instantly share code, notes, and snippets.

@ikekou
Last active March 1, 2020 02:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikekou/5559283 to your computer and use it in GitHub Desktop.
Save ikekou/5559283 to your computer and use it in GitHub Desktop.
[Illustrator][JavaScript] アンカーポイントとコントロールポイントの座標(3次ベジェ)をJSONで書き出す
(function () {
$.writeln('----------------------------------------');
var layer = app.activeDocument.activeLayer;
// アクティブドキュメント取得しておく
var actDoc = activeDocument;
var sel = actDoc.selection;
var target = sel[0];
var p = actDoc.pathItems[0].pathPoints;
//$.writeln(p.length);
//上下左右と中心点計算
var left, right, top, bottom, center, middle;
for (var i = 0; i < p.length; i++) {
var pp = p[i];
var a = pp.anchor;
$.writeln(a);
if (i == 0) {
left = a[0];
right = a[0];
top = a[1] * -1;
bottom = a[1] * -1;
} else {
if (a[0] < left) left = a[0];
if (right < a[0]) right = a[0];
if (a[1] * -1 < top) top = a[1] * -1;
if (bottom < a[1] * -1) bottom = a[1] * -1;
}
}
//return;
//$.writeln('--');
//$.writeln(left);
//$.writeln(right);
//$.writeln(top);
//$.writeln(bottom);
center = left + (right - left) / 2;
middle = top + (bottom - top) / 2;
//$.writeln(center);
//$.writeln(middle);
//return;
//パスデータを取得してJSON作成
var str = ''
str += '{\n';
str += 'rect:{left:' + (-center).toString() + ',right:' + (center).toString() + ',top:' + (-middle).toString() + ',bottom:' + (middle).toString() + ',width:' + (right - left).toString() + ',height:' + (bottom - top).toString() + '},\n';
str += 'center:{x:' + (center).toString() + ',y:' + (middle).toString() + '},\n'
str += 'pathPoints:[\n';
for (var i = 0; i < p.length; i++) {
var pp = p[i];
var a = pp.anchor;
var l = pp.leftDirection;
var t = pp.pointType;
var r = pp.rightDirection;
// $.writeln('--');
// $.writeln(t);
$.writeln('a=');
$.writeln(a);
// $.writeln(l);
// createCircle(layer,a[0],a[1],setColor(255,0,0));
// createCircle(layer,l[0],l[1],setColor(0,255,0));
// createCircle(layer,r[0],r[1],setColor(0,0,255));
// $.writeln(r);
if (i != 0) str += ',\n';
str += '{anchor:{x:' + (a[0] - center) + ',y:' + (a[1] * -1 - middle) + '},leftDirection:{x:' + (l[0] - center) + ',y:' + (l[1] * -1 - middle) + '},rightDirection:{x:' + (r[0] - center) + ',y:' + (r[1] * -1 - middle) + '}}';
}
str += '\n]';
str += '\n}';
$.writeln(str);
output(str);
function setColor(r, g, b) {
var tmpColor = new RGBColor();
tmpColor.red = r;
tmpColor.green = g;
tmpColor.blue = b;
return tmpColor;
}
function createCircle(layerObj, x, y, fill) {
var radius = 2;
var pObj = layerObj.pathItems.ellipse(y + radius / 2, x - radius / 2, radius, radius, 0);
// pObj.filled = true; // 塗りあり
// pObj.stroked = true; // 線あり
// pObj.strokeWidth = 10; // 線幅10ポイント
pObj.fillColor = fill; // 塗りの色を指定(赤色)
// pObj.strokeColor = blueColor; // 線の色を指定(青色)
}
function output(txt) {
// Illustratorのバージョン(2桁の数字)
var appVersion = parseInt(version.substr(0, 2), 10);
// ここから外部ファイルに書き出す処理
var actDoc = app.activeDocument;
var saveFolder = actDoc.path; // アクティブなドキュメントの保存フォルダ
var actDocName = actDoc.name; // アクティブなドキュメントの名前
// 新規ファイルオブジェクトをつくる
var saveFile = new File(saveFolder + "/" + actDocName + "_points.txt");
// 書き込みモードでファイルを開き、改行でjoinした配列を書き込んで閉じる
saveFile.open("w");
var success = saveFile.write(txt);
saveFile.close();
// 書き込みが成功したらダイアログを出す(いらない)
if (success) {
var saveFileName = (appVersion > 10) ? decodeURI(saveFile.name) : saveFile.name;
alert("配置画像のパスを保存しました。\n" + "ファイル名 : " + saveFileName);
} else {
alert("しっぱいしました");
}
// ここまで外部ファイルに書き出す処理
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment