CAA视图处理

CAA中视图的处理分两种方式:


1、CATICATI3DCamera 俗称照相机,此方法进行视图转换时,附带旋转动作;


2、CAT3DViewpoint 3D视角,此方法进行视图转换时,无转旋转动作。
其中需注意:

vp3d.SetTarget(fOriginalTarget);
vp3d.SetOrigin(fOriginalOrigin);
vp3d.SetSightDirection(fOriginalSightDirection);
vp3d.SetUpDirection(fOriginalUpDirection);

其中SetTarget与SetOrigin顺序的改变会导致转换后视角的位置有所偏差。


全部适应功能:

//获得 main 3D viewpoint:
CAT3DViewpoint &vp3d =pViewer->GetMain3DViewpoint();

//To reframe the view, we also need the representation bounding volume.
CAT3DBagRep * rootBag = (CAT3DBagRep *)(vp3d.GetBag());
if ( NULL == rootBag )
{
    return TRUE;
}
//If the bounding element is invalid, let's force its calculation:
if(rootBag->IsInvalid())
    rootBag->ComputeBoundingElement(1);

//Retrieving of the bounding element:
const CAT3DBoundingSphere &bs3d = rootBag->GetBoundingElement();

//Retrieving of the bounding element radius:
float radius = bs3d.GetRadius();

if(radius == 0.f)
    radius = bs3d.GetRadiusMM();

double dbAngle = vp3d.GetAngle();
double dbRAngle = CATDegreeToRadian*dbAngle;
double focus = 1.05f * (radius/tan(dbRAngle));


float fzoom = vp3d.GetZoom();
CATMathPointf TargetPosition;
if (1 == _found)
{
    TargetPosition = Origin;
}
else if (0 == _found)
{
    TargetPosition = bs3d.GetCenter();
}

CATMathPointf OriginPosition = TargetPosition- SightDir*(float)focus;

vp3d.SetOrigin(OriginPosition);
vp3d.SetSightDirection(SightDir);
vp3d.SetTarget(TargetPosition);
vp3d.SetUpDirection(upDir);

此功能是获取视图中所有特征的Rep,找取中心,根据Rep的显示大小,确定视角参数,转换视角。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值