CAD VBA 二次开发过程中经常会遇到对象类型的判断与筛选,typename 是vba中类名,objectname(多一个i)和entityname是CAD中对象类名,通过typename和objectname可实现此功能,代码如下:
'2024年3月6日19:09:26 by qq443440204
Sub getentity函数获取typename和objectname类名()
On Error GoTo error_control
Dim ent As AcadObject, pt(2) As Variant, a As String, b, c
pt(0) = 3#: pt(1) = 3#: pt(2) = 0#
MsgBox "请回CAD界面选择图元"
RETRY:
Do
ThisDrawing.Utility.GetEntity ent, pt, "请选择图元" 'getentity函数,ent可引用窗选对象,pt为窗选点坐标
a = a & TypeName(ent) & " , "
b = b & ent.ObjectName & " , "
c = c & ent.EntityName & " , "
Loop
error_control: '用户按esc键或右键退出循环选择
If Err <> 0 Then Err.Clear
MsgBox "VBA中类名typename是:" _
& a & vbCr & vbCr & "CAD中类名objcetname是:" _
& b & vbCr & vbCr & "CAD中entityname是:" _
& c, , "版权所有@qq443440204"
Stop
End Sub
查询结果如下:
由此可见,typename是vba独有的名称。
另附getentity函数,
object.GetEntity Object, PickedPoint[, Prompt]
Object
Utility
使用该方法的对象。
Object
Object; 仅用于输出
拾取的对象,可以是任意图形对象中的一个。
PickedPoint
Variant[变体] (三元素双精度数组); 仅用于输出
表示选择点的三维 WCS 坐标。
Prompt
Variant[变体] (字符串); 仅用于输入; 可选项
用于提示用户输入的文本
说明
该方法需要 AutoCAD 用户在图形屏幕上拾取一个点来选择一个对象。如果选定了对象,该方法将把它作为第一个参数返回,第二个参数包含了拾取点在WCS下的坐标。如果拾取点不在对象上,该方法调用失败。
GetEntity 返回的拾取点并不需要在已选定的对象上。返回的点只表示选择时十字光标的位置。点与对象的关系会因拾取框的大小和当前的缩放比例而变化。
该方法甚至可以取出在屏幕上不可见的或在冻结层的对象。