【问题标题】:Get AutoCAD Block Handle - Differing Results w/ Attout VB.NET获取 AutoCAD 块句柄 - 使用 Attout VB.NET 获得不同的结果
【发布时间】:2017-11-21 22:27:54
【问题描述】:

我有一个属性制表符分隔的文本文件,我想将其应用于多张图纸。为了不让 AutoCAD 弹出并说“找不到一个或多个块,您要以交互方式选择数据吗?” ,我必须使用块的 HANDLE 属性。在给定的绘图上,如果我使用 ATTOUT 查看块的句柄,我会得到一个值,例如 '8B3F。使用带有该句柄的 ATTIN 有效。将此应用于具有不同句柄的多个图形,如果每个图形,我必须获取每个块的句柄。这是我的代码 - 将句柄写入 excel 文档。

            xlbook = xlapp.Workbooks.Open(attInText,, False)
            xlsheet = xlbook.Worksheets(dwgName)

            Dim Handle As String = ""
            'get the handle to the CHS11x17TB title block
            For Each blk As AutoCAD.AcadBlock In cadDOC.Blocks
                If blk.Name.ToUpper = "CHS11X17TB" Then
                    Handle = blk.Handle
                    xlsheet.Cells(2, "A").value = Handle
                    Exit For
                End If
            Next

现在,问题是句柄与使用 ATTOUT 生成的句柄不同 - 我将使用代码得到类似 '75B0 的东西。为什么你认为 ATTOUT 给了我一个不同于循环遍历绘图块的句柄?我会注意到我的块在纸空间中,如果这有什么不同的话。如果无法回答这个问题,我对任何替代解决方案感兴趣,可以让我的块得到处理。

【问题讨论】:

  • 您是要遍历块定义还是块引用? AutoCAD.AcadBlock 是定义。每个块将有一个定义,并且每个块可能有多个 BlockReference。

标签: vb.net autocad autocad-plugin


【解决方案1】:

看起来您混淆了包含在块表 (Blocks) 中的块定义 (Block) 和插入到 ModelSpace 或 PaperSpace 中的块参考 (BlockReference)。 这是一个未经测试的 sn-p,它用于模型空间中的块引用(您可以将 ModelSpace 替换为 PaperSpace 以搜索活动图纸空间。

        xlbook = xlapp.Workbooks.Open(attInText,, False)
        xlsheet = xlbook.Worksheets(dwgName)

        Dim Handle As String = ""
        'get the handle to the CHS11x17TB title block
        For Each obj As AutoCAD.AcadObject In cadDOC.ModelSpace
            If obj.ObjectName = "AcDbBlockReference" Then
                If obj.EffectiveName.ToUpper = "CHS11X17TB" Then
                    Handle = obj.Handle
                    xlsheet.Cells(2, "A").value = Handle
                    Exit For
                End If
            End If
        Next

【讨论】:

  • 感谢您的回复!我对块和块引用缺乏了解。
【解决方案2】:

这是我为使其工作所做的工作。我想要的块参考在图纸空间中。请注意,EntityType 7 是 AcadBlockReference。

      Dim Handle As String = ""
            Dim count As Integer
            count = cadDOC.PaperSpace.Count

            Dim newObjs(count) As AutoCAD.AcadEntity
            Dim index As Integer

            For index = 0 To count - 1
                newObjs(index) = cadDOC.PaperSpace.Item(index)
            Next

            For i = 0 To count - 1
                Try
                    If newObjs(i).EntityType = 7 Then
                        Dim blk As AutoCAD.AcadBlockReference = newObjs(i)
                        If blk.Name.ToUpper = "CHS11X17TB" Then
                            Handle = "'" & blk.Handle
                        End If

                    End If
                Catch ex As Exception

                End Try


            Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2020-08-18
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多