Skip to content

Instantly share code, notes, and snippets.

@line0
Last active September 23, 2015 21:43
Show Gist options
  • Save line0/cc3b58ae86409d0c1847 to your computer and use it in GitHub Desktop.
Save line0/cc3b58ae86409d0c1847 to your computer and use it in GitHub Desktop.
#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