计算多条线段总长的lisp程序_CAD二次开发-lisp篇(1)统计长度

48194f3c9aa8c53a3eb7ecc9056c6f70.png

好久之前就想开个专栏好好记录自己这四五年在cad二次开发过程中的一些心得体会啦,一直忙于考证,现在闲下来慢慢持续更新。

市面上由很多关于a/vlisp的入门教材了,我这里直接实战。以市面上插件中最常见的一个统计线段长度为例:

(defun count_length (/ ss n obj ss sumlen avelen len lenlst)
  (setq ss (ssget (list '(0 . "CIRCLE,ARC,ELLIPSE,LINE,*POLYLINE,SPLINE"))))
;ssget是用来在cad中选取对象的用法形如(ssget '((0 . "图元类型"))),还有很多高级用法以后再说啦
;CIRCLE圆,ARC圆弧,ELLIPSE椭圆,LINE直线,*POLYLINE多段线,SPLINE样条曲线
  (setq	n 0   
	sumlen 0
	maxlen 0
	minlen 0
	lenlst nil
  )
;(repeat 重复次数 重复操作的内容)
  (repeat (sslength ss)
    (setq obj (vlax-ename->vla-object (ssname ss n)))
;ssget函数返回值需要转换成图元名列表后才方便调用,常用vlax-ename->vla-object转换
    (setq len (vlax-curve-getdistatparam obj (vlax-curve-getEndParam obj)))
;(vlax-curve-getdistatparam 图元名 param)
    (setq lenlst (append lenlst (list len)))
;(append 列表 列表)返回列表。示例: (append '(1 2 3) '(1)) -> (1 2 3 1)
    (setq sumlen (+ sumlen len))
    (setq n (+ 1 n))
  )
  (setq avelen (/ sumlen n))
;(vl-sort 列表 排序函数)返回排序后列表 示例(vl-sort '(2 1 3) '<) -> (1 2 3)
  (setq	lenlst (vl-sort	lenlst
			'(lambda (e1 e2)
			   (< e1 e2)
			 )
	       )
  )
;(car 列表)列表首位元素 实例 (car '(1 2 3)) -> 1 (car (list '(1) 2 3)) -> (1) 
;car可以组合最大四次 (caar (list '(1) 2 3)) -> 1 
  (setq	minlen (car lenlst)
	maxlen (last lenlst)
  )
;(princ "需要在命令行输出的文字信息")
;(strcat 文本1 文本2 ...)返回组合文本 示例:(strcat "你" "hao" " 0") -> "你hao 0"
;(rtos 数字 模式 精度)返回文本 示例:(rtos 2.675893839 2 3) -> "2.676"
  (princ (strcat "n共有"
		 (itoa (sslength ss))
		 "条线段,总长:"
		 (rtos sumlen 2 3)
		 "均值"
		 (rtos avelen 2 3)
		 "最大值"
		 (rtos maxlen 2 3)
		 "最小值"
		 (rtos minlen 2 3)
	 )
  )
  (princ)
)

是不是特别简单呀,这个程序范式自己改改还能用来统计图块数量等等。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值