明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3945|回复: 4

怎样计算曲线长度

[复制链接]
发表于 2003-9-30 19:47:00 | 显示全部楼层 |阅读模式
怎样用vba计算一条曲线(直线,圆弧,pline线等)的长度,我想知道是怎样的算法和函数
发表于 2003-9-30 19:50:00 | 显示全部楼层
使用VL的接口,它提供了所有曲线的操作函数,具体可以参照置顶的VLAX类介绍。
发表于 2003-9-30 20:10:00 | 显示全部楼层
写了一个简单的例子。可以参考一下。

VLAX类函数是完整的处理曲线的函数,现只提取出求曲线长度的算法。


  1. Private Function GetLength(ByVal EntObj As AcadEntity) As Variant
  2.     Dim VL As Object
  3.     Dim VLF As Object
  4.    
  5.     Dim sym As Object
  6.     Dim ret As Variant
  7.    
  8.     ThisDrawing.SendCommand "(vl-load-com)" & vbCr ‘首先要加载VL接口,因为后面的函数是基于它的。
  9.    
  10.     Set VL = Application.GetInterfaceObject("VL.Application.16") '这是用于R2004版的,R2000或者R2002的应该使用VL.Application.1。
  11.     Set VLF = VL.ActiveDocument.Functions
  12.     Set sym = VLF.Item("read").funcall("handle") '传入句柄
  13.     ret = VLF.Item("set").funcall(sym, EntObj.Handle)
  14.     Set sym = VLF.Item("read").funcall("(setq curve (handent handle))") '根据句柄得到实体名称(Lisp中的实体名称,这和EntityName是不一样的。)
  15.     Set ret = VLF.Item("eval").funcall(sym)
  16.     Set sym = VLF.Item("read").funcall("(vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve))") '计算终点参数,然后计算距离。
  17.     ret = VLF.Item("eval").funcall(sym) '返回长度
  18.     GetLength = ret
  19. End Function

  20. Sub test()
  21.     Dim l As Double
  22.     l = GetLength(ThisDrawing.ModelSpace(0))
  23.     Debug.Print "曲线长度: " & l
  24. End Sub
 楼主| 发表于 2003-10-1 18:20:00 | 显示全部楼层
谢谢版主,这中方法可以在2000以上的cad中使用,可是我的工作环境是r14,请问有没有什么办法
发表于 2003-10-1 21:08:00 | 显示全部楼层
1. R14版本的VL没有集成到AutoCAD中,所以没有带vl 的函数。
2.R14中也没有什么vl.tlb 文件,也就无法调用vl库了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:50 , Processed in 0.153306 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表