Selaa lähdekoodia

Fix some bugs with the Blender scripts

Inkscape now exits before it finishes writing its files, somehow.
So, we need to wait for the files to be created. The Blender
add-on also now correctly configures the lineart to use the
secondary camera, which is rotated to avoid errors when rendering
orthographically.
master
Fen Dweller 3 vuotta sitten
vanhempi
commit
053a39c15e
2 muutettua tiedostoa jossa 31 lisäystä ja 10 poistoa
  1. +3
    -0
      scripts/blender/addons/macrovision/ops.py
  2. +28
    -10
      scripts/process-model.py

+ 3
- 0
scripts/blender/addons/macrovision/ops.py Näytä tiedosto

@@ -121,6 +121,9 @@ class MVConfigCollection(bpy.types.Operator):

bpy.ops.object.lineart_clear_all()

new_obj.grease_pencil_modifiers[0].use_custom_camera = True
new_obj.grease_pencil_modifiers[0].source_camera = bpy.data.objects["cam2"]

return {'FINISHED'}

class MVAssignMaterials(bpy.types.Operator):


+ 28
- 10
scripts/process-model.py Näytä tiedosto

@@ -4,11 +4,11 @@ import json
import os
import subprocess
import pathlib
import time
from xml.dom import minidom

# an affront to god
def combine(base_path, dark_path, medium_path, light_path, output_path):
def combine(base_path, dark_path, medium_path, light_path, tmp_output_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
dark = open(dark_path, "r", encoding="utf-8").read()
medium = open(medium_path, "r", encoding="utf-8").read()
@@ -19,10 +19,10 @@ def combine(base_path, dark_path, medium_path, light_path, output_path):
medium_data = re.search("<g.*", medium, flags=re.DOTALL)[0][:-7]
light_data = light.replace("</metadata>", "</metadata>" + base_data + "\n" + dark_data + "\n" + medium_data)

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

return subprocess.Popen([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=False)
return subprocess.Popen([INKSCAPE, "--without-gui", "--export-plain-svg", "--export-area-drawing", "--export-filename=" + output_path, tmp_output_path], shell=False)

configdir = pathlib.Path(__file__).parent
configpath = configdir.joinpath("config.json")
@@ -59,10 +59,13 @@ for data in all_data["forms"]:
input_noline_raw = sourcedir.joinpath(name + "-" + view_name + "-" + "noline.png").__str__()
result = outputdir.joinpath(name + "-" + view_name + ".svg").__str__()
print(result)
if os.path.exists(result) and os.path.getmtime(input) < os.path.getmtime(result):
print("Skipping ", input)
continue

if os.path.exists(result):
if os.path.getmtime(input) < os.path.getmtime(result):
print("Skipping ", input)
continue
else:
os.unlink(result)
input_base = sourcedir.joinpath(name + "-" + view_name + "-base.bmp").__str__()
input_dark = sourcedir.joinpath(name + "-" + view_name + "-dark.bmp").__str__()
input_medium = sourcedir.joinpath(name + "-" + view_name + "-medium.bmp").__str__()
@@ -102,16 +105,29 @@ for data in all_data["forms"]:

noline_result = sourcedir.joinpath(name + "-" + view_name + "-noline_processed.svg").__str__()

procs.append(combine(output_base, output_dark, output_medium, output_light, result))
procs.append(combine(output_noline, output_noline, output_noline, output_noline, noline_result))
result_tmp = outputdir.joinpath(name + "-" + view_name + "-tmp.svg").__str__()
noline_result_tmp = sourcedir.joinpath(name + "-" + view_name + "-noline_processed-tmp.svg").__str__()
procs.append(combine(output_base, output_dark, output_medium, output_light, result_tmp, result))
procs.append(combine(output_noline, output_noline, output_noline, output_noline, noline_result_tmp, noline_result))

[proc.wait() for proc in procs]

# we now learn how much height was added by the lineart!

# for some reason, the files aren't appearing for a moment after Inkscape quits

while True:
if os.path.exists(result) and os.path.exists(noline_result):
break
time.sleep(0.1)

os.unlink(result_tmp)
os.unlink(noline_result_tmp)

original_xml = minidom.parse(open(result))
noline_xml = minidom.parse(open(noline_result))


original_height = float(original_xml.childNodes[0].attributes["height"].value[:-2])
noline_height = float(noline_xml.childNodes[0].attributes["height"].value[:-2])

@@ -124,6 +140,8 @@ for data in all_data["forms"]:
view["extra"] = (height - bottom) / (top - bottom)
view["bottom"] = bottom / height

os.unlink(noline_result)


# now we add the data



Loading…
Peruuta
Tallenna