基于AE的三维查询源代码

基于AE的三维查询源代码

Public Type m_pObjArray
      iFeature As iFeature
      iLayerName As String
End Type
Public M_pFeatureArray() As m_pObjArray

Private Sub ArcSceneControl_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
              ArcSceneControl.SceneGraph.IsNavigating = False
              Call Identify3DMap(X, Y)
end sub

'输入:当前3D地图,x坐标,y坐标,引用公共变量M_pFeatureArray
'输出:对3D地图上的目标选中,调用frmidentify显示选中目标的信息
'功能:单点查询
'程序:tjh 2005.1.29
Private Sub Identify3DMap(X As Long, Y As Long)
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
        'QI for IBasicMap from IScene
      Dim pBasicMap As IBasicMap
      Set pBasicMap = ArcSceneControl.SceneGraph.Scene
      'QI for IScreenDisplay from ISceneGraph
      Dim pScreenDisplay As IScreenDisplay
      Set pScreenDisplay = ArcSceneControl.SceneGraph
   
      'Translate screen coordinates into mulitple 3D objects
      Dim pHit3DSet As IHit3DSet
      ArcSceneControl.SceneGraph.LocateMultiple ArcSceneControl.SceneGraph.ActiveViewer, X, Y, esriScenePickGeography, False, pHit3DSet
      
      'Reduce the hit set to the top
      'most hits and one hit per layer
      pHit3DSet.Topmost 1.5
      pHit3DSet.OnePerLayer
      pHit3DSet.Topmost 1.1
      
      'Get an array of hits
      Dim pArray As IArray
      Set pArray = pHit3DSet.Hits
      If pArray.Count = 0 Then Exit Sub
    
      'Loop through each hit
      Dim i As Integer
      ReDim M_pFeatureArray(0)
      For i = 0 To pArray.Count - 1
        
        'Get the hit
        Dim pHit3D As IHit3D
        Set pHit3D = pArray.Element(i)
        'Get the hit location
        Dim pPoint As IPoint
        Set pPoint = pHit3D.Point
        If pPoint Is Nothing Then Exit Sub
        'Get the layer that was hit
        If Not TypeOf pHit3D.Owner Is ILayer Then Exit Sub
        Dim pLayer As ILayer
        Set pLayer = pHit3D.Owner
        'Get the feature that was hit
        Dim pObject As IUnknown
        Set pObject = pHit3D.object
        
        'Add to identify dialog
        ReDim Preserve M_pFeatureArray(UBound(M_pFeatureArray) + 1)
        Dim pFeature As iFeature
        Set pFeature = pHit3D.object
        Set M_pFeatureArray(UBound(M_pFeatureArray) - 1).iFeature = pFeature
        M_pFeatureArray(UBound(M_pFeatureArray) - 1).iLayerName = CStr(pLayer.Name)
    
      Next i
    
     '''''''''''''''''''''''''''''''''''''''''''''''''
     If frmIdentify.Visible = False Then
        frmIdentify.Show 0
     End If
      frmIdentify.SetFocus
     Call frmIdentify.InitTreeView
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值