用lisp语言给多段线段点画圆

 我来答
朱06CAD
2015-04-02 · 知道合伙人软件行家
朱06CAD
知道合伙人软件行家
采纳数:4172 获赞数:18068
高中,熟悉AutoCAD。会autolisp及VBA程序。

向TA提问 私信TA
展开全部
(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的应用,其它的很简单容易理解。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式