Получить индекс объекта в массиве

Я создаю плагин и использую actionscript, чтобы сохранить выбор объекта в документе иллюстратора, а затем ссылаться на него позже.

var arrObj:Array=new Array();
arrObj.push(app.activeDocument.selection[0]);

Если я сейчас выберу тот же объект в документе и проверю, есть ли он в массиве, он вернет -1 для значения индекса.

var id:int=arrObj.indexOf(app.activeDocument.selection[0]);
trace (id); //-1

Почему выделение не считается тем же объектом, что и в массиве?


person user1177060    schedule 29.01.2012    source источник
comment
Вы используете конструктор расширений CS? Есть ли какая-то функциональность для сохранения ссылок на объекты? Я не использовал его, просто написал сценарий с помощью ExtendScript Toolkit. По моему опыту, как только вызовы Illustrator закончатся, я предполагаю, что область действия переменных будет потеряна, поэтому вам нужно найти другие способы отслеживать этот выбранный объект (положение, внешний вид и т. д.)   -  person George Profenza    schedule 30.01.2012
comment
Да, я использую конструктор расширений Cs. Я могу получить доступ к объектам в массиве arrObj и применить к ним изменения, и они появятся в документе иллюстратора. Но это не работает наоборот, когда я хочу проверить, был ли объект в документе сохранен в массиве или нет.   -  person user1177060    schedule 30.01.2012


Ответы (1)


Я нашел обходной путь для сохранения выбранных объектов в массиве, и при повторном выборе объекта в документе иллюстратора он указывал индекс этого объекта в массиве. Выбранные типы данных объектов являются «PathItems» и имеют переменную с именем. Все, что вам нужно сделать, это установить для этой переменной значение по вашему выбору, а также сохранить его в другом массиве.

var arrObj:Array=new Array();
var nameHold:Array=new Array();

arrObj.push(document.selection[0]); // save the selection in an array
var hold:PathItem=document.selection[0];
hold.name="index1"; // setting the name variable of the selected object to a value of choice
nameHold.push(hold.name); // adding the name value in an array 

Теперь выбранный объект и соответствующее ему значение имени хранятся в массивах с одним и тем же индексом... вы можете сравнить все "PathItems" друг с другом, используя переменную имени, и если имена совпадают, вы можете получить индекс, используя метод . indexOf("имя") в массивах.

person user1177060    schedule 30.01.2012