vtkImagePlaneWidget的平移&旋转
2015-06-23 10:29
701 查看
VTK版本:6.2.0
1 背景
使用vtkImagePlaneWidget可以对三维体数据进行虚拟切片交互提取,然而,有些时候我们希望通过代码来实现vtkImagePlaneWidget的plane的设置,例如源点设置,中心点设置以及法向量设置等。
2 平移
有时候希望对plane进行平移,使其中心点移动到指定的位置。vtkImagePlaneWidget并没有提供直接的plane平移方法,只能通过间接的方式来实现。根据参考资料[1]的提示,下面总结了实现平移的代码:
3 旋转
有时候我们希望设定plane的法向量,这可以通过旋转来实现。
参考资料
[1]vtkImagePlaneWidget: how to update plane's orientation?
1 背景
使用vtkImagePlaneWidget可以对三维体数据进行虚拟切片交互提取,然而,有些时候我们希望通过代码来实现vtkImagePlaneWidget的plane的设置,例如源点设置,中心点设置以及法向量设置等。
2 平移
有时候希望对plane进行平移,使其中心点移动到指定的位置。vtkImagePlaneWidget并没有提供直接的plane平移方法,只能通过间接的方式来实现。根据参考资料[1]的提示,下面总结了实现平移的代码:
double selPt[3] = {1, 0, 0}; // 平移的目标位置 double center[3]; imagePlaneWidget->GetCenter( center ); vtkSmartPointer <vtkTransform> transform = vtkSmartPointer <vtkTransform>::New(); transform->Translate( selPt[0] - center[0], selPt[1] - center[1], selPt[2] - center[2]); // Modify and update planeWidget double newpt[3]; transform->TransformPoint( imagePlaneWidget->GetPoint1(), newpt ); imagePlaneWidget->SetPoint1( newpt ); transform->TransformPoint( imagePlaneWidget->GetPoint2(), newpt ); imagePlaneWidget->SetPoint2( newpt ); transform->TransformPoint( imagePlaneWidget->GetOrigin(), newpt ); imagePlaneWidget->SetOrigin( newpt ); imagePlaneWidget->UpdatePlacement();
3 旋转
有时候我们希望设定plane的法向量,这可以通过旋转来实现。
double normal[3]; imagePlaneWidget->GetNormal( normal ); double dir[3] = {1, 1, 0}; double axis[3]; double angle = vtkMath::AngleBetweenVectors(normal, dir) / vtkMath::Pi() * 180; vtkMath::Cross( normal, dir, axis ); transform->RotateWXYZ(angle, axis); // Modify and update planeWidget double newpt[3]; transform->TransformPoint( imagePlaneWidget->GetPoint1(), newpt ); imagePlaneWidget->SetPoint1( newpt ); transform->TransformPoint( imagePlaneWidget->GetPoint2(), newpt ); imagePlaneWidget->SetPoint2( newpt ); transform->TransformPoint( imagePlaneWidget->GetOrigin(), newpt ); imagePlaneWidget->SetOrigin( newpt ); imagePlaneWidget->UpdatePlacement();
参考资料
[1]vtkImagePlaneWidget: how to update plane's orientation?
相关文章推荐
- db4o使用全解
- keepalived+haproxy(SSL)实现web高可用(双主模式)
- Unity3D中组件事件函数的执行顺序
- 自定义相册
- 使用excel进行数据挖掘(3)----类别检测
- Tomcat connector元素常用配置(最大连接数等)
- FMDB多线程
- 使用java生成json数据
- iOS-Core-Animation-Advanced-Techniques(二)
- Python学习笔记一:数据类型与基本操作
- VS2005中SetUnhandledExceptionFilter函数应用
- svn胜过git的地方
- 报表示例——用Jasper report实现MongoDB join
- Android学习_17_SQLite数据库存储方式
- [JQ权威指南]第六天:使用attr获取与设置元素的属性
- 菜鸟的mongoDB学习---(三)MongoDB 的增、删、改、查(insert、remove、update、find)
- iOS越狱后必装软件
- 第二阶段团队进展报告(2)
- Qt Creater调试时一直出现:“DEBUGGER: Waiting for debug socket connect” 和“DEBUGGER: go to sleep”
- 实用USB术语详解