Demonstration Photoshop script that allows you to quickly make copies of objects and arrange them in the correct order.
/**
*
* Duplicate Me!
* Copyright: (c)2016. Vladimir Gaintsev, gaintsev@gmail.com. All rights reserved.
*
*/
/*=============================================
= Check Active Document =
=============================================*/
function checkActiveDocument() {
if (!documents.length) {
alert('No active documents. First open or create a document.');
return false;
}
return true;
}
/*========================================
= Check Layer Type =
========================================*/
function checkLayerSet(layerSet) {
if (layerSet.typename == 'LayerSet') {
return true;
}
alert('First select a group layer.');
return false;
}
/*======================================
= Get Layer Size =
======================================*/
function getLayerSize(layer) {
var bounds = layer.bounds;
var width = bounds[2] - bounds[0];
var height = bounds[3] - bounds[1];
var size = [width, height];
return size;
}
/*===================================
= Main script =
===================================*/
if (checkActiveDocument()) {
// Define variables
var activeDocument = app.activeDocument;
var activeLayer = activeDocument.activeLayer;
var activeLayerSizes = getLayerSize(activeLayer);
// Default parameters
var itemAlign = ['inline', 'column', 'grid'];
var itemCount = 6;
var itemCountInRow = 3;
var itemMarginRight = 1;
var itemMarginBottom = 1;
if (checkLayerSet(activeLayer)) {
// Building dialog window
var win = new Window('dialog','Duplicate Me!');
win.alignChildren = 'center';
var ddlPanel = win.add('panel', undefined, 'Diplicates align style');
var ddlItemAlign = ddlPanel.add('dropdownlist', undefined, itemAlign);
ddlItemAlign.selection = 0;
var panelItemCount = win.add('panel', undefined, 'Duplicates Count');
var etItemCount = panelItemCount.add('edittext', undefined, itemCount);
var panelItemCountInRow = win.add('panel', undefined, 'Duplicates in row (only for grid style)');
var etItemCountInRow = panelItemCountInRow.add('edittext', undefined, itemCountInRow);
var panelMargins = win.add('panel', undefined, 'Margins');
panelMargins.orientation = 'row';
panelMargins.add('statictext', undefined, 'Right margin');
var etItemMarginRight = panelMargins.add('edittext', undefined, itemMarginRight);
panelMargins.add('statictext', undefined, 'Bottom margin');
var etItemMarginBottom = panelMargins.add('edittext', undefined, itemMarginBottom);
var buttonsGroup = win.add('panel');
buttonsGroup.orientation = 'row';
var cancelButton = buttonsGroup.add('button', undefined, 'Cancel');
var applyButton = buttonsGroup.add('button', undefined, 'Apply');
cancelButton.onClick = function() {
return win.close();
};
// Main script
applyButton.onClick = function() {
var i = 0;
while (i < etItemCount.text) {
activeLayer.duplicate();
switch (ddlItemAlign.selection.text) {
case 'inline':
activeLayer.translate(activeLayerSizes[0] + (etItemMarginRight.text * 1), 0);
break;
case 'column':
activeLayer.translate(0, activeLayerSizes[1] + (etItemMarginBottom.text * 1));
break;
case 'grid':
var row = 1;
var counter = i + 1;
if (counter % etItemCountInRow.text == 0) {
activeLayer.translate(-(etItemCountInRow.text * activeLayerSizes[0] + (etItemMarginRight.text * 1) * etItemCountInRow.text), activeLayerSizes[1] * row++ + (etItemMarginBottom.text * 1));
}
activeLayer.translate(activeLayerSizes[0] + (etItemMarginRight.text * 1), 0);
}
i++;
}
activeLayer.visible = false;
activeLayer.allLocked = true;
win.close();
};
win.show();
}
}