Removed O4XP-like mask generation, fixed inland water cutting instead by passing water layers for cutting to photogen
This commit is contained in:
parent
642b42de1e
commit
43d00df062
@ -457,6 +457,7 @@ class mstr_layergen:
|
|||||||
|
|
||||||
|
|
||||||
# Create a water mask we need to remove from the DDS later
|
# Create a water mask we need to remove from the DDS later
|
||||||
|
"""
|
||||||
if (self._tag == "natural" and self._value == "water") or (self._tag == "water" and self._value == "lake") or (self._tag == "water" and self._value == "pond") or (self._tag == "water" and self._value == "river") or (self._tag == "leisure" and self._value == "swimming_pool"):
|
if (self._tag == "natural" and self._value == "water") or (self._tag == "water" and self._value == "lake") or (self._tag == "water" and self._value == "pond") or (self._tag == "water" and self._value == "river") or (self._tag == "leisure" and self._value == "swimming_pool"):
|
||||||
mstr_msg("layergen", "Generating inland water mask")
|
mstr_msg("layergen", "Generating inland water mask")
|
||||||
water_file = mstr_datafolder + "z_orthographic/orthos/" + self._latlngfld + "/" + str(self._lat_number) + "_" + str(self._lng_number) + "_water.png"
|
water_file = mstr_datafolder + "z_orthographic/orthos/" + self._latlngfld + "/" + str(self._lat_number) + "_" + str(self._lng_number) + "_water.png"
|
||||||
@ -464,7 +465,7 @@ class mstr_layergen:
|
|||||||
if os.path.isfile(water_file):
|
if os.path.isfile(water_file):
|
||||||
inl_mask = Image.open(water_file)
|
inl_mask = Image.open(water_file)
|
||||||
else:
|
else:
|
||||||
inl_mask = Image.new("RGBA", (self._imgsize, self._imgsize), (255,255,255,255))
|
inl_mask = Image.new("L", (self._imgsize, self._imgsize), (255))
|
||||||
lyr_pix = layer_comp.load()
|
lyr_pix = layer_comp.load()
|
||||||
inl_pix = inl_mask.load()
|
inl_pix = inl_mask.load()
|
||||||
for y in range(self._imgsize):
|
for y in range(self._imgsize):
|
||||||
@ -472,7 +473,7 @@ class mstr_layergen:
|
|||||||
l = lyr_pix[x,y]
|
l = lyr_pix[x,y]
|
||||||
if l[3] > 50:
|
if l[3] > 50:
|
||||||
clr = 255-l[3]
|
clr = 255-l[3]
|
||||||
c = (clr,clr,clr,255)
|
c = (clr)
|
||||||
inl_pix[x,y] = c
|
inl_pix[x,y] = c
|
||||||
inl_mask.save(water_file)
|
inl_mask.save(water_file)
|
||||||
#if l[3] > 65:
|
#if l[3] > 65:
|
||||||
@ -481,6 +482,7 @@ class mstr_layergen:
|
|||||||
#inl_mask.save(mstr_datafolder + "_cache/" + str(self._latitude) + "-" + str(self._lat_number) + "_" + str(self._longitude) + "-" + str(self._lng_number) + "_" + self._tag + "-" + self._value + "_layer_mask.png")
|
#inl_mask.save(mstr_datafolder + "_cache/" + str(self._latitude) + "-" + str(self._lat_number) + "_" + str(self._longitude) + "-" + str(self._lng_number) + "_" + self._tag + "-" + self._value + "_layer_mask.png")
|
||||||
#layer_comp = inl_mask
|
#layer_comp = inl_mask
|
||||||
mstr_msg("layergen", "Inland water mask generated and saved")
|
mstr_msg("layergen", "Inland water mask generated and saved")
|
||||||
|
"""
|
||||||
|
|
||||||
# Return the completed image
|
# Return the completed image
|
||||||
return layer_comp
|
return layer_comp
|
||||||
|
@ -234,11 +234,13 @@ class mstr_orthographic:
|
|||||||
|
|
||||||
# In here we store the layers
|
# In here we store the layers
|
||||||
photolayers = []
|
photolayers = []
|
||||||
|
waterlayers = []
|
||||||
|
|
||||||
# The masks are handed to layergen in sequence. The layers are then
|
# The masks are handed to layergen in sequence. The layers are then
|
||||||
# in turn handed to photogen.
|
# in turn handed to photogen.
|
||||||
|
|
||||||
curlyr = 1
|
curlyr = 1
|
||||||
|
wtr_info = False
|
||||||
for layer in layers:
|
for layer in layers:
|
||||||
# Let the user know
|
# Let the user know
|
||||||
mstr_msg("orthographic", "Processing layer " + str(curlyr) + " of " + str(len(layers)))
|
mstr_msg("orthographic", "Processing layer " + str(curlyr) + " of " + str(len(layers)))
|
||||||
@ -256,7 +258,15 @@ class mstr_orthographic:
|
|||||||
lg.set_latlng_folder(self._latlngfld)
|
lg.set_latlng_folder(self._latlngfld)
|
||||||
#lg.open_db()
|
#lg.open_db()
|
||||||
lg.open_tile_info()
|
lg.open_tile_info()
|
||||||
photolayers.append(lg.genlayer(mask, osmxml))
|
lyr = lg.genlayer(mask, osmxml)
|
||||||
|
photolayers.append(lyr)
|
||||||
|
if (layer[0] == "natural" and layer[1] == "water") or (layer[0] == "water" and layer[1] == "lake") or (layer[0] == "water" and layer[1] == "pond") or (layer[0] == "water" and layer[1] == "river") or (layer[0] == "waterway" and layer[1] == "river"):
|
||||||
|
waterlayers.append(lyr)
|
||||||
|
if wtr_info == False:
|
||||||
|
wtr_info = True
|
||||||
|
wtrfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/wtrfile"
|
||||||
|
with open(wtrfile, 'a') as textfile:
|
||||||
|
textfile.write(str(grid_lat) + " " + str(grid_lng) + "\r\n")
|
||||||
curlyr = curlyr+1
|
curlyr = curlyr+1
|
||||||
mstr_msg("orthographic", "All layers created")
|
mstr_msg("orthographic", "All layers created")
|
||||||
|
|
||||||
@ -264,7 +274,7 @@ class mstr_orthographic:
|
|||||||
# Snap a photo with our satellite :)
|
# Snap a photo with our satellite :)
|
||||||
mstr_msg("orthographic", "Generating ortho photo")
|
mstr_msg("orthographic", "Generating ortho photo")
|
||||||
pg = mstr_photogen(self._lat, self._long, grid_lat, grid_lng, maxlatlng[0], maxlatlng[1])
|
pg = mstr_photogen(self._lat, self._long, grid_lat, grid_lng, maxlatlng[0], maxlatlng[1])
|
||||||
pg.genphoto(photolayers)
|
pg.genphoto(photolayers, waterlayers)
|
||||||
mstr_msg("orthographic", " -- Ortho photo generated -- ")
|
mstr_msg("orthographic", " -- Ortho photo generated -- ")
|
||||||
print("")
|
print("")
|
||||||
print("")
|
print("")
|
||||||
|
45
photogen.py
45
photogen.py
@ -39,7 +39,7 @@ class mstr_photogen:
|
|||||||
|
|
||||||
|
|
||||||
# This puts it all together. Bonus: AND saves it.
|
# This puts it all together. Bonus: AND saves it.
|
||||||
def genphoto(self, layers):
|
def genphoto(self, layers, waterlayers):
|
||||||
# Template for the file name which is always the same
|
# Template for the file name which is always the same
|
||||||
#root_filename = mstr_datafolder + "/_cache/" + str(self._lat) + "-" + str(self._ty) + "_" + str(self._lng) + "-" + str(self._tx) + "_"
|
#root_filename = mstr_datafolder + "/_cache/" + str(self._lat) + "-" + str(self._ty) + "_" + str(self._lng) + "-" + str(self._tx) + "_"
|
||||||
|
|
||||||
@ -138,26 +138,6 @@ class mstr_photogen:
|
|||||||
t = (0,0,0,0)
|
t = (0,0,0,0)
|
||||||
ocean_pix[x,y] = t
|
ocean_pix[x,y] = t
|
||||||
|
|
||||||
# Now cut out inland water
|
|
||||||
water_layers = (
|
|
||||||
["natural", "water"],
|
|
||||||
["water", "lake"],
|
|
||||||
["water", "pond"],
|
|
||||||
["water", "river"],
|
|
||||||
["leisure", "swimming_pool"]
|
|
||||||
)
|
|
||||||
for l in water_layers:
|
|
||||||
fn = mstr_datafolder + "_cache/" + str(self._lat) + "-" + str(self._ty) + "_" + str(self._lng) + "-" + str(self._tx) + "_" + l[0] + "-" + l[1] + "_layer_mask.png"
|
|
||||||
if os.path.isfile(fn) == True:
|
|
||||||
wtr = Image.open(fn)
|
|
||||||
wtr_pix = wtr.load()
|
|
||||||
tilepix = self._tile.load()
|
|
||||||
for y in range(wtr.height):
|
|
||||||
for x in range(wtr.width):
|
|
||||||
wp = wtr_pix[x,y]
|
|
||||||
if wp[0] == 255 and wp[1] == 0 and wp[2] == 255 and wp[3] == 255:
|
|
||||||
tilepix[x,y] = (0,0,0,0)
|
|
||||||
|
|
||||||
# Alpha correction on final image
|
# Alpha correction on final image
|
||||||
corrpix = self._tile.load()
|
corrpix = self._tile.load()
|
||||||
for y in range(0, self._tile.height):
|
for y in range(0, self._tile.height):
|
||||||
@ -168,6 +148,29 @@ class mstr_photogen:
|
|||||||
corrpix[x,y] = nc
|
corrpix[x,y] = nc
|
||||||
if c[3] == 0:
|
if c[3] == 0:
|
||||||
corrpix[x,y] = (0,0,0,0)
|
corrpix[x,y] = (0,0,0,0)
|
||||||
|
|
||||||
|
# Now cut out inland water
|
||||||
|
for w in waterlayers:
|
||||||
|
wtr_pix = w.load()
|
||||||
|
for y in range(w.height):
|
||||||
|
for x in range(w.width):
|
||||||
|
v = wtr_pix[x,y]
|
||||||
|
if v[3] >= 50:
|
||||||
|
c = (0,0,0,0)
|
||||||
|
corrpix[x,y] = c
|
||||||
|
|
||||||
|
"""
|
||||||
|
ddsf_water = mstr_datafolder + "z_orthographic/orthos/" + self._latlngfld + "/" + str(self._ty) + "_" + str(self._tx) + "_water.png"
|
||||||
|
if os.path.isfile(ddsf_water) == True:
|
||||||
|
wtr = Image.open(ddsf_water)
|
||||||
|
wtr_pix = wtr.load()
|
||||||
|
for y in range(wtr.height):
|
||||||
|
for x in range(wtr.width):
|
||||||
|
v = wtr_pix[x,y]
|
||||||
|
if v <= 50:
|
||||||
|
c = (0,0,0,0)
|
||||||
|
corrpix[x,y] = c
|
||||||
|
"""
|
||||||
|
|
||||||
# We are now in posession of the final image.
|
# We are now in posession of the final image.
|
||||||
|
|
||||||
|
@ -154,21 +154,17 @@ class mstr_xp_scenery:
|
|||||||
cnt_x = cur_lat + (self._vstep/2)
|
cnt_x = cur_lat + (self._vstep/2)
|
||||||
cnt_y = cur_lng + (mstr_zl_18/2)
|
cnt_y = cur_lng + (mstr_zl_18/2)
|
||||||
|
|
||||||
ddsf_water = mstr_datafolder + "z_orthographic/orthos/" + self._latlngfld + "/" + str(lat) + "_" + str(lng) + "_water.png"
|
|
||||||
|
|
||||||
terstr = ""
|
terstr = ""
|
||||||
terstr = terstr + "A\r\n"
|
terstr = terstr + "A\r\n"
|
||||||
terstr = terstr + "800\r\n"
|
terstr = terstr + "800\r\n"
|
||||||
terstr = terstr + "TERRAIN\r\n"
|
terstr = terstr + "TERRAIN\r\n"
|
||||||
terstr = terstr + "\r\n"
|
terstr = terstr + "\r\n"
|
||||||
terstr = terstr + "LOAD_CENTER " + str(cnt_x) + " " + str(cnt_y) + " " + str(dmt) + " 2048\r\n"
|
terstr = terstr + "LOAD_CENTER " + str(cnt_x) + " " + str(cnt_y) + " " + str(dmt) + " 2048\r\n"
|
||||||
|
#terstr = terstr + "BASE_TEX_NOWRAP ../../orthos/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".dds\r\n"
|
||||||
terstr = terstr + "TEXTURE_NOWRAP ../../orthos/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".dds\r\n"
|
terstr = terstr + "TEXTURE_NOWRAP ../../orthos/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".dds\r\n"
|
||||||
if mstr_xp_scn_normalmaps == True:
|
if mstr_xp_scn_normalmaps == True:
|
||||||
terstr = terstr + "NORMAL_TEX 1.0 ../../normals/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".png\r\n"
|
terstr = terstr + "NORMAL_TEX 1.0 ../../normals/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".png\r\n"
|
||||||
|
|
||||||
if os.path.isfile(ddsf_water) == True:
|
|
||||||
terstr = terstr + "BORDER_TEX ../../orthos/" + self._latlngfld + "/" + str(lat) + "_" + str(lng) + "_water.png\r\n"
|
|
||||||
|
|
||||||
terfln = mstr_datafolder + "z_orthographic/terrain/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".ter"
|
terfln = mstr_datafolder + "z_orthographic/terrain/" + self._latlngfld + "/" + str(lat)+"_"+str(lng)+".ter"
|
||||||
|
|
||||||
with open(terfln, 'w') as textfile:
|
with open(terfln, 'w') as textfile:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user