レンダラーによるシンボルの回転

 2016/9/1 (木)    

Public Sub RotationRenderer()
    '現在のドキュメントを取得
    Dim pMxDocument As IMxDocument
    Set pMxDocument = ThisDocument
     
    'アクティブなデータフレームの取得
    Dim pMap As IMap
    Set pMap = pMxDocument.FocusMap
     
    'レイヤを取得
    Dim pLayer As ILayer
    Set pLayer = pMap.Layer(0)
     
    'フィーチャレイヤを取得
    Dim pFeatureLayer As IGeoFeatureLayer
    Set pFeatureLayer = pLayer
     
    Dim pRotationrenderer As IRotationRenderer2
    Set pRotationrenderer = pFeatureLayer.Renderer
     
    'フィールド指定、条件式の場合
    pRotationrenderer.SymbolRotation3DRotationTypeZ = esriRotateSymbolGeographic
    Call pRotationrenderer.SetSymbolRotation3DFlags(esriSymbolRotation3DNone, esriSymbolRotation3DNone, esriSymbolRotation3DUseExpressionZ) 'ArcScene ArcGlobe の場合は XYZ が設定できる。ArcMap の場合は Z のみ設定
    Call pRotationrenderer.SetSymbolRotation3DExpressions("", "", "")   '第3引数にフィールド名、もしくは条件式を記述
     
    'ランダムの場合
'    pRotationrenderer.SymbolRotation3DRotationTypeZ = esriRotateSymbolGeographic
'    Call pRotationrenderer.SetSymbolRotation3DFlags(esriSymbolRotation3DRandomZ, esriSymbolRotation3DNone, esriSymbolRotation3DNone)
'    '※本来第3引数に esriSymbolRotation3DRandomZ を設定するべきだが第1引数に Z を設定しないと動作しない
'    Call pRotationrenderer.SetSymbolRotation3DExpressions("", "", "")
'    Call pRotationrenderer.SetSymbolRotation3DRandomRanges(0, 0, 0, 0, 0, 180)
     
    '結果確認
    Dim a(2) As Long
    Dim b(2) As String
    Dim c(5) As Double
     
    '種類
    Call pRotationrenderer.GetSymbolRotation3DFlags(a(0), a(1), a(2))
    Debug.Print a(0), a(1), a(2)
     
    '条件式 [] で囲むだけならフィールド指定
    Call pRotationrenderer.GetSymbolRotation3DExpressions(b(0), b(1), b(2))
    Debug.Print b(0), b(1), b(2)
     
    'ランダムなレンジ
    Call pRotationrenderer.GetSymbolRotation3DRandomRanges(c(0), c(1), c(2), c(3), c(4), c(5))
    Debug.Print c(0), c(1), c(2), c(3), c(4), c(5)
     
    pMxDocument.ActiveView.Refresh
End Sub

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.