明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 430|回复: 16

框选圆,不同直径插入不同名的块

[复制链接]
发表于 2023-9-9 11:05 | 显示全部楼层 |阅读模式
20明经币
如题,框选圆,不同直径插入不同名的块,块名要能自己修改
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:NM (/ i name names p r s1 ss) (setq i -1 names nil) (if(setq ss (ssget (list '(0 . "CIRCLE")(cons 8 "0")))) (while(and(setq s1 (ssname ss (setq i (1+ i))))) (setq r(cdr(assoc 40 (entget s1))) p(cdr(assoc 10 (entget s1))) ) (if (tblsearch "BLOCK" (setq nam ...
发表于 2023-9-9 11:05 | 显示全部楼层
本帖最后由 xj6019 于 2023-9-9 11:46 编辑

(defun c:NM (/ i name names p r s1 ss)
  (setq i -1 names nil)
  (if(setq ss (ssget (list '(0 . "CIRCLE")(cons 8 "0"))))
    (while(and(setq s1 (ssname ss (setq i (1+ i)))))               
                        (setq r(cdr(assoc 40 (entget s1)))
                                p(cdr(assoc 10 (entget s1)))
                        )
                        (if (tblsearch "BLOCK" (setq name(strcat "epin_ejp_" (rtos(* 2 r)2 1))))                                
                                (progn
                                        (entmakeX
                                                (list '(0 . "INSERT")
                                                        '(100 . "AcDbEntity")
                                                        '(100 . "AcDbBlockReference")
                                                        (cons 2 name)
                                                        (cons 10 p)
                                                        (cons 50 0) ;弧度
                                                        (cons 41 1)
                                                        (cons 42 1)
                                                        (cons 43 1)
                                                )
                                        )                                       
                                )
                                (setq names(cons name names))
                        )               
                )
  )
        (if names
                (progn
                        (princ "\n对应直径当前文件内,缺失的块名有:")        
                        (princ names)
                )
                (princ "\n所有圆均插入对应图块成功!")
        )        
        (princ )
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2023-9-9 15:11 | 显示全部楼层
本帖最后由 戏男 于 2023-9-9 15:13 编辑
xj6019 发表于 2023-9-9 11:05
(defun c:NM (/ i name names p r s1 ss)
  (setq i -1 names nil)
  (if(setq ss (ssget (list '(0 . " ...

真历害,我以为需要改图块名,对了,如果自己想换图块名字呢?换了图块名字是不是就不行了呀?
回复

使用道具 举报

 楼主| 发表于 2023-9-9 15:14 | 显示全部楼层
本帖最后由 戏男 于 2023-9-9 15:25 编辑
xj6019 发表于 2023-9-9 11:05
(defun c:NM (/ i name names p r s1 ss)
  (setq i -1 names nil)
  (if(setq ss (ssget (list '(0 . " ...

换另一个图档就用不了呢?要能用图块名插入的呀,不是弧度相等,
回复

使用道具 举报

发表于 2023-9-9 15:35 | 显示全部楼层
戏男 发表于 2023-9-9 15:14
换另一个图档就用不了呢?要能用图块名插入的呀,不是弧度相等,

对应改你这里块名的前缀就行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2023-9-9 16:07 | 显示全部楼层
xj6019 发表于 2023-9-9 15:35
对应改你这里块名的前缀就行

新建一个图档就用不了啦,不信你弄一个新图档画几个不等径的圆试一下
回复

使用道具 举报

 楼主| 发表于 2023-9-9 19:25 | 显示全部楼层
xj6019 发表于 2023-9-9 15:35
对应改你这里块名的前缀就行

试下这个测试图,就不成功了,怎么回事呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2023-9-10 09:44 | 显示全部楼层
戏男 发表于 2023-9-9 19:25
试下这个测试图,就不成功了,怎么回事呢?

因为加了图层过滤,我本意是有图层过滤,不会选择到不该选择的圆,如果你觉得每次不会错误选择的话,可以把图层过滤删掉就行
这一句
(setq ss (ssget (list '(0 . "CIRCLE")(cons 8 "0"))))
改为下面,将8组码的图层删掉即可
(setq ss (ssget (list '(0 . "CIRCLE"))))
回复

使用道具 举报

 楼主| 发表于 2023-9-10 13:58 | 显示全部楼层
xj6019 发表于 2023-9-10 09:44
因为加了图层过滤,我本意是有图层过滤,不会选择到不该选择的圆,如果你觉得每次不会错误选择的话,可以 ...

改成这样了没效果,还是不行呀
(defun c:NM (/ i name names p r s1 ss)
  (setq i -1 names nil)
  (if(setq ss (ssget (list '(0 . "CIRCLE"))))
    (while(and(setq s1 (ssname ss (setq i (1+ i)))))               
                        (setq r(cdr(assoc 40 (entget s1)))
                                p(cdr(assoc 10 (entget s1)))
                        )
                        (if (tblsearch "BLOCK" (setq name(strcat "epin_ejp_" (rtos(* 2 r)2 1))))                                
                                (progn
                                        (entmakeX
                                                (list '(0 . "INSERT")
                                                        '(100 . "AcDbEntity")
                                                        '(100 . "AcDbBlockReference")
                                                        (cons 2 name)
                                                        (cons 10 p)
                                                        (cons 50 0) ;弧度
                                                        (cons 41 1)
                                                        (cons 42 1)
                                                        (cons 43 1)
                                                )
                                        )                                       
                                )
                                (setq names(cons name names))
                        )               
                )
  )
        (if names
                (progn
                        (princ "\n对应直径当前文件内,缺失的块名有:")        
                        (princ names)
                )
                (princ "\n所有圆均插入对应图块成功!")
        )        
        (princ )
)
回复

使用道具 举报

发表于 2023-9-10 16:00 | 显示全部楼层
戏男 发表于 2023-9-10 13:58
改成这样了没效果,还是不行呀
(defun c:NM (/ i name names p r s1 ss)
  (setq i -1 names nil)

复制你贴的代码一个字都没改,完美运行,不知道你咋弄的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 07:05 , Processed in 0.322141 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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