Last active
March 1, 2020 02:12
-
-
Save ikekou/5559283 to your computer and use it in GitHub Desktop.
[Illustrator][JavaScript] アンカーポイントとコントロールポイントの座標(3次ベジェ)をJSONで書き出す
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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