Procházet zdrojové kódy

Remove a bunch of old scripts

master
Fen Dweller před 4 roky
rodič
revize
ccc82da113
14 změnil soubory, kde provedl 3 přidání a 706 odebrání
  1. +0
    -43
      scripts/blender-building.py
  2. +0
    -144
      scripts/blender-freestyle.py
  3. +0
    -48
      scripts/blender-mountain.py
  4. +0
    -46
      scripts/blender-skyline.py
  5. +0
    -58
      scripts/blender-slice.py
  6. +0
    -46
      scripts/blender-terrain.py
  7. +0
    -64
      scripts/combine-svg.py
  8. +0
    -0
      scripts/luts/base-lut.png
  9. +0
    -0
      scripts/luts/highlight-lut.png
  10. +0
    -0
      scripts/luts/vivid-lut.png
  11. +3
    -3
      scripts/process-potrace-model-forms.py
  12. +0
    -82
      scripts/process-potrace-model.py
  13. +0
    -98
      scripts/process-potrace-warships.py
  14. +0
    -74
      scripts/process-potrace.py

+ 0
- 43
scripts/blender-building.py Zobrazit soubor

@@ -1,43 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import json

PREFIX = "PREFIX"

buildings = bpy.data.objects["map"].children
c = bpy.data.objects["cam"]
#s = bpy.data.objects["sun"]

selected = bpy.context.selected_objects[0]

data = {}
data["name"] = selected.name
data["place"] = ["Vancouver"]
data["views"] = {}

for b in buildings:
pick = b.name == data["name"]
if not pick:
b.hide_render = True
else:
b.hide_render = False

b = selected

for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"], [0, 0, 1, "North (Top)"], [1, 0, 0, "West (Top)"]]:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 10000]) @ rot
data["views"][angles[3]] = b.dimensions[angles[2]]
#s.rotation_euler = c.rotation_euler
bpy.context.scene.render.filepath = f"{PREFIX}/Desktop/osm/{data['name']}-{angles[3]}.png"
bpy.ops.render.render(write_still = True)

with open(f"{PREFIX}/Desktop/osm/{data['name']}-data.json", "w") as file:
json.dump(data, file)

+ 0
- 144
scripts/blender-freestyle.py Zobrazit soubor

@@ -1,144 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import json
import os
import subprocess
import xml.etree.ElementTree as ET

c = bpy.data.objects["cam"]

selected = bpy.context.selected_objects[0]

bpy.ops.object.transform_apply( rotation = True )

data = {}

b = selected

FRONT = [0, 1, 2, "Front"]
FRONT_CORNER = [0.5, 1, 2, "Front Corner"]
SIDE = [1, 1, 2, "Side"]
BACK_CORNER = [1.5, 1, 2, "Back Corner"]
BACK = [2, 1, 2, "Back"]
BOTTOM = [0, 2, 1, "Bottom"]
TOP = [2, 0, 1, "Top"]

sides = [FRONT, FRONT_CORNER, SIDE, BACK_CORNER, BACK, BOTTOM, TOP]

path = "/tmp/macrovision/"

media_path = "/home/crux/furry/macrovision/media/"
media_folder = "clothing/Boots/"

os.makedirs(path, exist_ok=True)
os.makedirs(os.path.join(media_path, media_folder), exist_ok=True)


ns = {"svg": "http://www.w3.org/2000/svg"}
ET.register_namespace("", ns["svg"])

TEMPLATE = """
{{
name: "{0}",
sides: {{
{1}
}}
}}"""

VIEW_TEMPLATE = ' "{0}": {{ height: math.unit({1}, "meters") }}'

for angles in sides:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 100]) @ rot
data[angles[3]] = b.dimensions[angles[2]]
output_path = os.path.join(path, f"{b.name}-{angles[3]}")
bpy.context.scene.render.filepath = output_path

svg_path = output_path + "0001.svg"

bpy.ops.render.render(write_still = True)
os.rename(svg_path, output_path + ".svg")

subprocess.check_output([
"potrace",
"-b",
"svg",
output_path + ".bmp",
"-o",
output_path + "-fill.svg"
])

line_xml = ET.parse(output_path + ".svg")
fill_xml = ET.parse(output_path + "-fill.svg")

style = None

for elem in line_xml.findall(".//svg:path", namespaces=ns):
if style is None:
style = {}
for key in elem.attrib:
if not key == "d":
style[key] = elem.attrib[key]
for key in style:
del elem.attrib[key]
parts = elem.attrib["d"].strip().split(" ")
if len(parts) > 6 and parts[1] == parts[3] == parts[5] and parts[2] == parts[4] == parts[6]:
elem.attrib["DELETEME"] = True

while True:
child = line_xml.find(".//svg:path[@DELETEME]", namespaces=ns)
parent = line_xml.find(".//svg:path[@DELETEME]...", namespaces=ns)
print(parent, child)
if parent is None:
break
parent.remove(child)

for key in style:
line_xml.find("./svg:g", namespaces=ns).attrib[key] = style[key]

line_xml.write(output_path + "-cleaned.svg")

subprocess.check_output([
"inkscape",
output_path + "-cleaned.svg",
"--batch-process",
"--actions=EditSelectAll;SelectionSimplify;FileSave",
])

optimized = ET.parse(output_path + "-cleaned.svg")

lines = optimized.find("./svg:g", namespaces=ns)

fill_xml.find("svg:g[@fill='#000000']", namespaces=ns).attrib["fill"] = "#1a1a1a"

fill_xml.iter().__next__().append(lines)

fill_xml.write(output_path + "-combined.svg")

subprocess.check_output([
"inkscape",
"--batch-process",
"--export-plain-svg=" + output_path + "-prepared.svg",
"--export-area-drawing",
output_path + "-combined.svg"
])

subprocess.check_output([
"svgo",
output_path + "-prepared.svg",
"-o",
os.path.join(media_path, media_folder, f"{b.name}-{angles[3]}.svg")
])

lines = []
for key, value in data.items():
lines.append(VIEW_TEMPLATE.format(key, value))

print(TEMPLATE.format(b.name, ",\n".join(lines)))

+ 0
- 48
scripts/blender-mountain.py Zobrazit soubor

@@ -1,48 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import math
import json
import bmesh

PREFIX = "PREFIX"

c = bpy.data.objects["cam"]
#s = bpy.data.objects["sun"]

selected = bpy.context.selected_objects[0]

data = {}
data["name"] = selected.name
data["place"] = ["Mountains"]
data["views"] = {}

b = selected

if True:
bpy.ops.object.mode_set( mode = 'EDIT' )
bpy.ops.mesh.select_mode( type = 'FACE' )
bpy.ops.mesh.select_all( action = 'SELECT' )

bpy.ops.mesh.extrude_region_move(
TRANSFORM_OT_translate={"value":(0, 0, -100)}
)

bpy.ops.transform.transform(mode='RESIZE', value=[1, 1, 0, 1], center_override=[0, 0, 0])

for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"]]:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1 * math.sqrt(2)
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 20000]) @ rot
data["views"][angles[3]] = b.dimensions[angles[2]]
#s.rotation_euler = c.rotation_euler
bpy.context.scene.render.filepath = f"{PREFIX}/Desktop/osm/{data['name']}-{angles[3]}.png"
bpy.ops.render.render(write_still = True)

with open(f"{PREFIX}/Desktop/osm/{data['name']}-data.json", "w") as file:
json.dump(data, file)

+ 0
- 46
scripts/blender-skyline.py Zobrazit soubor

@@ -1,46 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import json

PREFIX = "PREFIX"

c = bpy.data.objects["cam"]
#s = bpy.data.objects["sun"]

selected = bpy.context.selected_objects[0]

data = {}
data["name"] = selected.name
data["place"] = ["Mountains"]
data["views"] = {}

one_object = True

if not one_object:
buildings = bpy.data.objects["map"].children
for b in buildings:
pick = b.name == data["name"]
if not pick:
b.hide_render = True
else:
b.hide_render = False

b = selected

for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"], [0, 0, 1, "North (Top)"], [1, 0, 0, "West (Top)"]]:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 10000]) @ rot
data["views"][angles[3]] = b.dimensions[angles[2]]
#s.rotation_euler = c.rotation_euler
bpy.context.scene.render.filepath = f"{PREFIX}/Desktop/osm/{data['name']}-{angles[3]}.png"
bpy.ops.render.render(write_still = True)

with open(f"{PREFIX}/Desktop/osm/{data['name']}-data.json", "w") as file:
json.dump(data, file)

+ 0
- 58
scripts/blender-slice.py Zobrazit soubor

@@ -1,58 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import math
import json
import bmesh

PREFIX = "PREFIX"

c = bpy.data.objects["cam"]
#s = bpy.data.objects["sun"]

selected = bpy.context.selected_objects[0]

data = {}
data["name"] = selected.name
data["place"] = ["V"]
data["views"] = {}

b = selected

lowest = math.inf

for v in b.data.vertices:
if v.co[2] < lowest:
lowest = v.co[2]

if True:
bpy.ops.object.mode_set( mode = 'EDIT' )
bpy.ops.mesh.select_mode( type = 'FACE' )
bpy.ops.mesh.select_all( action = 'SELECT' )
bpy.ops.transform.translate(value=[0, 0, -lowest])
dims = b.object.dimensions
bpy.ops.transform.translate(value=[-dims[0]/2, -dims[1]/2, -lowest])

bpy.ops.mesh.extrude_region_move(
TRANSFORM_OT_translate={"value":(0,0, -100)}
)

bpy.ops.transform.transform(mode='RESIZE', value=[1, 1, 0, 1], center_override=[0, 0, 0])
bpy.ops.mesh.select_all( action = 'SELECT' )

for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"]]:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1 * math.sqrt(2)
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 20000]) @ rot
data["views"][angles[3]] = b.dimensions[angles[2]]
#s.rotation_euler = c.rotation_euler
bpy.context.scene.render.filepath = f"{PREFIX}/Desktop/osm/{data['name']}-{angles[3]}.png"
bpy.ops.render.render(write_still = True)

with open(f"{PREFIX}/Desktop/osm/{data['name']}-data.json", "w") as file:
json.dump(data, file)

+ 0
- 46
scripts/blender-terrain.py Zobrazit soubor

@@ -1,46 +0,0 @@
import bpy
from mathutils import Vector, Euler
from math import pi
import json

PREFIX = "PREFIX"

c = bpy.data.objects["cam"]
#s = bpy.data.objects["sun"]

selected = bpy.context.selected_objects[0]

data = {}
data["name"] = selected.name
data["place"] = ["Mountains"]
data["views"] = {}

one_object = True

if not one_object:
buildings = bpy.data.objects["map"].children
for b in buildings:
pick = b.name == data["name"]
if not pick:
b.hide_render = True
else:
b.hide_render = False

b = selected

for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"]]:
local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
global_bbox_center = b.matrix_world @ local_bbox_center
c.location = global_bbox_center
c.data.ortho_scale = max(b.dimensions) * 1.1
c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
rot = c.rotation_euler.to_matrix()
rot.invert()
c.location = c.location + Vector([0, 0, 10000]) @ rot
data["views"][angles[3]] = b.dimensions[angles[2]]
#s.rotation_euler = c.rotation_euler
bpy.context.scene.render.filepath = f"{PREFIX}/Desktop/osm/{data['name']}-{angles[3]}.png"
bpy.ops.render.render(write_still = True)

with open(f"{PREFIX}/Desktop/osm/{data['name']}-data.json", "w") as file:
json.dump(data, file)

+ 0
- 64
scripts/combine-svg.py Zobrazit soubor

@@ -1,64 +0,0 @@
import sys
import re
import json
import glob
import os

# here's the import workflow:

# 1. import buildings into blender
# 2. use the blender-building.py script in blender while selecting a building to export images
# 3. batch-trace and color the overlay images
# 4. batch-trace the base images
# 5. batch-expand all of the images
# 6. use this script to combine the images and record the building data
# 7. batch-crop the combined images

# this script smashes two svgs together in a way that is,
# to be frank, sacrilege

def combine(base_path, highlight_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
highlight = open(highlight_path, "r", encoding="utf-8").read()
base_data = re.search("<path.*?</svg>", base)[0][:-6]

highlight_data = highlight.replace("</defs>", "</defs>" + base_data)

with open(output_path, "w", encoding="utf-8") as f:
f.write(highlight_data)

if len(sys.argv) <= 1:
print(f"Usage: {sys.argv[0]} [location name]")
sys.exit(1)

sides = [
"North",
"Northwest",
"West",
"North (Top)",
"West (Top)"
]
template = """ results.push(makeRealBuilding(
"{0}",
[
{1}
]
))
"""

side_strings = []
os.mkdir("./combined/" + sys.argv[1])

for path in glob.glob("*.json"):
with open(path, "r") as f:
data = json.load(f)
if data["place"] == [sys.argv[1]]:
name = "./svgs/" + data["name"]
for side in sides:
base = name + "-" + side + "-base-01.svg"
highlight = name + "-" + side + "-highlight-01.svg"
result = "./combined/" + sys.argv[1] + "/" + data["name"] + "-" + side + ".svg"
combine(base, highlight, result)
side_strings.append(" [\"{0}\", {1}]".format(data["name"] + "-" + side, data["views"][side]))
print(template.format(sys.argv[1] + " Buildings", ",\n".join(side_strings)))

scripts/base-lut.png → scripts/luts/base-lut.png Zobrazit soubor


scripts/highlight-lut.png → scripts/luts/highlight-lut.png Zobrazit soubor


scripts/vivid-lut.png → scripts/luts/vivid-lut.png Zobrazit soubor


+ 3
- 3
scripts/process-potrace-model-forms.py Zobrazit soubor

@@ -47,9 +47,9 @@ category = all_data["kind"]
outputdir = macrodir.joinpath("media").joinpath(category).joinpath(group_name)
os.makedirs(outputdir, exist_ok=True)

base_lut = configdir.joinpath("base-lut.png").__str__()
highlight_lut = configdir.joinpath("highlight-lut.png").__str__()
vivid_lut = configdir.joinpath("vivid-lut.png").__str__()
base_lut = configdir.joinpath("luts").joinpath("base-lut.png").__str__()
highlight_lut = configdir.joinpath("luts").joinpath("highlight-lut.png").__str__()
vivid_lut = configdir.joinpath("luts").joinpath("vivid-lut.png").__str__()

for data in all_data["forms"]:
name = data["name"]


+ 0
- 82
scripts/process-potrace-model.py Zobrazit soubor

@@ -1,82 +0,0 @@
import sys
import re
import json
import glob
import os
import subprocess

PREFIX = "PREFIX"

def combine(base_path, highlight_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
highlight = open(highlight_path, "r", encoding="utf-8").read()
base_data = re.search("<g.*", base, flags=re.DOTALL)[0][:-7]
highlight_data = highlight.replace("</metadata>", "</metadata>" + base_data)

with open(output_path, "w", encoding="utf-8") as f:
f.write(highlight_data)

subprocess.run([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=True)

if len(sys.argv) <= 1:
print(f"Usage: {sys.argv[0]} [location name]")
sys.exit(1)

template = """
{{
name: "{0}",
sides: {{
"Side": {{ height: math.unit({1}, "meters") }},
"Front": {{ height: math.unit({2}, "meters") }},
"Top": {{ height: math.unit({3}, "meters") }},
}}
}}"""

path = os.path.dirname(sys.argv[0])
config = json.load(open(os.path.join(path, "config.json"), "r", encoding="utf-8"))
side_strings = []

os.makedirs("./combined/" + sys.argv[1], exist_ok=True)

target_file = "vehicles"

os.makedirs(f"{PREFIX}/furry/macrovision/media/" + target_file + "/" + sys.argv[1] + "/", exist_ok=True)

POTRACE = config["potrace"]
INKSCAPE = config["inkscape"]

output = []

for path in glob.glob("*.json"):
with open(path, "r") as f:
data = json.load(f)
name = os.path.splitext(os.path.basename(path))[0]
for side in data.keys():
input = name + "-" + side
result = "f{PREFIX}/furry/macrovision/media/" + target_file + "/" + sys.argv[1] + "/" + name + "-" + side + ".svg"
side_strings.append(" [\"{0}\", {1}]".format(name + "-" + side, data[side]))

if os.path.exists(result) and os.path.getmtime(input + ".png") < os.path.getmtime(result):
print("Skipping " + input)
continue
input_base = input + "-base.bmp"
input_highlight = input + "-highlight.bmp"
subprocess.run(["convert", input + ".png", "xc:#000000", "-channel", "RGB", "-clut", "-background", "#ffffff", "-flatten", input_base], shell=True)
subprocess.run(["convert", input + ".png", "-background", "#ffffff", "-flatten", input_highlight], shell=True)
base = name + "-" + side + "-base.svg"
subprocess.run([POTRACE, input_base, "-b", "svg", "-o", base], shell=True)
highlight = name + "-" + side + "-highlight.svg"
subprocess.run([POTRACE, input_highlight, "-b", "svg", "-C", "#1a1a1a", "-o", highlight], shell=True)
combine(base, highlight, result)
os.unlink(input_base)
os.unlink(input_highlight)
output.append(template.format(name, data["Side"], data["Front"], data["Top"]))

with open(f"{PREFIX}/furry/macrovision/presets/" + target_file + ".js", "r", encoding="utf-8") as file:
file_data = file.read()
templated = "[" + ",".join(output) + "\n ];"
file_data = re.sub("const data" + sys.argv[1].replace(" ", "") + " =.*?];", "const data" + sys.argv[1].replace(" ", "") + " = " + templated, file_data, flags=re.DOTALL)

with open(f"{PREFIX}/furry/macrovision/presets/" + target_file + ".js", "w", encoding="utf-8") as file:
file.write(file_data)

+ 0
- 98
scripts/process-potrace-warships.py Zobrazit soubor

@@ -1,98 +0,0 @@
import sys
import re
import json
import glob
import os
import subprocess

PREFIX = "PREFIX"

def combine(base_path, highlight_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
highlight = open(highlight_path, "r", encoding="utf-8").read()
base_data = re.search("<g.*", base, flags=re.DOTALL)[0][:-7]
highlight_data = highlight.replace("</metadata>", "</metadata>" + base_data)

with open(output_path, "w", encoding="utf-8") as f:
f.write(highlight_data)

subprocess.run([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=True)

if len(sys.argv) <= 1:
print(f"Usage: {sys.argv[0]} [location name]")
sys.exit(1)

template = """
{{
name: "{0}",
sides: {{
"Side": {{ height: math.unit({1}, "meters") }},
"Front": {{ height: math.unit({2}, "meters") }},
"Top": {{ height: math.unit({3}, "meters") }},
}}
}}"""

path = os.path.dirname(sys.argv[0])
config = json.load(open(os.path.join(path, "config.json"), "r", encoding="utf-8"))
output = []

os.makedirs("./combined/" + sys.argv[1], exist_ok=True)
target_file = "vehicles"
os.makedirs(f"{PREFIX}/furry/macrovision/media/" + target_file + "/" + sys.argv[1] + "/", exist_ok=True)

POTRACE = config["potrace"]
INKSCAPE = config["inkscape"]

METERS_PER_UNIT = 0.03048 * 0.97681253/ 1.9898

if sys.argv[1] == "Tanks":
METERS_PER_UNIT /= 1.50811320755

for path in glob.glob("*.json"):
base_name = os.path.splitext(os.path.basename(path))[0]
data = json.load(open(path, "r", encoding="utf-8"))
sizes = {}
for view, scale in data.items():
name = base_name + "-" + view
result = f"{PREFIX}/furry/macrovision/media/vehicles/" + sys.argv[1] + "/" + name + ".svg"

if view == "Top":
height = int(subprocess.check_output(["convert", name + ".png", "-trim", "-rotate", "270", "-format", "%[h]", "info:"], shell=True).decode("utf-8"))
else:
height = int(subprocess.check_output(["convert", name + ".png", "-trim", "-format", "%[h]", "info:"], shell=True).decode("utf-8"))

sizes[view] = height / scale * METERS_PER_UNIT
if os.path.exists(result) and os.path.getmtime(name + ".png") < os.path.getmtime(result):
print("Skipping " + name)
continue
input_base = "base.bmp"
input_highlight = "highlight.bmp"

subprocess.run(["convert", name + ".png", "xc:#000000", "-channel", "RGB", "-clut", "-background", "#ffffff", "-flatten", input_base], shell=True)
subprocess.run(["convert", name + ".png", "-background", "#ffffff", "-flatten", input_highlight], shell=True)
# rotate the top view, since I capture it horizontally
if view == "Top":
subprocess.run(["mogrify", "-rotate", "270", input_base], shell=True)
subprocess.run(["mogrify", "-rotate", "270", input_highlight], shell=True)
base = "base.svg"
subprocess.run([POTRACE, input_base, "-b", "svg", "-o", base], shell=True)
highlight = "highlight.svg"
subprocess.run([POTRACE, input_highlight, "-b", "svg", "-C", "#1a1a1a", "-o", highlight], shell=True)
combine(base, highlight, result)

os.unlink(input_base)
os.unlink(input_highlight)

output.append(template.format(base_name, sizes["Side"], sizes["Front"], sizes["Top"]))

with open(f"{PREFIX}/furry/macrovision/presets/vehicles.js", "r", encoding="utf-8") as file:
file_data = file.read()
templated = "[" + ",".join(output) + "\n ];"
file_data = re.sub("const data" + sys.argv[1] + " =.*?];", "const data" + sys.argv[1] + " = " + templated, file_data, flags=re.DOTALL)

with open(f"{PREFIX}/furry/macrovision/presets/vehicles.js", "w", encoding="utf-8") as file:
file.write(file_data)

+ 0
- 74
scripts/process-potrace.py Zobrazit soubor

@@ -1,74 +0,0 @@
import sys
import re
import json
import glob
import os
import subprocess

PREFIX = "PREFIX"
def combine(base_path, highlight_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
highlight = open(highlight_path, "r", encoding="utf-8").read()
base_data = re.search("<g.*", base, flags=re.DOTALL)[0][:-7]
highlight_data = highlight.replace("</metadata>", "</metadata>" + base_data)

with open(output_path, "w", encoding="utf-8") as f:
f.write(highlight_data)

subprocess.run([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=True)

if len(sys.argv) <= 1:
print(f"Usage: {sys.argv[0]} [location name]")
sys.exit(1)

template = """[
{1}
];"""

path = os.path.dirname(sys.argv[0])
config = json.load(open(os.path.join(path, "config.json"), "r", encoding="utf-8"))
side_strings = []

os.makedirs("./combined/" + sys.argv[1], exist_ok=True)
if sys.argv[1] in ["Mountains"]:
target_file = "real-terrain"
else:
target_file = "real-buildings"
os.makedirs(f"{PREFIX}/furry/macrovision/media/" + target_file + "/" + sys.argv[1] + "/", exist_ok=True)

POTRACE = config["potrace"]
INKSCAPE = config["inkscape"]

for path in glob.glob("*.json"):
with open(path, "r") as f:
data = json.load(f)
if data["place"] == [sys.argv[1]]:
name = "./svgs/" + data["name"]
for side in data["views"].keys():
input = data["name"] + "-" + side
result = f"{PREFIX}/furry/macrovision/media/" + target_file + "/" + data["place"][0] + "/" + data["name"] + "-" + side + ".svg"
side_strings.append(" [\"{0}\", {1}]".format(data["name"] + "-" + side, data["views"][side]))

if os.path.exists(result) and os.path.getmtime(input + ".png") < os.path.getmtime(result):
print("Skipping " + input)
continue
input_base = input + "-base.bmp"
input_highlight = input + "-highlight.bmp"
subprocess.run(["convert", input + ".png", "xc:#000000", "-channel", "RGB", "-clut", "-background", "#ffffff", "-flatten", input_base], shell=True)
subprocess.run(["convert", input + ".png", "-background", "#ffffff", "-flatten", input_highlight], shell=True)
base = name + "-" + side + "-base.svg"
subprocess.run([POTRACE, input_base, "-b", "svg", "-o", base], shell=True)
highlight = name + "-" + side + "-highlight.svg"
subprocess.run([POTRACE, input_highlight, "-b", "svg", "-C", "#1a1a1a", "-o", highlight], shell=True)
combine(base, highlight, result)
os.unlink(input_base)
os.unlink(input_highlight)

with open(f"{PREFIX}/furry/macrovision/presets/" + target_file + ".js", "r", encoding="utf-8") as file:
file_data = file.read()
templated = template.format(sys.argv[1], ",\n".join(side_strings))
file_data = re.sub("const data" + sys.argv[1] + " =.*?];", "const data" + sys.argv[1] + " = " + templated, file_data, flags=re.DOTALL)

with open(f"{PREFIX}/furry/macrovision/presets/" + target_file + ".js", "w", encoding="utf-8") as file:
file.write(file_data)

Načítá se…
Zrušit
Uložit