明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8425|回复: 14

[讨论] autolisp如何实现自动插入块(利用圆)

[复制链接]
发表于 2013-12-22 16:14:20 | 显示全部楼层 |阅读模式
本帖最后由 275437962 于 2013-12-26 22:40 编辑

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

点评

Andyhon说的,也是我想说的,提问就提问,不要采用这种夸张的标题,“没人会”啊,“超难”啊什么的  发表于 2013-12-23 02:53
新报到: http://bbs.mjtd.com/thread-100603-1-1.html  发表于 2013-12-22 16:24
发表于 2017-11-2 00:05:59 | 显示全部楼层
支持一下  学习中
发表于 2016-11-4 10:34:56 | 显示全部楼层
学习了学习了
发表于 2017-7-28 10:32:20 | 显示全部楼层
学习了。感谢!!
发表于 2013-12-22 21:13:00 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 2 才可浏览,你当前发帖数只有 0
 楼主| 发表于 2013-12-22 21:57:19 | 显示全部楼层
ZZXXQQ 发表于 2013-12-22 21:13
[/post]

朋友,这段代码怎么运行啊
发表于 2013-12-22 22:12:26 | 显示全部楼层
加载后,命令TT
发表于 2013-12-22 22:30:16 | 显示全部楼层
ZZXXQQ 发表于 2013-12-22 21:13
[/post]

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

点评

这么个简单又不是有广泛需求的问题,配上dcl不嫌啰嗦啊  发表于 2013-12-23 02:43
 楼主| 发表于 2013-12-22 22:41:25 | 显示全部楼层
本帖最后由 275437962 于 2013-12-22 23:12 编辑
ZZXXQQ 发表于 2013-12-22 21:13
[/post]

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

发表于 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)
)
 楼主| 发表于 2013-12-23 11:58:01 | 显示全部楼层
masterlong 发表于 2013-12-23 02:46
(defun c:tt ()
  (setvar "CMDECHO" 0)
  (if (and (setq bnm (getstring "\n图块名 :"))

ok了,谢谢,能否再麻烦你一下,再帮我改改,让新插入块的图层和它对应的圆所在图层一致,并让所有插入块的颜色改成bylayer(即随层)!!
发表于 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)
)

评分

参与人数 1明经币 +1 金钱 +18 收起 理由
ZZXXQQ + 1 + 18 热心肠,赞一个!

查看全部评分

 楼主| 发表于 2013-12-23 14:11:26 | 显示全部楼层
masterlong 发表于 2013-12-23 13:31
要求要一次性提完
不厌其烦的解答
本论坛或者只有Z版做得到

谢谢了,你说的是,我老是啰嗦的问,不过你还是不厌其烦的解答,谢谢你的提醒!!

点评

举手之劳不值一谢。只是想说,论坛里高手无数,大家其实都很热心。但如果不遵循一些基本的论坛公约,那么很快就没人愿意帮助你了。另外,善用论坛搜索功能,同时再学学lisp,编点小程序,对工作有帮助,也会很有乐趣  发表于 2013-12-24 02:22
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-20 01:49 , Processed in 0.232029 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表