def add_to_pdata(self, array, name): if len(array.shape) > 3: vtk_order = quick_convert_rgba_to_vtk(array) flat_shape = (np.prod(vtk_order.shape[:3]), vtk_order.shape[3]) else: vtk_order = array flat_shape = (np.prod(vtk_order.shape),) self.db[name] = vtk_order.shape arr = self.pd.get_array(name) if arr is None: n = self.pd.add_array(vtk_order.reshape(flat_shape)) self.pd.get_array(n).name = name else: arr.from_array(vtk_order.reshape(flat_shape))
def _change_primary_scalars(self, arr, name): """ Parameters ---------- arr: ndarray, shape (Nx, Ny, Nz, 4) If this is going in as primary scalars, it is definitely an RGBA vector array provided by a BlendedImages. Therefore is needs to be reshaped to C-order (Nz, Ny, Nx, 4) name: str array label """ pd = self.data.point_data if pd.scalars is not None \ and pd.scalars.size != arr.size: #self.flush_arrays(update=False) self.safe_remove_arrays() rgba = quick_convert_rgba_to_vtk(arr) xyz_shape = rgba.shape[:3] flat_shape = (np.prod(xyz_shape), 4) dataset = self.data # set the ImageData metadata dataset.origin = self.blender.img_origin dataset.spacing = self.blender.img_spacing dataset.dimensions = xyz_shape[::-1] dataset.extent = 0, xyz_shape[2]-1, 0, xyz_shape[1]-1, 0, xyz_shape[0]-1 dataset.update_extent = dataset.extent dataset.number_of_scalar_components = 4 dataset.scalar_type = get_vtk_array_type(arr.dtype) # set the scalars and name self.set_new_array(rgba, name, update=False) ## pd.scalars = rgba.reshape(flat_shape) ## pd.scalars.name = name dataset.update() dataset.update_traits() self._check_aa() self._update_data() self._push_changes() self.point_scalars_name = name