diff --git a/data_array.py b/data_array.py new file mode 100644 index 0000000..ad5559b --- /dev/null +++ b/data_array.py @@ -0,0 +1,29 @@ +import numpy as np +import functools +import operator + +class DataArray: + """Class holding information on ndarray""" + def __init__(self, data, spatial_axes, components_order='C'): + self.data = data + axes = list(range(data.ndim)) + for ax in spatial_axes: + axes.remove(ax) + + nb_components = functools.reduce(lambda x, y: x * data.shape[y], axes, 1) + + if components_order == 'C': + axes.reverse() + else: + raise Exception('Unrecognized components order') + + axes += spatial_axes + + self.flat_data = np.ravel(np.transpose(self.data, axes=axes), order='F') + self.attributes = { + "type": str(self.flat_data.dtype).capitalize(), + "NumberOfComponents": nb_components + } + + def __str__(self): + return self.attributes.__str__() diff --git a/test.py b/test.py new file mode 100644 index 0000000..d775ed6 --- /dev/null +++ b/test.py @@ -0,0 +1,21 @@ +from writer import * +from data_array import * +import numpy as np + +writer = Writer('RectilinearGrid') +writer.setDataNodeAttributes({ + "WholeExtent": "0 1 0 1 0 1" +}) + +piece = writer.registerPiece({ + "Extent": "0 1 0 1 0 1" +}) + +coordinates = piece.register('Coordinates') + +array = np.array([[0, 0, 0], [1, 1, 1]]) +print(type(array.dtype)) +data_array = DataArray(array, [ 1]) +print(data_array) + +print(writer) diff --git a/writer.py b/writer.py index ba9a576..4b52e0c 100644 --- a/writer.py +++ b/writer.py @@ -1,49 +1,49 @@ import xml.dom import xml.dom.minidom as dom import sys def setAttributes(node, attributes): """Set attributes of a node""" map(lambda x: node.setAttribute(*x), attributes.items()) class Component: """Generic component class capable of registering sub-components""" def __init__(self, name, parent_node, document): self.node = document.createElement(name) self.document = document parent_node.appendChild(self.node) - def register(self, name, attributes): + def register(self, name, attributes=dict()): """Register a sub-component""" sub_component = Component(name, self.node, self.document) setAttributes(sub_component.node, attributes) return sub_component class Writer: """Generic XML handler for VTK files""" def __init__(self, vtk_format, vtk_version='0.1', byte_order='LittleEndian'): self.document = dom.getDOMImplementation().createDocument(None, 'VTKFile', None) self.root = self.document.documentElement self.root.setAttribute('type', vtk_format) self.root.setAttribute('version', vtk_version) self.root.setAttribute('byte_order', byte_order) self.data_node = self.document.createElement(vtk_format) self.root.appendChild(self.data_node) def setDataNodeAttributes(self, attributes): """Set attributes for the entire dataset""" setAttributes(self.data_node, attributes) def registerPiece(self, attributes): """Register a piece element""" piece = Component('Piece', self.data_node, self.document) setAttributes(piece.node, attributes) return piece def __str__(self): """Print XML to string""" return self.document.toprettyxml()