渲染#
几何渲染#
展示一些使用 dash_vtk
渲染网格的例子。
# from dash import jupyter_dash
# jupyter_dash.infer_jupyter_proxy_config()
from dash import Dash, html
import dash_vtk
from dash_vtk.utils import to_mesh_state
try:
# VTK 9+
from vtkmodules.vtkImagingCore import vtkRTAnalyticSource
except ImportError:
# VTK =< 8
from vtk.vtkImagingCore import vtkRTAnalyticSource
# 使用 VTK 获取一些数据
data_source = vtkRTAnalyticSource()
data_source.Update() # <= 执行源文件以生成输出
dataset = data_source.GetOutput()
# 使用 helper 获取可以直接传递给 Mesh 的网格结构,RTData 是字段的名称
mesh_state = to_mesh_state(dataset)
content = dash_vtk.View([
dash_vtk.GeometryRepresentation([
dash_vtk.Mesh(state=mesh_state)
]),
])
# Dash setup
app = Dash(__name__)
server = app.server
app.layout = html.Div(
style={"width": "100%", "height": "400px"},
children=[content],
)
if __name__ == "__main__":
app.run(host="localhost",
# jupyter_server_url="<your-url>"
port="8060",
jupyter_height=400,
jupyter_width="70%")
<IPython.lib.display.IFrame at 0x7fcc34552c60>
# Use helper to get a mesh structure that can be passed as-is to a Mesh
from dash_vtk.utils import to_mesh_state
mesh_state = to_mesh_state(dataset)
content = dash_vtk.View([
dash_vtk.GeometryRepresentation([
dash_vtk.Mesh(state=mesh_state)
]),
])
# Dash setup
app = Dash(__name__)
server = app.server
app.layout = html.Div(
style={"width": "100%", "height": "calc(100vh - 15px)"},
children=[content],
)
if __name__ == "__main__":
app.run(debug=True)
<IPython.lib.display.IFrame at 0x7fcc1c115bb0>
体积渲染#
上一个例子是使用 3D 图像并提取其网格进行渲染。让我们保持相同的数据,但以体积渲染的方式展示它。
from dash import Dash, html
import dash_vtk
from dash_vtk.utils import to_volume_state
try:
# VTK 9+
from vtkmodules.vtkImagingCore import vtkRTAnalyticSource
except ImportError:
# VTK =< 8
from vtk.vtkImagingCore import vtkRTAnalyticSource
# Use VTK to get some data
data_source = vtkRTAnalyticSource()
data_source.Update() # <= Execute source to produce an output
dataset = data_source.GetOutput()
# Use helper to get a volume structure that can be passed as-is to a Volume
volume_state = to_volume_state(dataset) # No need to select field
content = dash_vtk.View([
dash_vtk.VolumeRepresentation([
# GUI to control Volume Rendering
# + Setup good default at startup
dash_vtk.VolumeController(),
# Actual volume
dash_vtk.Volume(state=volume_state),
]),
])
# Dash setup
app = Dash(__name__)
server = app.server
app.layout = html.Div(
style={"width": "100%", "height": "400px"},
children=[content],
)
if __name__ == "__main__":
app.run(debug=True)
<IPython.lib.display.IFrame at 0x7fcc1c166f00>