enthought / enthought/mayavi

Scene widgets do not refresh fully after data source update in pipeline

Open
#1,155 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
1.4k
Forks
316
Avg merge
7h 44m
Merged PRs (30d)
5

Description

Hi,
Just starting to use Mayavi, and noticed few minor issues: image_plane_widget and vector_cut_plane are not fully updated after data source update, when new array dimensions differs from old, via `self.our_scalar_field_src = newdata` and `self.our_vector_field_src = new_vec`

Screenshot shows, that while vectors updated to new dimensions, ImplicitPlane widget of vector_cut_plane, does not. Also, image_plane_widget dimensions not updated.
![image](https://user-images.githubusercontent.com/29224758/174802146-76343867-30d3-4f53-a1a5-2e467f168083.png)

```
src = self.our_scalar_field_src = self.scene.mlab.pipeline.scalar_field(s)
src = self.scene.mlab.pipeline.image_plane_widget(src, plane_orientation='z_axes', slice_index=1, )
viz = self.scene.mlab.pipeline.outline(src)
```
```
src_vec = self.our_vector_field_src = self.scene.mlab.pipeline.vector_field(vector_data[:,:,:,0],vector_data[:,:,:,1],vector_data[:,:,:,2])
viz = self.scene.mlab.pipeline.vector_cut_plane(src_vec)
viz.implicit_plane.widget.normal_to_z_axis = True
```

However I noticed such workarounds:

To update image_plane_widget:
```
##update scalars workaround
self.our_scalar_field_src.scalar_data = scalar_data
image_plane_widget = self.scene.mayavi_scene.children[0].children[0].children[0]
image_plane_widget.ipw.plane_orientation = 'y_axes'
image_plane_widget.ipw.plane_orientation = 'z_axes'
```

To update vector_cut_plane:
```
self.our_vector_field_src.vector_data = vector_data
#1. delete old
# self.scene.mayavi_scene.scene.actor_list[6:7] = []
module_manager1 = self.scene.mayavi_scene.children[1].children[0]
module_manager1.children[0:1] = []

##2. create new VectorCurPlane
from mayavi.modules.vector_cut_plane import VectorCutPlane
vector_cut_plane = VectorCutPlane()
array_source1 = self.scene.mayavi_scene.children[1]
self.scene.engine.add_filter(vector_cut_plane, array_source1)
vector_cut_plane = self.scene.mayavi_scene.children[1].children[0].children[0]
vector_cut_plane.implicit_plane.widget.normal_to_z_axis = True
```
This gives correct result, but makes code less readable:
![image](https://user-images.githubusercontent.com/29224758/174802852-daff9f42-b326-48cf-9839-7dd4ffd3f150.png)

Question: how to update plot data source correctly? Is it best way to remove object from pipeline ` module_manager1.children[0:1] = []`?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.