1.切面旋转
原理:围绕轴做角度变化。
eg:vtkResliceCursorLineRepresentation类,参考RotateAxis接口实现原理。
double vtkResliceCursorLineRepresentation::RotateAxis( double e[2], int axis )
2.中心移动
原理:指定方向做平移变化(切面焦点中心变化)。
newCenter[i] = this->StartCenterPosition[i] + intersectionPos[i] - this->StartPickPosition[i];
3.切面平移
原理:指定方向坐标变化。
//世界坐标系变化
if(i == 2)//做Z坐标改变
{
newCenter[i] = this->StartCenterPosition[i] + intersectionPos[i] - this->StartPickPosition[i];
}
else
{
newCenter[i] = this->StartCenterPosition[i];
}
if(i == 1)//做Y坐标改变
{
newCenter[i] = this->StartCenterPosition[i] + intersectionPos[i] - this->StartPickPosition[i];
}
else
{
newCenter[i] = this->StartCenterPosition[i];
}
if(i == 0)//做X坐标改变
{
newCenter[i] = this->StartCenterPosition[i] + intersectionPos[i] - this->StartPickPosition[i];
}
else
{
newCenter[i] = this->StartCenterPosition[i];
}
4.滑动指定render区域,实现当前切面视图变化
原理:将变化方向坐标差值作用到视图切面坐标上。
iLen = intersectionPos[1] - this->StartPickPosition[1];//Y轴坐标变化差值
iLen = iLen > 0 ? iLen : (0 - iLen);//取变化量,不要负值
if(i == 2)//作用到Z轴上
{
newCenter[i] = iLen;
}