确定是否存在选择

时间:2017-01-09 16:48:20

标签: javascript undefined selection photoshop photoshop-script

是否有一种(更好的)方法可以确定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:没有这样的元素。因此需要尝试/捕获。

3 个答案:

答案 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; }
}