乐筑天下

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

[编程交流] 更改块的属性标记

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 17:09:42 | 显示全部楼层
你试过我在上一篇文章(蓝色)上发布的另一个代码了吗?
 
FWIW:关于hosannabizarre的代码
  1.   (setq namelist (list
  2.      ; list old name and new name. Old name can contain wild cards.
  3.      (list "NAME" "DESIGN_ENG" [color=blue]"Dennis (bsl)" "Daniel")[/color]  ; list old name and new name.
  4. ) )

 
  1. (setq atnam (cdr (assoc 2 edd)) [color=blue]atEng (cdr (assoc 1 edd))[/color][color=black])[/color]

 
  1. (setq matchname (car x) [color=blue]engname (caddr x)[/color][color=black])[/color]

 
  1. [color=blue](and (eq atnam matchname)[/color][color=blue](eq atEng engname))[/color]

 
  1. (setq newed (subst (cons 1 [color=blue](cadddr x)[/color]) (assoc [color=blue]1[/color] edd) edd))

 
至于将目标标记名从“name”更改为DESIGN_ENG,“我仍然坚持重新定义块,因为我已经讨论了修改每个选定块的标记的缺陷
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:15:09 | 显示全部楼层
你好
 
一切都很好。图纸更新,外观良好。
 
干杯。节省了我很多时间
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 17:16:59 | 显示全部楼层
 
真为你高兴。但蓝色代码只会更改文本字符串。告诉你。。给我带多个“name”标签的块的名称。我将在例程中包含一个“修复”,以同时包含标记和文本字符串。
在该特定块上,是否总是需要更改第三个“NAME”标记?这使得它更容易修复。
 
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-5 17:21:31 | 显示全部楼层
提示:
要修复坏块,请使用命令
巴特曼
然后
自动同步
在命令行中
 
~'J'~
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 17:24:49 | 显示全部楼层
你说得对,奥列格·巴特曼很好,但如果OP想要运行一个脚本的话。然后
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-5 17:26:12 | 显示全部楼层
对不起,伙计
我告诉wrightjd的
我的错,
当做
 
奥列格
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:28:51 | 显示全部楼层
绘画图纸
大家好,
 
谢谢你的关注。是的,修复了它,但只能通过查找和替换脚本更改值,然后通过脚本批量更改所需的值。这不是最简单或最快的解决方案,但它奏效了。我仍然有兴趣看到更好的解决方案,但我还没有想出任何办法。我相信这个问题还会再次出现。
 
该块称为“A3TITLE”,就这个图形集的问题而言,它始终是需要更改的第三个“NAME”标记。我已经在一张空白的图纸中附上了这一块,希望能有所帮助。您可以看到还有其他重复的标记名。
 
基本上,现在我正在开发一个脚本/代码,可以更改重复的标记名。即使这意味着手动列出旧名称和新名称,或者简单地增加重复名称的数字。i、 e.最终标记名变为name1 name2等,并尝试一次完成一批图纸。
 
再次干杯
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 17:33:59 | 显示全部楼层
  1. (defun c:RepEng  (/ _Retag aBlocks Otag Eng NTag BLocks i bnm VerAtt  Found Blklst)
  2. (vl-load-com)
  3. (setq aBlocks (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))))      
  4. (defun _Retag  (doc bnm ol nw / TagColl)
  5.      (vlax-for
  6.             itm  (vla-item doc bnm)
  7.            (if (and (eq (vla-get-objectname itm)
  8.                         "AcDbAttributeDefinition")
  9.                     (eq (vla-get-tagstring itm) ol))
  10.                  (setq TagColl (append TagColl (list itm)))))
  11.      (cond
  12.            ((not TagColl) nil)
  13.            ((= (length TagColl) 3) (list 2 (last TagColl)))
  14.            ((= (length TagColl) 2) (list 1 (cadr TagColl)))
  15.            ((= (length TagColl) 1) (list 0 (car TagColl)))
  16.            ))      
  17. (setq Otag  "NAME"  Eng "DENNIS (BSL)" NTag "DESIGN_ENG" NEng "DANIEL" )
  18. (if  (setq Blklst nil Blocks (ssget "_X" '((0 . "INSERT")(66 . 1))))
  19. (repeat (setq i (sslength Blocks))
  20. (if (and (not (assoc (setq bnm (vla-get-effectivename
  21.                  (setq e (vlax-ename->vla-object
  22.                           (ssname Blocks (setq i (1- i)))))))   Blklst))
  23.           (setq VerAtt (_retag aBlocks bnm Otag Ntag)))
  24.           (setq Blklst (cons (list bnm VerAtt)  Blklst)))
  25.       (if (setq Found
  26.                      (vl-remove-if-not
  27.                                 '(lambda (x)
  28.                                       (eq (car x) Otag))
  29.                                 (mapcar (function
  30.                                (lambda (at)
  31.                                      (list (vla-get-tagstring at)
  32.                                                   (vla-get-textstring at)
  33.                                            at)
  34.                                      ))
  35.                          (vlax-invoke e
  36.                                'Getattributes)
  37.                          )))
  38.                  (progn
  39.                    (vla-put-textstring (last (setq found (nth (caadr  (assoc bnm Blklst)) found)))
  40.                          (if (eq (cadr found) Eng) NEng (cadr found)))
  41.    (vla-put-tagstring  (last Found) NTAG))
  42.             )
  43.       )
  44.     )
  45. (foreach itm Blklst
  46.       (vla-put-tagstring (cadr (cadr itm)) Ntag)
  47.       (command "_attsync" "_Name" (car itm)))
  48.   (princ)
  49.              )

 
HTH公司
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:36:54 | 显示全部楼层
真是太棒了!谢谢只希望我的LISP理解更好,这样我就可以按照你的代码。
 
预测这不是我最后一次看到这个问题,所以我试图修改代码,将其指向其他标记名,而不是第三个“名称”。在代码中,它只关注第三个标记名的哪里?它是如何关注这一点的?
 
如果我现在想更改名为“NUMBER”的第二个标记,我会更改-(setq Otag“NUMBER”..NTAG“Sheetno”),但如何将其指向第二个标记?试图遵循代码时迷路了
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 17:39:18 | 显示全部楼层
这条线
  1. ((= (length TagColl) 3) (list 2 (last TagColl)))

 
这意味着如果找到三个,请给我列表上的最后一项(第n个2’(“1”“2”“3”)->“3”,因此如果我需要更改三个中的第二个
((=(length TagColl)3)(列表1(cadr TagColl))。。。(第n个1’(“1”“2”“3”)->“2”。。。
 
只要确保第二个标记是块上的“页码”,根据提示,第二个标记是图纸索引号。第三个是表单号。我们可能需要重新编写代码以使其通用。
 
对于您的其他要求:
重复标记名@AUGI
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-24 15:53 , Processed in 1.941638 second(s), 71 queries .

© 2020-2025 乐筑天下

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