我想移动滑块,从而影响3D点的Z坐标,该点是直线的一部分。然后,我想通过以下视图在jupyter笔记本中可视化这一行-在itkwidgets库中找到的小部件。
到目前为止我提出的内容看起来像这样,但是无论我做什么,view-widget中的对象都是相同的。
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])
[此外,我尝试通过滑块更改其他属性,例如管半径,球体的位置,但到目前为止没有成功。不知何故,我感觉一旦对象更新,视图窗口就不会真正更新。
谢谢!
我不了解您的代码,但我认为您需要做的是将所谓的“观察者”回调附加到变化的滑块上您要更改的参数。这是with的屏幕截图一个滑块,可在图表小部件中更改三角形的高度:这是设置图表的可粘贴代码
import ipywidgets as widgets
from jp_doodle import dual_canvas
from IPython.display import display
# create a triangle diagram
swatch = dual_canvas.swatch(pixels=200)
points = [[-1,-1], [0,1], [1, -1]]
triangle = swatch.polygon(points, color="red", name="triangle")
swatch.fit(margin=10)
这是创建滑块并附加更改回调的代码。
# make a slider that changes the height of the triangle
slider = widgets.FloatSlider(value=1.0, min=-1.0, max=1.0, step=0.1)
def onchange(*ignored):
points[1][1] = slider.value # set the tip height
triangle.change(points=points)
slider.observe(onchange)
slider
该图是使用此处提供的jp_doodle包创建的:
https://github.com/AaronWatters/jp_doodle
在此处阅读有关“观察”回调的更多信息:
https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Events.html
希望有帮助!