Created
November 19, 2018 03:26
-
-
Save krimpedance/9406275618bb5c8cd46da1c5c94d45c3 to your computer and use it in GitHub Desktop.
Illustrator object to Swift.UIBezierPath
This file contains hidden or 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
"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