earchen 发表于 2003-9-30 19:47:00

怎样计算曲线长度

怎样用vba计算一条曲线(直线,圆弧,pline线等)的长度,我想知道是怎样的算法和函数

efan2000 发表于 2003-9-30 19:50:00

使用VL的接口,它提供了所有曲线的操作函数,具体可以参照置顶的VLAX类介绍。

efan2000 发表于 2003-9-30 20:10:00

写了一个简单的例子。可以参考一下。

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

earchen 发表于 2003-10-1 18:20:00

谢谢版主,这中方法可以在2000以上的cad中使用,可是我的工作环境是r14,请问有没有什么办法

mccad 发表于 2003-10-1 21:08:00

1. R14版本的VL没有集成到AutoCAD中,所以没有带vl 的函数。
2.R14中也没有什么vl.tlb 文件,也就无法调用vl库了。
页: [1]
查看完整版本: 怎样计算曲线长度