WorldWind学习系列三:简单功能分析——主窗体的键盘监听处理及拷贝和粘贴位置坐标功能
2009-12-12 11:37
525 查看
在分析功能时发现,各功能都有自己的快捷键相应,比如今天要分析的 Copy Coordinates (Ctrl+C)和Paste Coordinates (Ctrl+P),以及主窗体的全屏功能也是通过快捷键(Alt+Enter)。这就使我需要彻底分析一下主窗体的键盘监听处理啦。
主窗体的键盘监听处理
与WorldWind学习系列三:功能分析——截屏功能和“关于”窗体分析 中AboutDialog.cs分析类似,WorldWind主窗体也是重载了OnKeyUp,使窗体接受键盘响应。
936行
protected override void OnKeyUp(KeyEventArgs e)
{
if (this.webBrowserPanel.IsTyping()) //如果是在“网页窗体”(稍后介绍)里输入地址,则主窗体处不相应键盘事件,将 e.Handled = true;表示已经处理事件啦。
e.Handled = true;
else e.Handled = HandleKeyUp(e); //此处HandleKeyUp()是真正处理主窗口的键盘响应
base.OnKeyUp(e);
}
HandleKeyUp函数
转到特定的经纬度位置
WorldWindow类的 GotoLatLon()转到特定的位置
524
/// <summary>
/// Moves to specified location.
/// </summary>
/// <param name="latitude">Latitude in degrees of target position. (-90 - 90).</param>
/// <param name="longitude">Longitude in degrees of target position. (-180 - 180).</param>
/// <param name="heading">Camera heading in degrees (0-360) or double.NaN for no change.</param>
/// <param name="altitude">Camera altitude in meters or double.NaN for no change.</param>
/// <param name="perpendicularViewRange"></param>
/// <param name="tilt">Camera tilt in degrees (-90 - 90) or double.NaN for no change.</param>
public void GotoLatLon(double latitude, double longitude, double heading, double altitude, double perpendicularViewRange, double tilt)
{
if(!double.IsNaN(perpendicularViewRange))
altitude = m_World.EquatorialRadius * Math.Sin(MathEngine.DegreesToRadians(perpendicularViewRange * 0.5));
if (altitude<1)
altitude = 1;
this.drawArgs.WorldCamera.SetPosition(latitude, longitude, heading, altitude, tilt);
}
关键是:this.drawArgs.WorldCamera.SetPosition(latitude, longitude, heading, altitude, tilt)其中调用了Camera.cs中的SetPosition函数,其中主要代码
Point3d p = Quaternion4d.QuaternionToEuler(m_Orientation);
_latitude.Radians = p.Y;
_longitude.Radians = p.X;
_heading.Radians = p.Z;
此中用到Quaternion4d和Point3d类。
希望网友能有所收获,其他部分:
WorldWind学习系列三:功能分析——截屏功能和“关于”窗体分析
WorldWind学习系列二:擒贼先擒王篇2
WorldWind学习系列二:擒贼先擒王篇1
WorldWind学习系列一:顺利起航篇
主窗体的键盘监听处理
与WorldWind学习系列三:功能分析——截屏功能和“关于”窗体分析 中AboutDialog.cs分析类似,WorldWind主窗体也是重载了OnKeyUp,使窗体接受键盘响应。
936行
protected override void OnKeyUp(KeyEventArgs e)
{
if (this.webBrowserPanel.IsTyping()) //如果是在“网页窗体”(稍后介绍)里输入地址,则主窗体处不相应键盘事件,将 e.Handled = true;表示已经处理事件啦。
e.Handled = true;
else e.Handled = HandleKeyUp(e); //此处HandleKeyUp()是真正处理主窗口的键盘响应
base.OnKeyUp(e);
}
HandleKeyUp函数
转到特定的经纬度位置
WorldWindow类的 GotoLatLon()转到特定的位置
524
/// <summary>
/// Moves to specified location.
/// </summary>
/// <param name="latitude">Latitude in degrees of target position. (-90 - 90).</param>
/// <param name="longitude">Longitude in degrees of target position. (-180 - 180).</param>
/// <param name="heading">Camera heading in degrees (0-360) or double.NaN for no change.</param>
/// <param name="altitude">Camera altitude in meters or double.NaN for no change.</param>
/// <param name="perpendicularViewRange"></param>
/// <param name="tilt">Camera tilt in degrees (-90 - 90) or double.NaN for no change.</param>
public void GotoLatLon(double latitude, double longitude, double heading, double altitude, double perpendicularViewRange, double tilt)
{
if(!double.IsNaN(perpendicularViewRange))
altitude = m_World.EquatorialRadius * Math.Sin(MathEngine.DegreesToRadians(perpendicularViewRange * 0.5));
if (altitude<1)
altitude = 1;
this.drawArgs.WorldCamera.SetPosition(latitude, longitude, heading, altitude, tilt);
}
关键是:this.drawArgs.WorldCamera.SetPosition(latitude, longitude, heading, altitude, tilt)其中调用了Camera.cs中的SetPosition函数,其中主要代码
Point3d p = Quaternion4d.QuaternionToEuler(m_Orientation);
_latitude.Radians = p.Y;
_longitude.Radians = p.X;
_heading.Radians = p.Z;
此中用到Quaternion4d和Point3d类。
希望网友能有所收获,其他部分:
WorldWind学习系列三:功能分析——截屏功能和“关于”窗体分析
WorldWind学习系列二:擒贼先擒王篇2
WorldWind学习系列二:擒贼先擒王篇1
WorldWind学习系列一:顺利起航篇
相关文章推荐
- WorldWind学习系列三:简单功能分析——主窗体的键盘监听处理及拷贝和粘贴位置坐标功能
- 简单功能分析——主窗体的键盘监听处理及拷贝和粘贴位置坐标功能
- WorldWind学习系列三:简单功能分析——截屏功能和“关于”窗体分析
- 【Java系列】(五)java实现简单的窗体和密码验证(传参,事件机制和事件监听)
- WorldWind学习系列四:功能分析——Show Planet Axis、Show Position 、Show Cross Hairs功能
- WorldWind学习系列十六:3D Cross Section插件功能分析——TerrainViewer
- WorldWind学习系列四:功能分析——Show Planet Axis、Show Position 、Show Cross Hairs功能
- WorldWind学习系列十六:3D Cross Section插件功能分析——TerrainViewer
- 简单分析某个棋牌游戏的抢位置功能
- WorldWind学习系列四:功能分析——Show Planet Axis、Show Position 、Show Cross Hairs功能
- 简单分析某个棋牌游戏的抢位置功能
- Kibo是一个简单的用于处理键盘事件的Javascript工具库。
- Android 监听ScrollView滑动距离简单处理
- jQuery-1.9.1源码分析系列(十五) 动画处理
- 在word开发中,跨文件数据拷贝粘贴出现ComException(“组织策略阻止了该操作“)异常的处理方式
- Notification数据结构和功能处理流程分析
- Linux TCP server系列(1)-简单TCP服务器+多进程处理客户请求
- 环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法
- jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
- Vs2005之简单日志工具的制作--2.根据功能分析进行系统设计