下面是获得style文件中对象的方法,它可以用于获得arcgis自带的或自己制作的style文件中的对象
调用方法如下:
获得color:GetStyleFileObjects("Civic.style", "Colors")
获得Markersymbol:GetStyleFileObjects("Civic.style", "Marker Symbols")
获得其他的对象依此类推。
''' <summary>
''' 获得style文件中某个class的所有对象list
''' </summary>
''' <param name="pStyleFileName">文件名</param>
''' <param name="pStyleClassName">class名称</param>
''' <returns>对象list</returns>
''' <remarks></remarks>
Private Function GetStyleFileObjects(ByVal pStyleFileName As String, ByVal pStyleClassName As String) As List(Of Object)
Dim pObjects As New List(Of Object)
Dim pStyleGlry As IStyleGallery = New ESRI.ArcGIS.Framework.StyleGalleryClass '这个类是Desktop中的,用于style文件
''Dim pStyleGlry As IStyleGallery = ServerStyleGallery ‘这个类是AE中的,用于serverstyle文件
Dim pStylStor As IStyleGalleryStorage = pStyleGlry
Dim pStylePath As String = pStylStor.DefaultStylePath & pStyleFileName
pStylStor.TargetFile = pStylePath
Dim pBSTR As IEnumBSTR = pStyleGlry.Categories(pStyleClassName)
Dim pS As String = pBSTR.Next
While pS IsNot Nothing
pObjects.AddRange(GetStyleGalleryItems(pStyleGlry, pStylePath, pStyleClassName, pS))
pS = pBSTR.Next
End While
Return pObjects
End Function
''' <summary>
''' 获得style文件中某个class下,某个category中的所有对象list
''' </summary>
''' <param name="pStyleGlry">StyleGallery</param>
''' <param name="pStylePath">style文件路径</param>
''' <param name="pStyleClassName">class名称</param>
''' <param name="pStyleCategoryName">category名称</param>
''' <returns>对象list</returns>
''' <remarks></remarks>
Private Function GetStyleGalleryItems(ByVal pStyleGlry As IStyleGallery, ByVal pStylePath As String, ByVal pStyleClassName As String, ByVal pStyleCategoryName As String) As List(Of Object)
Dim pObjects As New List(Of Object)
Dim pItems As IEnumStyleGalleryItem
pItems = pStyleGlry.Items(pStyleClassName, pStylePath, pStyleCategoryName)
pItems.Reset()
Dim pItem As IStyleGalleryItem
pItem = pItems.Next
While pItem IsNot Nothing
pObjects.Add(pItem.Item)
pItem = pItems.Next
End While
Return pObjects
End Function