Last active
March 14, 2024 20:27
-
-
Save okay-type/c63ecd6437b541c3c01d464c39adff95 to your computer and use it in GitHub Desktop.
An InDesign script to randomly transform each selected object
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
// indesign script | |
// apply a random transformation to each selected objects | |
// 2024 jackson@okaytype.com | |
function rotate_objects(params) { | |
var rotate_range = parseFloat(params[0]) | |
var x_range = params[1] | |
var y_range = params[2] | |
var scale_range_min = parseFloat(params[3])/100 | |
var scale_range_max = parseFloat(params[4])/100 | |
var objects = app.selection | |
for (var i = 0; i < app.selection.length; i++) { | |
var r_angle = (-rotate_range/2) + (Math.random() * rotate_range) | |
var x_translation = (-x_range/2) + (Math.random() * x_range) | |
var y_translation = (-y_range/2) + (Math.random() * y_range) | |
var s_factor = 1 | |
if (scale_range_min != 1 || scale_range_max != 1){ | |
var s_factor = scale_range_min + (Math.random() * (scale_range_max - scale_range_min)) | |
} | |
objects[i].transform( | |
CoordinateSpaces.pasteboardCoordinates, | |
AnchorPoint.centerAnchor, | |
app.transformationMatrices.add({ | |
counterclockwiseRotationAngle: r_angle, | |
horizontalTranslation: x_translation, | |
verticalTranslation: y_translation, | |
verticalScaleFactor: s_factor, | |
horizontalScaleFactor: s_factor, | |
}), | |
) | |
} | |
} | |
var myDialog = app.dialogs.add({name:'Randomly Transform Each', canCancel:true}) | |
with(myDialog){ | |
with (dialogColumns.add()){ | |
with(borderPanels.add()){ | |
staticTexts.add({ | |
staticLabel:'Rotate Range', | |
minWidth: 100, | |
}) | |
var rotate_range_field = angleEditboxes.add({ | |
editContents:'0', | |
}) | |
} | |
with(borderPanels.add()){ | |
staticTexts.add({ | |
staticLabel:'X Range', | |
minWidth: 100, | |
}) | |
var x_range_field = measurementEditboxes.add({ | |
editValue:0, | |
editUnits:MeasurementUnits.inches, | |
}) | |
} | |
with(borderPanels.add()){ | |
staticTexts.add({ | |
staticLabel:'Y Range', | |
minWidth: 100, | |
}) | |
var y_range_field = measurementEditboxes.add({ | |
editValue:0, | |
editUnits:MeasurementUnits.inches, | |
}) | |
} | |
with(borderPanels.add()){ | |
staticTexts.add({ | |
staticLabel:'Scale Min', | |
minWidth: 100, | |
}) | |
var scale_field_min = percentEditboxes.add({ | |
editContents:'100', | |
}) | |
} | |
with(borderPanels.add()){ | |
staticTexts.add({ | |
staticLabel:'Scale Max', | |
minWidth: 100, | |
}) | |
var scale_field_max = percentEditboxes.add({ | |
editContents:'100', | |
}) | |
} | |
} | |
} | |
var myResult = myDialog.show() | |
if (myResult == true) { | |
var rotate_range = rotate_range_field.editContents | |
var x_range = x_range_field.editValue | |
var y_range = y_range_field.editValue | |
var scale_field_min = scale_field_min.editContents | |
var scale_field_max = scale_field_max.editContents | |
myDialog.destroy() | |
var params = [rotate_range, x_range, y_range, scale_field_min, scale_field_max] | |
app.doScript(rotate_objects, ScriptLanguage.javascript, params, UndoModes.entireScript, 'Randomly Transform Each') | |
} else { | |
myDialog.destroy() | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment