ExtendScript получить номер индекса из найденного результата Comp

У меня есть этот код, который сортирует различные элементы в постэффектах и ​​возвращает все композиции в проекте, а затем я сужаю его, основываясь на конкретной композиции, которую я ищу, в этом случае одна заканчивается ассемблированием. Я получил имя, и это здорово, но что мне действительно нужно, так это порядковый номер, который будет идти вместе с именем, чтобы при поиске сборки я получил возврат app.project.item (3), его индекс в окне проекта . Каждый раз, когда я пытаюсь получить число из массива, все, что я получаю, это общее количество элементов, что не помогает.

Спасибо.

function retrieveProjectItems(itemType){
var typeOptions = ["Composition", "Folder", "Footage"];
for(var t = 0; t<3; t++){
    if(itemType == typeOptions[t]){
        var proj, itemTotal, curItem, itemArray;
        itemAry = [];
        proj = app.project;
        itemTotal = proj.numItems;
        for(var i = 1; i <= itemTotal; i++){
            curItem = proj.item(i);

            //alert(curItem.name);


            if(curItem.typeName == itemType){
                itemAry[itemAry.length] = curItem.name;
                }
            }
        return itemAry;

        }
    }
}
retrieveProjectItems("Composition");
//alert(comps); lists all COMPS in the Array

var comps = itemAry;
var compWithAssemble;
for(var i in comps){
if(comps[i].indexOf("assemble") > -1){ ///search for part of the name///////////////////////////////////
    compWithAssemble = comps[i];

    break;
}
}
// compWithAssemble has the string you are looking for.
alert(compWithAssemble);
//app.project.item(3).selected = true;
compWithAssemble.selected = true; //I'm looking to make this work...

person Amaylayinsues    schedule 13.05.2015    source источник


Ответы (1)


Я предполагаю, что вы хотите программно найти композицию со слоем с именем "assemble"

Этот фрагмент кода

if(comps[i].indexOf("assemble") > -1){ ///search for part of the name///////////////////////////////////
    compWithAssemble = comps[i];

    break;
}

не дает желаемых результатов, потому что comps[i] является объектом CompItem, а не массивом или коллекцией. Сначала вам нужно получить коллекцию слоев для каждого comp[i]. Затем, когда у вас есть эта коллекция LayerCollection, вы можете найти слой с именем "assemble" с помощью метода .byName (). Если вы не получите возвращенный слой, вы получите null, в противном случае вы получите объект слоя.

Это может выглядеть примерно так:

var comps = itemAry;
var compWithAssemble;

for (var i in comps){
    if(comps[i].layers.byName("assemble") != null) {
       compWithAssemble = comps[i];
       break;
    }
}
person ariestav    schedule 14.05.2015