Skip to content

Instantly share code, notes, and snippets.

@creold
Last active October 26, 2022 14:54
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 creold/5e50f51267d04cdb540479ae3e13c33b to your computer and use it in GitHub Desktop.
Save creold/5e50f51267d04cdb540479ae3e13c33b to your computer and use it in GitHub Desktop.
Added 180 degrees rotation
/*
Program version: Adobe Illustrator CS5+
Name: artboardsRotateWithObjects.jsx;
Author: Alexander Ladygin, email: i@ladygin.pro
Sergey Osokin, email: hi@sergosokin.ru
Copyright (c) 2018
www.ladyginpro.ru
*/
#target illustrator;
app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
var scriptName = 'ARWO',
scriptVersion = '1.3';
try {
if (documents.length > 0) {
var doc = app.activeDocument,
currArt = doc.artboards[doc.artboards.getActiveArtboardIndex()],
currArtNum = doc.artboards.getActiveArtboardIndex() + 1,
lockedItems = new Array(),
hiddenItems = new Array();
// Create Main Window
var dlg = new Window('dialog', scriptName + ' ver.' + scriptVersion, undefined);
dlg.orientation = 'column';
dlg.alignChildren = ['fill', 'fill'];
// Target radiobutton
var slctTarget = dlg.add('panel', undefined, 'What to rotate?');
slctTarget.orientation = 'column';
slctTarget.alignChildren = 'left';
slctTarget.margins = 20;
var currArtRadio = slctTarget.add('radiobutton', undefined, 'Active Artboard #' + currArtNum),
allArtRadio = slctTarget.add('radiobutton', undefined, 'All ' + doc.artboards.length + ' Artboards');
currArtRadio.value = true;
// Angle radiobutton
var slctAngle = dlg.add('panel', undefined, 'Rotation angle:');
slctAngle.orientation = 'column';
slctAngle.alignChildren = ['fill', 'fill'];
slctAngle.margins = 20;
var cwAngle90 = slctAngle.add('radiobutton', undefined, '90 CW'),
ccwAngle90 = slctAngle.add('radiobutton', undefined, '90 CCW'),
cwAngle180 = slctAngle.add('radiobutton', undefined, '180 CW');
cwAngle90.value = true;
// Buttons
var btns = dlg.add('group');
btns.alignChildren = ['fill', 'fill'];
btns.margins = [0, 10, 0, 0];
var cancel = btns.add('button', undefined, 'Cancel', {name: 'cancel'});
cancel.helpTip = 'Press Esc to Close';
cancel.onClick = function () { dlg.close(); }
var ok = btns.add('button', undefined, 'OK', {name: 'ok'});
ok.helpTip = 'Press Enter to Run';
ok.active = true;
ok.onClick = okClick;
var copyright = dlg.add('statictext', undefined, '\u00A9 www.ladyginpro.ru');
copyright.justify = 'center';
deselect();
dlg.center();
dlg.show();
//Start
function okClick() {
// Saving information about locked & hidden pageItems
saveItemsState();
// Rotate active artboard or all artboards in document
if (currArtRadio.value == true) {
rotateArt(currArt);
} else {
for (var i = 0; i < doc.artboards.length; i++) {
doc.artboards.setActiveArtboardIndex(i);
rotateArt(doc.artboards[i]);
}
}
// Restoring locked & hidden pageItems
restoreItemsState();
dlg.close();
}
} else {
throw new Error(scriptName + '\nPlease open a document before running this script.');
}
} catch (e) {
showError(e);
}
// Save information about locked & hidden pageItems
function saveItemsState() {
for (var i = 0; i < doc.pageItems.length; i++) {
var currItem = doc.pageItems[i];
if (currItem.locked == true) {
lockedItems.push(i);
currItem.locked = false;
}
if (currItem.hidden == true) {
hiddenItems.push(i);
currItem.hidden = false;
}
}
}
// Restoring locked & hidden pageItems
function restoreItemsState() {
for (var i = 0; i < lockedItems.length; i++) {
var index = lockedItems[i];
doc.pageItems[index].locked = true;
}
for (var j = 0; j < hiddenItems.length; j++) {
var index = hiddenItems[j];
doc.pageItems[index].hidden = true;
}
}
// Main function for rotate artboard
function rotateArt(board) {
app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
var artRect = [].concat(board.artboardRect),
artWidth = artRect[2] - artRect[0],
artHeight = -(artRect[3] - artRect[1]);
doc.selectObjectsOnActiveArtboard();
var sel = selection;
deselect();
// Rotate artboard
var newArtRect = [
artRect[0] + artWidth / 2 - (artHeight / 2),
artRect[1] - artHeight / 2 + (artWidth / 2),
artRect[2] - artWidth / 2 + (artHeight / 2),
artRect[3] + artHeight / 2 - (artWidth / 2)
];
// Rotate objects
for (var k = 0; k < sel.length; k++) {
var bnds = sel[k].position,
__width = sel[k].width,
__height = sel[k].height,
top = bnds[1] - artRect[1],
left = bnds[0] - artRect[0];
if (cwAngle90.value == true) {
// rotate 90 CW
sel[k].rotate(-90, true, true, true, true, Transformation.CENTER);
sel[k].position = [newArtRect[2] - __height + top, newArtRect[1] - left];
} else if (ccwAngle90.value == true) {
// rotate 90 CCW
sel[k].rotate(90, true, true, true, true, Transformation.CENTER);
sel[k].position = [newArtRect[0] - top, newArtRect[3] + left + __width];
} else {
// rotate 180 CW
sel[k].rotate(180, true, true, true, true, Transformation.CENTER);
sel[k].position = [artRect[2] - left - __width, artRect[3] - top + __height];
}
}
if (!cwAngle180.value) board.artboardRect = newArtRect;
}
function deselect() {
selection = null;
app.redraw();
}
function showError(err) {
if (confirm(scriptName + ': an unknown error has occurred.\n' +
'Would you like to see more information?', true, 'Unknown Error')) {
alert(err + ': on line ' + err.line, 'Script Error', true);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment