乐筑天下

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

[编程交流] 属性标记-值-

[复制链接]

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:46:47 | 显示全部楼层 |阅读模式
我想知道是否有lisp例程或脚本文件可以
将文本从一个块属性标记“值”列复制到
同一块。我发现有些很接近,但不太管用。
问题是我需要填写的值列是空的,所以我不能
只要做一个匹配文本。我正在运行autocad 2012。
我正在发送一个Cad文件和lisp例程的示例。
谢谢
Cad 2000_Exmpl。图纸
matchatts。LSP
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:33:18 | 显示全部楼层
尝试以下未经测试的代码-调整属性标记以适应:
  1. (defun c:test ( / des ent lst map src )
  2.    (setq map '(("[color="red"]TAG1[/color]" . "[color="red"]TAG2[/color]")))
  3.    (while
  4.        (progn (setvar 'errno 0) (setq ent (car (entsel "\nSelect block: ")))
  5.            (cond
  6.                (   (= 7 (getvar 'errno))
  7.                    (princ "\nMissed, try again.")
  8.                )
  9.                (   (null ent) nil)
  10.                (   (/= "INSERT" (cdr (assoc 0 (entget ent))))
  11.                    (princ "\nThe selected object is not a block.")
  12.                )
  13.                (   (null
  14.                        (setq lst
  15.                            (mapcar
  16.                               '(lambda ( x ) (cons (strcase (vla-get-tagstring x)) x))
  17.                                (vlax-invoke  (vlax-ename->vla-object ent) 'getattributes)
  18.                            )
  19.                        )
  20.                    )
  21.                    (princ "\nThe selected block has no attributes.")
  22.                )
  23.                (   (foreach itm map
  24.                        (if (and (setq src (cdr (assoc (car itm) lst)))
  25.                                 (setq des (cdr (assoc (cdr itm) lst)))
  26.                                 (vlax-write-enabled-p des)
  27.                            )
  28.                            (vla-put-textstring des (vla-get-textstring src))
  29.                        )
  30.                    )
  31.                )
  32.            )
  33.        )
  34.    )
  35.    (princ)
  36. )
  37. (vl-load-com) (princ)

我假设您希望在单个块内的属性标记之间复制属性值。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:53:43 | 显示全部楼层
Lee和student21可能有一种不同的方法,你可以使用属性创建顺序,这意味着你不需要知道标记名,你可以说获取“属性2”并将其复制到“属性4”。此方法适用于大多数块。例如更新修订块,查找下一个空白属性行并填充。
 
VBA做得很好,attrib(1)等
 
粗野的
  1. ; Change attribute value by created position
  2. (vl-load-com)
  3. (setq y 1)
  4. (setq ss1 (car (entsel)))
  5. (setq bname (vla-get-name(vlax-ename->vla-object SS1)))
  6. (setq x (getint "\nEnter line no to pick")) ; change this line in block
  7. (SETQ newstrblank ".")
  8. (foreach att (vlax-invoke (vlax-ename->vla-object SS1) 'getattributes)
  9.    (if (= y x)
  10.    (progn
  11.    (setq newstr (vla-get-textstring att ))
  12.    (vla-put-textstring att newstrblank)
  13.    )
  14.    )
  15.    (setq y (+ Y 1))
  16. )
  17. (setq y 1)
  18. (setq x (getint "\nEnter line no to move to"))
  19. (foreach att (vlax-invoke (vlax-ename->vla-object SS1) 'getattributes)
  20.    (if (= y x)
  21.    (vla-put-textstring att newstr)
  22.    )
  23.    (setq y (+ Y 1))
  24. )
  25. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 23:28 , Processed in 0.487847 second(s), 58 queries .

© 2020-2025 乐筑天下

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