乐筑天下

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

[编程交流] 在Autocad中选择“块”,然后重新选择

[复制链接]

6

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:26:52 | 显示全部楼层 |阅读模式
我的问题是如何在modelspace中选择Acadblock并在him中读取en属性。我有一个带属性的meny块,一个属性是表示Z坐标的文本(Z坐标=0,00)。我习惯用val(属性文本)更改Acadblock的Z坐标。帮助我!
 
布莱恩,谢谢!我想选择块的全局集。
回复

使用道具 举报

6

主题

48

帖子

44

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:44:00 | 显示全部楼层
 
您想要选择单个块还是全局块集?
 
布瑞恩
回复

使用道具 举报

6

主题

48

帖子

44

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:45:34 | 显示全部楼层
你可以试试这个。它用于选择单个块,然后使用“Z”标记更改属性值。
 
我希望这对你有所帮助。
 
布瑞恩
 
  1. Private Sub Change_it()
  2.    Dim obj As AcadBlockReference
  3.    Dim inspt As Variant
  4.    ThisDrawing.Utility.GetEntity obj, inspt, "Select object:"
  5.    ' Checks if you selected a block.
  6.    If obj.ObjectName = "AcDbBlockReference" Then
  7.        ' Check for attributes.
  8.        If obj.HasAttributes Then
  9.            Dim AttList As Variant
  10.            ' Build a list of attributes for the current block.
  11.            AttList = obj.GetAttributes
  12.            ' Cycle throught the list of attributes.
  13.            For I = LBound(AttList) To UBound(AttList)
  14.                ' Check for the correct attribute tag.
  15.                If AttList(I).TagString = "Z" Then
  16.                    Dim InputString As String
  17.                    ' Get the new value for the attribute.
  18.                    InputString = ThisDrawing.Utility.GetString(True, "New value for z: ")
  19.                    ' Set the new value for the attribute.
  20.                    AttList(I).TextString = InputString
  21.                End If
  22.            Next
  23.        End If
  24.    Else
  25.        MsgBox "You did not select a block."
  26.    End If
  27. End Sub
回复

使用道具 举报

6

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:58:07 | 显示全部楼层
 
 
 
 
布莱恩,谢谢!我不需要选择块的全局集。
 
佐兰
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:02:20 | 显示全部楼层
这里是另一个版本的相同的事情选择一个块,然后更新属性
 
  1. Public Sub ModifyLabelSTNcoords()
  2. ' adds x and y co ords of picked point to labelstn block
  3. Dim objENT As AcadEntity
  4. Dim pt1 As Variant
  5. Dim attribs As Variant
  6. On Error Resume Next
  7. ThisDrawing.Utility.GetEntity objENT, basepnt, "pick Label stn block : "
  8.          attribs = objENT.GetAttributes
  9. pt1 = ThisDrawing.Utility.GetPoint(, " pick stn point")
  10. txtx1 = "E " + CStr(FormatNumber(pt1(0), 3))
  11. TXTY1 = "N " + CStr(FormatNumber(pt1(1), 3))
  12. TXTz1 = "RL " + CStr(FormatNumber(pt1(2), 3))
  13. attribs(2).TextString = txtx1
  14. attribs(2).Update
  15. attribs(3).TextString = TXTY1
  16. attribs(3).Update
  17. attribs(4).TextString = TXTz1
  18. attribs(4).Update
  19. End Sub
回复

使用道具 举报

Itc

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 23:13:17 | 显示全部楼层
如何使用for循环确定块名“Acadblock”,然后更改z属性?
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 23:25:27 | 显示全部楼层
 
 
您可以发布代码更改以选择一组块吗?
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 23:33:19 | 显示全部楼层
若你们对pick满意,那个么只需在上面代码的开头添加循环,然后重复。有些人喜欢J=50。。。。接下来看看上面的代码。一种更智能的方法是检查拾取的对象nil=exit,用J=50替换Else-Msgbox
 
可以选择多个块,这取决于您打算如何一次选择“entities”“W”“C”1等。多个块的问题是,它们都有相同的Z吗?一次选择一整批,然后以某种方式跳转到每一批,这样就可以输入正确的Z,这将很复杂。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:08 , Processed in 0.794188 second(s), 68 queries .

© 2020-2025 乐筑天下

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