FAQ
ArcSceneでクリックした位置に3Dラベルを置く方法

ナレッジ番号:5496 | 登録日:2023/07/27 | 更新日:2024/11/21

【概要】

ArcSceneには3Dテキストを配置するツールはありますが、フィーチャからの属性を3Dラベルとして配置するツールはありません。
このドキュメントではArcScene内でマウスクリックした位置にラベルを置くツールを作成する方法を示します。


【手順】
  1. ArcSceneを起動します。

  2. ポリゴンレイヤを1つ追加します。

  3. Visual Basic Editorを開きます。

  4. UIToolControlを新規作成します。

    A:[ツール] > [カスタマイズ]をクリックしてカスタマイズダイアログを開きます。
    B:[コマンド]タブをクリックします。
    C:[カテゴリ]リストからUIControlsを選択します。
    D:[保存先]ドロップダウンリストから"無題"を選択し、現在のマップドキュメントにツールを保存します。
      "Normal"を選択するとすべてのArcMapドキュメントにツールが保存されます。
    E:[新規UIControl]をクリックします。
    F: UIToolControlを選択し[作成]をクリックします。
    G:新規UIToolControlを任意のツールバーにドラッグします。
    H:カスタマイズダイアログを閉じます。

  5. UIToolControlを右クリックし、[ソースの表示]を選択します。

  6. UIToolControlのMouseDownイベントに以下のコードをコピーします。

    
    Dim pSXDoc As ISxDocument
    Set pSXDoc = ThisDocument
    Dim pSG As ISceneGraph
    Set pSG = pSXDoc.Scene.SceneGraph
    
    Dim pGLayer As IGraphicsLayer
    Set pGLayer = pSXDoc.Scene.ActiveGraphicsLayer
    
    Dim pGC As IGraphicsContainer3D
    Set pGC = pGLayer
    
    Dim pHits As IHit3DSet
    pSG.LocateMultiple pSG.ActiveViewer, x, y, esriScenePickAll, True, pHits
    If pHits Is Nothing Then
     MsgBox "No hits were returned."
     Exit Sub
    End If
    
    Dim i As Integer
    Dim pHit As IHit3D
    
    For i = 0 To pHits.Hits.Count - 1
     Set pHit = pHits.Hits.Element(i)
     With pHit
      If TypeOf .Owner Is ILayer Then
       Dim player As ILayer
       Set player = .Owner
      End If
       
      If Not .Object Is Nothing Then
       If TypeOf .Object Is IFeature Then
        Dim pFeature As IFeature
        Set pFeature = .Object
       End If
      End If
    
      Debug.Print " Geographic location: " & .Point.x & ", " & .Point.y & ", " & .Point.z
    
      AddElem pFeature, .Point.x, .Point.y, .Point.z, pGC, player
     End With
    Next
       
    pSXDoc.Scene.SceneGraph.RefreshViewers
    
    
  7. 以下のAddElemプロシージャを追加します。

    
    Sub AddElem(pFeature As IFeature, x As Double, y As Double, z As Double, _
             pGC As IGraphicsContainer3D, player As IFeatureLayer)
    
     Dim pPt As IPoint
     Dim pPoly As IPolygon
     Dim pArea As IArea
     Dim p3DElem As IText3DElement
    
     Set pPoly = pFeature.Shape
     Set pPt = New Point
     pPt.PutCoords x, y
     pPt.z = 0
    
     Dim pEnv As IEnvelope
     Set pEnv = pPoly.Envelope
    
     Set p3DElem = New Text3DElement
     With p3DElem
      .Text = pFeature.Value(pFeature.Fields.FindField(player.DisplayField))
      .Height = pPoly.Envelope.Height / 20
      .Depth = pPoly.Envelope.Height / 40
      .ZAxisScale = 1
      .Alignment = esriT3DAlignHorizontal
      .OrientationPlane = esriT3DPlaneXZ
      .Justification = esriT3DJustifyCenter
      .AxisRotation = esriT3DRotateAxisZ
      .RotationAngle = 0
      .BoldFont = True
      .FONTNAME = "MS UI Gothic"
      .AnchorPoint = pPt
     End With
    
     p3DElem.Update
    
     pGC.AddElement p3DElem
    
    
    
    
    End Sub
    
    
  8. Visual Basic Editorを閉じます。

  9. UIToolControlを選択し、画面上でクリックしてツールを実行します。

メタデータ

機能

種類

製品