2012-01-29 35 views
2

我正在构建一个插件,并使用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 

为什么选择不被视为与数组中的对象相同的对象?

+0

您使用CS扩展生成器吗?是否有一些功能可以保存对对象的引用?我没有使用它,只是使用ExtendScript Toolkit编写脚本。根据我的经验,一旦完成对Illustrator的调用,我想变量的范围将会丢失,因此您需要找到其他方法来跟踪所选对象(位置,外观等)。 – 2012-01-29 23:46:07

+0

是的,我是使用Cs Extension Builder。我可以访问arrObj数组中的对象并对它们应用更改,它将出现在插图文档中。但是当我想要检查文档中的对象是否已经保存在数组中时,它不会以其他方式工作。 – user1177060 2012-01-30 00:09:04

回答

1

我想出了将选定对象保存在数组中的解决方法,并且在Illustrator文档中再次选择对象时,它会指出该对象在数组中的索引。所选对象的数据类型是“PathItems”并且有一个名为name的变量。您只需将此变量设置为您选择的值并将其保存到另一个数组中即可。

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(“name”)方法获取索引。