Mayavi-在不翻译表面的情况下缩放表面

时间:2014-03-24 12:33:49

标签: scale mayavi

我想知道是否可以在mayavi中缩放表面对象而不移动/翻译它。

到目前为止,我只使用了surface.actor.actor.scale属性并为其指定了一个3D矢量。但是,表面不会保持其原始位置,但缩放是相对于原点(0,0,0)执行的 - 这就是为什么看起来像表面移动......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当我询问vtk演员的origin属性时,我真的在询问已经尝试过什么。我已经玩了一点但我不知道vtk演员如何决定自己定位的所有细节,这是非常复杂和肮脏的我发现它更容易破解它并手动进行数学运算(至少在数学很简单时。)

这是一个更简单的解决方案。注意,它不一定是最好的解决方案。可能有一个更清洁的解决方案,我还没有找到。

此解决方案的基本思想非常简单:刮取曲面顶点的x,y,z坐标,对这些点应用正确的线性平移,然后将它们反馈到源。

surf = mlab.surf(*args) # somehow generate a surface
xc,yc,zc = centroid() #somehow determine the x,y,z coordinates to stabilize towards
scale_factor = 2.8

tx,ty,tz = surf.mlab_source.x, surf.mlab_source.y, surf.mlab_source.z
aff = np.eye(4)*scale_factor
aff[:,3] = (-xc,-yc,-zc,1)

dat = np.array(zip(tx,ty,tz,np.ones(len(tx))))
surf.mlab_source.x, surf.mlab_source.y, surf.mlab_source.z,_ = np.dot(aff, dat.T)