我正在尝试将一个图层与另一个图层的顶部和左侧对齐。我找到了进行对齐的代码,但我更改的选择部分不起作用。
如何将选区设置为我拥有的特定图层?
Doc.selection.select(ImgLocation);
Doc.activeLayer = layer;
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
desc.putReference(charIDToTypeID("null"), ref);
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdLf'));
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdTp'));
try {
executeAction(charIDToTypeID("Algn"), desc, DialogModes.NO);
} catch (e) {}
Doc.selection.deselect();
ImgLocation
是我想要对齐的 ArtLayer
对象; layer
是我想要执行对齐功能的图层。
对齐图层很简单,只是你想要对齐的方式变得复杂。
function align_it(charID, bool)
{
// phEnumADSTops -> 1097094256 -> "AdTp" ADSTops
// phEnumADSCentersV -> 1097089878 -> "AdCV" ADSCentersV
// phEnumADSBottoms -> 1097089652 -> "AdBt" ADSBottoms
// phEnumADSLefts -> 1097092198 -> "AdLf" ADSLefts
// phEnumADSCentersH -> 1097089864 -> "AdCH" ADSCentersH
// phEnumADSRights -> 1097093735 -> "AdRg" ADSRights
// phEnumADSVertical -> 1097094770 -> "AdVr" ADSVertical
// phEnumADSHorizontal -> 1097091186 -> "AdHr" ADSHorizontal
if (charID == "") return;
var alignID = "Algn";
if (bool == false) alignID = "Dstr";
// =======================================================
var idAlgn = charIDToTypeID( alignID );
var desc125 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref34 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref34.putEnumerated( idLyr, idOrdn, idTrgt );
desc125.putReference( idnull, ref34 );
var idUsng = charIDToTypeID( "Usng" );
var idADSt = charIDToTypeID( "ADSt" ); // alignDistributeSelector
var idAdCV = charIDToTypeID( charID ); // character ID
desc125.putEnumerated( idUsng, idADSt, idAdCV );
executeAction( idAlgn, desc125, DialogModes.NO );
}
从注释中可以看到对齐类型、代码、四字母代码、对齐类型。通过设置布尔值,它可以从对齐切换到分布。
至于图层,我认为它依赖于选择多个图层。如何获得选定的图层?您可以了解更多信息,因为该问题已已得到解答。