|
阅读:1101回复:1
IHit3D接口
我用IHit3D接口获得了一组点,但是一个屏幕坐标传入,最后它会返回很多个点,请问我知道三维地图里我鼠标位置的地图X,Y,Z坐标,请问哪个点才是它的三维坐标对应点。
|
|
|
1楼#
发布于:2005-11-16 13:30
<P>看看这个例子</P>
<H1>LocateMultiple Example</H1><CODE><PRE>'<BR>' Call this method to examine on the 3D Hits in the active viewer.<BR>' For example, from the ArcScene Tools | Customize | Commands | UIControls<BR>' dialog, create a new UIToolControl to allow for mouse clicks, and in the<BR>' UIToolControl's MouseDown event, pass the x and y screen coordinates<BR>' to this method:<BR>'<BR>' Private Sub UIToolControl_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)<BR>'<BR>' ReportScreenPick x, y<BR>'<BR>' End Sub<BR>'<BR>Public Sub ReportScreenPick(xScreen As Long, yScreen As Long)</PRE><PRE> ' local variables:<BR> Dim x As Long, y As Long<BR> x = xScreen<BR> y = yScreen<BR> <BR> ' reference ths scenegraph object in the scene:<BR> Dim pSXDoc As ISxDocument<BR> Set pSXDoc = ThisDocument<BR> Dim pSG As ISceneGraph<BR> Set pSG = pSXDoc.Scene.SceneGraph<BR> <BR> ' call the scenegraph's LocateMultiple method for the designated<BR> ' location in the active viewer:<BR> Dim pHits As IHit3DSet<BR> pSG.LocateMultiple pSG.ActiveViewer, x, y, esriScenePickAll, True, pHits<BR> <BR> If pHits Is Nothing Then<BR> MsgBox "No hits were returned."<BR> Exit Sub<BR> End If<BR> <BR> Dim i As Integer<BR> Dim pHit As IHit3D<BR> <BR> MsgBox pHits.Hits.Count ; " hit(s) were returned - review the output in the VBA Immediate Window."<BR> Debug.Print pHits.Hits.Count ; " Hit(s) at screen location " ; x ; ", " ; y ; ":"<BR> <BR> ' for each hit returned, report on its properties:<BR> For i = 0 To pHits.Hits.Count - 1<BR> Set pHit = pHits.Hits.Element(i)<BR> Debug.Print "Hit " ; i + 1<BR> With pHit<BR> If TypeOf .Owner Is ILayer Then<BR> Dim pLayer As ILayer<BR> Set pLayer = .Owner<BR> Debug.Print " Owner(Layer): " ; pLayer.name<BR> End If<BR> <BR> If Not .Object Is Nothing Then<BR> If TypeOf .Object Is IFeature Then<BR> Dim pFeature As IFeature<BR> Set pFeature = .Object<BR> Debug.Print " Feature ID: " ; pFeature.OID<BR> End If<BR> End If<BR> <BR> Debug.Print " Distance from the Observer to the Hit point: " ; .DistanceToObserver<BR> Debug.Print " Distance between the Hit point and the picking ray: " ; .DistanceToRay<BR> Debug.Print " Exact Hit: " ; .ExactHit<BR> Debug.Print " Geographic location: " ; .Point.x ; ", " ; .Point.y ; ", " ; .Point.Z<BR> <BR> Dim nDepthMin As Double, nDepthMax As Double<BR> .GetDepthRange nDepthMin, nDepthMax<BR> Debug.Print " OpenGL Depth Range: " ; nDepthMin ; " - " ; nDepthMax<BR> <BR> End With<BR> <BR> Next</PRE><PRE>End Sub<BR></PRE></CODE> |
|
|