Last active
September 23, 2015 21:43
-
-
Save line0/cc3b58ae86409d0c1847 to your computer and use it in GitHub Desktop.
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
#target illustrator | |
#targetengine main | |
#include "./lib/polyfills.jsxinc" | |
app.documents.length > 0 ? l0_impImageSeq() : alert("Please create an empty document before running this script."); | |
function l0_impVecSeq() { | |
app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS | |
var folders = [] | |
var doc = app.activeDocument | |
var impDlgRes ="Group { orientation:'column', alignment:['fill', 'fill'], \ | |
vecFolder: Panel { orientation:'row', text: 'Image Folder', \ | |
edit: EditText {text: ' [Pick a folder of vector drawings to import]', characters: 50}\ | |
btn: Button { text:'...' , preferredSize: [30,24]} ,\ | |
}, \ | |
sti: Group { orientation: 'row', alignChildren: ['fill', 'fill']\ | |
settings: Panel {orientation: 'column', alignChildren: ['left','fill'], text: 'Settings', \ | |
drawPos: Group {orientation: 'row', spacing: 5, \ | |
st1: StaticText {text: 'Drawing Position:'}, \ | |
x: EditText {text: '0', characters: 5}, \ | |
st2: StaticText {text: 'x'}, \ | |
y: EditText {text: '0', characters: 5}, \ | |
st3: StaticText {text: 'px'}, \ | |
}, \ | |
sortPattern: Group {orientation: 'row', spacing: 5, \ | |
st1: StaticText {text: 'Sorting Pattern:'}, \ | |
value: EditText {text: '\\\\d+', characters: 15}, \ | |
}, \ | |
}, \ | |
info: Panel {orientation: 'column', text: 'Information', alignChildren: ['left','fill'], \ | |
vecFolder: Group {orientation: 'row', spacing: 5, \ | |
st1: StaticText {text: 'Image Count: '}, \ | |
cnt: StaticText {text: 'No Folder', characters: 9}, \ | |
}, \ | |
progress: Progressbar {value: 0, size: [250,25]}\ | |
}, \ | |
}, \ | |
import: Button {text: 'Import', enabled: false, alignment: ['fill', 'fill']}, \ | |
}" | |
var dlg = new Window("dialog", "Import Vector Drawing Sequence", void 0, {resizeable: true, independent: false}) | |
dlg.impDlg = dlg.add(impDlgRes); | |
// properly handle resizing | |
dlg.layout.layout(true); | |
dlg.impDlg.minimumSize = dlg.impDlg.size; | |
dlg.layout.resize(); | |
dlg.onResizing = dlg.onResize = function () {this.layout.resize()} | |
// event handling | |
dlg.impDlg.vecFolder.btn.onClick = function() {pickFolder("vecFolder", true, "Select the folder of vector drawings to import...")} | |
dlg.impDlg.vecFolder.edit.onChanging = function() {pickFolder("vecFolder", false)} | |
dlg.impDlg.import.onClick = function() {doImport()} | |
dlg.show() | |
function pickFolder(folder, showPicker, prompt) | |
{ | |
if (showPicker) { | |
folders[folder] = Folder.selectDialog(prompt) | |
if(folders[folder] != null) dlg.impDlg[folder].edit.text = folders[folder].fsName | |
} else { | |
folders[folder] = new Folder(dlg.impDlg[folder].edit.text) | |
} | |
if(folders[folder] && folders[folder].exists) { | |
dlg.impDlg.sti.info[folder].cnt.text = getFiles(folders[folder]).length | |
dlg.impDlg.import.enabled = true | |
} else { | |
dlg.impDlg.sti.info[folder].cnt.text = "No Folder" | |
dlg.impDlg.import.enabled = false | |
} | |
} | |
function getFiles(folder) | |
{ | |
if(folder instanceof Folder) | |
{ | |
var extensions = ["ai", "eps", "pdf", "svg"] | |
var files = folder.getFiles() | |
for (var i=0; i<files.length; i++) | |
{ | |
var fileExt = splitFilename(String(files[i]),true) | |
if (!(files[i] instanceof File) || extensions.indexOf(fileExt) == -1) { | |
files.splice(i,1) | |
i-- | |
} | |
} | |
var pattern = new RegExp(dlg.impDlg.sti.settings.sortPattern.value.text); | |
files.sort(function(a,b) { | |
var aMatch = a.name.match(pattern); | |
var bMatch = b.name.match(pattern); | |
var aNum = aMatch ? TryParseInt (aMatch[0], 0) : 0; | |
var bNum = bMatch ? TryParseInt (bMatch[0], 0) : 0; | |
return aNum < bNum; | |
}); | |
return files; | |
} else return false | |
} | |
function splitFilename(name, returnExt) | |
{ | |
var basename = name.split(".") | |
var ext = basename.pop() | |
return returnExt ? ext : basename.join(".") | |
} | |
function placeVec(file, layer) | |
{ | |
var placed = doc.groupItems.createFromFile(new File(file)); | |
placed.layer = layer | |
placed.position = [parseInt(dlg.impDlg.sti.settings.drawPos.x.text,10), parseInt(dlg.impDlg.sti.settings.drawPos.y.text,10)] | |
return placed | |
} | |
function doImport() | |
{ | |
dlg.impDlg.import.enabled = false; | |
dlg.impDlg.import.text = "Importing..."; | |
var drawings = getFiles (folders["vecFolder"]); | |
for (var i=0; i<drawings.length; i++) | |
{ | |
layer = doc.layers.add(); | |
layer.name = splitFilename(drawings[i].displayName); | |
pvec = placeVec(drawings[i], layer); | |
//app.redraw() | |
dlg.impDlg.sti.info.progress.value = ((i+1)/drawings.length) * 100; | |
dlg.update(); | |
} | |
dlg.close(); | |
} | |
function TryParseInt(str, def) { | |
var result = parseInt(str); | |
return !isNaN(result) ? result : def; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment