10 Replies Latest reply on Nov 16, 2013 11:59 AM by Michael L Hale

    Associate Brush/Tool Preset with Layer

    boo radley 2013 Level 3

      I know there's a way to do this via scriptinglistener, so I figured I'd post it here. Wondering if there's a way to select a brush or tool preset automatically whenever you select a layer.

       

      For example, there are 2 layers:

       

      'Airbrush' - I only want to use the tool preset 'MyAirbrush' on this layer and never use any other brush or tool preset

       

      'Pastel' - I only want to use the tool preset 'MyPastel' on this layer and never use any other brush or tool preset

       

       

      So, when I select the layer 'Airbrush', it will automatically select the tool preset 'MyAirbrush' along with it. And whenever I switch to the layer 'Pastel', it will automatically select the tool preset 'MyPastel'. This would eliminate having to select the tool preset after selecting the layer (no big deal but could save time and eliminate a step)

       

      Like I said I can acheive it via scriptinglistener, but then it becomes confusing because instead of simply switching layers in the layer panel, I'd have to run the script instead, and each script would reflect only one individual layer and the tool preset to go with it- I'd have to create a script for every layer doing it this way - not feasible. I was wondering if there was another way to do it somewhere in Photoshop, such as 'link tool preset to layer' or 'associate tool preset with layer'

       

      thanks!

        • 1. Re: Associate Brush/Tool Preset with Layer
          Michael L Hale Level 5

          You should be able to do something like that using a 'select' eventListener. The event script should first check that a layer was selected( not a path, channel, tool, etc ) then check the active layer name and switch the presets.

           

          The key is the event handler runs the script for you. You will not need a different script for each layer. Just have a switch or multiple if statements to handle as many layers as needed.

          • 2. Re: Associate Brush/Tool Preset with Layer
            boo radley 2013 Level 3

            Thanks Michael, I'm going to look into this. I'm also looking for a way to do it with 3rd party apps (there's a few good ones that can automate the process)

            • 3. Re: Associate Brush/Tool Preset with Layer
              Michael L Hale Level 5
              function _selectLayerHandler(desc) {
                var layerName = app.activeDocument.activeLayer.name;
                switch( layerName ){
                    case "Airbrush": selectPreset('Airbrush-Grainy Opaque'); break;
                    case "Pastel": selectPreset('Angle - Flat Opaque'); break; 
                }
              };
              function selectPreset(presetName) {
                  var desc = new ActionDescriptor();
                      var ref = new ActionReference();
                      ref.putName( stringIDToTypeID( "toolPreset" ), presetName);
                  desc.putReference( charIDToTypeID( "null" ), ref );
                  executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
              };
              
              try {
                if (arguments.length >= 2) {
                  var desc = arguments[0];
                  var event = arguments[1];
                  if (event == charIDToTypeID('slct')) {
                    var ref = desc.getReference(charIDToTypeID('null'));
                    var cls = ref.getDesiredClass();
                    if (cls == charIDToTypeID('Lyr ')) {
                      _selectLayerHandler(desc);
                    }
                  }
                }
              } catch (e) {
                alert( "Error: " + e + ":" + e.line );
              }
              
              • 4. Re: Associate Brush/Tool Preset with Layer
                Chuck Uebele Adobe Community Professional & MVP

                That's interesting, Mike.  How would you go about setting up and running the script that uses the eventListener?  Is that something that you run when you start PS, or put in the startup folder?

                • 5. Re: Associate Brush/Tool Preset with Layer
                  Michael L Hale Level 5

                  There are two ways to add an eventHander. One is by using the menu. Choose File-Scripts-Scripts Event Manager... then set it up in the dialog that opens.

                   

                  I prefer to install with a sperate script.

                   

                  if(!app.notifiersEnabled) app.notifiersEnabled =  true;

                  var hasSelectEvent = false;

                  for(var e = 0;e<app.notifiers.length;e++){

                     if(app.notifiers[e].event == 'slct') hasSelectEvent = true;

                  }

                  if(!hasSelectEvent) {

                     var eventFile = new File('~/desktop/layerPreset.jsx');

                     app.notifiers.add( "slct", eventFile);

                  }

                  • 6. Re: Associate Brush/Tool Preset with Layer
                    Chuck Uebele Adobe Community Professional & MVP

                    Thanks, Mike!  Made me start thinking about some posibilities.

                    • 7. Re: Associate Brush/Tool Preset with Layer
                      boo radley 2013 Level 3

                      I ensured that my photohop document had layers named 'Airbrush' and 'Pastel'. I also ensured that my active tool presets file had presets named 'Airbrush-Grainy Opaque' and 'Angle - Flat Opaque' . I then ran Michael's first script but I didn't see anything happen. Is there something I'm missing?   

                      • 8. Re: Associate Brush/Tool Preset with Layer
                        Michael L Hale Level 5

                        It is an event script. You don't run it directly. It gets run every time there is a select event. That is if you have installed it as an event script using either the menu or by adding a notifier with the second script I posted. If you use the script to install make sure you edit the path to the event script.

                        • 9. Re: Associate Brush/Tool Preset with Layer
                          boo radley 2013 Level 3

                          ok, I'm making some progress with it. I've placed the event handler script onto my desktop and named it 'layerPreset.jsx'. My tool presets has the brushes and layers (as named in post#7 above).

                          It seems to be working! Micheal you're a genius as usual - the possibilities here are just becoming evident

                          • 10. Re: Associate Brush/Tool Preset with Layer
                            Michael L Hale Level 5

                            It would be better if you added the eventClass argument when setting up the notifier. That way the script would run only when a layer is selected. As it is now it would run when anything is selected. Becasue the script checks the class it will not do anything if it wasn't a layer selected but the script still runs.