乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 63|回复: 5

[编程交流] 重命名/恢复所有动态b

[复制链接]

5

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:16:38 | 显示全部楼层 |阅读模式
我正在寻找一种方法来替换所有已更改的动力学块(并命名为。例如*U*)。
 
我有一个简单的代码,可以很好地处理各个块。
 
  1. (defun c:blockrepair (/ #blk)
  2. (vl-load-com)
  3. (setq #blk (entsel))
  4. (blockfix)
  5. );;
  6. (defun blockfix (/ obj #blk)
  7. (vl-load-com)
  8. (setq obj (vlax-ename->vla-object (car #blk)))
  9. (vlax-put obj 'Name (vlax-get obj 'Effectivename))
  10. )

 
但如果我能让它作为一个“SSGET”来运行,以便能够将多个或所有块恢复为有效名称,那我就完了
 
有人可以帮助修复或改进下面的代码吗。它留给我
; 错误:错误的参数类型:lentyp nil。
 
  1. (defun c:test (/ acdoc ss i sset nme #blk)
  2. (vl-load-com)
  3.    (setvar "cmdecho" 1)
  4. (if
  5.    (setq ss (ssget))
  6.     (repeat
  7.       (setq i (sslength ss))
  8.        (setq sset (ssname ss (setq i (1- i))))
  9.        (setq #blk (cdr (assoc 0 (entget sset))))
  10.       (blockfix)
  11.     (princ)
  12.      )
  13.    )
  14. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:34:51 | 显示全部楼层
第一个观察结果是DXF代码0存储实体的类型,而不是其名称;您应该使用-1:
  1. (setq #blk (cdr (assoc [color=red]-1[/color] (entget sset))))

也需要调整blockfix函数的定义;请记住,ENTSEL返回一个列表:
  1. (setq obj (vlax-ename->vla-object [color=red][s](car[/s][/color] #blk[color=red][s])[/s][/color]))
回复

使用道具 举报

5

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:44:17 | 显示全部楼层
非常感谢!!
 
这似乎现在起作用了。
 
  1. (defun c:test (/ acdoc ss i sset nme #blk obj)
  2. (vl-load-com)
  3.    (setvar "cmdecho" 1)
  4. (if
  5.    (setq ss (ssget))
  6.     (repeat
  7.       (setq i (sslength ss))
  8.        (setq sset (ssname ss (setq i (1- i))))
  9.        (setq #blk (cdr (assoc -1 (entget sset))))
  10.       (setq obj (vlax-ename->vla-object #blk))
  11. (vlax-put obj 'Name (vlax-get obj 'Effectivename))
  12.     (princ)
  13.      )
  14.    )
  15. )
回复

使用道具 举报

5

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:56:56 | 显示全部楼层
抱歉打扰了。但是你知道如何修改这个,而不是ssget吗。或:
  1. (setq ss (ssget "X" (list (cons 0 "INSERT"))))

我已经准备好了。。
它将创建一个由块有效名称组成的选择集。即该区块称为“TAG_区”。它将选择所有tag_区域块,即使它们已被修改,因此具有名称*U*等。
但不会选择已编辑的不同动态块?
回复

使用道具 举报

5

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:06:02 | 显示全部楼层
这就是我要做的。。我唯一能看到的是如何利用我目前(缺乏)的知识。。就是在里面放一个IF,告诉它继续重命名。(如果“blkname”=标记区域。但我的格式可能有点不正确。
 
  1. (defun c:blockfixall2 (/ ss i sset  #blk obj blkname)
  2. (vl-load-com)
  3.    (setvar "cmdecho" 1)
  4. (if
  5.    (setq ss (ssget "X" (list (cons 0 "INSERT"))))
  6.     (repeat
  7.       (setq i (sslength ss))
  8.        (setq sset (ssname ss (setq i (1- i))))
  9.        (setq #blk (cdr (assoc -1 (entget sset))))
  10. (setq obj (vlax-ename->vla-object #blk))
  11. (setq blkame (strcase (vlax-get obj 'Effectivename)))
  12. (IF
  13.    (= blkname "TAG_AREA")
  14.    (PROGN
  15.     (setq obj (vlax-ename->vla-object #blk))
  16. (vlax-put obj 'Name (vlax-get obj 'Effectivename))))
  17.    
  18.     (princ)
  19.      )
  20.    )
  21. )
回复

使用道具 举报

5

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:16:46 | 显示全部楼层
知道了。最终使用了李·麦克的注释性参考工具,并进行了一些微调。。
 
业务端位于“blockfixall”函数的末尾。在需要将动态块重置为实际名称的其他例程之前加载。
 
 
 
 
  1. (defun LM:getanonymousreferences ( blk / ano def lst rec ref )
  2.    (setq blk (strcase blk))
  3.    (while (setq def (tblnext "block" (null def)))
  4.        (if
  5.            (and (= 1 (logand 1 (cdr (assoc 70 def))))
  6.                (setq rec
  7.                    (entget
  8.                        (cdr
  9.                            (assoc 330
  10.                                (entget
  11.                                    (tblobjname "block"
  12.                                        (setq ano (cdr (assoc 2 def)))
  13.                                    )
  14.                                )
  15.                            )
  16.                        )
  17.                    )
  18.                )
  19.            )
  20.            (while
  21.                (and
  22.                    (not (member ano lst))
  23.                    (setq ref (assoc 331 rec))
  24.                )
  25.                (if
  26.                    (and
  27.                        (entget (cdr ref))
  28.                        (= blk (strcase (LM:al-effectivename (cdr ref))))
  29.                    )
  30.                    (setq lst (cons ano lst))
  31.                )
  32.                (setq rec (cdr (member (assoc 331 rec) rec)))
  33.            )
  34.        )
  35.    )
  36.    (reverse lst)
  37. )
  38.                        
  39. ;; Effective Block Name  -  Lee Mac
  40. ;; ent - [ent] Block Reference entity
  41. (defun LM:al-effectivename ( ent / blk rep )
  42.    (if (wcmatch (setq blk (cdr (assoc 2 (entget ent)))) "`**")
  43.        (if
  44.            (and
  45.                (setq rep
  46.                    (cdadr
  47.                        (assoc -3
  48.                            (entget
  49.                                (cdr
  50.                                    (assoc 330
  51.                                        (entget
  52.                                            (tblobjname "block" blk)
  53.                                        )
  54.                                    )
  55.                                )
  56.                               '("AcDbBlockRepBTag")
  57.                            )
  58.                        )
  59.                    )
  60.                )
  61.                (setq rep (handent (cdr (assoc 1005 rep))))
  62.            )
  63.            (setq blk (cdr (assoc 2 (entget rep))))
  64.        )
  65.    )
  66.    blk
  67. )
  68. (defun blockfixall (/ acdoc ss i sset nme #blk obj BLK)
  69. (vl-load-com)
  70.    (setvar "cmdecho" 1)
  71.    (setq blk "TAG_AREA");; this is the part where the specific block name is entered
  72.    
  73. (if
  74.    (setq ss (ssget "_X"
  75.        (list '(0 . "INSERT")
  76.            (cons 2
  77.                (apply 'strcat
  78.                    (cons blk
  79.                        (mapcar '(lambda ( x ) (strcat ",`" x))
  80.                            (LM:getanonymousreferences blk)
  81.                        )
  82.                    )
  83.                )
  84.            )
  85.        )
  86.    ))
  87.     (repeat
  88.       (setq i (sslength ss))
  89.        (setq sset (ssname ss (setq i (1- i))))
  90.        (setq #blk (cdr (assoc -1 (entget sset))))
  91.       (setq obj (vlax-ename->vla-object #blk))
  92. (vlax-put obj 'Name (vlax-get obj 'Effectivename))
  93.     (princ)
  94.      )
  95.    )
  96. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:03 , Processed in 0.588823 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表