设置图层活动 photoshop 脚本



所以我有 2 个具有相同图层名称的打开文档。我想在第一个文档中选择一个图层。然后运行脚本,并在其他文档中按名称自动选择同一图层。

到目前为止,我已经能够存储第一个图层名称并打开第二个文档。但我似乎无法激活同一层。

这是我的代码:

var aDoc = app.activeDocument;  
var AllDocs = app.documents;  
var actLay = aDoc.activeLayer;  
if (AllDocs.length > 1) {  
var itemDoc = null;  
var win = new Window("dialog","select the same name in other document");  
this.windowRef = win;  
win.Txt1 = win.add ("statictext", undefined, "Paste in which open document?");  
win.NewList=win.add ("dropdownlist", undefined, AllDocs);  
win.NewList.selection = 0;  
itemDoc = win.NewList.selection.index;  
win.testBtn4 = win.add('button', [260,140,100,50], 'select the same name in other document', {name:'doding1'});
win.testBtn4.onClick = dothing;

//Get selected document from list
win.NewList.onChange= function () {  
    itemDoc = win.NewList.selection.index;  
    return itemDoc;  
    }  
//Show al items
win.show();  
function dothing() 
{   
    //Make the selected document the active document.
    app.activeDocument = app.documents[itemDoc]; 
    app.refresh();

    //This outputs [Artlayer layername]
    //alert (actLay);

    //Find right layer and set active THIS DOES NOT WORK!!
    //app.activeDocument.activeLayer = app.activeDocument.layers.itemByName(actLay); 
    win.close();
}
} 
else
{  
    alert ("No other documents open");
}

想通了!由于图层位于某个组中,因此找不到该图层。使用以下代码修复了它:

activeDocument.activeLayer = activeDocument.layerSets[groupname].artLayers.getByName (actLay);

我从Adobe论坛上得到了这个。有人编写了一个函数来更轻松地查找图层的位置。

//usage example:
select_layer(actLay.name);

function select_layer(id, add, viz)
{  
try {
    var d = new ActionDescriptor();
    if (viz == undefined) viz = false;
    var r = new ActionReference();
    if (typeof(id) == "string") r.putName( charIDToTypeID( "Lyr " ), id);
    else                        r.putIdentifier( charIDToTypeID( "Lyr " ), id);
    d.putReference( charIDToTypeID( "null" ), r );
    d.putBoolean( charIDToTypeID( "MkVs" ), viz );
    if (add == true) d.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
    if (add == -1)   d.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "removeFromSelection" ) );
    var ok = true;
    try { executeAction( charIDToTypeID( "slct" ), d, DialogModes.NO ); } catch(e) { ok = false; }
    d = null;
    return ok;
    }
catch (e) { alert(e); return false; }
}

最新更新