找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2191|回复: 8

[求助] [求助]:是否有获取曲线长度的LISP函数

[复制链接]
发表于 2005-10-28 20:35:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
例如:应用(vlax-curve-getarea 图元名)可以获取该图元的面积,请问,是否有类似的获取曲线长度的LISP函数(不用(getvar "perimeter"))?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-28 20:56:14 | 显示全部楼层
[php](vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename))[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-30 02:25:45 | 显示全部楼层
不行啊!xyp1964,出现错误提示:出错:无法获取 ObjectID: nil!
望指点,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-30 08:41:02 | 显示全部楼层
  1. [FONT=courier new]
  2. (defun c:test ()
  3.   (setq ename (car (entsel"\n选择曲线 : ")))
  4.   (vlax-curve-getDistAtParam
  5.     ename
  6.     (vlax-curve-getEndParam ename)
  7.   )
  8. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-30 15:37:23 | 显示全部楼层
谢谢!不好意思,原来是我粗心了,ename变量名输错,值为nil,导致出错。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-30 17:44:17 | 显示全部楼层
最初由 hsslyl 发布
[B]谢谢!不好意思,原来是我粗心了,ename变量名输错,值为nil,导致出错。 [/B]

利用以上内容自定义成通用函数:
  1. [FONT=courier new]
  2. ;;;曲线长度
  3. ;;;xyp-get-CurveLength
  4. (defun xyp-get-CurveLength (ename)
  5.   (vlax-curve-getDistAtParam
  6.     ename
  7.     (vlax-curve-getEndParam ename)
  8.   )
  9. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-31 15:30:06 | 显示全部楼层
;;;-----------------------------------------------------
;;;计算线加总长度
;;;-----------------------------------------------------
(defun C:LENOF (/ CURVE TLEN SS N SUMLEN)
  (vl-load-com) ;将Visual LISP扩展功能加载到Visual LISP
  (setq SUMLEN 0)
  (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
  (setq N 0)
  (repeat (sslength SS)                                  ;对循环体中的每一个表达式进行指定次数的求值计算
    (setq CURVE (vlax-ename->vla-object (ssname SS N)))  ;将Visual LISP类型的对象名转换为VLA对象
    (setq TLEN (vlax-curve-getDistAtParam                ;返回曲线从开始到指定参数的曲线段的长度
CURVE
(vlax-curve-getEndParam CURVE)                           ;返回曲线端点的参数
       )
    )
    (setq SUMLEN (+ SUMLEN TLEN))
    (setq N (1+ N))
  )
  (print (strcat "总长度: " (rtos SUMLEN 2 5)))
  (princ)
)


利用代码可以增加程序的可读性:by xyp1964[/COLOR]
  1. [FONT=courier new]
  2. ;;;-----------------------------------------------------
  3. ;;;计算线加总长度
  4. ;;;-----------------------------------------------------
  5. (defun C:LENOF (/ CURVE TLEN SS N SUMLEN)
  6.   (vl-load-com)                                ;将Visual LISP扩展功能加载到Visual LISP
  7.   (setq        SS     (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
  8.         N      0
  9.         SUMLEN 0
  10.   )
  11.   (repeat (sslength SS)                        ;对循环体中的每一个表达式进行指定次数的求值计算
  12.     (setq CURVE         (vlax-ename->vla-object (ssname SS N))        ;将Visual LISP类型的对象名转换为VLA对象
  13.           TLEN         (vlax-curve-getDistAtParam CURVE ;返回曲线从开始到指定参数的曲线段的长度
  14.                    (vlax-curve-getEndParam CURVE) ;返回曲线端点的参数
  15.                  )
  16.           SUMLEN (+ SUMLEN TLEN)
  17.           N         (1+ N)
  18.     )
  19.   )
  20.   (print (strcat "总长度: " (rtos SUMLEN 2 5)))
  21.   (princ)
  22. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-31 17:55:47 | 显示全部楼层
楼上改写:
  1. [FONT=courier new](defun C:test (/ ss SUMLEN n leng S1)
  2.   (vl-load-com)
  3.   (setq        SS     (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
  4.         SUMLEN 0
  5.         n      -1
  6.   )
  7.   (while (setq s1 (ssname SS (setq n (1+ n))))
  8.     (setq leng         (xyp-get-CurveLength s1)
  9.           SUMLEN (+ SUMLEN leng)
  10.     )
  11.   )
  12.   (princ "\n总长度: ")
  13.   (princ (rtos SUMLEN 2 4))
  14.   (princ)
  15. )
  16. (defun xyp-get-CurveLength (ename)
  17.   (vlax-curve-getDistAtParam
  18.     ename
  19.     (vlax-curve-getEndParam ename)
  20.   )
  21. )
  22. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-31 22:47:35 | 显示全部楼层
用完area命令
(getvar "perimeter")
也算是一种方法吧,参考
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 18:37 , Processed in 0.195105 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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