菜鸟新手刚写的统计矩形边长和数量的LISP,求高手完善
本帖最后由 scream2658 于 2013-7-5 21:20 编辑买了猫老师的视频教程,看了一个星期的初级视频,也学着写了个LISP。当中也参考了论坛上几位高手的LISP程序。
现在奉献源码供大家参考。也帮忙完善下。 目前这个LISP还 有几个BUG,在处理非水平的矩形时,虽然边长相等,但是还是会误认为是单个的矩形。
运行的时候,命令行也提示有错误。在下真的是能力有限,没办法修改了。望各位高手指点下。
ZZXXQQ 发表于 2013-7-5 22:37
大哥,你这是什么字体呀,cad出来的是乱码的 要是能导入excel就好了。
支持分享,谢谢! 建议弄出三角形……圆形…平行四边形……扇形……等 一个星期就如此了,不错了,感谢共享 本帖最后由 ZZXXQQ 于 2014-2-27 22:00 编辑
;;;统计相同矩形边长的数量.
;;;编写日期2013-07-05
;;;编写: CADMAN
;;子函数 (求矩形边长)
(defun qbc (pts / b h)
(setq b (distance (car pts) (cadddr pts)))
(setq h (distance (car pts) (cadr pts)))
(cons (max b h) (min b h))
);结束qbc
(defun c:tg ( / bclst pts ss el bc_new i p2 p3 m x1 x2)
(princ "\n请框选矩形:")
(setq ss (ssget '((0 . "LWPOLYLINE") (90 . 4))))
(setq i 0 bclst nil pts nil)
(repeat (sslength ss)
(setq el (entget (ssname ss i)))
(setq pts nil)
(foreach pt el (if (= (car pt) 10) (setq pts (cons (cdr pt) pts))))
(setq bclst (cons (qbc pts) bclst))
(setq i (1+ i))
);repeat
(setq bc_new nil)
(while bclst
(setq m (car bclst) x1 (length bclst))
(setq bclst (vl-remove m bclst))
(setq x2 (length bclst))
(setq n (- x1 x2))
(setq bc_new (cons (list m n) bc_new))
)
(setq p2 (getpoint "\起始位置"))
(setq p3 (polar p2 0 3000))
(command "_.TEXT" "c" (polar p2 (* pi 0.5) 800) "500" "0" "矩形边长");指定书写标题的位置
(command "_.TEXT" "c" (polar p3 (* pi 0.5) 800) "500" "0" "数量")
(foreach bg bc_new ;设定重复次数为新表的长度
(command "_.TEXT" "c" p2 "400" "0" (strcat (rtos (car (car bg)) 2)"x" (rtos (cdr (car bg))2)))
(command "_.TEXT" "c" p3 "400" "0" (cadr bg))
(setq p2 (polar p2 (* pi 1.5) 800))
(setq p3 (polar p2 0 3000))
)
(princ)
) ZZXXQQ 发表于 2013-7-5 22:37 static/image/common/back.gif
版主好心人哪。你这样一优化,确实流畅了不少。谢谢!非常感谢! 支持一一下! 支持一下 好东西,试用下。谢谢 ZZXXQQ:WIN7.64位,autocad2010加载程序后提示语法错误。 yaya-54 发表于 2013-12-27 10:27 static/image/common/back.gif
ZZXXQQ:WIN7.64位,autocad2010加载程序后提示语法错误。
第十三行
(setq i 0 bclst nil pts nil)
页:
[1]
2