首先查看WorldWindow的事件:OnMouseUp、OnMouseMove、HandleKeyDown,这几个方法中多次调用this.drawArgs.WorldCamera的各种属性实现了场景的控制,包括球的旋转、场景的放大缩小,上下移动。
1. 接下来查看CameraBase类RotationYawPitchRoll虚函数:
1 public virtual void RotationYawPitchRoll(Angle yaw, Angle pitch, Angle roll) 2 { 3 // this._orientation *= MathEngine.EulerToQuaternion(yaw.Radians, pitch.Radians, roll.Radians); 4 // Vector3 v = MathEngine.QuaternionToEuler(this._orientation); 5 6 // if(!double.IsNaN(v.Y)) 7 // this._latitude.Radians = v.Y; 8 // if(!double.IsNaN(v.X)) 9 // this._longitude.Radians = v.X; 10 // if(Math.Abs(roll.Radians)>Single.Epsilon) 11 // this._heading.Radians = v.Z; 12 13 14 m_Orientation = Quaternion4d.EulerToQuaternion(yaw.Radians, pitch.Radians, roll.Radians) * m_Orientation; 15 16 Point3d p = Quaternion4d.QuaternionToEuler(m_Orientation); 17 if(!double.IsNaN(p.Y)) 18 _latitude.Radians = p.Y; 19 if(!double.IsNaN(p.X)) 20 _longitude.Radians = p.X; 21 if(Math.Abs(roll.Radians) > double.Epsilon) 22 _heading.Radians = p.Z; 23 }