Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 82 additions & 60 deletions export_symbols.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,72 +3,94 @@ var symbolCount = doc.symbols.length;

if (symbolCount >= 1) {

if (confirm("Are all your layers hidden?")) {
if (confirm("Are all your layers hidden?")) {

// choose directory
var dest = Folder(doc.path).selectDlg();

if (dest) {
//run genration
generateScale (1);
generateScale (2);
generateScale (3);
}

function generateScale (scaleFactor) {
//create subfolder path
var subdest = new Folder (dest + "/@" + scaleFactor + "x");

//create subfolder
if ( ! subdest.exists ) {
subdest.create()
}

// create temp layer
doc.layers.add();
// choose directory (fallback to Desktop if doc isn't saved)
var defaultFolder = (doc.path && Folder(doc.path)) || Folder.desktop;
var dest = defaultFolder.selectDlg();

if (dest) {
// run generation
generateScale(1);
generateScale(2);
generateScale(3);
}

function generateScale (scaleFactor) {
// create subfolder path
var subdest = new Folder(dest + "/@" + scaleFactor + "x");

// create subfolder
if (!subdest.exists) {
subdest.create();
}

// create temp layer and keep a reference
var tempLayer = doc.layers.add();
tempLayer.name = "__temp_export__";

// loop through symbols
for (var i = 0; i < doc.symbols.length; i++) {

// filter non _name symbols
if(doc.symbols[i].name[0] != "_");{

// place a symbol instance - temp
var symbol = doc.symbolItems.add(doc.symbols[i]);
// loop through symbols
for (var i = 0; i < doc.symbols.length; i++) {
var symbolDef = doc.symbols[i];

//scale 1x
symbol.resize(scaleFactor * 100, scaleFactor * 100);
// skip symbols starting with underscore
if (symbolDef.name && symbolDef.name.charAt(0) === "_") {
continue;
}

// place a symbol instance on the temp layer
var symbol = doc.symbolItems.add(symbolDef);
try {
// ensure on temp layer
symbol.move(tempLayer, ElementPlacement.PLACEATBEGINNING);

// scale
symbol.resize(scaleFactor * 100, scaleFactor * 100);

// build safe filename
var baseName = String(symbolDef.name || ("symbol_" + i));
var filename = sanitizeFilename(baseName) + ".png";

// export symbol
savePNG(subdest, filename);
} finally {
// delete temp symbol instance regardless of export outcome
symbol.remove();
}
}

// remove temp layer
tempLayer.remove();
}
}

// assign name
var filename = (doc.symbols[i].name)
function savePNG(dest, filename) {
// save options
var type = ExportType.PNG24;
var options = new ExportOptionsPNG24();
options.transparency = true;
options.antiAliasing = true;
options.artBoardClipping = false;
options.horizontalScale = 100;
options.verticalScale = 100;

// export symbols
savePNG(subdest, filename);
// file
var file = new File(dest + "/" + filename);

// delete temp symbol instance
symbol.remove();
}
}

// remove temp layer
doc.layers[0].remove();
}

}

function savePNG(dest, filename) {
// save options
var type = ExportType.PNG24;
var options = new ExportOptionsPNG24();
options.transparency = true;

// file
var file = new File(dest + "/" + filename);

// export
doc.exportFile(file, type, options);
}
// export
doc.exportFile(file, type, options);
}

} else {
alert("You don't have any symbols in this document");
alert("You don't have any symbols in this document");
}

function sanitizeFilename(name) {
// replace illegal filename characters and trim
var cleaned = name.replace(/[\\\/:*?"<>|]/g, "_").replace(/\s+/g, " ").replace(/^\s+|\s+$/g, "");
// avoid empty names
if (!cleaned) {
cleaned = "export";
}
return cleaned;
}
7 changes: 4 additions & 3 deletions remove_dots.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ var myDoc = app.activeDocument;
var length = myDoc.pathItems.length;
var count = 0;
for (var i=length-1; i>=0; i--){
if (myDoc.pathItems[i].length == 0){
myDoc.pathItems[i].remove();
var pathItem = myDoc.pathItems[i];
if (!pathItem.locked && !pathItem.hidden && pathItem.pathPoints.length == 0){
pathItem.remove();
++count;
}
}
}
alert(count + " paths were deleted");
37 changes: 27 additions & 10 deletions remove_useless_points.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ var myDoc = app.activeDocument;
var length = myDoc.pathItems.length;
var count = 0;
var fault_depth = 0.01;
var handle_tolerance = 0.01;

for (var i=0; i<length; i++){
if (isShape (myDoc.pathItems[i]) && myDoc.pathItems[i].closed && myDoc.pathItems[i].editable){
if (isShape (myDoc.pathItems[i]) && myDoc.pathItems[i].closed && myDoc.pathItems[i].editable && !myDoc.pathItems[i].locked && !myDoc.pathItems[i].hidden){
var pointsLength= myDoc.pathItems[i].pathPoints.length;
var myPathPoints = myDoc.pathItems[i].pathPoints;
for(var j=0;j<pointsLength;j++){
Expand All @@ -17,7 +18,7 @@ for (var i=0; i<length; i++){
if (dot_next == pointsLength){
dot_next = 0;
}
if (isOnLine (myPathPoints[dot], myPathPoints[dot_next], myPathPoints[dot_prev])){
if (isOnLine (myPathPoints[dot], myPathPoints[dot_next], myPathPoints[dot_prev]) && handlesAlignedOrZero(myPathPoints[dot], myPathPoints[dot_prev], myPathPoints[dot_next])){
myPathPoints[dot].remove();
++count;
--pointsLength;
Expand All @@ -26,20 +27,14 @@ for (var i=0; i<length; i++){
}
}
// for open path
if (isShape (myDoc.pathItems[i]) && !myDoc.pathItems[i].closed && myDoc.pathItems[i].editable){
if (isShape (myDoc.pathItems[i]) && !myDoc.pathItems[i].closed && myDoc.pathItems[i].editable && !myDoc.pathItems[i].locked && !myDoc.pathItems[i].hidden){
var pointsLength= myDoc.pathItems[i].pathPoints.length;
var myPathPoints = myDoc.pathItems[i].pathPoints;
for(var j=1;j<pointsLength-1;j++){
var dot = j;
var dot_prev = dot -1;
var dot_next = dot+1;
if (dot_prev == -1){
dot_prev = pointsLength -1;
}
if (dot_next == pointsLength){
dot_next = 0;
}
if (isOnLine (myPathPoints[dot], myPathPoints[dot_next], myPathPoints[dot_prev])){
if (isOnLine (myPathPoints[dot], myPathPoints[dot_next], myPathPoints[dot_prev]) && handlesAlignedOrZero(myPathPoints[dot], myPathPoints[dot_prev], myPathPoints[dot_next])){
myPathPoints[dot].remove();
++count;
--pointsLength;
Expand Down Expand Up @@ -94,6 +89,28 @@ function isOnLine(pathPoint, pathPoint_next, pathPoint_prev){
}
}

function handlesAlignedOrZero(pathPoint, pathPoint_prev, pathPoint_next){
var ax = pathPoint.anchor[0];
var ay = pathPoint.anchor[1];
var lx = pathPoint.leftDirection[0] - ax;
var ly = pathPoint.leftDirection[1] - ay;
var rx = pathPoint.rightDirection[0] - ax;
var ry = pathPoint.rightDirection[1] - ay;

var vx = pathPoint_next.anchor[0] - pathPoint_prev.anchor[0];
var vy = pathPoint_next.anchor[1] - pathPoint_prev.anchor[1];

var handlesZero = (Math.abs(lx) < handle_tolerance && Math.abs(ly) < handle_tolerance && Math.abs(rx) < handle_tolerance && Math.abs(ry) < handle_tolerance);
if (handlesZero){
return true;
}

var crossL = Math.abs(lx * vy - ly * vx);
var crossR = Math.abs(rx * vy - ry * vx);

return (crossL < handle_tolerance && crossR < handle_tolerance);
}

function distance(x1,y1, x2, y2){
var dx = x2 - x1;
var dy = y2 - y1;
Expand Down