275437962 发表于 2013-12-22 16:14:20

autolisp如何实现自动插入块(利用圆)

本帖最后由 275437962 于 2013-12-26 22:40 编辑

我想让CAD某层中的所有固定大小的圆的中心插入事先命名的块(一个圆点),保证圆点的中心和圆的中心重合!!!
望哪位大侠帮个忙,自己水平有限,谢谢了!!!1

oypk51 发表于 2017-11-2 00:05:59

支持一下学习中

yideng621 发表于 2016-11-4 10:34:56

学习了学习了

lxy_2080 发表于 2017-7-28 10:32:20

学习了。感谢!!

ZZXXQQ 发表于 2013-12-22 21:13:00

;圆替换块 明经 ZZXXQQ 2009.9.23
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (setq bnm (getstring "\n图块名 :"))
         (/= bnm "")
         (princ "\n选择圆 :")
         (setq ss (ssget '((0 . "CIRCLE"))))) (progn
   (setq i 0)
   (repeat (sslength ss)
    (setq pc (cdr(assoc 10 (entget (ssname ss i)))))
    (command "-insert" bnm pc "" "" "")
    (setq i (1+ i))
   )
   (command ".erase" ss "");删去此句就保留圆
))
(setvar "CMDECHO" 1)
(princ)
)

275437962 发表于 2013-12-22 21:57:19

ZZXXQQ 发表于 2013-12-22 21:13 static/image/common/back.gif


朋友,这段代码怎么运行啊

楚留香 发表于 2013-12-22 22:12:26

加载后,命令TT

llsheng_73 发表于 2013-12-22 22:30:16

ZZXXQQ 发表于 2013-12-22 21:13 static/image/common/back.gif


(setq bnm (getstring "\n图块名 :"))
这个地方应该处理一下,至少应该把所有的图块名列出来,弄到对话框的下拉列表让人选更好一些,当然最好是有预览图配套就更完美,不然输入块名的话,至少应该加上检查,万一块名输错了呢?

275437962 发表于 2013-12-22 22:41:25

本帖最后由 275437962 于 2013-12-22 23:12 编辑

ZZXXQQ 发表于 2013-12-22 21:13 static/image/common/back.gif

这段代码,我用了,太好用了,谢谢了,都不知道说什么好了!!
能否再麻烦一下,再帮改一下,不让所有的圆都插入块,只让直径为某个固定长度的圆插入块!!!

masterlong 发表于 2013-12-23 02:46:47

(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (setq bnm (getstring "\n图块名 :"))
         (/= bnm "")
         (princ "\n选择圆 :")
         (setq ss (ssget '((0 . "CIRCLE")(40 . xxxx))))) ;;xxxx换成你需要的圆的半径
(progn
   (setq i 0)
   (repeat (sslength ss)
    (setq pc (cdr(assoc 10 (entget (ssname ss i)))))
    (command "-insert" bnm pc "" "" "")
    (setq i (1+ i))
   )
;; (command ".erase" ss "");删去此句就保留圆
))
(setvar "CMDECHO" 1)
(princ)
)

275437962 发表于 2013-12-23 11:58:01

masterlong 发表于 2013-12-23 02:46 static/image/common/back.gif
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (setq bnm (getstring "\n图块名 :"))


ok了,谢谢,能否再麻烦你一下,再帮我改改,让新插入块的图层和它对应的圆所在图层一致,并让所有插入块的颜色改成bylayer(即随层)!!

masterlong 发表于 2013-12-23 13:31:07

要求要一次性提完
不厌其烦的解答
本论坛或者只有Z版做得到


(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (setq bnm (getstring "\n图块名 :"))
         (/= bnm "")
         (princ "\n选择圆 :")
         (setq ss (ssget '((0 . "CIRCLE")(40 . xxxx))))) ;;xxxx换成你需要的圆的半径
(progn
   (setq i 0)
   (repeat (sslength ss)
    (setq pc (cdr(assoc 10 (entget (ssname ss i)))))
    (setq ely (cdr(assoc 8 (entget (ssname ss i)))))
    (command "-insert" bnm pc "" "" "")
    (command "change" (entlast) "" "p" "la" ely "co" "byl" "")
    (setq i (1+ i))
   )
;; (command ".erase" ss "");删去此句就保留圆
))
(setvar "CMDECHO" 1)
(princ)
)

275437962 发表于 2013-12-23 14:11:26

masterlong 发表于 2013-12-23 13:31 static/image/common/back.gif
要求要一次性提完
不厌其烦的解答
本论坛或者只有Z版做得到


谢谢了,你说的是,我老是啰嗦的问,不过你还是不厌其烦的解答,谢谢你的提醒!!
页: [1] 2
查看完整版本: autolisp如何实现自动插入块(利用圆)