Overblog Suivre ce blog
Editer la page Administration Créer mon blog
/ / /

Ce script rend visible un unique calque dans un object dynamique lorsque l'on renomme ce dernier.

Le calque rendu visible doit avoir le nouveau nom donné à l'objet dynamique.

 

Le script doit installer une gestion d'évènements.

Pour cela il suffit de l'exécuter une seule fois par Fichier>Scripts>Parcourir.  

Pour le désinstaller, aller dans Fichier>Scripts>Gestion d'Evènements et cliquer sur "tout supprimer".

Pour le désactiver temporairement, aller dans Fichier>Scripts>Gestion d'Evènements et décocher la case "Activer les évènements".

 

A noter que dans cette version simplifiée, les gestions d'évènements déjà installées sont effacées à l'installation du script. Si donc des évènements sont déjà actifs, aller au préalable dans Fichier>Scripts>Gestion d'Evènements pour voir lesquels. Une version plus évoluée sera développée si des utilisateurs intéressés se manifestent. Laissez un message sur l'article correspondant.

 

A noter que si un calque d'objet dynamique est copié normalement (par Cmd-J), le même objet dynamique est attaché à la copie. Ainsi une modification de l'un des calques (Copies ou original) modifie tous les calques.

Une vraie copie d'un objet dynamique (dont différente de l'original) est obtenue par la commande spécifique "Copie de l'objet dynamique".

 

/****************************************************
 Select Layer into current Dynamic object
 ****************************************************
 When the current dynamic object is renamed, the inside
 layer of the same name is made the only visible layer.
 ****************************************************
 Just execute the script to install it for wanted events.
 BEWARE of PRINT : Bug in Photoshop event manager
 ****************************************************
 03/01/2012 Habaki V1r01b: Some improvements
 02/01/2012 Habaki V1r01 : Creation
 ****************************************************/
var ScriptName = "On layer rename, (c) Habaki 2012";
var Verbose = 0;

var sTc = function(v) { return(typeIDToCharID(stringIDToTypeID(v)));};
/*--------------------------------------------------*
 Modify a dynamic object
 *--------------------------------------------------*/
function DObj_Modify()
{
  executeAction(stringIDToTypeID("placedLayerEditContents"),
                new ActionDescriptor(),
                DialogModes.NO);
}
/*--------------------------------------------------*
 Select layer into dynamic object with object name
 Object must be the current layer
 *--------------------------------------------------*/
function DObj_LayerSelName()
{
  var Name = activeDocument.activeLayer.name;
  var i, N;
  var LayerExists;
 
  try{
    DObj_Modify();
  } catch(e) {
    return;
  }
  try{

    activeDocument.artLayers.getByName(Name);
    LayerExists = true;
  } catch(e) {
    LayerExists = false;
  }
  if (LayerExists) {
    N = activeDocument.artLayers.length;
    for (i=0; i < N; i++ ) {
      activeDocument.artLayers[i].visible = false;
    } //for
    try{
        activeDocument.artLayers.getByName(Name).visible = true;
        activeDocument.save();
        activeDocument.close();
    } catch(e) {
        // SaveOptionsType unknown ?
        activeDocument.close(SaveOptionsType.DONOTSAVECHANGES);
    }
  } else {
    // No modifs
    activeDocument.close();
  }
}
/*--------------------------------------------------*
   On layer renamed
 *--------------------------------------------------*/
function LayerRenamed(Name) // Current
{
  if (Verbose) alert("Layer renamed: " + Name, ScriptName);
  DObj_LayerSelName();
}
/*--------------------------------------------------*
   Parse an event
 arguments[0] : ActionDescriptor
 arguments[1] : Event typeID
 arguments[2..] : ?
 *--------------------------------------------------*/
try {
  var Key, KeySt, Type, Val;
  var ScriptFilePath = $.fileName;
 
  if (arguments.length < 2) {
    try{
      notifiers.removeAll();
      notifiers.add(sTc("set"), new File(ScriptFilePath));
      notifiers.add('ntfy',     new File(ScriptFilePath));
      notifiersEnabled = true;
      alert("INSTALLATION OK", ScriptName);
    } catch (e) {
      alert("INSTALLATION ERROR: " + e, ScriptName);
    }
    throw(0);
  }
  var AD        = arguments[0];
  var EventName = typeIDToStringID(arguments[1]);
  var AR, Form, Class, ClassSt;
  var Info;
 
  if (Verbose) alert("Event: " + EventName, ScriptName);
  if (EventName == "set") {
    Key  = AD.getKey(0);
    KeySt= typeIDToStringID(Key);
    Type = AD.getType(Key);
    if (KeySt=="null") {
      if (Type == DescValueType.REFERENCETYPE) {
        AR = AD.getReference(Key);
        ClassSt = typeIDToStringID(AR.getDesiredClass());
        if (ClassSt == "layer") {
          Key  = AD.getKey(1);
          KeySt= typeIDToStringID(Key);
          Type = AD.getType(Key);
          if (KeySt == "to") {
            if (Type == DescValueType.OBJECTTYPE) {
              Type = AD.getObjectType(Key);
              TypeSt = typeIDToStringID(Type);
              AD = AD.getObjectValue(Key);
              if (TypeSt == "layer") {
                Key  = AD.getKey(0);
                Type = AD.getType(Key);
                if (typeIDToStringID(Key) == "name" && TypeSt == "layer") {
                  if (Type == DescValueType.STRINGTYPE) {
                    LayerRenamed(AD.getString(Key));
                  }
                }
              }
            }
          }
        }
      }
    }
  }
 
} catch(ex) {
  if (ex) alert(ex.message, ScriptName)
}
/*--------------------------------------------------*/

 

Partager cette page

Repost 0
Published by