在进行arcgis三维系统的开发过程中,需要对标注的三维文字正面显示,本想通过ICamera的属性获得角度值,但开发过程中发现并没有直接给出相应角度值,不过还要有个折中的办法,通过ICamera的Target(目标)和Observer(观察者)两者的坐标计算向量角度获得。代码如下:
private double GetCameraAngle(ICamera camera)
{
if (camera == null) return 0;
IPoint target = camera.Target;
IPoint observer = camera.Observer;
double angle;
angle = Math.Atan((observer.Y - target.Y) / (observer.X - target.X));
angle = angle * (180 / Math.PI);
return angle;
}
运行发现在屏幕角度0~180范围内正常,超过范围文字方向就是相反的,对不起数学老师啊!
Atan不行啊,开始想自己做判断看象限角,不过发现还有个Atan2直接可以得到象限反正切值。代码修改如下:
/// <summary>
/// 获取屏幕角度
/// 杜志刚 2018-12-10
///atan2(a,b)是4象限反正切,求取向量夹角
/// </summary>
/// <param name="camera"></param>
/// <returns></returns>
private double GetCameraAngle(ICamera camera)
{
if (camera == null) return 0;
IPoint target = camera.Target;
IPoint observer = camera.Observer;
double angle;
angle = Math.Atan2((observer.Y - target.Y), (observer.X - target.X));
angle = angle * (180 / Math.PI);
return angle;
}