# ------------------------------------------------------------------- # ORTHOGRAPHIC # Your personal aerial satellite. Always on. At any altitude.* # Developed by MarStrMind # License: Open Software License 3.0 # Up to date version always on marstr.online # ------------------------------------------------------------------- # tileinfo.py # Stores and retrieves information about which material borders on # which edge, aiding in the choice of material to generate seamless # images. # ------------------------------------------------------------------- from defines import * from functions import * from log import * class mstr_tileinfo: def __init__(self, lat, lng, latlngfld): self._lat = lat self._lng = lng self._latlngfld = latlngfld self._adjfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/adjinfo" self._cplfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/cplinfo" self.createDataFile() self.createCompletionFile() def createDataFile(self): if os.path.isfile(self._adjfile) == False: open(self._adjfile, 'a').close() def createCompletionFile(self): if os.path.isfile(self._cplfile) == False: open(self._cplfile, 'a').close() def add_adjacency_data(self, tv, th, tag, value, source, adj): line = "" line = line + str(tv) + " " line = line + str(th) + " " line = line + tag + " " line = line + value + " " line = line + str(source) + " " line = line + str(adj) + "\n" with open(self._adjfile, 'a') as textfile: textfile.write(line) def add_completion_data(self, tv, th, tag, value, source, adj): line = "" line = line + str(tv) + " " line = line + str(th) + " " line = line + tag + " " line = line + value + " " line = line + str(source) + " " line = line + str(adj) + "\n" with open(self._cplfile, 'a') as textfile: textfile.write(line) def get_adjacency_for_tag_and_value(self, tv, th, tag, value): adj = [] fnlines = [] with open(self._adjfile) as textfile: fnlines = textfile.readlines() for ln in fnlines: l = ln.split(" ") if int(l[0]) == tv and int(l[1]) == th: if l[2] == tag and l[3] == value: l[5] = l[5].replace("\n", "") adj.append(int(l[4])) adj.append(l[5]) break return adj def get_adjacency_for_tag_and_value_in_lat_lng(self, lat, lng, tag, value, tv, th, brd): latlngfld = self.latlng_folder([lat, lng]) adj = [] fn = mstr_datafolder + "z_orthographic/data/" + latlngfld + "/adjinfo" if os.path.isfile(fn) == True: fnlines = [] with open(fn) as textfile: fnlines = textfile.readlines() if brd == "b": # Find highest tile number top = 0 for ln in fnlines: l = ln.split(" ") if int(l[0]) > top: top = int(l[0]) for ln in fnlines: l = ln.split(" ") if int(l[0]) == top and int(l[1]) == th: if l[2] == tag and l[3] == value: adj.append(int(l[4])) adj.append(l[5]) if brd == "l": # Find highest tile number right = 0 for ln in fnlines: l = ln.split(" ") if int(l[1]) > right: right = int(l[1]) for ln in fnlines: l = ln.split(" ") if int(l[1]) == right and int(l[0]) == tv: if l[2] == tag and l[3] == value: adj.append(int(l[4])) adj.append(l[5]) if brd == "r": for ln in fnlines: l = ln.split(" ") if int(l[0]) == 1 and int(l[1]) == tv: if l[2] == tag and l[3] == value: adj.append(int(l[4])) adj.append(l[5]) if brd == "t": for ln in fnlines: l = ln.split(" ") if int(l[1]) == 1 and int(l[0]) == th: if l[2] == tag and l[3] == value: adj.append(int(l[4])) adj.append(l[5]) return adj def get_completion_in_lat_lng(self, lat, lng, tv, th, brd): latlngfld = self.latlng_folder([lat, lng]) adj = [] fn = mstr_datafolder + "z_orthographic/data/" + latlngfld + "/cplinfo" if os.path.isfile(fn) == True: fnlines = [] with open(fn) as textfile: fnlines = textfile.readlines() if brd == "b": # Find highest tile number top = 0 for ln in fnlines: l = ln.split(" ") if int(l[0]) > top: top = int(l[0]) for ln in fnlines: l = ln.split(" ") if int(l[0]) == top and int(l[1]) == th: adj.append(l[2]) adj.append(l[3]) adj.append(int(l[4])) adj.append(l[5]) if brd == "l": # Find highest tile number right = 0 for ln in fnlines: l = ln.split(" ") if int(l[1]) > right: right = int(l[1]) for ln in fnlines: l = ln.split(" ") if int(l[1]) == right and int(l[0]) == tv: adj.append(l[2]) adj.append(l[3]) adj.append(int(l[4])) adj.append(l[5]) if brd == "r": for ln in fnlines: l = ln.split(" ") if int(l[0]) == 1 and int(l[1]) == tv: adj.append(l[2]) adj.append(l[3]) adj.append(int(l[4])) adj.append(l[5]) if brd == "t": for ln in fnlines: l = ln.split(" ") if int(l[1]) == 1 and int(l[0]) == th: adj.append(l[2]) adj.append(l[3]) adj.append(int(l[4])) adj.append(l[5]) return adj def get_adjacency_for_completion(self, tv, th): adj = [] fnlines = [] with open(self._cplfile) as textfile: fnlines = textfile.readlines() for ln in fnlines: l = ln.split(" ") if int(l[0]) == tv and int(l[1]) == th: l[5] = l[5].replace("\n", "") adj.append(l[2]) adj.append(l[3]) adj.append(int(l[4])) adj.append(l[5]) break return adj # Construct a folder name for latitude and longitude def latlng_folder(self, numbers): fstr = "" if numbers[0] >= 0: fstr = "+" if numbers[0] < 0: fstr = "-" if abs(numbers[0]) < 10: fstr = fstr + "0" + str(numbers[0]) if abs(numbers[0]) >= 10 and numbers[0] <= 90: fstr = fstr + str(numbers[0]) if numbers[1] >= 0: fstr = fstr + "+" if numbers[1] < 0: fstr = fstr + "-" if abs(numbers[1]) < 10: fstr = fstr + "00" + str(numbers[1]) if abs(numbers[1]) >= 10 and numbers[0] <= 99: fstr = fstr + "0" + str(numbers[1]) if abs(numbers[1]) >= 100 : fstr = fstr + str(numbers[1]) return fstr