Aveva Marine VBNET 编程系列====>读取drawing explorer的第2层级 Sub views

发布时间 2023-10-02 08:21:43作者: 南胜NanSheng

接上期的内容,此次读取view的下一层几subview

主要用到下面的方法获取view的第一个子级

一个封装的函数

''' <summary>
    '''  获取当前视图的全部的子视图的句柄
    ''' </summary>
    ''' <param name="draftApp">MarDrafting对象</param>
    ''' <param name="viewHandle">视图的句柄</param>
    ''' <returns>子视图句柄的list集合</returns>
    Public Shared Function ViewSubViews(draftApp As MarDrafting, viewHandle As MarElementHandle) As List(Of MarElementHandle)
        If Not draftApp.ElementIsView(viewHandle) Then
            Return Nothing
        End If
        Dim rtns As New List(Of MarElementHandle)
        Try
            Dim subvh As MarElementHandle
            subvh = draftApp.ElementChildFirstGet(viewHandle)
            rtns.Add(subvh)
            '读取第2个view
            Dim nextsubVh As MarElementHandle
            Try
                nextsubVh = draftApp.ElementSiblingNextGet(subvh)
                rtns.Add(nextsubVh)
            Catch ex As Exception
            End Try
            Dim errFlag As Boolean = True
            Do
                Try
                    nextsubVh = draftApp.ElementSiblingNextGet(nextsubVh)
                    rtns.Add(nextsubVh)
                Catch ex As Exception
                    errFlag = False
                End Try
            Loop While errFlag
        Catch ex As Exception
            MsgBox(ex.StackTrace)
        End Try
        Return rtns
    End Function

主函数,也就文章刚开始看到的结果

  <MyAmFunctionAtt(NameOf(读取DrawingExplorer), NameOf(读取子视图名称))>
    Public Sub 读取子视图名称(wm As WindowManager)
        Try
            Dim amEnv As New AmEnvironment()
            If Not amEnv.DraftApp.DwgCurrent() Then MsgBox("当前未开启任何图纸,结束命令!", MsgBoxStyle.Critical) : Exit Sub
            Dim views = DrawingExpolrerEx.DrawingViews(amEnv.DraftApp)
            If views Is Nothing Then MsgBox("图纸中无任何内容!", MsgBoxStyle.Critical) : Exit Sub
            Dim i As Integer = 1
            For Each item As MarElementHandle In views
                amEnv.MarUI.MessageNoConfirm($"<------第 {i} 个view的名称是:{amEnv.DraftApp.SubpictureNameGet(item)},开始读取其子视图------> ")
                Dim subViews = DrawingExpolrerEx.ViewSubViews(amEnv.DraftApp, item)
                If subViews IsNot Nothing Then
                    Dim j As Integer = 1
                    For Each sv As MarElementHandle In subViews
                        amEnv.MarUI.MessageNoConfirm($"第 {j} 个subview的名称是:{amEnv.DraftApp.SubpictureNameGet(sv)} ")
                        j += 1
                    Next
                    amEnv.MarUI.MessageNoConfirm($"<-------第 {i} 个view的读取其子视图完成------>")
                End If
                i += 1
            Next
        Catch ex As Exception
            MsgBox(ex.StackTrace)
        End Try

    End Sub