DM-Script:提取variable/unknown结构的TagGroups

DM-Script: Extract TagGroups of variable/unknown structure

我的任务似乎真的很简单:使用TagGroup 并将树结构和未知 结构的数据 提取到结果日志中。所以我想获取要在结果中显示的 children 的名称和值以及所有名称和值。我该怎么做?


我有以下(示例)标签结构:

文档介绍了 TagGroup,还包含一个使用 TagGroupGetTagType() 的示例。然后可以使用 returned 值来查找结构。我编写并执行了以下脚本:

for(number i = 0; i < tg.TagGroupCountTags(); i++){
    String label = tg.TagGroupGetTagLabel(i);
    number type = tg.TagGroupGetTagType(i, 0);

    result("\nName: " + label + ", Type: " + type);
}

这给出了

Name: Acquisition, Type: 3 // <- should be 0?
Name: Calibration, Type: 3
Name: DataBar, Type: 3 // <- should be 0?
Name: GMS Version, Type: 3 // <- should be 0?
Name: Microscope Info, Type: 3 // <- should be 0?
Name: Session Info, Type: 3 // <- should be 0?

根据文档,TagGroup 的类型为 0。这对我的示例来说是不正确的。如图所示,Acquisition 具有 children,因此它应该具有类型 0 但它具有类型 3。(大多数)其他索引也是如此。类型 3 是长。

(事实上,我写了自己的虚拟 TagGroup。我用我知道的数据类型填充它,然后我测试了 return 值 TagGroupGetTagType()。对于这似乎文档是正确的。)

我将我的脚本更改为始终强制检查标签组是否具有 children 假设 TagGroupCountTags() 将 return 0 用于空标签,但它没有:

void showTags(tg){
    for(number i = 0; i < tg.TagGroupCountTags(); i++){
        String label = tg.TagGroupGetTagLabel(i);
        number type = tg.TagGroupGetTagType(i, 0);

        result("\nName: " + label + ", Type: " + type);

        TagGroup child_tg;
        tg.TagGroupGetIndexedTagAsTagGroup(i, child_tg);

        // if(child_tg != NULL){ // <- this does not work either
        showTags(child_tg);
        // }
    }
}

此脚本崩溃,因为 child_tg 有时是 null。但我也无法测试 null,因为不允许进行比较(错误 "Unable to match this argument list to any existing function")。

文档总是知道它的 Tag 结构,所以他们只是使用路径来获取它们的值。另外,如果 TagGroup 有 children,我还试图找到关于如何获取的任何其他可能性。但似乎没有 hasChildren() 或任何等效功能。那么如何获得 TagGroup 的结构?

编辑:可在此处找到示例数据

所以我找到了某种答案。我现在正在使用

try{
    showTags(child_tg);
}
catch{
    break;
}

这可行,但我对此仍然不是很满意。有没有办法与 null 进行比较或检查对象 class(是否有某种 instanceof)?

任何脚本对象的 "NULL" 测试都是使用 "IsValid()" 方法完成的。这可能看起来很奇怪(NULL 怎么会有方法?)但它就是这样工作的。

所以你有:

  • image img --> img.ImageIsValid()
  • imageDocument doc --> doc.ImageDocumentIsValid()
  • ROI r --> r.ROIIsValid()
  • TagGroup tg --> tg.TagGroupIsValid()
  • 等等等
  • 另外:object ob --> ob.ScriptObjectIsValid()

但是对于您的问题更简单的解决方案是使用:

TagGroup child_tg;
if ( tg.TagGroupGetIndexedTagAsTagGroup(i, child_tg) )
    showTags(child_tg);

Get... 命令 return 一个指示操作成功或失败的布尔值。