Copy link to clipboard
Copied
Hello all!
How can you change the angle and roundness of a sampledBrush?
So far it looks like you can only change these properties for the computedBrush.
JSON structure of brush extracted from currentToolOptions. As you can see, the sampled brush name and guid are stored in here.
{
"_obj":"sampledBrush",
"angle":{
"_unit":"angleUnit",
"_value":0.0
},
"diameter":{
"_unit":"pixelsUnit",
"_value":112.0
},
"flipX":false,
"flipY":false,
"interfaceIconFrameDimmed":true,
"name":"Round Sketch Ballpoint Pen",
"roundness":{
"_unit":"percentUnit",
"_value":100.0
},
"sampledData":"cabec8bc-a3b8-117a-8c68-a08beca1d52a",
"spacing":{
"_unit":"percentUnit",
"_value":4.0
}
}
This script will change my current selection to a computedBrush, even though I set properties for the currently selected sampled brush:
function GetBrushAMObject()
{
var appAR = new ActionReference()
appAR.putEnumerated( charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") )
var app = executeActionGet(appAR)
var brush = app.getObjectValue(stringIDToTypeID('currentToolOptions')).getObjectValue(stringIDToTypeID('brush'))
return brush
}
function SetBrushAngleAndRoundness(Angle, Roundness)
{
var brush = GetBrushAMObject()
var paramsAD = new ActionDescriptor()
paramsAD.putDouble(stringIDToTypeID('angle'), Angle)
paramsAD.putDouble(stringIDToTypeID('roundness'), Roundness)
var brushAD = new ActionDescriptor()
var brushAR = new ActionReference()
brushAR.putEnumerated( charIDToTypeID( "Brsh" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) )
brushAD.putReference( charIDToTypeID( "null" ), brushAR );
if( brush.hasKey(stringIDToTypeID('sampledData')))
{
var SampleIntr = brush.getBoolean(stringIDToTypeID('interfaceIconFrameDimmed'))
var SampleData = brush.getString(stringIDToTypeID('sampledData'))
var Name = brush.getString(stringIDToTypeID('name'))
$.writeln('Brush interfaceIconFrameDimmed: ' + SampleIntr)
$.writeln('Brush sampledData: ' + SampleData)
$.writeln('Brush name: ' + Name)
paramsAD.putString(stringIDToTypeID('sampledData'), SampleData)
paramsAD.putString(stringIDToTypeID('name'), Name)
paramsAD.putBoolean(charIDToTypeID('Intr'), SampleIntr)
}
brushAD.putObject( stringIDToTypeID('to'), stringIDToTypeID("sampledBrush"), paramsAD )
executeAction( charIDToTypeID( "setd" ), brushAD, DialogModes.NO )
}
SetBrushAngleAndRoundness(-60, 70)
What I wanted:
What I got:
Changing any brush settings will change the brush to a computed brush. The properites sampledData and name get ignored. This looks like a bug to me.
...function SetBrushAngleAndRoundness(Angle, Roundness)
{
var r = new ActionReference();
r.putProperty(stringIDToTypeID("property"), stringIDToTypeID("tool"));
r.putEnumerated(stringIDToTypeID("application"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
var ret = executeActionGet(r);
var options = ret.getObjectValue(stringIDToTypeID("currentToolOptions"));
var tool = ret.getEnumerationType(stringIDToTypeID("tool"));
var brush = options.getObjectValue(stringIDToTypeID("brush"
Copy link to clipboard
Copied
function SetBrushAngleAndRoundness(Angle, Roundness)
{
var r = new ActionReference();
r.putProperty(stringIDToTypeID("property"), stringIDToTypeID("tool"));
r.putEnumerated(stringIDToTypeID("application"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
var ret = executeActionGet(r);
var options = ret.getObjectValue(stringIDToTypeID("currentToolOptions"));
var tool = ret.getEnumerationType(stringIDToTypeID("tool"));
var brush = options.getObjectValue(stringIDToTypeID("brush"));
brush.putDouble(stringIDToTypeID("angle"), Angle)
brush.putDouble(stringIDToTypeID("roundness"), Roundness)
options.putObject(stringIDToTypeID("brush"), stringIDToTypeID("sampledBrush"), brush);
var r = new ActionReference();
r.putClass(tool);
var d = new ActionDescriptor();
d.putReference(stringIDToTypeID("null"), r);
d.putObject(stringIDToTypeID("to"), stringIDToTypeID("null"), options);
executeAction(stringIDToTypeID("set"), d, DialogModes.NO);
}
SetBrushAngleAndRoundness(-60, 70)
Copy link to clipboard
Copied
Can you or anyone explain what is difference between using:
options.putObject(stringIDToTypeID("brush"), stringIDToTypeID("sampledBrush"), brush);
and:
options.putObject(stringIDToTypeID("brush"), stringIDToTypeID("null"), brush);
and what that 'sampledBrush' is refered to?