如何在 dm-script 中添加带有 python 的文本注释
How to add text annotations with python in dm-script
如何在 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
)。但是我只能用参数f1
到f4
来指定位置。使用字符串参数会引发 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
如何在 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
)。但是我只能用参数f1
到f4
来指定位置。使用字符串参数会引发 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