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 一个指示操作成功或失败的布尔值。
我的任务似乎真的很简单:使用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 一个指示操作成功或失败的布尔值。