开发笔记20250619:VTK 3D ROI选取

一个3D ROI控件,支持修改大小、XYZ轴单独平移和XYZ轴同时平移、rx ry rz单独绕自身旋转。效果如下

20250619_3D_ROI

    实现原理:通过添加圆圈、小球、坐标轴等小挂件实现旋转、平移等不同功能。
    MoveF0~MoveF5是六个面单独平移函数,Translating是整体平移,Scaling和Rotating分别是放缩和旋转。
    旋转无论哪个轴都是一样,都是计算rx ry rz向量,单独旋转rx时,ry rz置0就行,vpn就是旋转向量。
    e[0]e[1]代表当前鼠标点坐标。

if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF0)
    this->MoveMinusXFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF1)
    this->MovePlusXFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF4)
    this->MoveMinusZFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF5)
    this->MovePlusZFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF2)
    this->MoveMinusYFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::MoveF3)
    this->MovePlusYFace(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::Translating)
    this->Translate(prevPickPoint, pickPoint);
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::Scaling)
    this->Scale(prevPickPoint, pickPoint, static_cast<int>(e[0]), static_cast<int>(e[1]));
else if (this->InteractionState == rvsVTKCubeSkeletonRepresentation::Rotating)
    this->Rotate(static_cast<int>(e[0]), static_cast<int>(e[1]), prevPickPoint, pickPoint, vpn);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值