明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 戏男

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

[复制链接]
 楼主| 发表于 2023-9-10 16:26 | 显示全部楼层
xj6019 发表于 2023-9-10 16:00
复制你贴的代码一个字都没改,完美运行,不知道你咋弄的

我这边确实不能成功,要是能改为不用前缀名,用全名就好了,这样应该不会出错,也不要过滤图层

点评

你在我群里吗,在话私聊我,代码确实是没问题的  发表于 2023-9-10 16:52
回复

使用道具 举报

 楼主| 发表于 2023-9-10 17:21 | 显示全部楼层
戏男 发表于 2023-9-10 16:26
我这边确实不能成功,要是能改为不用前缀名,用全名就好了,这样应该不会出错,也不要过滤图层

唉,算了,就这样吧,只能不用这个了,

点评

录屏看看,你到底哪里不对,这个代码又没什么特殊的地方  发表于 2023-9-10 19:17
回复

使用道具 举报

 楼主| 发表于 2023-9-10 19:55 | 显示全部楼层
戏男 发表于 2023-9-10 17:21
唉,算了,就这样吧,只能不用这个了,

不会录屏呀,总之就是框选后,圆里面不会插入任何一个块,
回复

使用道具 举报

发表于 2023-9-10 20:27 | 显示全部楼层
你这么玩玩试试,自己将你所有的数据,参照例子,将那个表写全,体力活其他的自己慢慢干就行了,如果你写完后还有问题,那就真没招了,我都测试过,完全没问题的,不能用,就从自身找找原因吧


(defun c:NM (/ cklst i name names p r s1 ss)
        (setq cklst
                '(
                         (1    "epin_ejp_1") ;格式为:第一项为匹配的圆的半径   第二项为名块
                         (1.2  "epin_ejp_1.2");其他的自己填写,写完后再测试
                         (6    "epin_ejp_6")
                         (14   "epin_ejp_14")
                 )               
        )
  (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(setq name(cadr(assoc (* 2 r) cklst)))
                                (if (tblsearch "BLOCK" name)                                
                                        (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 (* 2 r) names))       
                        )       
                )
  )
        (if names
                (progn
                        (princ "\n这些直径的圆,没有对应的块名:")        
                        (princ names)
                )
                (princ "\n所有圆均插入对应图块成功!")
        )        
        (princ )
)
回复

使用道具 举报

 楼主| 发表于 2023-9-10 22:09 | 显示全部楼层
本帖最后由 戏男 于 2023-9-10 22:24 编辑

xj6019 发表于 2023-9-10 20:27
你这么玩玩试试,自己将你所有的数据,参照例子,将那个表写全,体力活其他的自己慢慢干就行了,如果你写完 ...


(defun c:NM (/ cklst i name names p r s1 ss)
        (setq cklst
                '(
                         (1    "epin_ejp_1") ;格式为:第一项为匹配的圆的半径   第二项为名块
                         (1.2  "epin_ejp_1.2");其他的自己填写,写完后再测试
                         (1.5  "epin_ejp_1.5")
                         (2  "epin_ejp_2")
                         (2.5  "epin_ejp_2.5")
                         (3  "epin_ejp_3")
                         (3.5  "epin_ejp_3.5")
                         (4  "epin_ejp_4")
                         (5  "epin_ejp_5")
                         (6  "epin_ejp_6")
                         (7  "epin_ejp_7")
                         (8  "epin_ejp_8")
                         (10  "epin_ejp_10")
                         (12  "epin_ejp_12")         
                         (14   "epin_ejp_14")
                         (defun c:NM (/ cklst i name names p r s1 ss)
        (setq cklst
                '(
                         (1    "epin_ejp_1") ;格式为:第一项为匹配的圆的半径   第二项为名块
                         (1.2  "epin_ejp_1.2");其他的自己填写,写完后再测试
                         (1.5  "epin_ejp_1.5")
                         (2  "epin_ejp_2")
                         (2.5  "epin_ejp_2.5")
                         (3  "epin_ejp_3")
                         (3.5  "epin_ejp_3.5")
                         (4  "epin_ejp_4")
                         (5  "epin_ejp_5")
                         (6  "epin_ejp_6")
                         (7  "epin_ejp_7")
                         (8  "epin_ejp_8")
                         (10  "epin_ejp_10")
                         (12  "epin_ejp_12")         
                         (14   "epin_ejp_14")
                 )               
        )
  (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(setq name(cadr(assoc (* 2 r) cklst)))
                                (if (tblsearch "BLOCK" name)                                
                                        (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 (* 2 r) names))      
                        )      
                )
  )
        (if names
                (progn
                        (princ "\n这些直径的圆,没有对应的块名:")        
                        (princ names)
                )
                (princ "\n所有圆均插入对应图块成功!")
        )        
        (princ )
)
                 )               
        )
  (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(setq name(cadr(assoc (* 2 r) cklst)))
                                (if (tblsearch "BLOCK" name)                                
                                        (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 (* 2 r) names))      
                        )      
                )
  )
        (if names
                (progn
                        (princ "\n这些直径的圆,没有对应的块名:")        
                        (princ names)
                )
                (princ "\n所有圆均插入对应图块成功!")
        )        
        (princ )
)
真的可以了,两个测试图都成功了,感分感谢!!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 04:29 , Processed in 0.223838 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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