获取AutoCAD块句柄-不同的结果w/Attout VB.NET

获取AutoCAD块句柄-不同的结果w/Attout VB.NET,vb.net,autocad,autocad-plugin,Vb.net,Autocad,Autocad Plugin,我有一个属性选项卡分隔的文本文件,要应用于多个图形。为了使AutoCAD不会弹出并说“找不到一个或多个块,是否要以交互方式选择数据?”,我必须使用块的HANDLE特性。在给定的图形上,如果使用ATTOUT查看块的句柄,则会得到一个值,例如'8B3F。用阿丁做那个把手很管用。将此应用于具有不同控制柄的多个图形,我必须在每个图形中获得每个块的控制柄。下面是我的代码-将句柄写入excel文档 xlbook = xlapp.Workbooks.Open(attInText,, F

我有一个属性选项卡分隔的文本文件,要应用于多个图形。为了使AutoCAD不会弹出并说“找不到一个或多个块,是否要以交互方式选择数据?”,我必须使用块的HANDLE特性。在给定的图形上,如果使用ATTOUT查看块的句柄,则会得到一个值,例如'8B3F。用阿丁做那个把手很管用。将此应用于具有不同控制柄的多个图形,我必须在每个图形中获得每个块的控制柄。下面是我的代码-将句柄写入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'的内容。为什么你认为阿图特给了我一个不同的处理方式,而不是通过绘图块循环?我会注意到我的区块是在纸质空间,如果这有什么区别的话。如果这个问题无法回答,我对任何其他解决方案都感兴趣,以获得我所在街区的控制权

看起来您混淆了块表(块)中包含的块定义(块)和插入到模型空间或图纸空间中的块引用(块引用)。 下面是一个未经测试的代码段,用于在模型空间中搜索块参照(您可以用PaperSpace替换ModelSpace以搜索活动的图纸空间)

        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

看起来您混淆了块表(块)中包含的块定义(块)和插入到模型空间或图纸空间中的块参照(块参照)。 下面是一个未经测试的代码段,用于在模型空间中搜索块参照(您可以用PaperSpace替换ModelSpace以搜索活动的图纸空间)

        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

下面是我所做的工作。我想要的块引用在文件空间中。请注意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

下面是我所做的工作。我想要的块引用在文件空间中。请注意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

是否尝试循环浏览块定义或块参照?
AutoCAD。AcadBlock
是定义。每个块将有一个定义,每个块可能有多个块参照。是否尝试循环浏览块定义或块参照?
AutoCAD。AcadBlock
是定义。T下面是每个块的一个定义,每个块可能有多个块引用。感谢您的回复!这是因为我对块和块引用缺乏理解。感谢您的回复!这是因为我对块和块引用缺乏理解。