From ef95ba913243b6614d9ad019470eec0ced1e82ab Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Fri, 19 Nov 2021 16:52:59 -0500 Subject: [PATCH] Add some bricks Also add some tweaks to the process-model script that I managed to lose. --- media/attribution.js | 11 ++++ media/objects/Bricks/Cinderblock-Angled.svg | 58 +++++++++++++++++++++ media/objects/Bricks/Cinderblock-Front.svg | 52 ++++++++++++++++++ media/objects/Bricks/Cinderblock-Side.svg | 52 ++++++++++++++++++ media/objects/Bricks/Cinderblock-Top.svg | 52 ++++++++++++++++++ media/objects/Bricks/Clay Brick-Angled.svg | 58 +++++++++++++++++++++ media/objects/Bricks/Clay Brick-Front.svg | 52 ++++++++++++++++++ media/objects/Bricks/Clay Brick-Side.svg | 52 ++++++++++++++++++ media/objects/Bricks/Clay Brick-Top.svg | 52 ++++++++++++++++++ presets/objects.js | 1 + scripts/blender-model.py | 4 +- scripts/process-model.py | 18 +++---- 12 files changed, 451 insertions(+), 11 deletions(-) create mode 100644 media/objects/Bricks/Cinderblock-Angled.svg create mode 100644 media/objects/Bricks/Cinderblock-Front.svg create mode 100644 media/objects/Bricks/Cinderblock-Side.svg create mode 100644 media/objects/Bricks/Cinderblock-Top.svg create mode 100644 media/objects/Bricks/Clay Brick-Angled.svg create mode 100644 media/objects/Bricks/Clay Brick-Front.svg create mode 100644 media/objects/Bricks/Clay Brick-Side.svg create mode 100644 media/objects/Bricks/Clay Brick-Top.svg diff --git a/media/attribution.js b/media/attribution.js index 047f171a..dfd1b65f 100644 --- a/media/attribution.js +++ b/media/attribution.js @@ -19817,6 +19817,17 @@ const attributionData = { "https://en.wikipedia.org/wiki/Compact_disc#/media/File:Comparison_CD_DVD_HDDVD_BD.svg" ] }, + { + prefix: "./media/objects/Bricks/", + all: null, + authors: [ + "chemicalcrux" + ], + citations: [ + "https://ncma.org/resource/typical-sizes-and-shapes-of-concrete-masonry-units/", + "https://www.homedepot.com/p/8-in-x-4-in-x-2-in-Clay-Brick-20050276/100570450#product-overview" + ] + }, { prefix: "./media/real-buildings/", all: "https://wiki.openstreetmap.org/wiki/Blender", diff --git a/media/objects/Bricks/Cinderblock-Angled.svg b/media/objects/Bricks/Cinderblock-Angled.svg new file mode 100644 index 00000000..0752ffd7 --- /dev/null +++ b/media/objects/Bricks/Cinderblock-Angled.svg @@ -0,0 +1,58 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Cinderblock-Front.svg b/media/objects/Bricks/Cinderblock-Front.svg new file mode 100644 index 00000000..640d8da7 --- /dev/null +++ b/media/objects/Bricks/Cinderblock-Front.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Cinderblock-Side.svg b/media/objects/Bricks/Cinderblock-Side.svg new file mode 100644 index 00000000..d1d47e71 --- /dev/null +++ b/media/objects/Bricks/Cinderblock-Side.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Cinderblock-Top.svg b/media/objects/Bricks/Cinderblock-Top.svg new file mode 100644 index 00000000..1e97cc26 --- /dev/null +++ b/media/objects/Bricks/Cinderblock-Top.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Clay Brick-Angled.svg b/media/objects/Bricks/Clay Brick-Angled.svg new file mode 100644 index 00000000..a8e08035 --- /dev/null +++ b/media/objects/Bricks/Clay Brick-Angled.svg @@ -0,0 +1,58 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Clay Brick-Front.svg b/media/objects/Bricks/Clay Brick-Front.svg new file mode 100644 index 00000000..090996ff --- /dev/null +++ b/media/objects/Bricks/Clay Brick-Front.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Clay Brick-Side.svg b/media/objects/Bricks/Clay Brick-Side.svg new file mode 100644 index 00000000..5e7452a3 --- /dev/null +++ b/media/objects/Bricks/Clay Brick-Side.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/media/objects/Bricks/Clay Brick-Top.svg b/media/objects/Bricks/Clay Brick-Top.svg new file mode 100644 index 00000000..07c0ec17 --- /dev/null +++ b/media/objects/Bricks/Clay Brick-Top.svg @@ -0,0 +1,52 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/presets/objects.js b/presets/objects.js index 34897916..8e0c4bb8 100644 --- a/presets/objects.js +++ b/presets/objects.js @@ -948,6 +948,7 @@ function makeObjects() { /* ***PO Boxes*** */ results.push(makeModel({"name": "PO Boxes", "kind": "objects", "forms": [{"name": "XS", "views": [{"name": "Front", "height": 0.07620000094175339, "volume": 0.003988201638571948}, {"name": "Side", "height": 0.07620000094175339, "volume": 0.003988201638571948}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.003988201638571948}]}, {"name": "S", "views": [{"name": "Front", "height": 0.12700000405311584, "volume": 0.006647002860937575}, {"name": "Side", "height": 0.12700000405311584, "volume": 0.006647002860937575}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.006647002860937575}]}, {"name": "M", "views": [{"name": "Front", "height": 0.1396999955177307, "volume": 0.014623405358175506}, {"name": "Side", "height": 0.1396999955177307, "volume": 0.014623405358175506}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.014623405358175506}]}, {"name": "L", "views": [{"name": "Front", "height": 0.2793999910354614, "volume": 0.02924681071635101}, {"name": "Side", "height": 0.2793999910354614, "volume": 0.02924681071635101}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.02924681071635101}]}, {"name": "XL", "views": [{"name": "Front", "height": 0.30480000376701355, "volume": 0.06526148383352366}, {"name": "Side", "height": 0.30480000376701355, "volume": 0.06526148383352366}, {"name": "Top", "height": 0.3746500015258789, "volume": 0.06526148383352366}]}]})); /* ***Sex Toys*** */ results.push(makeModel({"name": "Sex Toys", "kind": "objects", "forms": [{"name": "Chance", "views": [{"name": "Front", "height": 0.44450023770332336, "volume": 0.0024940192673095084}, {"name": "Side", "height": 0.44450023770332336, "volume": 0.0024940192673095084}, {"name": "Top", "height": 0.18736252188682556, "volume": 0.0024940192673095084}]}, {"name": "Fenrir", "views": [{"name": "Front", "height": 0.32130947709083557, "volume": 0.0014611460855557515}, {"name": "Side", "height": 0.32130947709083557, "volume": 0.0014611460855557515}, {"name": "Top", "height": 0.11701348423957825, "volume": 0.0014611460855557515}]}]})); /* ***LEGO*** */ results.push(makeModel({"name": "LEGO", "kind": "objects", "forms": [{"name": "1x1", "views": [{"name": "Front", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Angled", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Side", "height": 0.01119999960064888, "volume": 3.3640754098503267e-07}, {"name": "Top", "height": 0.00800000037997961, "volume": 3.3640754098503267e-07}, {"name": "Bottom", "height": 0.00800000037997961, "volume": 3.3640754098503267e-07}]}, {"name": "1x2", "views": [{"name": "Front", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Angled", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Side", "height": 0.011200000531971455, "volume": 5.669391684500056e-07}, {"name": "Top", "height": 0.00800000037997961, "volume": 5.669391684500056e-07}, {"name": "Bottom", "height": 0.00800000037997961, "volume": 5.669391684500056e-07}]}, {"name": "2x2", "views": [{"name": "Front", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Angled", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Side", "height": 0.01119999960064888, "volume": 1.0245981619502385e-06}, {"name": "Top", "height": 0.01600000075995922, "volume": 1.0245981619502385e-06}, {"name": "Bottom", "height": 0.01600000075995922, "volume": 1.0245981619502385e-06}]}, {"name": "2x4", "views": [{"name": "Front", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Angled", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Side", "height": 0.011200000531971455, "volume": 1.939916458324457e-06}, {"name": "Top", "height": 0.01600000075995922, "volume": 1.939916458324457e-06}, {"name": "Bottom", "height": 0.01600000075995922, "volume": 1.939916458324457e-06}]}]})); + /* ***Bricks*** */ results.push(makeModel({"name": "Bricks", "kind": "objects", "forms": [{"name": "Cinderblock", "views": [{"name": "Front", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Angled", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Side", "height": 0.1936749964952469, "volume": 0.0072986710396893105}, {"name": "Top", "height": 0.1936749964952469, "volume": 0.0072986710396893105}]}, {"name": "Clay Brick", "views": [{"name": "Front", "height": 0.05714999884366989, "volume": 0.1697502847209491}, {"name": "Angled", "height": 0.05714999884366989, "volume": 0.1697502847209491}, {"name": "Side", "height": 0.05714999884366989, "volume": 0.1697502847209491}, {"name": "Top", "height": 0.10159999877214432, "volume": 0.1697502847209491}]}]})); /* ***INSERT HERE*** */ return results; } diff --git a/scripts/blender-model.py b/scripts/blender-model.py index 03fa7a71..67d31a13 100644 --- a/scripts/blender-model.py +++ b/scripts/blender-model.py @@ -6,7 +6,7 @@ import os import pathlib import bmesh -GROUP_NAME = "LEGO" +GROUP_NAME = "Bricks" GROUP_KIND = "objects" path_info = pathlib.Path(bpy.data.filepath).parent.joinpath("macrovision-directory.txt") @@ -61,7 +61,7 @@ for selected in objects: b = selected - for angles in [[0, 1, 2, "Front"], [0.5, 1, 2, "Angled"], [1, 1, 2, "Side"], [0, 0, 1, "Top"], [0, 2, 1, "Bottom"]]: + for angles in [[0, 1, 2, "Front"], [0.5, 1, 2, "Angled"], [1, 1, 2, "Side"], [0, 0, 1, "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 diff --git a/scripts/process-model.py b/scripts/process-model.py index cf5075ba..04998cf2 100644 --- a/scripts/process-model.py +++ b/scripts/process-model.py @@ -19,7 +19,7 @@ def combine(base_path, highlight_path, vivid_path, output_path): with open(output_path, "w", encoding="utf-8") as f: f.write(vivid_data) - subprocess.run([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path.resolve().__str__(), "--export-area-drawing", output_path], shell=False) + subprocess.run([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=False) configdir = pathlib.Path(__file__).parent configpath = configdir.joinpath("config.json") @@ -56,24 +56,24 @@ for data in all_data["forms"]: name = data["name"] for view in data["views"]: view_name = view["name"] - input = sourcedir.joinpath(name + "-" + view_name + ".png") - result = outputdir.joinpath(name + "-" + view_name + ".svg") + input = sourcedir.joinpath(name + "-" + view_name + ".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 - input_base = sourcedir.joinpath(name + "-" + view_name + "-base.bmp") - input_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.bmp") - input_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.bmp") + input_base = sourcedir.joinpath(name + "-" + view_name + "-base.bmp").__str__() + input_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.bmp").__str__() + input_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.bmp").__str__() subprocess.run(["magick", "convert", input, base_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_base], shell=False) subprocess.run(["magick", "convert", input, highlight_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_highlight], shell=False) subprocess.run(["magick", "convert", input, vivid_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_vivid], shell=False) - output_base = sourcedir.joinpath(name + "-" + view_name + "-base.svg") - output_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.svg") - output_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.svg") + output_base = sourcedir.joinpath(name + "-" + view_name + "-base.svg").__str__() + output_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.svg").__str__() + output_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.svg").__str__() subprocess.run([POTRACE, input_base, "-b", "svg", "-o", output_base], shell=False) subprocess.run([POTRACE, input_highlight, "-b", "svg", "-C", "#1a1a1a", "-o", output_highlight], shell=False)