Код ScriptListener создает новый слой над активным слоем - PullRequest
0 голосов
/ 21 октября 2018

Я использовал scriptlistener для создания нового слоя.Умная вещь, которую он делает, это помещает его над активным слоем (не перемещая его сверху после создания). Однако я затрудняюсь понять, какая это часть кода, поскольку все они выполняются с executeAction:

function create_new_layer(layername)
{
    var idMk = charIDToTypeID( "Mk  " );
    var desc447 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
    var ref217 = new ActionReference();
    var idLyr = charIDToTypeID( "Lyr " );
    ref217.putClass( idLyr );
    desc447.putReference( idnull, ref217 );
    var idUsng = charIDToTypeID( "Usng" );
    var desc448 = new ActionDescriptor();
    var idNm = charIDToTypeID( "Nm  " );
    desc448.putString( idNm, layername );
    var idLyr = charIDToTypeID( "Lyr " );
    desc447.putObject( idUsng, idLyr, desc448 );
    var idLyrI = charIDToTypeID( "LyrI" );
    desc447.putInteger( idLyrI, 57 );
    executeAction( idMk, desc447, DialogModes.NO );
}

1 Ответ

0 голосов
/ 22 октября 2018

Я думаю, что код AM представляет реальные функции в Photoshop, как они работают внутри, и DOM является своего рода наложением поверх этого.Как правило, код DOM ограничен и не может многое сделать для AM.В этом случае ArtLayer.add() переводит слой в activeDocument.layers, поэтому он появляется поверх стека слоев, а команда AM выполняет команду New Layer....Также обычно код AM работает намного быстрее, чем DOM (до 10-15x), особенно с такими вещами, как выбор слоев и работа с ними.

...