我想移动一个滑块,从而影响作为直线一部分的3D点的Z坐标。然后,我想通过itkwidgets库中的view-widget在jupyter笔记本中可视化这一行
到目前为止,我提出的是这样的,但无论我做什么,视图中的对象小部件都是一样的
import numpy as np
import vtk
from ipywidgets import widgets, interactive
from itkwidgets import view
def moveZ(zVal=0.2):
rail_points.SetPoint(0, (x_res[0],y_res[0],zVal))
rail.SetPoints(rail_points)
rail.Update()
tube.Update()
mappers[0].Update()
rail = vtk.vtkLineSource()
rail_points = vtk.vtkPoints()
for _x, _y, _z in zip(x_res, y_res, np.linspace(1,0,len(x_res))):
rail_points.InsertNextPoint(np.array([_x,_y,_z],dtype='float32'))
rail.SetPoints(rail_points)
rail.SetPoint1([0,0,0])
rail.SetPoint2([0,0,0])
tube = vtk.vtkTubeFilter()
tube.SetInputConnection(rail.GetOutputPort())
tube.SetVaryRadiusToVaryRadiusOff()
tube.SetRadius(0.1)
geometricObjectSources=[]
geometricObjectSources.append(tube)
mappers = []
actors = []
for i in range(len(geometricObjectSources)):
geometricObjectSources[i].Update()
mappers.append(vtk.vtkPolyDataMapper())
mappers[i].SetInputConnection(geometricObjectSources[i].GetOutputPort())
actors.append(vtk.vtkActor())
actors[i].SetMapper(mappers[i])
viewer = view(actors=actors)
slider = interactive(moveZ, zVal=(-1, 1, 0.1))
widgets.VBox([viewer, slider])
此外,我还尝试通过滑块更改其他属性,例如管半径、球体的位置,但迄今为止没有成功。不知何故,我觉得一旦对象更新,视图窗口就不会真正更新
谢谢
我不明白你的代码,但我认为你需要做的是 将一个所谓的“观察者”回调附加到一个可更改的滑块 要更改的参数。下面是一个带有 在图表小部件中更改三角形高度的滑块: 下面是设置图表的可粘贴代码
下面是创建滑块并附加更改回调的代码
该图是使用此处提供的jp_doodle包创建的:
https://github.com/AaronWatters/jp_doodle
在此处阅读有关“观察”回调的更多信息:
https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Events.html
希望有帮助
相关问题 更多 >
编程相关推荐