-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataMaps.py
60 lines (47 loc) · 1.44 KB
/
DataMaps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""
"""
import numpy as np
import sys
import math
import os
from DataMap import *
from Config import *
import pickle
class DataMaps:
def __init__(self, mode='rb'):
file = Config['folder']+"/bin/datamap.bin"
self.file = open(file, mode)
self.index = {}
self.size = None
self.mode = mode
self.width = 0
if mode == 'rb':
self.load_index()
pixels_size = self.size / 4 / 4 # 1 pixel = 4 floats (normal.xyz, height.z)
self.width = int(math.sqrt(pixels_size))
def close(self):
self.file.close()
if self.mode == 'wb':
self.save_index()
def save(self, data, size, name):
self.index[name] = self.file.tell()
self.file.write(data.tobytes())
if self.size is None:
self.index["size"] = size
def load(self, tile):
name = tile.name
self.file.seek(self.index[name])
b = self.file.read(self.size)
tile.datamap = np.frombuffer(b, dtype=np.float32)
return tile.datamap
def save_index(self):
file = Config['folder']+"/bin/datamap.idx"
with open(file, "wb") as f:
pickle.dump(self.index, f)
def load_index(self):
file = Config['folder']+"/bin/datamap.idx"
with open(file, "rb") as f:
self.index = pickle.load(f)
self.size = self.index['size']
def get_width(self):
return self.width