Esempio n. 1
0
    def __init__(self, *args, **kws):
        assert args, 'expected at least one argument'
        if type(args[0]) is str:
            if 'only_structure' in kws and kws['only_structure']:
                self.fromfile(args[0], 1)
            else:
                self.fromfile(args[0])
            return
        else:
            structure = args[0]
            args = list(args)[1:]
        if not is_dataset(structure):
            raise TypeError(
                'argument structure must be StructuredPoints|StructuredGrid|UnstructuredGrid|RectilinearGrid|PolyData but got %s'
                % (type(structure)))
        self.structure = structure
        for a in args:
            if common.is_string(a):
                if len(a) > 255:
                    log.warning('striping header string to a length =255')
                self.header = a[:255]
            elif is_pointdata(a):
                self.point_data = a
            elif is_celldata(a):
                self.cell_data = a
            else:
                log.warning('unexpexted argument %s', type(a))
        if self.header is None:
            self.header = 'Really cool data'
            log.info('Using default header=%s' % (repr(self.header)))
        if self.point_data is None and self.cell_data is None:
            log.info('No point/cell data defined')

        if self.point_data is not None:
            s = self.structure.get_size()
            s1 = self.point_data.get_size()
            if s1 != s:
                raise ValueError(
                    'DataSet (size=%s) and PointData (size=%s) have different sizes'
                    % (s, s1))
        else:
            self.point_data = PointData()
        if self.cell_data is not None:
            s = self.structure.get_cell_size()
            s1 = self.cell_data.get_size()
            if s1 != s:
                raise ValueError(
                    'DataSet (cell_size=%s) and CellData (size=%s) have different sizes'
                    % (s, s1))
        else:
            self.cell_data = CellData()
Esempio n. 2
0
    def fromfile(self, filename, only_structure=0):
        filename = filename.strip()
        if filename[-4:] != '.vtk':
            filename += '.vtk'
        f = open(filename, 'rb')
        l = f.readline()
        fileversion = l.strip().replace(b' ', b'').lower()
        if not fileversion == b'#vtkdatafileversion2.0':
            print(
                'File %s is not in VTK 2.0 format, got %s but continuing anyway..'
                % (filename, fileversion))
        self.header = f.readline().rstrip().decode('ascii', 'replace')
        format = f.readline().strip().lower()
        if format not in [b'ascii', b'binary']:
            raise ValueError('Expected ascii|binary but got %s' %
                             (repr(format)))
        if format == b'binary':
            raise NotImplementedError('reading vtk binary format')
        l = common._getline(f).decode('ascii').lower().split(' ')
        if l[0].strip() != 'dataset':
            raise ValueError('expected dataset but got %s' % (l[0]))
        try:
            ff = parsers[l[1]]
        except KeyError:
            raise NotImplementedError('%s_fromfile' % (l[1]))
        self.structure, l = ff(f, self)

        for i in range(2):
            if only_structure: break
            if not l:
                break
            l = [s.strip() for s in l.decode('ascii').lower().split(' ')]
            assert len(l) == 2 and l[0] in ['cell_data', 'point_data'], l[0]
            data = l[0]
            n = int(l[1])
            lst = []
            while 1:
                l = common._getline(f)
                if not l:
                    break
                sl = [s.strip() for s in l.decode('ascii').split()]
                k = sl[0].lower()
                if k not in [
                        'scalars', 'color_scalars', 'lookup_table', 'vectors',
                        'normals', 'texture_coordinates', 'tensors', 'field'
                ]:
                    break
                try:
                    ff = parsers[k]
                except KeyError:
                    raise NotImplementedError('%s_fromfile' % (k))
                lst.append(ff(f, n, sl[1:]))
            if data == 'point_data':
                self.point_data = PointData(*lst)
            if data == 'cell_data':
                self.cell_data = CellData(*lst)
        if self.point_data is None:
            self.point_data = PointData()
        if self.cell_data is None:
            self.cell_data = CellData()
        f.close()