Skip to content

Instantly share code, notes, and snippets.

@krimpedance
Created November 19, 2018 03:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krimpedance/9406275618bb5c8cd46da1c5c94d45c3 to your computer and use it in GitHub Desktop.
Save krimpedance/9406275618bb5c8cd46da1c5c94d45c3 to your computer and use it in GitHub Desktop.
Illustrator object to Swift.UIBezierPath
"use strict";
getPath = function() {
var digit = 1000;
var doc;
try {
doc = app.activeDocument;
} catch(e){
return "ファイルがありません.";
}
var pathItems = doc.selection;
var itemsLen = pathItems.length;
if(itemsLen === 0)
return "オブジェクトを選択してください";
// 表示するコード
var dispText = "";
dispText += 'var path = UIBezierPath()'+'\n';
for(var i = 0 ; i < itemsLen ; i++) {
var pathItem = pathItems[i];
var isClosed = pathItem.closed;
var pathPoints = pathItem.pathPoints;
var pathLen = pathPoints.length;
var endPoint;
var prePoint;
if(pathLen === 1) return "最低2つのパスを含む必要があります.";
for(var j=0; j < pathLen; j++) {
var ap = roundPoint(convertDToA(pathPoints[j].anchor), digit);
var ld = roundPoint(convertDToA(pathPoints[j].leftDirection), digit);
var c = (j != 0) ? j - 1 : pathLen - 1;
var rd = roundPoint(convertDToA(pathPoints[c].rightDirection), digit);
prePoint = roundPoint(convertDToA(pathPoints[c].anchor), digit);
if (j == 0) {
dispText += makeMoveToPoint(ap)+"\n";
if (isClosed) {
if(rd.toString() === prePoint.toString() && ld.toString() === ap.toString()) {
// 直線
endPoint = makeAddLine(ap);
} else {
// 曲線
endPoint = makeAddCurve(ap, ld, rd);
}
}
} else {
if(rd.toString() === prePoint.toString() && ld.toString() === ap.toString()) {
// 直線
dispText += makeAddLine(ap)+"\n";
} else {
// 曲線
dispText += makeAddCurve(ap, ld, rd)+"\n";
}
}
}
if (endPoint) {
dispText += endPoint+"\n";
}
}
dispText += "path.stroke()"+"\n";
return dispText;
}
function makeMoveToPoint(anchor) {
return 'path.moveToPoint(' + makeCGPointMake(anchor) + ')';
}
function makeAddLine(anchor) {
return 'path.addLineToPoint(' + makeCGPointMake(anchor) + ')';
}
function makeAddCurve(anchor, leftDirection, rightDirection) {
return 'path.addCurveToPoint(' + makeCGPointMake(anchor) +
', controlPoint1:' + makeCGPointMake(rightDirection) +
', controlPoint2:' + makeCGPointMake(leftDirection) +
')';
}
function makeCGPointMake(point) {
return 'CGPoint(x: ' + point[0] + ', y: ' + point[1] + ')';
}
function roundPoint(point, places) {
var p = [];
var len = point.length;
for(var i=0; i < len; i++) {
p.push(Math.round(point[i] * places)/places);
}
return p;
}
function convertDToA(point) {
var doc = app.activeDocument;
var pos = doc.convertCoordinate (point, CoordinateSystem.DOCUMENTCOORDINATESYSTEM, CoordinateSystem.ARTBOARDCOORDINATESYSTEM);
pos[1] *= -1;
return pos;
}
/*
メイン
*/
var text = getPath()
var palette= new Window("dialog", "KRDrawScript")
var pnlMain = palette.add("group { orientation: 'column', alignment :'left', alignChildren :'right'}");
textArea = pnlMain.add("edittext", undefined, text, {multiline:true});
textArea.minimumSize = [500,10];
var closeBtn = pnlMain.add("button", undefined, 'Close');
closeBtn.minimumSize = [100, 0];
closeBtn.onClick = function() {
palette.close()
}
palette.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment