Quantcast
Channel: Adobe Community: Message List - Photoshop Scripting
Viewing all articles
Browse latest Browse all 27456

Re: Distribute Layers with a Specific Value

$
0
0

Thanks, I've read in the forums that Paul has stopped being active anymore which is a big shame. I did find his site with the source file for this distribute script. I just hope maybe someone here can help to support CC version, work properly and make it more accurate. It's a great script but its very important to make exact spacing values. Other wise, this is no better than the built in distribute tools of Photoshop.

 

here's the script code:

 

function main(){

if(!documents.length) return;

var win = new Window('dialog','Space Layers');

g = win.graphics;

var myBrush = g.newBrush(g.BrushType.SOLID_COLOR, [0.99, 0.99, 0.99, 1]);

g.backgroundColor = myBrush;

win.p1= win.add("panel", undefined, undefined, {borderStyle:"black"});

win.g1 = win.p1.add('group');

win.g1.orientation = "row";

win.title = win.g1.add('statictext',undefined,'Space Layers');

win.title.alignment="fill";

var g = win.title.graphics;

g.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);

win.g5 =win.p1.add('group');

win.g5.orientation = "row";

win.g5.alignment='fill';

win.g5.spacing=3;

win.g5.st1 = win.g5.add('statictext',undefined,'Horizontal');

win.g5.et1 = win.g5.add('edittext',undefined,'20');

win.g5.et1.preferredSize=[50,20];

win.g5.st1a = win.g5.add('statictext',undefined,'px');

win.g5.st10 = win.g5.add('statictext',undefined,'');

win.g5.st10.preferredSize=[55,20];

win.g5.st2 = win.g5.add('statictext',undefined,'Vertical');

win.g5.et2 = win.g5.add('edittext',undefined,'20');

win.g5.et2.preferredSize=[50,20];

win.g5.st2a = win.g5.add('statictext',undefined,'px');

win.g10 =win.p1.add('group');

win.g10.orientation = "row";

win.g10.alignment='fill';

win.g10.spacing=10;

win.g10.st1 = win.g10.add('statictext',undefined,'Plus ~ Minus Pixels ,Top of Layers');

win.g10.et1 = win.g10.add('edittext',undefined,'50');

win.g10.et1.helpTip="This is the amount of top pixels can differ\nFor a low res document use a lower number\rFor a high res document use a higher number"

win.g10.et1.preferredSize=[50,20];

win.g10.et1.onChanging = function() {

  if (this.text.match(/[^\-\.\d]/)) {

    this.text = this.text.replace(/[^\-\.\d]/g, '');

  }

};

win.g15 =win.p1.add('group');

win.g15.orientation = "row";

win.g15.alignment='fill';

win.g15.spacing=10;

win.g15.bu1 = win.g15.add('button',undefined,'Space Layers');

win.g15.bu1.preferredSize=[150,30];

win.g15.bu2 = win.g15.add('button',undefined,'Cancel');

win.g15.bu2.preferredSize=[150,30];

 

if(version.substr(0,version.indexOf('.'))<10){

    alert("Sorry this script is only valid for Photoshop CS3 or higher");

    return;

}

 

win.g5.et1.onChanging = function() {

  if (this.text.match(/[^\-\.\d]/)) {

    this.text = this.text.replace(/[^\-\.\d]/g, '');

  }

}

win.g5.et2.onChanging = function() {

  if (this.text.match(/[^\-\.\d]/)) {

    this.text = this.text.replace(/[^\-\.\d]/g, '');

  }

}

win.g15.bu1.onClick=function(){

if(win.g5.et1.text== ''){

    alert("No horizontal pixels entered");

    return;

    }

if(win.g5.et2.text== ''){

    alert("No vertical pixels entered");

    return;

    }

var plusMinus =0;

if(Number(win.g10.et1.text) < 1) {

    plusMinus=2;

    }else{

        plusMinus=Number(win.g10.et1.text);

        }

win.close(1);

 

spaceMasks(Number(win.g5.et1.text),Number(win.g5.et2.text),plusMinus)

}

win.center();

win.show()

 

}

function spaceMasks(spacingA,spacingD,plusMinus){

var startRulerUnits = app.preferences.rulerUnits;

app.preferences.rulerUnits = Units.PIXELS;

var selectedLayers = getSelectedLayersIdx();

if(selectedLayers.length <2){

    alert("Not enough layers selected!");

    return;

    }

var boundsList=[];

var tempbnds=[];

showFX(false);

for(var a=0;a<selectedLayers.length;a++){

    var LB =getLayerBoundsByIndex(selectedLayers[a] );

    boundsList.push([[selectedLayers[a]],[LB[0]],[LB[1]],[LB[2]],[LB[3]]] );

    tempbnds=[];

    }

showFX(true);

boundsList.sort(function(a,b){return a[2]-b[2];});

var row1=[]; var row2=[]; var row3=[]; var row4=[]; var row5=[];

var row6=[]; var row7=[]; var row8=[]; var row9=[]; var row10=[];

var row11=[]; var row12=[]; var row13=[]; var row14=[]; var row15=[];

var row16=[]; var row17=[]; var row18=[]; var row19=[]; var row20=[];

var row21=[]; var row22=[]; var row23=[]; var row24=[]; var row25=[];

var row26=[]; var row27=[]; var row28=[]; var row29=[]; var row30=[];

var row31=[]; var row32=[]; var row33=[]; var row34=[]; var row35=[];

var row36=[]; var row37=[]; var row38=[]; var row39=[]; var row40=[];

var row41=[]; var row42=[]; var row43=[]; var row44=[]; var row45=[];

var row46=[]; var row47=[]; var row48=[]; var row49=[]; var row50=[];

var row51=[]; var row52=[]; var row53=[]; var row54=[]; var row55=[];

var row56=[]; var row57=[]; var row58=[]; var row59=[]; var row60=[];

var row61=[]; var row62=[]; var row63=[]; var row64=[]; var row65=[];

var row66=[]; var row67=[]; var row68=[]; var row69=[]; var row70=[];

var row71=[]; var row72=[]; var row73=[]; var row74=[]; var row75=[];

var row76=[]; var row77=[]; var row78=[]; var row79=[]; var row80=[];

var row81=[]; var row82=[]; var row83=[]; var row84=[]; var row85=[];

var row86=[]; var row87=[]; var row88=[]; var row89=[]; var row90=[];

var row91=[]; var row92=[]; var row93=[]; var row94=[]; var row95=[];

var row96=[]; var row97=[]; var row98=[]; var row99=[]; var row100=[];

var row101=[]; var row102=[]; var row103=[]; var row104=[]; var row105=[];

var row106=[]; var row107=[]; var row108=[]; var row109=[]; var row110=[];

var row111=[]; var row112=[]; var row113=[]; var row114=[]; var row115=[];

var row116=[]; var row117=[]; var row118=[]; var row119=[]; var row120=[];

var arrayNumber =1;

var TOP =Number(boundsList[0][2]);

for(var f =0;f<boundsList.length;f++){

    if(TOP > (boundsList[f][2]-plusMinus) && boundsList[f][2] < (boundsList[f][2]+plusMinus)){

        eval("row" +arrayNumber).push(boundsList[f]);

        }else{

            TOP =Number(boundsList[f][2]);

            arrayNumber++;

            eval("row" +arrayNumber).push(boundsList[f]);

        }

}

for(var d=0;d<arrayNumber;d++){

    eval("row" +(d+1)).sort(function(a,b){return a[1]-b[1];});

    }

if((row1.length*arrayNumber) != boundsList.length){

    alert("Unable to distribute this selection of layers!");

    return;

    }

for(var l=0;l<arrayNumber;l++){

var leftAnchor =Number(eval("row"+(l+1))[0][3]);

for(var a = 1;a<eval("row"+(l+1)).length;a++){

makeActiveByIndex(Number(eval("row"+(l+1))[a][0]),false);

var Width = Number(eval("row"+(l+1))[a][3]) - Number(eval("row"+(l+1))[a][1]);

var shiftPixels = (leftAnchor+spacingA) - Number(eval("row"+(l+1))[a][1]);

activeDocument.activeLayer.translate(shiftPixels,0);

leftAnchor +=(Width+spacingA);

    }

}

for(var l=0;l<row1.length;l++){

var topAnchor =Number(row1[l][4]);

for(var a = 1;a<arrayNumber;a++){

makeActiveByIndex(Number(eval("row"+(a+1))[l][0]),false);

var Height = Number(eval("row"+(a+1))[l][4]) - Number(eval("row"+(a+1))[l][2]);

var shiftPixels = (topAnchor+spacingD) - Number(eval("row"+(a+1))[l][2]);

activeDocument.activeLayer.translate(0,shiftPixels);

topAnchor +=(Height+spacingD);

    }

}

for(var a in selectedLayers){

    makeActiveByIndex(Number(selectedLayers[a]),false,true);

}

app.preferences.rulerUnits = startRulerUnits;

}

main();

function selectLayerByIdx(idx, add) {

    var ref = new ActionReference();

    ref.putIndex(charIDToTypeID('Lyr '), idx);

    var desc = new ActionDescriptor();

    desc.putReference(charIDToTypeID('null'), ref);

    if(add) desc.putEnumerated(stringIDToTypeID('selectionModifier'), stringIDToTypeID('selectionModifierType'), stringIDToTypeID('addToSelection'));

    desc.putBoolean(charIDToTypeID('MkVs'), false);

    executeAction(charIDToTypeID('slct'), desc, DialogModes.NO);

}

function makeActiveByIndex( idx, visible,add ){

    if(add == undefined) add=false;

    var desc = new ActionDescriptor();

      var ref = new ActionReference();

      ref.putIndex(charIDToTypeID( "Lyr " ), idx)

      desc.putReference( charIDToTypeID( "null" ), ref );

      if(add) desc.putEnumerated(stringIDToTypeID('selectionModifier'), stringIDToTypeID('selectionModifierType'), stringIDToTypeID('addToSelection'));

      desc.putBoolean( charIDToTypeID( "MkVs" ), visible );

   executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );

};

function getSelectedLayersIdx(){

      var selectedLayers = new Array;

      var ref = new ActionReference();

      ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

      var desc = executeActionGet(ref);

      if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){

         desc = desc.getList( stringIDToTypeID( 'targetLayers' ));

          var c = desc.count

          var selectedLayers = new Array();

          for(var i=0;i<c;i++){

            try{

               activeDocument.backgroundLayer;

               selectedLayers.push(  desc.getReference( i ).getIndex() );

            }catch(e){

               selectedLayers.push(  desc.getReference( i ).getIndex()+1 );

            }

          }

       }else{

         var ref = new ActionReference();

         ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));

         ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

         try{

            activeDocument.backgroundLayer;

            selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);

         }catch(e){

            selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));

         }

      }

      return selectedLayers;

};

function getLayerBoundsByIndex( idx ) {

    var ref = new ActionReference();

    ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID( "bounds" ));

    ref.putIndex( charIDToTypeID( "Lyr " ), idx );

    var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID( "bounds" ));

    var bounds = [];

    bounds.push(desc.getUnitDoubleValue(stringIDToTypeID('left')));

    bounds.push(desc.getUnitDoubleValue(stringIDToTypeID('top')));

    bounds.push(desc.getUnitDoubleValue(stringIDToTypeID('right')));

    bounds.push(desc.getUnitDoubleValue(stringIDToTypeID('bottom')));

    return bounds;

};

function showFX(FX) {

    var desc48 = new ActionDescriptor();

        var ref34 = new ActionReference();

        ref34.putProperty( charIDToTypeID('Prpr'), charIDToTypeID('lfxv') );

        ref34.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

    desc48.putReference( charIDToTypeID('null'), ref34 );

        var desc49 = new ActionDescriptor();

        desc49.putBoolean( charIDToTypeID('lfxv'), FX );

    desc48.putObject( charIDToTypeID('T   '), charIDToTypeID('lfxv'), desc49 );

    try{

    executeAction( charIDToTypeID('setd'), desc48, DialogModes.NO );

    }catch(e){}

};


Viewing all articles
Browse latest Browse all 27456

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>