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

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

时间:2023-10-02 09:03:11浏览次数:33  
标签:Dim End views MarElementHandle Aveva rtns Try VBNET draftApp

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

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

一个封装的类

Public Class DrawingExpolrerEx
    Public Shared Function DrawingHasViews(draftApp As MarDrafting) As Boolean
        Dim vh As MarElementHandle
        Try
            vh = draftApp.ElementChildFirstGet()
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    ''' <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

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

    ''' <summary>
    ''' 获取当前图纸的全部的视图的句柄
    ''' </summary>
    ''' <param name="draftApp">MarDrafting对象</param>
    ''' <returns>视图句柄的list集合</returns>
    Public Shared Function DrawingViews(draftApp As MarDrafting) As List(Of MarElementHandle)
        Dim rtns As New List(Of MarElementHandle)
        Try
            If Not DrawingHasViews(draftApp) Then MsgBox("当前未开启任何图纸,结束命令!", MsgBoxStyle.Critical) : Return Nothing
            '读取第一个view
            Dim vh As MarElementHandle
            vh = draftApp.ElementChildFirstGet()
            rtns.Add(vh)
            '读取第2个view
            Dim nextVh As MarElementHandle
            Try
                nextVh = draftApp.ElementSiblingNextGet(vh)
                rtns.Add(nextVh)
            Catch ex As Exception
            End Try
            Dim errFlag As Boolean = True
            Do
                Try
                    nextVh = draftApp.ElementSiblingNextGet(nextVh)
                    rtns.Add(nextVh)
                Catch ex As Exception
                    errFlag = False
                End Try
            Loop While errFlag
        Catch ex As Exception
            MsgBox(ex.StackTrace)
        End Try
        Return rtns
    End Function


End Class

 

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

  <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

 

标签:Dim,End,views,MarElementHandle,Aveva,rtns,Try,VBNET,draftApp
From: https://www.cnblogs.com/NanShengBlogs/p/17739685.html

相关文章

  • Aveva Marine VBNET 编程系列===>读取drawing explorer的第一层级 view
    今天我们研究下读取drawingexpolrer的第一层级:view下面的图纸的层级目录示意图,我们今天需要获取所有的view 主要用到2个方法:1#获取第一个元素MarDrafting.ElementChildFirstGetMethod() 2#获取相邻的元素MarDrafting.ElementSiblingNextGet Method  ......
  • Aveva Marine VBNET 编程系列-封装一个类
    由于AM的marapi的大部分类实现了IDisposable接口,所有避免内存过大,用了一般需要dispose下微软官方的解释:https://learn.microsoft.com/zh-cn/dotnet/api/system.idisposable?view=net-7.0 以下是MarDrafting类的定义,很显然它实现了IDisposable接口 ImportsSystem.Reflec......
  • Aveva Marine VBNET 编程系列-创建曲线
    显现的效果 代码实现:<MyAmFunctionAtt(NameOf(绘图控制),NameOf(新建曲线))>PublicSub新建曲线(wmAsWindowManager)DimdraftAppAsNewMarDraftingDimuiAsNewMarUi'ImportsAveva.Marine.UIDimutilyAsNewMarUtil'ImportsA......
  • Aveva Marine VBNET 编程系列-新建图纸,创建文字
    根据MarApi,创建图形文件,新建文字ImportsAveva.ApplicationFramework.PresentationImportsAveva.Marine.Drafting'marAPI.dllPublicClass绘图控制<MyAmFunctionAtt(NameOf(绘图控制),NameOf(新建图纸))>PublicSub新建图纸(wmAsWindowManager)Di......
  • Aveva Marine VBNET 编程系列-修改程序快捷键
    修改HullDesign程序的主题以及菜单项的快捷键 引用的dll文件下面的是代码和快捷键配置文件:https://files.cnblogs.com/files/NanShengBlogs/AMShortCut.HullDesign.zip?t=1695908179&download=trueImportsAveva.ApplicationFramework.PresentationImportsAveva.Applic......
  • Aveva Marine VBNET 编程系列-搭建开发框架
    引用的DllAveva.ApplicationFramework.dllAveva.ApplicationFramework.Presentation菜单展示效果创建Attribute,用于反射来动态创建菜单,不用每次都去写commandPublicClassMyAmFunctionAttInheritsAttributePrivate_menuNameAsStringPublicPropertyM......
  • VBNET AUTOCAD 单行文字OBB有向包围盒的计算
    遇到要求单行文字包围和的需求,发现AutoCAD自带的算法仅能求出正交包围盒,如下图所示的粉色矩形我想获取下图下图所示蓝色矩形的部分及OBB计算方法图形示例:下面是完整的代码,其中求D点的坐标p1涉及到向量定比分点公式<CommandMethod(NameOf(TT_SingleTextOBB))>SubTT......
  • eviews安装包-eviews中文版-eviews软件下载 各个版本下载
    Eviews官方安装版是一款很优秀的预测分析计量软件,Eviews不仅能够对用户的数据进行更好的对数据进行分析操作,而且还可以对联立方程进行线性和非线性的估计,有需要的朋友快来下载吧。软件地址:看置顶贴Eviews12软件新功能图形&表格[gf]2022[/gf]定义滑块控件让您能交互地为图形更改可......
  • drf-ModelViewSet
    9个视图子类CreateAPIView--继承-->CreateModelMixin、GenericAPIViewListAPIView--继承-->ListModelMixin、GenericAPIViewRetrieveAPIView--继承-->RetrieveModelMixin、GenericAPIViewDestroyAPIView--继承-->DestroyModelMixin、GenericAPIViewUpdateAPIView--......
  • 9个视图子类,视图类,视图集,ViewSetMixin, drf之路由
    1.9个视图子类fromrest_framework.genericsimportListAPIView,CreateAPIView,ListCreateAPIViewfromrest_framework.genericsimportRetrieveAPIView,DestroyAPIView,UpdateAPIViewfromrest_framework.genericsimportRetrieveUpdateDestroyAPIView,RetrieveDes......