|
阅读:1320回复:1
ae中globecontrol_onmousemove事件获取三维坐标并在状态栏上显示问题
<P>正在用ae和vb.net开发三维可视化界面,想在状态栏中显示鼠标再globecontrol中移动获取的三维坐标信息,试图在axglobecontrol_onmousemove事件中实现,但是e.x和e.y获取的屏幕的pixel坐标,如何将其转换为globe默认的wgs84经纬度坐标呢?</P>
<P>如何再axglobecontrol_onmousemove事件中,获取鼠标移过处的grid的高程坐标数据呢?</P> <P>请大家帮忙啊!多谢!</P> |
|
|
1楼#
发布于:2005-08-19 12:16
<P>在开发帮助里有</P>LocateMultiple Example'<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) ' 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> NextEnd Sub<BR>
|
|
|