Last active
October 26, 2022 14:54
-
-
Save creold/5e50f51267d04cdb540479ae3e13c33b to your computer and use it in GitHub Desktop.
Added 180 degrees rotation
This file contains 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
/* | |
Program version: Adobe Illustrator CS5+ | |
Name: artboardsRotateWithObjects.jsx; | |
Author: Alexander Ladygin, email: [email protected] | |
Sergey Osokin, email: [email protected] | |
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