ipywidget for vtkRenderWindow
项目描述
ipyvtk_simple
ipywidget for vtkRenderWindow
这是创建Jupyter界面到VTK的早期原型。此工具包是一个概念证明,未来将在 ipyvtk
中提供更完善的工具。
这里的代码是在MIT许可证下由 Andras Lasso 实现的(见 源代码)。
目标是使此小部件能够与任何服务器端 vtkRenderWindow
一起工作。此渲染窗口可以是来自 VTK Python、ParaView 或 PyVista 的。
请注意,vtk
并未列为此包的需求,以简化其在可能从源代码构建或与ParaView捆绑的虚拟环境中安装的过程,我们不希望从PyPI安装轮子。
在Docker中运行
要构建和在Docker中运行
docker build -t ipyvtk_simple .
docker run -p 8878:8878 ipyvtk_simple jupyter lab --port=8878 --no-browser --ip=0.0.0.0 --allow-root
并打开 pyvista.ipynb
笔记本。
此外,这可以与ParaView一起使用。在 paraview.ipynb
中给出了一个示例,可以通过以下方式运行
docker build -t ipyvtk_pv -f paraview.dockerfile .
docker run -p 8877:8877 ipyvtk_pv jupyter lab --port=8877 --no-browser --ip=0.0.0.0 --allow-root
并打开 paraview.ipynb
笔记本。
示例
您可能需要构建jupyter lab扩展才能在Lab中工作。已知在Notebook中运行良好。
PyVista
PyVista 正在通过 一个拉取请求 实现这一功能。请参阅 pyvista.ipynb
以了解概念验证。
Python VTK
这里的组件可以与 VTK 一起使用。以下是一个最小示例,展示了如何将任何 vtkRenderWindow
传递给 ViewInteractiveWidget
import vtk
from ipyvtk_simple.viewer import ViewInteractiveWidget
# Create some data
cylinder = vtk.vtkCylinderSource()
cylinder.SetResolution(8)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cylinder.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# Set up render window
ren = vtk.vtkRenderer()
ren_win = vtk.vtkRenderWindow()
ren_win.SetOffScreenRendering(1)
ren_win.SetSize(600, 600)
ren_win.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(ren_win)
style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
# Add actor to scene
ren.AddActor(actor)
ren.ResetCamera()
# Display
ViewInteractiveWidget(ren_win)
ParaView Python
有关在 Docker 容器中运行 ParaView 的说明,请参阅上面的说明。
import paraview.simple as pvs
from ipyvtk_simple.viewer import ViewInteractiveWidget
# Create data on the pipeline
wavelet = pvs.Wavelet()
contour = pvs.Contour(Input=wavelet)
contour.ContourBy = ['POINTS', 'RTData']
contour.Isosurfaces = [63, 143, 170, 197, 276]
# Set the data as visible
pvs.Show(contour)
# Fetch the view and render the scene
view = pvs.GetActiveView()
pvs.Render(view)
# Fetch the RenderWindow
ren_win = view.GetClientSideObject().GetRenderWindow()
# Display the RenderWindow with the widget
ViewInteractiveWidget(ren_win)