如何在 dm-script 中添加带有 python 的文本注释

How to add text annotations with python in dm-script

如何在 中添加带有 python 的文本注释(Edit ... 在版本 3.4.0 中)?


我想在 GMS python 环境中使用 python 向图像添加一些文本。因此我想使用文本注释。

我可以使用 DM.NewTextAnnotation() 创建文本注释。但是返回的 DM.Py_Component 对象没有任何 ComponentAddChild...() 方法。所以我可以创建文本注释,但我不能添加它们。

还有一个DM.Py_Component.AddNewComponent(type, f1, f2, f3, f4)方法。我可以用它创建文本注释(使用 type = 13)。但是我只能用参数f1f4来指定位置。使用字符串参数会引发 TypeError。有 DM.Py_Component.GetText() 和几种字体操作方法,但没有 DM.Py_Component.SetText()。所以我可以创建已经附加到父组件但没有文本的文本注释。而且我无法设置文本。

dm-script 文档还讨论了 Component::ComponentExternalizeProperties(),这让我假设每个组件的背景中都有一个 TagGroup。有什么方法可以操纵它,即使 python 模块中没有 DM.Py_Component.ExternalizeProperties()


所以我的问题是:向图像添加文本注释的预期方式是什么?有什么方法可以给组件添加注释或设置添加注释的文本吗?

提到的缺失命令已添加到最新版本 GMS 3.4.3。 没有它们,除了一些创造性的混合编码之外,没有办法添加组件。

使用命令,正确的例子是:

testImg = DM.GetFrontImage()
img_disp = testImg.GetImageDisplay(0)
textComp = DM.NewTextAnnotation(0, 0, 'test new text annotation', 15)  
img_disp.AddChildAtEnd(textComp)

# Cleanup 
del img_disp
del testImg

以及更改现有文本组件(类型 13)的文本:

testImg = DM.GetFrontImage()
img_disp = testImg.GetImageDisplay(0)

nSubComp = img_disp.CountChildren()
for index in range(nSubComp):
    comp = img_disp.GetChild(index)
    if ( comp.GetType() == 13 ):
        comp.TextAnnotationSetText( 'Other text' )

# Cleanup 
del img_disp
del testImg


如果您需要使用 GMS 3.4.3 之前的版本执行此操作,您可以通过从 Python 脚本调用 DM 脚本来解决缺少的命令,如本例所示:

annotext = 'This is the annotation'
testImg = DM.GetFrontImage()

# Build a DM script as proxy
dmScript = '// This is a DM script' + '\n'
dmScript += 'imageDisplay disp = ' + testImg.GetLabel() + '.ImageGetImageDisplay(0)' + '\n'
dmScript += 'component anno = NewTextAnnotation( 0, 0, "'
dmScript += annotext 
dmScript += '", 15)' + '\n'
dmScript += 'disp.ComponentAddChildAtEnd( anno )' + '\n'
#print( dmScript )

# Run the DM script
DM.ExecuteScriptString( dmScript )

# Cleanup 
del testImg