Ausgabe
Ich drehe eine Textebene mit dem folgenden Skript .
Sie dreht sich vom Mittelpunkt des Textes aus
. Gibt es im Skript eine Möglichkeit, den Text vom linken (Startpunkt) aus zu drehen?
var idRtte = charIDToTypeID( "Rtte" );
var desc199 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref15 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref15.putEnumerated( idLyr, idOrdn, idTrgt );
desc199.putReference( idnull, ref15 );
var idAngl = charIDToTypeID( "Angl" );
var idAng = charIDToTypeID( "#Ang" );
desc199.putUnitDouble( idAngl, idAng, rotation);
executeAction( idRtte, desc199, DialogModes.NO );
Lösung
Photoshop verwendet einen zusätzlichen Deskriptor, um einen Drehpunkt zu definieren: Es gibt mehrere hartcodierte Zeichenfolgen für Ebenenecken und einen erweiterten Deskriptor für benutzerdefinierte Drehpunkte, die zwei absolute Koordinaten verwenden.
Vordefinierte Ecken:
// 'Qcs0' top left
// 'Qcs7' middle left
// 'Qcs3' bottom left
// 'Qcs4' top center
// 'Qcsa' middle center
// 'Qcs6' bottom center
// 'Qcs1' top right
// 'Qcs5' middle right
// 'Qcs2' bottom right
function rotatePivot(pivot, angle)
{
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
desc.putReference(charIDToTypeID('null'), ref);
desc.putEnumerated(charIDToTypeID('FTcs'), charIDToTypeID('QCSt'), charIDToTypeID(pivot));
desc.putUnitDouble(charIDToTypeID('Angl'), charIDToTypeID('#Ang'), angle);
executeAction(charIDToTypeID('Trnf'), desc, DialogModes.NO);
} // end of rotatePivot()
rotatePivot('Qcs3', 45);
Benutzerdefinierter Drehpunkt. pivotCoords
ist ein Array von absoluten Koordinaten.
// 'Qcsi' custom pivot
function rotateCustomPivot(pivotCoords, angle)
{
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
desc.putReference(charIDToTypeID('null'), ref);
desc.putEnumerated(charIDToTypeID('FTcs'), charIDToTypeID('QCSt'), charIDToTypeID('Qcsi'));
var descPivot = new ActionDescriptor();
descPivot.putUnitDouble(charIDToTypeID('Hrzn'), charIDToTypeID('#Pxl'), pivotCoords[0]);
descPivot.putUnitDouble(charIDToTypeID('Vrtc'), charIDToTypeID('#Pxl'), pivotCoords[1]);
desc.putObject(charIDToTypeID('Pstn'), charIDToTypeID('Pnt '), descPivot);
desc.putUnitDouble(charIDToTypeID('Angl'), charIDToTypeID('#Ang'), angle);
executeAction(charIDToTypeID('Trnf'), desc, DialogModes.NO);
} // end of rotateCustomPivot()
// b[0] and b[3] are bottom-left coord of a layer,
// so this will rotate using a custom point
// that's 10 pixels away from that coord by x and y
var b = activeDocument.activeLayer.bounds;
var x = b[0] - 10;
var y = b[3] + 10;
rotateCustomPivot([x, y], 45);
Beantwortet von – Sergey Kritskiy
Antwort geprüft von – Jay B. (FixError Admin)