写了一个简单的例子。可以参考一下。
VLAX类函数是完整的处理曲线的函数,现只提取出求曲线长度的算法。
- Private Function GetLength(ByVal EntObj As AcadEntity) As Variant
- Dim VL As Object
- Dim VLF As Object
-
- Dim sym As Object
- Dim ret As Variant
-
- ThisDrawing.SendCommand "(vl-load-com)" & vbCr ‘首先要加载VL接口,因为后面的函数是基于它的。
-
- Set VL = Application.GetInterfaceObject("VL.Application.16") '这是用于R2004版的,R2000或者R2002的应该使用VL.Application.1。
- Set VLF = VL.ActiveDocument.Functions
- Set sym = VLF.Item("read").funcall("handle") '传入句柄
- ret = VLF.Item("set").funcall(sym, EntObj.Handle)
- Set sym = VLF.Item("read").funcall("(setq curve (handent handle))") '根据句柄得到实体名称(Lisp中的实体名称,这和EntityName是不一样的。)
- Set ret = VLF.Item("eval").funcall(sym)
- Set sym = VLF.Item("read").funcall("(vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve))") '计算终点参数,然后计算距离。
- ret = VLF.Item("eval").funcall(sym) '返回长度
- GetLength = ret
- End Function
- Sub test()
- Dim l As Double
- l = GetLength(ThisDrawing.ModelSpace(0))
- Debug.Print "曲线长度: " & l
- End Sub
|