是否有一种(更好的)方法可以确定Photoshop中的图层中是否存在选择而没有在selection.bounds上使用try / catch?
try
{
var sel = app.activeDocument.selection.bounds;
}
catch(e)
{
var sel = undefined;
alert("No selection");
}
if (sel) alert(sel);
如果没有选择而不是返回(预期的)未定义的边界,我只得到错误1302:没有这样的元素。因此需要尝试/捕获。
答案 0 :(得分:0)
我也遇到过这种情况,虽然我没有找到使用try..catch的方法,但我只是在我可以测试的Selection原型中添加了一个简单的active()函数。
Selection.prototype.active = function()
{
try { return (selection.bounds) ? true : false; }
catch(e) { return false; }
}
这样,您只需拨打app.activeDocument.selection.active()
即可查看是否已选择某些内容。
try部分中的三元运算符是为了防止将来报告未定义的Selection.bounds。
答案 1 :(得分:0)
可悲的是,原型无法使用Photoshops的EMCA限制,因此我将其转换为功能:
output = ""
for k, v in dict.items():
output += "{}: {} ".format(k,v)
return output
答案 2 :(得分:0)
不幸的是,上面的函数是错误的,因为如果选择的左x坐标为0,它将返回false。可以通过仅检查引用(即从边界中删除[0])来纠正此错误,或者在两个测试用例中都返回true三元表达式。通常,在涉及JavaScript时,我倾向于使用后一种解决方案,但是在这种特定情况下,我希望通过删除索引来采用第一种方法,因为这是未记录的功能测试,并且该测试还将涵盖API的未来更改,这可能将边界设置为null表示没有选择处于活动状态。
因此上述功能变为:
function selection_active()
{
var layerRef = app.activeDocument.selection;
try { return (layerRef.bounds) ? true : false; }
catch(e) { return false; }
}
我个人已经修改了此功能以接受可选文档:
function selectionActive(doc)
{
if(doc==null) doc=app.activeDocument;
try { return doc.selection.bounds ? true : true; }
catch(e) { return false; }
}