2017-10-25 4 views
0

同じレイヤー名を持つ2つの開いているドキュメントがあります。 最初のドキュメントでレイヤーを選択したいとします。次に、スクリプトを実行し、他のドキュメントの名前で同じレイヤーを自動的に選択します。レイヤーをアクティブな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"); 
} 

答えて

0

: は、次のコードでそれを修正しました。 誰かがレイヤの位置をより簡単に見つける機能を作成しました。

//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; } 
} 
0

はそれを考え出しました!レイヤーが特定のグループに属していたため、レイヤーが見つかりませんでした。私は、Adobeのフォーラムからこれを得た

activeDocument.activeLayer = activeDocument.layerSets[groupname].artLayers.getByName (actLay); 
関連する問題