乐筑天下

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

[编程交流] 在之间移动属性值

[复制链接]

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:23:37 | 显示全部楼层 |阅读模式
我可能可以在VBA中很快完成这项工作,但今天需要绘制出来,所以我可能必须手动完成-除非有人能帮我快速完成一个脏兮兮的LISP。
 
基本上我有成对的块,一些有正确的信息,一些需要更改。我需要读取正确的信息,在此基础上创建一个新字符串,然后用新字符串填充另一个块,重写已有的内容。
 
所以
选择第一个块(名为“参考”)
读取“Ref”属性值(唯一属性)
选择第二个块(名为“CableNumber”)
用“LAN A”填充“Cable”属性
 
这些必须单独选择,而不是作为选择集。
 
如果有人愿意试一试,非常感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:31:14 | 显示全部楼层
如果我能很好地理解您的意思,这将从第一个选定的属性块中获得文本刺,并插入到第二个选定的属性块中。
 
但是:您应该直接选择字符串本身(点击字符串)。
 
祝你好运。
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:34:13 | 显示全部楼层
谢谢塔瓦。我将有一个看了一会儿,但在此期间,我将使用下面的VBA一个我刚刚放在一起。
 
我不确定我会让它工作,所以我没有回来报告。我没有错误捕捉,所以它离理想状态很远。
 
我希望我没有浪费你太多时间。
 
  1. Option Explicit
  2. Public Sub PickSourceItem()
  3. Dim myAttributes As Variant
  4. Dim myObject As AcadObject
  5. Dim P1 As Variant
  6. Dim myName As String
  7. Dim myText As AcadText
  8. Dim layerColl As AcadLayers
  9. Dim CloudLayer As AcadLayer
  10. On Error Resume Next
  11. ThisDrawing.Utility.GetEntity myObject, P1, "Select Block"
  12. If Err <> 0 Then
  13.    Err.Clear
  14.    MsgBox "No Object Selected"
  15.    Exit Sub
  16. End If
  17. If myObject.EntityName = "AcDbBlockReference" Then
  18.    myAttributes = myObject.GetAttributes
  19.    myName = myAttributes(0).TextString & " LAN A"
  20.    
  21. ThisDrawing.Utility.GetEntity myObject, P1, "Select Block"
  22. If myObject.EntityName = "AcDbBlockReference" Then
  23.    myAttributes = myObject.GetAttributes
  24.    myAttributes(0).TextString = myName
  25.    End If
  26.    
  27. Else
  28.    MsgBox "Block not selected"
  29. End If
  30. End Sub
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:36:45 | 显示全部楼层
不客气,布罗达。
 
我希望它能帮助你的工作,我希望有一天我会知道如何处理VBA例程。
 
当做
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:40:17 | 显示全部楼层
好吧,两者都不完美。您的字符串不会创建第二个带有附加文本的字符串。如果我在选择过程中错过了第二个块,我会将修改后的字符串写回第一个块。
 
不过,我在绘图上有一个更大的问题。电报号码已经从3位数改为16个字符,我没有足够的空间,但至少我现在可以很快证明这一点。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:44:14 | 显示全部楼层
没问题。
 
只需告诉我第二个选定属性块中的目标文本字符串将是什么。
 
我想这可能是必要的。
 
  1. (defun c:Test (/ ss1 ss2 e1 e2)
  2. (if
  3.    (and
  4.      (setq ss1 (nentsel "\n Select the first Attribute Block:"))
  5.      (eq (cdr (assoc 0 (setq e1 (entget (car ss1))))) "ATTRIB")
  6.      (setq ss2 (nentsel "\n Select the first Attribute Block:"))
  7.      (eq (cdr (assoc 0 (setq e2 (entget (car ss2))))) "ATTRIB")
  8.    )
  9.     (vla-put-Textstring
  10.       (vlax-ename->vla-object (car ss2))
  11.       (strcat "Cable" " "(vla-get-Textstring (vlax-ename->vla-object (car ss1))) " " "LAN A")
  12.     )
  13. )
  14. (princ)
  15. )
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:50:17 | 显示全部楼层
几乎
  1.        (strcat (vla-get-Textstring (vlax-ename->vla-object (car ss1))) " LAN A")
即可。
 
但是,
 
您是否能够修改它,以便我为第一个部分选择一段DTEXT而不是块,并将其放入第二个块的属性中(只选择一个块)。
 
我刚刚意识到我在这幅画上混合了方块和文字。
 
如果你愿意,非常感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:53:21 | 显示全部楼层
当然我会为你做的。
 
首先选择文本,然后在要替换的附件块中选择附件文本字符串。
 
撤消选项被添加到例程中。
 
  1. (defun c:Test (/ acdoc ss1 ss2 e1 e2)(vl-load-com)
  2. (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  3. (vla-StartUndoMark acdoc)
  4. (if
  5.    (and
  6.      (setq ss1 (nentsel "\n Select Text to get its string:"))
  7.      (eq (cdr (assoc 0 (setq e1 (entget (car ss1))))) "TEXT")
  8.      (setq ss2 (nentsel "\n Select the first Attribute Block:"))
  9.      (eq (cdr (assoc 0 (setq e2 (entget (car ss2))))) "ATTRIB")
  10.    )
  11.     (vla-put-Textstring
  12.       (vlax-ename->vla-object (car ss2))
  13.       (strcat
  14.         (vla-get-Textstring (vlax-ename->vla-object (car ss1)))
  15.       )
  16.     )
  17. )
  18. (vla-EndUndoMark acdoc)
  19. (princ)
  20. )
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 09:58:20 | 显示全部楼层
太棒了-非常感谢。结合使用这两种程序,我今天有机会画出来。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:01:56 | 显示全部楼层
不客气,布罗达。
 
我很高兴这套程序能满足你的需要。
 
祝你好运。
 
塔瓦特
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 02:55 , Processed in 0.437499 second(s), 72 queries .

© 2020-2025 乐筑天下

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