乐筑天下

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

[编程交流] 在t之间复制属性值

[复制链接]

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 13:19:49 | 显示全部楼层 |阅读模式
您好,我发现有很多lisp用于将属性从一个bloch复制到另一个bloch,但通常该操作应用于两个相等的块。
我有两组不同的块,结构相同:
-从第一系列块中,我需要带有标记SIGLA的属性(无论块的名称如何)
-从第二组块中,我需要具有标记名的属性(无论块的名称如何)
下一个描述适用于两个方向。
我想选择具有SIGLA标记属性的任何块,获取其值并将其复制到具有名称标记属性的任何块中,即使没有编译。
我只想点击方块。
你见过/开发过这样的东西吗?
提前感谢
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 13:32:40 | 显示全部楼层
如果属性可见,则该脚本会满足您的要求。例如,将每个名称属性设置为“”,这样你就可以选择它作为目标。(这对你来说可能不现实,不确定)
 
 
 
但我会看看是否能符合你的特定目的。
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 13:35:53 | 显示全部楼层
这应该行得通
命令TTCB,但请随意重命名此命令
 
  1. (vl-load-com)
  2. ;; To copy/paste from fixed attributes, source tag:  "SIGLA",  destination tag:  "NAME"
  3. ;; TTC Block
  4. (defun c:ttcb ( / sText)
  5.   (defun TCC_copyAttribute (source / blk )
  6.     (if (setq blk (entsel "\nSelect source block: "))
  7.           (setq sText (LM:vl-getattributevalue (vlax-ename->vla-object (car blk)) source))
  8.         )
  9.   )
  10.   (defun TCC_pasteAttribute (dest / blk)
  11.     (if (setq blk (entsel "\nSelect destination block: "))
  12.           (LM:vl-setattributevalues (vlax-ename->vla-object (car blk)) (list (cons dest sText))  )
  13.         )
  14.   )
  15.   
  16.   (while (TCC_copyAttribute  "SIGLA")
  17.     (TCC_pasteAttribute  "NAME")
  18.   )
  19.   
  20. )
  21. ;; Get Attribute Value  -  Lee Mac
  22. ;; Returns the value held by the specified tag within the supplied block, if present.
  23. ;; blk - [vla] VLA Block Reference Object
  24. ;; tag - [str] Attribute TagString
  25. ;; Returns: [str] Attribute value, else nil if tag is not found.
  26. (defun LM:vl-getattributevalue ( blk tag )
  27.     (setq tag (strcase tag))
  28.     (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes))
  29. )
  30. ;; Set Attribute Values  -  Lee Mac
  31. ;; Sets attributes with tags found in the association list to their associated values.
  32. ;; blk - [vla] VLA Block Reference Object
  33. ;; lst - [lst] Association list of ((<tag> . <value>) ... )
  34. ;; Returns: nil
  35. (defun LM:vl-setattributevalues ( blk lst / itm )
  36.     (foreach att (vlax-invoke blk 'getattributes)
  37.         (if (setq itm (assoc (vla-get-tagstring att) lst))
  38.             (vla-put-textstring att (cdr itm))
  39.         )
  40.     )
  41. )
  42.  
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 13:44:58 | 显示全部楼层
这是一个开始,允许拾取直接返回标记名和块名的属性
 
  1. (setq ans  (entget (car (nentsel "pick block 1"))))
  2. (setq tag1 (cdr (assoc 2 ans)))
  3. (setq obj (vlax-ename->vla-object (cdr(assoc 330 ans))))
  4. (setq blk1 (vla-get-EffectiveName obj))
  5. (setq ans  (entget (car (nentsel "pick block 2"))))
  6. (setq tag2 (assoc ans))
  7. (setq obj (vlax-ename->vla-object (cdr(assoc 330 ans))))
  8. (setq blk2 (vla-get-EffectiveName obj))
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 13:47:05 | 显示全部楼层
您好,Emmanuel Delay,不幸的是,lisp ttc在这种情况下不合适,因为准确地说,目标属性可能不可见或未编译(结果是,如果不是块,我就没有什么可点击的)
 
对于Bigal:在代码中没有指定属性的标记(SIGLA和NAME),为什么?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 13:53:22 | 显示全部楼层
这就是代码的思想,使用nentsel返回属性标记名,我需要更改为“Pick block1 attribute”“Pick block 2 attribute”
 
那里
 
添加
  1. Code updated in prior post mistake fixed also
  1. (setq ans  (entget (car (nentsel "pick block 1 attribute"))))
  2. (setq tag1 (cdr (assoc 2 ans)))
  3. (setq obj (vlax-ename->vla-object (cdr(assoc 330 ans))))
  4. (setq blk1 (vla-get-EffectiveName obj))
  5. (setq ans  (entget (car (nentsel "pick block 2 attribute"))))
  6. (setq tag2 (cdr (assoc 2 ans)))
  7. (setq obj (vlax-ename->vla-object (cdr(assoc 330 ans))))
  8. (setq blk2 (vla-get-EffectiveName obj))
  9. (alert (strcat "You picked block1 \ntagname = " tag1 "\nName =" blk1 "\nYou picked block 2  \ntagname = " tag2 "\nName =" blk2 ))
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 14:00:52 | 显示全部楼层
 
嗯,是的,这就是我为什么写第二个回复。 
使用TTCB点击块,块的任何部分
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 14:10:04 | 显示全部楼层
没有硬编码块名或标记名,下一次必须这样做并使用不同的块名时,必须编辑实际的lisp文件。编码提供了一个通用答案,而不是仅提供一次。
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 14:17:25 | 显示全部楼层
itacad
准确地说,没有错误-附上一个带有块的文件样本。
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 14:25:26 | 显示全部楼层
我在你庞大的讨论档案中找到了解决方案
有可能使它双向工作吗?
非常感谢你
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:47 , Processed in 1.503222 second(s), 83 queries .

© 2020-2025 乐筑天下

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