如何将此 AutoCAD VBA 代码转换为 Python?
How to translate this AutoCAD VBA code into Python?
我正在尝试使用 Python 在 AutoCAD 中自动执行某些绘图,并且我使用 SelectOnScreen 方法。
这是 VBA 中的代码:
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
FilterType(0) = 0
FilterData(0) = "TEXT"
selection.SelectOnScreen FilterType, FilterData
在Python中,我将其用作:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT'])
selection.SelectOnScreen(FilterType, FilterData)
并且它适用于 AutoCAD。
但是我想要 select 不同类型的对象(文本和多行文本)并且我在 VBA 中有一个代码示例。那么如何将下面的VBA代码翻译成Python呢?
Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
FilterType(0) = 0
FilterData(0) = "Text"
FilterType(1) = 0
FilterData(1) = "MText"
selection.SelectOnScreen FilterType, FilterData
这是我尝试过的 Python 代码,但它在 AutoCAD 中不起作用:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0, 0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ["MTEXT", "TEXT"])
selection.SelectOnScreen(FilterType, FilterData)
当我尝试使用它时 select 什么都没有。
您的代码无法 select 任何事情的原因是因为 selection 过滤器具有隐式的 AND 逻辑,因此一个对象不能同时是TEXT
和 MTEXT
.
由于 selection 过滤器允许通配符匹配,您可以使用以下内容:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT,MTEXT'])
selection.SelectOnScreen(FilterType, FilterData)
或者,如果您不担心 selecting RTEXT
的可能性:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['*TEXT'])
selection.SelectOnScreen(FilterType, FilterData)
您可以选择将逻辑运算符 <OR
和 OR>
与组代码 -4
:
结合使用
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [-4, 0, 0, -4])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['<OR', 'TEXT', 'MTEXT', 'OR>'])
selection.SelectOnScreen(FilterType, FilterData)
我正在尝试使用 Python 在 AutoCAD 中自动执行某些绘图,并且我使用 SelectOnScreen 方法。 这是 VBA 中的代码:
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
FilterType(0) = 0
FilterData(0) = "TEXT"
selection.SelectOnScreen FilterType, FilterData
在Python中,我将其用作:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT'])
selection.SelectOnScreen(FilterType, FilterData)
并且它适用于 AutoCAD。 但是我想要 select 不同类型的对象(文本和多行文本)并且我在 VBA 中有一个代码示例。那么如何将下面的VBA代码翻译成Python呢?
Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
FilterType(0) = 0
FilterData(0) = "Text"
FilterType(1) = 0
FilterData(1) = "MText"
selection.SelectOnScreen FilterType, FilterData
这是我尝试过的 Python 代码,但它在 AutoCAD 中不起作用:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0, 0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ["MTEXT", "TEXT"])
selection.SelectOnScreen(FilterType, FilterData)
当我尝试使用它时 select 什么都没有。
您的代码无法 select 任何事情的原因是因为 selection 过滤器具有隐式的 AND 逻辑,因此一个对象不能同时是TEXT
和 MTEXT
.
由于 selection 过滤器允许通配符匹配,您可以使用以下内容:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT,MTEXT'])
selection.SelectOnScreen(FilterType, FilterData)
或者,如果您不担心 selecting RTEXT
的可能性:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['*TEXT'])
selection.SelectOnScreen(FilterType, FilterData)
您可以选择将逻辑运算符 <OR
和 OR>
与组代码 -4
:
FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [-4, 0, 0, -4])
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['<OR', 'TEXT', 'MTEXT', 'OR>'])
selection.SelectOnScreen(FilterType, FilterData)