[PS CC-CC2022] Что у меня не работает этот скрипт....)))

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Топикстартер
Сообщения
2 089
Реакции
145
Код:
app.bringToFront();

if(documents.length) app.activeDocument.suspendHistory('Shuffle Layers', 'main()');

function main(){

try{

var list = getSelectedLayersIdx();

if(list.length < 2){

    alert("You need to select two or more layers!");

    return;

    }

var IDs = [];

for (var a in list){IDs.push(getLayerIDbyIndex(Number(list)));}

var shuffleIDs = shuffle(IDs);

for(var k = 0;k<shuffleIDs.length;k++){

    selectLayerById(Number(shuffleIDs));

    moveActiveLayerToIndex (Number(shuffleIDs[(shuffleIDs.length - (k + 1))]));

    }

}catch(e){$.writeln(e + "\n" + e.line);}

};

function moveActiveLayerToIndex (ID){

 var desc2 = new ActionDescriptor();

        var ref3 = new ActionReference();

        ref3.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

    desc2.putReference( charIDToTypeID('null'), ref3 );

        var ref4 = new ActionReference();

        ref4.putIndex( charIDToTypeID('Lyr '), getLayerIndexByID(ID) );

    desc2.putReference( charIDToTypeID('T   '), ref4 );

    desc2.putBoolean( charIDToTypeID('Adjs'), false );

    desc2.putInteger( charIDToTypeID('Vrsn'), 5 );

    executeAction( charIDToTypeID('move'), desc2, DialogModes.NO );

};

function selectLayerById(id,add){

var ref = new ActionReference();

ref.putIdentifier(charIDToTypeID('Lyr '), id);

var desc = new ActionDescriptor();

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

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

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

try{

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

}catch(e){}

};

function getLayerIndexByID(ID){

var ref = new ActionReference();

ref.putIdentifier( charIDToTypeID('Lyr '), ID );

try{

activeDocument.backgroundLayer;

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

}catch(e){

return executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ));

}

};

function shuffle(array) {

  var currentIndex = array.length, temporaryValue, randomIndex;

  while (0 !== currentIndex) {

    randomIndex = Math.floor(Math.random() * currentIndex);

    currentIndex -= 1;

    temporaryValue = array[currentIndex];

    array[currentIndex] = array[randomIndex];

    array[randomIndex] = temporaryValue;

  }

  return array;

};

function getSelectedLayersIdx(){

      var selectedLayers = new Array();

      var backGroundCounter = 1;

            if(activeDocument.artLayers.length > 0){

            backGroundCounter = activeDocument.artLayers[activeDocument.artLayers.length - 1].isBackgroundLayer ? 0 : 1;

            }

      var ref = new ActionReference();

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

      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++){

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

          }

      if(app.version.match(/^\d+/) > 15) return selectedLayers ;

       }else{

           if(app.version.match(/^\d+/) > 15) return selectedLayers ;

         var ref = new ActionReference();

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

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

         if(!backGroundCounter){

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

            }else{

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

                }

     var vis = app.activeDocument.activeLayer.visible;

        if(vis == true) app.activeDocument.activeLayer.visible = false;

        var desc9 = new ActionDescriptor();

    var list9 = new ActionList();

    var ref9 = new ActionReference();

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

    list9.putReference( ref9 );

    desc9.putList( charIDToTypeID("null"), list9 );

    executeAction( charIDToTypeID("Shw "), desc9, DialogModes.NO );

    if(app.activeDocument.activeLayer.visible == false) selectedLayers.shift();

        app.activeDocument.activeLayer.visible = vis;

      }

      return selectedLayers;

};

function getLayerIDbyIndex(idx) {

var ref = new ActionReference();

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

return executeActionGet(ref).getInteger(stringIDToTypeID( "layerID" ));

}

function getNameByID(ID) {

    var ref = new ActionReference();

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

    ref.putIdentifier( charIDToTypeID( "Lyr " ), ID );

    return executeActionGet(ref).getString(charIDToTypeID( "Nm  " ));;

}
 
Последнее редактирование:
по идее он должен перемешивать слои.... вроде так задумано было )))
 
Верни, где взяла '))'
 
Конечно
 
вообще мне надо сделать одну фишку.... надо чтоб как в люстраторе Ps выбирал случайный слой и с ним уже работал )))
У меня есть Mockup я к нему сделала экшен, и теперь стоит такая задача чтоб он выбирал случайный слой и делал картинку....
 
щас обьясню на пальцах....
 
вот так.... чтоб случайно выбирал слой, чтоб картинки разные были...)))
 

Вложения

  • Untitled.jpg
    Untitled.jpg
    259.8 КБ · Просм.: 150
  • Untitled_2.jpg
    Untitled_2.jpg
    230.9 КБ · Просм.: 149
в документе допустим три группы или 5... в каждой группе есть background & smart, вот надо чтоб случайно выбирал группу и уже в этой группе в смарт вставлял что мне надо....
 
наверно это очень сложно....? Я даже представить себе не могу такое...))))'otbline'
 
То есть тебе по сути нужно выбрать случайный мокап из нескольких и вставить в смарт
не совсем так но почти угадал.... мне в мокапеа точнее в группе надо выбрать случайный слой....)))) у меня в одном документе 3-5 мокапов обычно.... те я из 5 делаю один )))

вот тут 3 группы, каждая отдельный мокап

1627498590685.png
 
Последнее редактирование:
я думала сделать так....перемешала группы выбрала верхнию допустим и запустила экшен, потом по новой...)))
 
я думала сделать так....перемешала группы выбрала верхнию допустим и запустила экшен, потом по новой...)))
Нахена? '))' Усложнила задачу...
Так не пойдет? :)
Код:
var doc = app.activeDocument
for (var i = 0; i < doc.layerSets.length; i++) {
    doc.layerSets[i].visible = false
}
var rand = Math.floor(Math.random() * doc.layerSets.length);
var lyrs = app.activeDocument.layerSets[rand].visible = true
 
Последнее редактирование:
  • Спасибо
Реакции: NatalieRedFox_333
Нахена? '))' Усложнила задачу...
Так не пойдет? :)
Код:
var doc = app.activeDocument
for (var i = 0; i < doc.layerSets.length; i++) {
    doc.layerSets[i].visible = false
}
var rand = Math.floor(Math.random() * doc.layerSets.length);
var lyrs = app.activeDocument.layerSets[rand].visible = true
Да можно просто видимым сделать....щас попробую...))) Только видимой должна быть группа а в группе выделен слой со смартом... Иначе экшен не запустится...

1627500753941.png
 

Вложения

  • Untitled_2.jpg
    Untitled_2.jpg
    230.4 КБ · Просм.: 123
Последнее редактирование:
Нахена? '))' Усложнила задачу...
Так не пойдет? :)
Код:
var doc = app.activeDocument
for (var i = 0; i < doc.layerSets.length; i++) {
    doc.layerSets[i].visible = false
}
var rand = Math.floor(Math.random() * doc.layerSets.length);
var lyrs = app.activeDocument.layerSets[rand].visible = true
да...то что надо))) класс!!!
 
Не знаю что ты там воротишь, но держи с выделением смарта :)
Код:
var doc = app.activeDocument;
for (var i = 0; i < doc.layerSets.length; i++) {
    doc.layerSets[i].visible = false;
};
var rand = Math.floor(Math.random() * doc.layerSets.length);
var Set = app.activeDocument.layerSets[rand];
Set.visible = true;
for (var i = 0; i < Set.artLayers.length; i++) {
    if (Set.artLayers[i].kind == "LayerKind.SMARTOBJECT") {
        doc.activeLayer = Set.artLayers[i];
    };
};
 
  • Спасибо
Реакции: NatalieRedFox_333