Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
4

How to automatically place a Custom Shape?

Participant ,
Nov 19, 2023 Nov 19, 2023

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.

TOPICS
Actions and scripting , Windows

Views

320
Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Nov 19, 2023 Nov 19, 2023

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 );
...

Votes

Translate
Adobe
Community Expert ,
Nov 19, 2023 Nov 19, 2023

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 );

 

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 19, 2023 Nov 19, 2023

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?

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 19, 2023 Nov 19, 2023

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 );
};

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 19, 2023 Nov 19, 2023

Copy link to clipboard

Copied

LATEST

Thank you so much! This will help me a lot!

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines