乐筑天下

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

[编程交流] AcadBlockReference VBA Inserti

[复制链接]

4

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:37:11 | 显示全部楼层 |阅读模式
我要编辑多个块参照的插入点。我一直在尝试使用以下代码编辑它们:
 
  1. Private Sub FINDMARQBOOKINLAYOUTS()
  2. Dim OBJLAYOUT As AcadLayout
  3. Dim AOBJ As AcadEntity
  4. Dim MARK As AcadBlockReference
  5. Dim INSSTR As String
  6. Dim ATTDATE As String
  7. Dim LAYOUTNAME As String
  8. Dim INSPOINT(0 To 2) As Variant
  9. ThisDrawing.SetVariable "REGENMODE", 0
  10. INSPOINT(0) = -0.125
  11. INSPOINT(1) = -0.125
  12. INSPOINT(2) = 0
  13. For Each OBJLAYOUT In ThisDrawing.Layouts
  14.    If OBJLAYOUT.Name = "Model" Then
  15.    Else
  16.    ThisDrawing.ActiveLayout = OBJLAYOUT
  17.    LAYOUTNAME = OBJLAYOUT.Name
  18.        'COUNT1 = COUNT1 + 1 ' THIS IS JUST FOR VERIFICATION
  19.        'START BLOCK ITERATION
  20.        For Each AOBJ In ThisDrawing.ActiveLayout.Block
  21.            If TypeOf AOBJ Is AcadBlockReference Then
  22.                If AOBJ.Name = "MARQ-BOOK" Then
  23.                    Set MARK = AOBJ
  24.                    MARK.InsertionPoint(0) = INSPOINT(0)
  25.                    MARK.InsertionPoint(1) = INSPOINT(1)
  26.                    MARK.InsertionPoint(2) = INSPOINT(2)
  27.                    INSSTR = INSSTR & "(" & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(2) & ")"
  28.                End If
  29.            End If
  30.        Next AOBJ
  31.    End If
  32. Next OBJLAYOUT
  33. ThisDrawing.SetVariable "REGENMODE", 1
  34. MsgBox INSSTR
  35. Unload Me
  36. End Sub

 
这个宏迭代布局,找到一个特定的块引用,然后我试图更改其插入点属性,但我一直没能做到。我知道我错过了什么,但找不到什么。我很感谢你在这方面的帮助。
回复

使用道具 举报

4

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:30:45 | 显示全部楼层
请有人回答我的问题
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 12:40:09 | 显示全部楼层
为了测试的目的,我稍微修改了一下你的习惯。看看这是否更好。
 
  1. Sub FINDMARQBOOKINLAYOUTS()
  2. Dim OBJLAYOUT As AcadLayout
  3. Dim AOBJ As AcadEntity
  4. Dim MARK As AcadBlockReference
  5. Dim INSSTR As String
  6. Dim ATTDATE As String
  7. Dim LAYOUTNAME As String
  8. Dim INSPOINT(0 To 2) As Double 'Dim as double array
  9. ThisDrawing.SetVariable "REGENMODE", 0
  10. INSPOINT(0) = -0.125
  11. INSPOINT(1) = -0.125
  12. INSPOINT(2) = 0
  13. For Each OBJLAYOUT In ThisDrawing.Layouts
  14.    If OBJLAYOUT.Name <> "Model" Then
  15.      ThisDrawing.ActiveLayout = OBJLAYOUT
  16.      LAYOUTNAME = OBJLAYOUT.Name
  17.        'COUNT1 = COUNT1 + 1 ' THIS IS JUST FOR VERIFICATION
  18.        'START BLOCK ITERATION
  19.        For Each AOBJ In ThisDrawing.ActiveLayout.Block
  20.            If TypeOf AOBJ Is AcadBlockReference Then
  21.                If AOBJ.Name = "MARQ-BOOK" Then
  22.                    Set MARK = AOBJ
  23.                    MARK.InsertionPoint = INSPOINT 'reset insertion point
  24.                    INSSTR = INSSTR & "(" & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(2) & ")"
  25.                End If
  26.            End If
  27.        Next AOBJ
  28.    End If
  29. Next OBJLAYOUT
  30. ThisDrawing.SetVariable "REGENMODE", 1
  31. MsgBox INSSTR
  32. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:08 , Processed in 0.347060 second(s), 58 queries .

© 2020-2025 乐筑天下

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