Copy link to clipboard
Copied
Is it possible to place a custom shape in canvas using a script? I know it's possible to do it with an action, but is there a function that would place a custom shape with specified proportions?
I want to place a custom shape on my canvas that's on my Shapes folder called "Star" with 300 px width and 200 px height but I couldn't find a function online that would do it. Adding it as an action would probably be way more complicated for me so I was thinking if there's a function to do it, it would be much easier for me.
This is AM code for placing a Shape Layer, naturally you need to amend the lines referencing the name, color and dimensions.
// =======================================================
var idmake = stringIDToTypeID( "make" );
var desc33 = new ActionDescriptor();
var idnull = stringIDToTypeID( "null" );
var ref8 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref8.putClass( idcontentLayer );
desc33.putReference( idnull, ref8 );
...
Copy link to clipboard
Copied
This is AM code for placing a Shape Layer, naturally you need to amend the lines referencing the name, color and dimensions.
// =======================================================
var idmake = stringIDToTypeID( "make" );
var desc33 = new ActionDescriptor();
var idnull = stringIDToTypeID( "null" );
var ref8 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref8.putClass( idcontentLayer );
desc33.putReference( idnull, ref8 );
var idusing = stringIDToTypeID( "using" );
var desc34 = new ActionDescriptor();
var idtype = stringIDToTypeID( "type" );
var desc35 = new ActionDescriptor();
var idcolor = stringIDToTypeID( "color" );
var desc36 = new ActionDescriptor();
var idred = stringIDToTypeID( "red" );
desc36.putDouble( idred, 255 );
var idgreen = stringIDToTypeID( "grain" );
desc36.putDouble( idgreen, 125 );
var idblue = stringIDToTypeID( "blue" );
desc36.putDouble( idblue, 0 );
var idRGBColor = stringIDToTypeID( "RGBColor" );
desc35.putObject( idcolor, idRGBColor, desc36 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc34.putObject( idtype, idsolidColorLayer, desc35 );
var idshape = stringIDToTypeID( "shape" );
var desc37 = new ActionDescriptor();
var idname = stringIDToTypeID( "name" );
desc37.putString( idname, "Ape" );
var idkeyOriginType = stringIDToTypeID( "keyOriginType" );
desc37.putInteger( idkeyOriginType, 9 );
var idtop = stringIDToTypeID( "top" );
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
desc37.putUnitDouble( idtop, idpixelsUnit, 0 );
var idleft = stringIDToTypeID( "left" );
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
desc37.putUnitDouble( idleft, idpixelsUnit, 0 );
var idbottom = stringIDToTypeID( "bottom" );
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
desc37.putUnitDouble( idbottom, idpixelsUnit, 334 );
var idright = stringIDToTypeID( "right" );
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
desc37.putUnitDouble( idright, idpixelsUnit, 200 );
var idcustomShape = stringIDToTypeID( "customShape" );
desc34.putObject( idshape, idcustomShape, desc37 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc38 = new ActionDescriptor();
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc38.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc38.putBoolean( idstrokeEnabled, false );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc38.putBoolean( idfillEnabled, true );
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
desc38.putUnitDouble( idstrokeStyleLineWidth, idpixelsUnit, 50.000000 );
var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );
var idpointsUnit = stringIDToTypeID( "pointsUnit" );
desc38.putUnitDouble( idstrokeStyleLineDashOffset, idpointsUnit, 0.000000 );
var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );
desc38.putDouble( idstrokeStyleMiterLimit, 100.000000 );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );
desc38.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );
desc38.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignCenter = stringIDToTypeID( "strokeStyleAlignCenter" );
desc38.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignCenter );
var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );
desc38.putBoolean( idstrokeStyleScaleLock, false );
var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );
desc38.putBoolean( idstrokeStyleStrokeAdjust, false );
var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );
var list5 = new ActionList();
desc38.putList( idstrokeStyleLineDashSet, list5 );
var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );
var idblendMode = stringIDToTypeID( "blendMode" );
var idnormal = stringIDToTypeID( "normal" );
desc38.putEnumerated( idstrokeStyleBlendMode, idblendMode, idnormal );
var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );
var idpercentUnit = stringIDToTypeID( "percentUnit" );
desc38.putUnitDouble( idstrokeStyleOpacity, idpercentUnit, 100.000000 );
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc39 = new ActionDescriptor();
var idcolor = stringIDToTypeID( "color" );
var desc40 = new ActionDescriptor();
var idred = stringIDToTypeID( "red" );
desc40.putDouble( idred, 31.014540 );
var idgrain = stringIDToTypeID( "grain" );
desc40.putDouble( idgrain, 26.674863 );
var idblue = stringIDToTypeID( "blue" );
desc40.putDouble( idblue, 18.747451 );
var idRGBColor = stringIDToTypeID( "RGBColor" );
desc39.putObject( idcolor, idRGBColor, desc40 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc38.putObject( idstrokeStyleContent, idsolidColorLayer, desc39 );
var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );
desc38.putDouble( idstrokeStyleResolution, 300.000000 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc34.putObject( idstrokeStyle, idstrokeStyle, desc38 );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc33.putObject( idusing, idcontentLayer, desc34 );
executeAction( idmake, desc33, DialogModes.NO );
Copy link to clipboard
Copied
Thank you this does what I need, I also have a question, this AM code, is it possible to turn it into a function to which I can call upon adding the name of the shape each time? Or it would work like that?
Copy link to clipboard
Copied
Yes, you can wrap the code in a function with the corresponding arguments.
placeCustomShape ("Ape", [50,125,255], [0,0,200,334]);
function placeCustomShape (theName, theColor, theBounds) {
var idpixelsUnit = stringIDToTypeID( "pixelsUnit" );
var idmake = stringIDToTypeID( "make" );
var desc33 = new ActionDescriptor();
var idnull = stringIDToTypeID( "null" );
var ref8 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref8.putClass( idcontentLayer );
desc33.putReference( idnull, ref8 );
var idusing = stringIDToTypeID( "using" );
var desc34 = new ActionDescriptor();
var idtype = stringIDToTypeID( "type" );
var desc35 = new ActionDescriptor();
var idcolor = stringIDToTypeID( "color" );
var desc36 = new ActionDescriptor();
var idred = stringIDToTypeID( "red" );
desc36.putDouble( idred, theColor[0] );
var idgreen = stringIDToTypeID( "grain" );
desc36.putDouble( idgreen, theColor[1] );
var idblue = stringIDToTypeID( "blue" );
desc36.putDouble( idblue, theColor[2] );
var idRGBColor = stringIDToTypeID( "RGBColor" );
desc35.putObject( idcolor, idRGBColor, desc36 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc34.putObject( idtype, idsolidColorLayer, desc35 );
var idshape = stringIDToTypeID( "shape" );
var desc37 = new ActionDescriptor();
var idname = stringIDToTypeID( "name" );
desc37.putString( idname, theName );
var idkeyOriginType = stringIDToTypeID( "keyOriginType" );
desc37.putInteger( idkeyOriginType, 9 );
var idtop = stringIDToTypeID( "top" );
desc37.putUnitDouble( idtop, idpixelsUnit, theBounds[1] );
var idleft = stringIDToTypeID( "left" );
desc37.putUnitDouble( idleft, idpixelsUnit, theBounds[0] );
var idbottom = stringIDToTypeID( "bottom" );
desc37.putUnitDouble( idbottom, idpixelsUnit, theBounds[3] );
var idright = stringIDToTypeID( "right" );
desc37.putUnitDouble( idright, idpixelsUnit, theBounds[2] );
var idcustomShape = stringIDToTypeID( "customShape" );
desc34.putObject( idshape, idcustomShape, desc37 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc38 = new ActionDescriptor();
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc38.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc38.putBoolean( idstrokeEnabled, false );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc38.putBoolean( idfillEnabled, true );
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
desc38.putUnitDouble( idstrokeStyleLineWidth, idpixelsUnit, 50.000000 );
var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );
var idpointsUnit = stringIDToTypeID( "pointsUnit" );
desc38.putUnitDouble( idstrokeStyleLineDashOffset, idpointsUnit, 0.000000 );
var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );
desc38.putDouble( idstrokeStyleMiterLimit, 100.000000 );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );
desc38.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );
desc38.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignCenter = stringIDToTypeID( "strokeStyleAlignCenter" );
desc38.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignCenter );
var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );
desc38.putBoolean( idstrokeStyleScaleLock, false );
var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );
desc38.putBoolean( idstrokeStyleStrokeAdjust, false );
var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );
var list5 = new ActionList();
desc38.putList( idstrokeStyleLineDashSet, list5 );
var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );
var idblendMode = stringIDToTypeID( "blendMode" );
var idnormal = stringIDToTypeID( "normal" );
desc38.putEnumerated( idstrokeStyleBlendMode, idblendMode, idnormal );
var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );
var idpercentUnit = stringIDToTypeID( "percentUnit" );
desc38.putUnitDouble( idstrokeStyleOpacity, idpercentUnit, 100.000000 );
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc39 = new ActionDescriptor();
var idcolor = stringIDToTypeID( "color" );
var desc40 = new ActionDescriptor();
var idred = stringIDToTypeID( "red" );
desc40.putDouble( idred, 31.014540 );
var idgrain = stringIDToTypeID( "grain" );
desc40.putDouble( idgrain, 26.674863 );
var idblue = stringIDToTypeID( "blue" );
desc40.putDouble( idblue, 18.747451 );
var idRGBColor = stringIDToTypeID( "RGBColor" );
desc39.putObject( idcolor, idRGBColor, desc40 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc38.putObject( idstrokeStyleContent, idsolidColorLayer, desc39 );
var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );
desc38.putDouble( idstrokeStyleResolution, 300.000000 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc34.putObject( idstrokeStyle, idstrokeStyle, desc38 );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc33.putObject( idusing, idcontentLayer, desc34 );
executeAction( idmake, desc33, DialogModes.NO );
};
Copy link to clipboard
Copied
Thank you so much! This will help me a lot!