Copy link to clipboard
Copied
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!
Copy link to clipboard
Copied
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
Copy link to clipboard
Copied
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.
Copy link to clipboard
Copied