def dump_data_array(dataset_dir, data_dir, array, root=None, compress=True): """Dump vtkjs data array.""" if root is None: root = {} if not array: return None if array.GetDataType() == 12: # IdType need to be converted to Uint32 array_size = array.GetNumberOfTuples() * array.GetNumberOfComponents() new_array = vtk.vtkTypeUInt32Array() new_array.SetNumberOfTuples(array_size) for i in range(array_size): new_array.SetValue( i, -1 if array.GetValue(i) < 0 else array.GetValue(i)) pbuffer = memoryview(new_array) else: pbuffer = memoryview(array) pMd5 = hashlib.md5(pbuffer).hexdigest() ppath = os.path.join(data_dir, pMd5) with open(ppath, 'wb') as f: f.write(pbuffer) if compress: with open(ppath, 'rb') as f_in, gzip.open( os.path.join(data_dir, pMd5 + '.gz'), 'wb') as f_out: shutil.copyfileobj(f_in, f_out) # Close then remove. os.remove(ppath) root['ref'] = get_ref(os.path.relpath(data_dir, dataset_dir), pMd5) root['vtkClass'] = 'vtkDataArray' root['name'] = array.GetName() root['dataType'] = jsMapping[arrayTypesMapping[array.GetDataType()]] root['numberOfComponents'] = array.GetNumberOfComponents() root['size'] = array.GetNumberOfComponents() * array.GetNumberOfTuples() root['ranges'] = [] if root['numberOfComponents'] > 1: for i in range(root['numberOfComponents']): root['ranges'].append(get_range_info(array, i)) root['ranges'].append(get_range_info(array, -1)) else: root['ranges'].append(get_range_info(array, 0)) return root
def _dump_data_array(scDirs, datasetDir, dataDir, array, root={}, compress=True): if not array: return None if array.GetDataType() == 12: # IdType need to be converted to Uint32 arraySize = array.GetNumberOfTuples() * array.GetNumberOfComponents() newArray = vtk.vtkTypeUInt32Array() newArray.SetNumberOfTuples(arraySize) for i in range(arraySize): newArray.SetValue( i, -1 if array.GetValue(i) < 0 else array.GetValue(i)) pBuffer = buffer(newArray) else: pBuffer = buffer(array) pMd5 = hashlib.md5(pBuffer).hexdigest() pPath = os.path.join(dataDir, pMd5) scDirs.append([pPath, bytes(pBuffer)]) if compress: raise NotImplementedError('TODO') root['ref'] = _get_ref(os.path.relpath(dataDir, datasetDir), pMd5) root['vtkClass'] = 'vtkDataArray' root['name'] = array.GetName() root['dataType'] = _js_mapping[arrayTypesMapping[array.GetDataType()]] root['numberOfComponents'] = array.GetNumberOfComponents() root['size'] = array.GetNumberOfComponents() * array.GetNumberOfTuples() root['ranges'] = [] if root['numberOfComponents'] > 1: for i in range(root['numberOfComponents']): root['ranges'].append(_get_range_info(array, i)) root['ranges'].append(_get_range_info(array, -1)) else: root['ranges'].append(_get_range_info(array, 0)) return root