Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VTK Synchronized #1248

Merged
merged 39 commits into from
Jun 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
bac9c81
VTKSynchronize panel implementation
xavArtley Apr 22, 2020
9506847
split old VTK panel in VTKJS and VTKSynchronized
xavArtley Apr 22, 2020
fc9c925
First pass to update reference documentation
xavArtley Apr 22, 2020
3ccb5e4
Add tests
xavArtley Apr 22, 2020
7903f6e
ensure vtk is imported before new class definition
xavArtley Apr 22, 2020
60ea167
handle int64 and uint64 arrays
xavArtley Apr 22, 2020
2c2444a
Notebooks fix
xavArtley Apr 22, 2020
7d6d241
VTK improvements
xavArtley Apr 22, 2020
4a10e77
Doc reference improvement
xavArtley Apr 22, 2020
244a822
camera model update with interaction events instead of all camera mod…
xavArtley Apr 22, 2020
dc07542
Rename VTKSynchronized in VTK pane
xavArtley Apr 22, 2020
3b2601c
keep track of camera callback to clean it when model is removed from …
xavArtley Apr 22, 2020
25f2283
forgot to unsubscribe camera callbacks before sync
xavArtley Apr 22, 2020
ee3adb8
enable vtkVolume serialization
xavArtley Apr 22, 2020
900ca4f
update tests
xavArtley Apr 22, 2020
430b566
fix renderable = true
xavArtley Apr 23, 2020
23579e7
code clean up
xavArtley Apr 23, 2020
99f45ca
Handle properly the orientation widget
xavArtley Apr 23, 2020
86ee0ca
remove light serialization and add vtk struct to test
xavArtley Apr 23, 2020
1898dda
update VTK example with a volume
xavArtley Apr 23, 2020
5876cd5
retrieve corrections from PR #1130 + test
xavArtley Apr 23, 2020
2669e62
one more test on volume
xavArtley Apr 23, 2020
7f27288
remove useless cell
xavArtley Apr 24, 2020
2c5a238
Add sync scene exporter
xavArtley Apr 26, 2020
824ad48
image serializercode factorization
xavArtley Apr 24, 2020
f7016a5
doc example VTK changes
xavArtley Apr 27, 2020
e4b04b6
vtk-js update => update and clean code
xavArtley May 2, 2020
c27453f
implement geometry deserializer
xavArtley May 2, 2020
f282827
modification to handle new vtk-js fonctionnality
xavArtley May 4, 2020
e962a03
finish deserializer and add test
xavArtley May 4, 2020
b47686d
ensure scene state is not changed when resolving promises
xavArtley May 5, 2020
3cee56e
set a working version of vtkjs
xavArtley May 13, 2020
f61d579
merge VTK and VTKJS
xavArtley May 13, 2020
841cb59
linux vtkSmartVolumeMapper
xavArtley May 13, 2020
e15284d
Apply suggestions from code review
xavArtley May 13, 2020
e35317c
Apply suggestions from code review
xavArtley May 13, 2020
202c777
reimplement construct_colorbar
xavArtley May 13, 2020
f10989c
reimplement serialize_on_instantiation
xavArtley May 18, 2020
8487cf5
add axes only if renderer exists
xavArtley May 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions examples/gallery/demos/VTKInteractive.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -65,20 +65,14 @@
"metadata": {},
"outputs": [],
"source": [
"# Colorbar construction of the vtk objects in the scene\n",
"cbars = vtkpan.construct_colorbars()\n",
"cbars.width = 300\n",
"cbar_view = pn.panel(cbars)\n",
"\n",
"# Creation of a mapping between Custom name and the VTK object reference\n",
"actor_ref = [\"None\", actor.__this__]\n",
"actor_names = [\"None\", 'St Helen']\n",
"actor_opts = {k:v for k,v in zip(actor_names, actor_ref)}\n",
"\n",
"options = {}\n",
"actor_selection = pn.widgets.Select(value=None, options = actor_opts , name=\"Actor Selection\")\n",
"global_info = pn.Column(cbar_view,actor_selection)\n",
"global_info"
"actor_selection"
]
},
{
Expand Down Expand Up @@ -183,8 +177,8 @@
"target.enable_keybindings = source.active.includes(1)\n",
"\"\"\"})\n",
"\n",
"reset_camera.jscallback(args={'target': vtkpan, 'initial_camera':initial_camera_pos},\n",
" clicks = \"target.camera = initial_camera\");\n",
"reset_camera.js_on_click(args={'target': vtkpan, 'initial_camera':initial_camera_pos},\n",
" code=\"target.camera = initial_camera\");\n",
"\n",
"background_color.jslink(vtkpan, code={'value':\"\"\"\n",
"const hextoarr = (color) => {return [parseInt(color.slice(1,3),16)/255, parseInt(color.slice(3,5),16)/255, parseInt(color.slice(5,7),16)/255]}\n",
Expand All @@ -194,31 +188,31 @@
"\n",
"opacity.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setOpacity(source.value)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"lighting.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setLighting(source.active)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"edges.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setEdgeVisibility(source.active)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"interpolation.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" if(source.value==\"Flat\"){\n",
" actor.getProperty().setInterpolationToFlat()\n",
" }else{\n",
Expand All @@ -231,15 +225,15 @@
"edges_color.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const hextoarr = (color) => {return [parseInt(color.slice(1,3),16)/255, parseInt(color.slice(3,5),16)/255, parseInt(color.slice(5,7),16)/255]}\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setEdgeColor(hextoarr(source.color))\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"representation.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" if(source.value==\"Points\"){\n",
" actor.getProperty().setRepresentationToPoints()\n",
" }else if(source.value==\"Wireframe\"){\n",
Expand All @@ -253,68 +247,68 @@
"\n",
"frontface_culling.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setFrontfaceCulling(source.active)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"backface_culling.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setBackfaceCulling(source.active)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"ambient.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setAmbient(source.value)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"diffuse.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setDiffuse(source.value)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"specular.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setSpecular(source.value)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"specular_power.jscallback(args={\"target\":vtkpan, \"actor_selection\":actor_selection}, value=\"\"\"\n",
"if (actor_selection.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==actor_selection.value})[0]\n",
" const actor = target.getActors(actor_selection.value)[0]\n",
" actor.getProperty().setSpecularPower(source.value)\n",
" target.renderer_el.getRenderWindow().render()\n",
"}\n",
"\"\"\")\n",
"\n",
"actor_selection.jslink(target=vtkpan, code = {'value' : \"\"\"\n",
"if (source.value!=\"None\"){\n",
" const actor = target.getActors().filter((a)=>{ return a.get('id')['id']==source.value})[0]\n",
" target.outline.setInputConnection(actor.getMapper().getInputConnection())\n",
" const actor = target.getActors(source.value)[0]\n",
" target.outline.setInputData(actor.getMapper().getInputData())\n",
" target.renderer_el.getRenderer().addActor(target.outline_actor)\n",
" \n",
" //synchronize actor props and widgets values\n",
" properties = actor.getProperty()\n",
" const properties = actor.getProperty()\n",
" opacity.setv({value: properties.getOpacity()}, {silent: true})\n",
" lighting.setv({active: !!properties.getLighting()}, {silent: true})\n",
" edges.active = !!properties.getEdgeVisibility()\n",
" actor_color = \"#\" + properties.getEdgeColor().map((c) => (\"0\" + Math.round(255*c).toString(16,2)).slice(-2)).join('')\n",
" const actor_color = \"#\" + properties.getEdgeColor().map((c) => (\"0\" + Math.round(255*c).toString(16,2)).slice(-2)).join('')\n",
" edges_color.setv({color: actor_color}, {silent: true})\n",
" interp_string = properties.getInterpolationAsString()\n",
" const interp_string = properties.getInterpolationAsString()\n",
" interpolation.setv({value: interp_string[0] + interp_string.slice(1).toLocaleLowerCase()}, {silent: true})\n",
" repr_string = properties.getRepresentationAsString()\n",
" const repr_string = properties.getRepresentationAsString()\n",
" representation.setv({value: repr_string[0] + repr_string.slice(1).toLocaleLowerCase()}, {silent: true})\n",
" frontface_culling.setv({active: !!properties.getFrontfaceCulling()}, {silent: true})\n",
" backface_culling.setv({active: !!properties.getBackfaceCulling()}, {silent: true})\n",
Expand Down Expand Up @@ -370,7 +364,7 @@
"metadata": {},
"outputs": [],
"source": [
"pn.Row(vtkpan,pn.Column(global_info,pn.Tabs(('Scene controller', pn.Column(scene_props, light_props)), ('Actor properties',actor_props))), sizing_mode=\"stretch_both\").servable()"
"pn.Row(vtkpan,pn.Column(actor_selection,pn.Tabs(('Scene controller', pn.Column(scene_props, light_props)), ('Actor properties',actor_props))), sizing_mode=\"stretch_both\").servable()"
]
},
{
Expand All @@ -382,10 +376,23 @@
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"pygments_lexer": "ipython3"
}
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
Expand Down
Loading