本文由Markdown语法编辑器编辑完成。
1. 问题背景
在医学软件中,当从外界读入一个STL类型的模型时,其会按照它内部的坐标位置进行显示。因此它的位置和大小是确定的。但是,在实际应用中,有可能需要人为地对这个STL在空间中进行旋转、平移或缩放等操作。
在VTK中,用vtkTransform实现该功能。关于vtkTransform的应用,在vtkBoxWidget中有形象化的例子。
关于基于vtkTransform对STL(vtkPolydata)进行操作的一些资料:
(1)Dilation of a vtkPolyData.
http://www.vtk.org/pipermail/vtkusers/2009-April/051766.html
(2)SHRINK a polydata.
http://vtk.1045678.n5.nabble.com/How-to-SHRINK-a-POLYDATA-td1242685.html
其中注意,在进行旋转和缩放操作时,都需要先将该polydata整体平移回它的中心位置,然后再进行旋转和缩放操作,最后再将其移回到原来的位置处。
如下描述的这样:
Compute the centroid of the polydata. Use TransformPolyDataFilter with a Transform that Translates to the centroid, scales and translates back.
The vtkTransform would look something like:
vtkTransformPolyDataFilter *shrinkTransform = vtkTransformPolyDataFilter::New();
shrinkTransform->Translate(cx, cy, cz);
shrinkTransform->Scale(factor,factor,factor);
shrinkTransform->Translate(-cx, -cy, -cz);