繁体   English   中英

简单的箭头mayavi / tvtk在mlab奇怪的行为(看起来像一个bug)

[英]Simple arrow mayavi/tvtk in mlab weird behaviour (looks like a bug)

我试图在mlab中做一个简单的箭头指向图上的不同区域。 考虑这个例子:

fig = mlab.figure( bgcolor=(0, 0, 0))
b=visual.Box(x=0, y=10, z=10)
visual.set_viewer(fig)
b=visual.Box(x=0, y=10, z=10)
b2=visual.Box(x=10,y=10,z=10, color=(0,0,1))
a=visual.Arrow(x=10,y=10,z=10, color=(1,0,0))

因此,在我看来,箭头应该出现在蓝色框中,然而它仍然存在于它自己的神秘生活中并且完全位于其中。 非常奇怪的是盒子被定位并绑定到网格上(因此,如果我将b放到x = 10,y = 10,z = 10,则两个盒子将被并置),但箭头不是。 这就是我所看到的 这是一个错误还是一个功能?

更新:

我正在试图解决上面的问题,并发现箭头的行为非常奇怪。 这就是我所做的(在ipython进行交互):

from mayavi import mlab
from tvtk.tools import visual
fig=mlab.figure( bgcolor=(0, 0, 0))
visual.set_viewer(fig)

首先将框放在画布上的某个位置作为参考:

b=visual.Box(x=10,y=4,z=1)

然后我想要一个开箱即用的箭头:

a=visual.Arrow(x=10,y=4,z=1)

没有成功(与问题的第一部分相同):

Arrow_error

现在,让我们毫无理由地改变圆锥的长度

a.length_cone

回报

0.35

让我们改变它

a.length_cone=0.5

现在,箭头应该是开箱即用的 Arrow_error

将锥体的长度更改回0.35以查看是否将箭头更改回错误的位置

a.length_cone=0.35

不,箭头留在它应该的盒子里。 这看起来像一个bug。

玩箭头,我编写了以下函数来生成从x1,y1,z1x2,y2,z2的箭头

def Arrow_From_A_to_B(x1, y1, z1, x2, y2, z2):
    ar1=visual.arrow(x=x1, y=y1, z=z1)
    ar1.length_cone=0.4

    arrow_length=np.sqrt((x2-x1)**2+(y2-y1)**2+(z2-z1)**2)
    ar1.actor.scale=[arrow_length, arrow_length, arrow_length]
    ar1.pos = ar1.pos/arrow_length
    ar1.axis = [x2-x1, y2-y1, z2-z1]
    return ar1

看起来像ArrowSource不允许箭头延伸超过短距离。 它似乎根本没用。 mlab函数如quiver3d返回基于PolyDataSource字形。

这将绘制两个框和它们之间的箭头。 我不确定是否有一种简单的方法可以使用quiver3d,它肯定是基于PolyDataSource,但可能不会以某种方式具有相同的结构。

b1=visual.Box()
b2=visual.Box(x=10)
v=mlab.pipeline.vectors(mlab.pipeline.vector_scatter(0,0,0,10,0,0)) #xyzuvw
v.glyph.glyph.clamping=False

此外,您遇到的ArrowSource行为似乎不是一个错误,它更像是一个未真正开发的次要功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM