TL; DR: quiero usar código para definir un patrón personalizado a partir de la selección en Photoshop usando secuencias de comandos (Extendscript).
Aquí está el código que tengo hasta ahora:
(function () { var doc = app.activeDocument; // I put 2 guides in the doc to easily get coords for this test var guides = doc.guides; var hGuide = guides[0].coordinate.value; var vGuide = guides[1].coordinate.value; // Select whole doc doc.selection.selectAll(); var sel = doc.selection.bounds; // Get percentages so we can resize the selection var xVal = (hGuide / sel[2].value) * 100; var yVal = (vGuide / sel[3].value) * 100; doc.selection.resizeBoundary(xVal, yVal, AnchorPosition.TOPLEFT); cTID = function (s) { return app.charIDToTypeID(s); }; sTID = function (s) { return app.stringIDToTypeID(s); }; // This part is recorded from an ActionListener var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putClass(cTID('Ptrn')); desc1.putReference(cTID('null'), ref1); var ref2 = new ActionReference(); ref2.putProperty(cTID('Prpr'), sTID("selection")); ref2.putEnumerated(cTID('Dcmn'), cTID('Ordn'), cTID('Trgt')); desc1.putReference(cTID('Usng'), ref2); desc1.putString(cTID('Nm '), "Leaves"); app.executeAction(cTID('Mk '), desc1, DialogModes.NO); })();Esto se hace manualmente, en la interfaz de usuario, usando una herramienta de marquesina para hacer una selección, luego yendo a Editar > Definir patrón..., ingresando el nombre, luego haciendo clic en Aceptar.
Me grabé haciendo exactamente eso y obtuve un script de acción en Javascript, pero cuando lo ejecuto, Extendscript me dice: "Ocurrió un error general de Photoshop. Es posible que esta funcionalidad no esté disponible en esta versión de Photoshop".
No soy tan hábil cuando se trata de usar ActionDescriptors y ActionReferences, por lo que me encantaría recibir ayuda para definir un patrón personalizado.
¡Gracias de antemano!
**EDITAR:**El código ActionScript funciona cuando hago la selección manualmente, pero cuando uso el código anterior para hacer la selección, no funciona. ¿Por qué habría una diferencia, me pregunto?
El código funcionó bien para mí. Sin embargo, este tipo de cosas tienden a surgir con las nuevas versiones de Photoshop.
Esta es una posibilidad remota, y no es realmente una respuesta, pero intente reemplazar su código ScriptListener con lo siguiente:
// ======================================================= var idMk = charIDToTypeID( "Mk " ); var desc26 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref10 = new ActionReference(); var idPtrn = charIDToTypeID( "Ptrn" ); ref10.putClass( idPtrn ); desc26.putReference( idnull, ref10 ); var idUsng = charIDToTypeID( "Usng" ); var ref11 = new ActionReference(); var idPrpr = charIDToTypeID( "Prpr" ); var idfsel = charIDToTypeID( "fsel" ); ref11.putProperty( idPrpr, idfsel ); var idDcmn = charIDToTypeID( "Dcmn" ); var idOrdn = charIDToTypeID( "Ordn" ); var idTrgt = charIDToTypeID( "Trgt" ); ref11.putEnumerated( idDcmn, idOrdn, idTrgt ); desc26.putReference( idUsng, ref11 ); var idNm = charIDToTypeID( "Nm " ); desc26.putString( idNm, "Leaves" ); executeAction( idMk, desc26, DialogModes.NO );Además, es posible que desee pasar una cadena como parámetro a su función, ya que todos los patrones creados se llamarán "hojas".
var myPatternName = "geometric pattern 4" desc26.putString( idNm, myPatternName ); // was "Leaves"No estoy seguro de lo que estaba pasando con mi configuración, pero cuando usé la API de Javascript de Ps para hacer una selección, el código se rompió. Pero cuando usé ActionScript para hacer la selección, funcionó. Aquí están las dos funciones que he hecho para seleccionar y luego hacer un patrón a partir de la selección:
function setSelection(top, left, bottom, right) { var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putProperty(app.charIDToTypeID('Chnl'), app.stringIDToTypeID("selection")); desc1.putReference(app.charIDToTypeID('null'), ref1); var desc2 = new ActionDescriptor(); desc2.putUnitDouble(app.charIDToTypeID('Top '), app.charIDToTypeID('#Pxl'), top); desc2.putUnitDouble(app.charIDToTypeID('Left'), app.charIDToTypeID('#Pxl'), left); desc2.putUnitDouble(app.charIDToTypeID('Btom'), app.charIDToTypeID('#Pxl'), bottom); desc2.putUnitDouble(app.charIDToTypeID('Rght'), app.charIDToTypeID('#Pxl'), right); desc1.putObject(app.charIDToTypeID('T '), app.charIDToTypeID('Rctn'), desc2); executeAction(app.charIDToTypeID('setd'), desc1, DialogModes.NO); } function makePatternFromSelection(name) { var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putClass(app.charIDToTypeID('Ptrn')); desc1.putReference(app.charIDToTypeID('null'), ref1); var ref2 = new ActionReference(); ref2.putProperty(app.charIDToTypeID('Prpr'), app.stringIDToTypeID("selection")); ref2.putEnumerated(app.charIDToTypeID('Dcmn'), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt')); desc1.putReference(app.charIDToTypeID('Usng'), ref2); desc1.putString(app.charIDToTypeID('Nm '), name); executeAction(app.charIDToTypeID('Mk '), desc1, DialogModes.NO); }