I know of no way to to set the handles directly. As Xbytor said, most scripters I know either do the transform in the GUI with the scriptlistner plugin running to get the settings or set the DialogModes to DialogModes.ALL and let the user of the script do the transform. If you really want to understand the transform descriptor below is my notes on the descriptor. Note in may not run as is. It's just for comments and does not include any warp settings. var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putEnumerated( charIDToTypeID( "Lyr " ), icharIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" )); desc.putReference( charIDToTypeID( "null" ), ref ); // 0ne of the 9 anchor points in the option bar or "Qcsi" for custom anchor desc.putEnumerated( charIDToTypeID( "FTcs" ), charIDToTypeID( "QCSt" ), charIDToTypeID( "Qcsa" ) ); /* this block is only needed for "Qcsi" var pointDesc = new ActionDescriptor(); pointDesc.putUnitDouble( charIDToTypeID( "Hrzn" ), charIDToTypeID( "#Pxl" ), 50.000000 ); pointDesc.putUnitDouble( charIDToTypeID( "Vrtc" ), charIDToTypeID( "#Pxl" ), 50.000000 ); desc.putObject( charIDToTypeID( "Pstn" ), charIDToTypeID( "Pnt " ) pointDesc ); */ var offsetDesc = new ActionDescriptor(); // + or - amount to translate in pixels. // activeDocument.selection.translate( new UnitValue( 50, 'px' ), new UnitValue( 50, 'px' ), AnchorPosition.MIDDLECENTER ); // or activeDocument.selection.translate( new UnitValue( 50, 'px' ), new UnitValue( 50, 'px' ), AnchorPosition.MIDDLECENTER ); offsetDesc.putUnitDouble( charIDToTypeID( "Hrzn" ), icharIDToTypeID( "#Pxl" ) 50.000000 ); offsetDesc.putUnitDouble( charIDToTypeID( "Vrtc" ), charIDToTypeID( "#Pxl" ), 50.000000 ); desc.putObject( charIDToTypeID( "Ofst" ), charIDToTypeID( "Ofst" ), offsetDesc ); // + or - amount to scale in percent. // activeDocument.selection.resize( 110, 110 ) // activeDocument.activeLayer.resize( 110, 110 ) desc.putUnitDouble( charIDToTypeID( "Wdth" ), charIDToTypeID( "#Prc" ), 110.000000 ); desc.putUnitDouble( charIDToTypeID( "Hght" ), charIDToTypeID( "#Prc" ), 100.000000 ); // + or - 90 degree to skew. no DOM API method. var skewDesc = new ActionDescriptor(); skewDesc.putUnitDouble( charIDToTypeID( "Hrzn" ), charIDToTypeID( "#Ang" ), 50.000000 ); skewDesc.putUnitDouble( charIDToTypeID( "Vrtc" ), charIDToTypeID( "#Ang" ), 0.000000 ); desc.putObject( charIDToTypeID( "Skew" ), charIDToTypeID( "Pnt " ), skewDesc ); // 0 to 359 degree to rotate // activeDocument.selection.rotate( 90,AnchorPosition.MIDDLECENTER ); // activeDocument.activeLayer.rotate( 90, AnchorPosition.MIDDLECENTER ); desc.putUnitDouble( charIDToTypeID( "Angl" ), charIDToTypeID( "Angl" ), 90.000000 ); executeAction( charIDToTypeID( "Trnf" ), desc, DialogModes.NO ); Everything seems straight forward is you just want to do one thing such as rotate or translate. It also seems to be ok if you want to translate, scale, rotate, and skew in just one direction. Things get strange when you try to do everything. The scriptlistner output now longer matches the settings in the option bar and those changes vary with which anchor point is used. I gave up long ago trying to understand this and now follow the suggestion to use different recorded transforms or let the user do it themselves.
... View more