3 Replies Latest reply on Nov 16, 2017 2:15 PM by Naoki-Hada

    Increment Opacity and Flow

    Gelicider

      I'm trying to make a script to increment Opacity and Flow. I jumbled together the script fromRe: Is it possible to script brush opacity?  and Re: brush opacity for scripting

       

      Opacity Increment:

      function SetPaintBrush(opacity) {    
        var idset = stringIDToTypeID( "set" );    
        var desc226 = new ActionDescriptor();    
        var idnull = stringIDToTypeID( "null" );    
        var ref170 = new ActionReference();    
          var idPbTl = stringIDToTypeID( "paintbrushTool" );    
          ref170.putClass( idPbTl );    
          desc226.putReference( idnull, ref170 );    
          var id12 = stringIDToTypeID( "to" );    
          var desc5 = new ActionDescriptor();    
          // opacity    
          var id13 = stringIDToTypeID( "opacity" );    
          var id14 = stringIDToTypeID( "percentUnit" );    
        desc5.putUnitDouble( id13, id14, opacity );      
          var id18 = stringIDToTypeID( "null" );    
          desc226.putObject( id12, id18, desc5 );    
        executeAction( idset, desc226, DialogModes.NO );    
        }  
        
        
      function BrushOpacityGet()  
      {  
        var ref = new ActionReference();  
        ref.putEnumerated(charIDToTypeID("capp"),   
                          charIDToTypeID("Ordn"),   
                          charIDToTypeID("Trgt")  
                          );   
        var AD = executeActionGet(ref);  
        AD = AD.getObjectValue(stringIDToTypeID("currentToolOptions"));  
        return(AD.getInteger(stringIDToTypeID("opacity")));  
      }  
        
        
      opacity = BrushOpacityGet();  
      var op = opacity+5;  
      SetPaintBrush(op);  
      
      

      Flow Increment:

       

       

      function SetPaintBrush(flow) {    
        var idset = stringIDToTypeID( "set" );    
        var desc226 = new ActionDescriptor();    
        var idnull = stringIDToTypeID( "null" );    
        var ref170 = new ActionReference();    
          var idPbTl = stringIDToTypeID( "paintbrushTool" );    
          ref170.putClass( idPbTl );    
          desc226.putReference( idnull, ref170 );    
          var id12 = stringIDToTypeID( "to" );    
          var desc5 = new ActionDescriptor();    
          // flow    
          var id14 = stringIDToTypeID( "percentUnit" );  
          var id19 = stringIDToTypeID( "flow" );    
        desc5.putUnitDouble( id19, id14, flow );    
          var id18 = stringIDToTypeID( "null" );    
          desc226.putObject( id12, id18, desc5 );    
        executeAction( idset, desc226, DialogModes.NO );    
        }  
        
        
      function BrushOpacityGet()  
      {  
        var ref = new ActionReference();  
        ref.putEnumerated(charIDToTypeID("capp"),   
                          charIDToTypeID("Ordn"),   
                          charIDToTypeID("Trgt")  
                          );   
        var AD = executeActionGet(ref);  
        AD = AD.getObjectValue(stringIDToTypeID("currentToolOptions"));  
        return(AD.getInteger(stringIDToTypeID("flow")));  
      }  
        
        
      flow = BrushOpacityGet();  
      var flo = flow+5;  
      SetPaintBrush(flo);  
      
      

      It almost works, but there's two major issues on the script

      1. It turns on Shape Dynamics and Scattering and turns off any other parameters (Transfer, Dual Brush, etc.)

      2. The script is pretty slow the first time it runs

       

      Anyone know what is causing this, and how to fix it?

      Any help will be appreciated!

        • 1. Re: Increment Opacity and Flow
          Davide_Barranca Level 1

          Hi,

          very likely problem #2 (the slowness of the first time run) is due to the fact that the BrushOpacityGet is getting the entire Application's descriptor (which contains lots of information that you don't really need). The following implementation gets the tool only, so it should be faster:

           

          function BrushOpacityGet()    
          {    
            var ref = new ActionReference();    
            ref.putProperty (stringIDToTypeID ("property"), stringIDToTypeID ("tool")); // Gets only the "tool"
            ref.putEnumerated(charIDToTypeID("capp"),     
                              charIDToTypeID("Ordn"),     
                              charIDToTypeID("Trgt")    
                              );     
            var AD = executeActionGet(ref);    
            AD = AD.getObjectValue(stringIDToTypeID("currentToolOptions"));    
            return(AD.getInteger(stringIDToTypeID("opacity")));    
          } 
          

           

          Let me think about problem #1...

           

          Davide

          2 people found this helpful
          • 2. Re: Increment Opacity and Flow
            tomzag Level 3

            Gelicider  schrieb

             

            1. It turns on Shape Dynamics and Scattering and turns off any other parameters (Transfer, Dual Brush, etc.)

             

            This is also a big problem for me. As I can see "Scattering" and "Smoothing" will be turned on, all others off.

             

            I'm using this function (found in the forum here):

             

                function SetPaintBrush(mode, opacity, flow, penopacity, pensize, penair) {
                    var idset = stringIDToTypeID("set");
                    var desc226 = new ActionDescriptor();
                    var idnull = stringIDToTypeID("null");
                    var ref170 = new ActionReference();
                    var idPbTl = stringIDToTypeID("paintbrushTool");
                    ref170.putClass(idPbTl);
                    desc226.putReference(idnull, ref170);
                    var id12 = stringIDToTypeID("to");
                    var desc5 = new ActionDescriptor();
                    // opacity  
                    var id13 = stringIDToTypeID("opacity");
                    var id14 = stringIDToTypeID("percentUnit");
                    desc5.putUnitDouble(id13, id14, opacity);
                    // blend mode  
                    var id15 = stringIDToTypeID("mode");
                    var id16 = stringIDToTypeID("blendModel");
                    var id17 = stringIDToTypeID(mode);
                    desc5.putEnumerated(id15, id16, id17);
                    // flow  
                    var id19 = stringIDToTypeID("flow");
                    desc5.putUnitDouble(id19, id14, flow);
                    // pressure for opacity  
                    desc5.putBoolean(stringIDToTypeID("usePressureOverridesOpacity"), penopacity);
                    // pressure for size  
                    desc5.putBoolean(stringIDToTypeID("usePressureOverridesSize"), pensize);
                    // enable air brush  
                    desc5.putBoolean(stringIDToTypeID("repeat"), penair);
                    var id18 = stringIDToTypeID("null");
                    desc226.putObject(id12, id18, desc5);
                    executeAction(idset, desc226, DialogModes.NO);
                }
            

             

            It happens the same.

            1 person found this helpful
            • 3. Re: Increment Opacity and Flow
              Naoki-Hada Level 1

              tomzag Gelicider

              I had same issue.

              r-bin 's code at following thread seems working without resetting issue.

               

              Re: [Q] Is accessible (get/set) for Brush Settings' Lock features?

               

              Thank you,

              Naoki