Я хотел бы переместить ползунок и, таким образом, повлиять на Z-координату 3D-точки, которая является частью линии. Затем эту строку я хочу визуализировать в блокноте jupyter через вид - виджет, найденный в библиотеке itkwidgets.
То, что я до сих пор придумал, выглядит следующим образом, но независимо от того, что я делаю, объект в представлении - виджет такой же.
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])
Кроме того, я попытался изменить другие свойства с помощью ползунка, такие как радиус трубки, положение сферы, но пока безуспешно. Почему-то у меня такое ощущение, что окно обзора не обновляется после обновления объектов.
Спасибо!