用lisp语言给多段线段点画圆
1个回答
2015-04-02 · 知道合伙人软件行家
关注
展开全部
(defun C:HZY ( / #os1 #p &k1 &kw1 l1 p1 x)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "dimzin" 0)
(vl-load-com) ;;加载vlax扩展函数
(setq #os1 (getvar "osmode"));取得捕捉设置
(princ "\n请选择多段线")
(setq &kw1 (ssget '((0 . "LWPOLYLINE"))));选择多段线
(if (/= &kw1 nil);如果选择了多段线
(progn
(setvar "osmode" 0);捕捉设置为0
(setq L1 (getdist (strcat "\n请输入圆半径<" "1" ">")));提示输入圆半径
(if (= L1 nil) (setq L1 1));默认输入为1
(if (> L1 0);确认输入的半径为正
(progn
(setq &k1 (ssname &kw1 0));取得一个对象
(while &k1;循环绘制
(setq &kw1 (ssdel &k1 &kw1));选择集里面去掉这个对象
(setq #p (mapcar 'cdr (vl-remove-if '(lambda (X) (/= 10 (car x))) (entget &k1))));取得多段线里面的点
(setq p1 (car #p));取得其中一点
(while p1
(setq #p (cdr #p))
(command "circle" p1 L1);绘制圆
(setq p1 (car #p))
)
(setq &k1 (ssname &kw1 0));取得下一个对象
)
)
)
(setvar "osmode" #os1);绘制完成后还原捕捉设置
)
)
(prin1)
);复制到记事本以【.lsp】为后缀命名,加载到AutoCAD,命令为HZY
;写了一下,这个程序主要是循环命令的应用以及car,cdr的应用,其它的很简单容易理解。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询