From 23627a5597332d1ff56e0da13aaede26a1d7b0a0 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Mon, 29 Nov 2021 14:26:28 -0500 Subject: [PATCH] Add barrels Also updates the Blender script. --- media/attribution.js | 11 +++ .../objects/Barrels/55 Gallon Drum-Front.svg | 76 ++++++++++++++++++ media/objects/Barrels/55 Gallon Drum-Top.svg | 58 ++++++++++++++ .../objects/Barrels/Half Barrel Keg-Front.svg | 79 +++++++++++++++++++ media/objects/Barrels/Half Barrel Keg-Top.svg | 70 ++++++++++++++++ media/objects/Barrels/Sixer Keg-Front.svg | 73 +++++++++++++++++ media/objects/Barrels/Sixer Keg-Top.svg | 64 +++++++++++++++ presets/objects.js | 1 + scripts/blender-model.py | 37 +++++---- 9 files changed, 453 insertions(+), 16 deletions(-) create mode 100644 media/objects/Barrels/55 Gallon Drum-Front.svg create mode 100644 media/objects/Barrels/55 Gallon Drum-Top.svg create mode 100644 media/objects/Barrels/Half Barrel Keg-Front.svg create mode 100644 media/objects/Barrels/Half Barrel Keg-Top.svg create mode 100644 media/objects/Barrels/Sixer Keg-Front.svg create mode 100644 media/objects/Barrels/Sixer Keg-Top.svg diff --git a/media/attribution.js b/media/attribution.js index caef320d..905a183f 100644 --- a/media/attribution.js +++ b/media/attribution.js @@ -19928,6 +19928,17 @@ const attributionData = { "https://www.homedepot.com/p/8-in-x-4-in-x-2-in-Clay-Brick-20050276/100570450#product-overview" ] }, + { + prefix: "./media/objects/Barrels/", + all: null, + authors: [ + "chemicalcrux" + ], + citations: [ + "https://learn.kegerator.com/keg-sizes/", + "https://bascousa.com/blog/55-gallon-drum-dimensions-height-weight/" + ] + }, { prefix: "./media/real-buildings/", all: "https://wiki.openstreetmap.org/wiki/Blender", diff --git a/media/objects/Barrels/55 Gallon Drum-Front.svg b/media/objects/Barrels/55 Gallon Drum-Front.svg new file mode 100644 index 00000000..7f1c5edc --- /dev/null +++ b/media/objects/Barrels/55 Gallon Drum-Front.svg @@ -0,0 +1,76 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/objects/Barrels/55 Gallon Drum-Top.svg b/media/objects/Barrels/55 Gallon Drum-Top.svg new file mode 100644 index 00000000..d3d9a935 --- /dev/null +++ b/media/objects/Barrels/55 Gallon Drum-Top.svg @@ -0,0 +1,58 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/media/objects/Barrels/Half Barrel Keg-Front.svg b/media/objects/Barrels/Half Barrel Keg-Front.svg new file mode 100644 index 00000000..dabd6957 --- /dev/null +++ b/media/objects/Barrels/Half Barrel Keg-Front.svg @@ -0,0 +1,79 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/objects/Barrels/Half Barrel Keg-Top.svg b/media/objects/Barrels/Half Barrel Keg-Top.svg new file mode 100644 index 00000000..08d790c3 --- /dev/null +++ b/media/objects/Barrels/Half Barrel Keg-Top.svg @@ -0,0 +1,70 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/media/objects/Barrels/Sixer Keg-Front.svg b/media/objects/Barrels/Sixer Keg-Front.svg new file mode 100644 index 00000000..ca3e0042 --- /dev/null +++ b/media/objects/Barrels/Sixer Keg-Front.svg @@ -0,0 +1,73 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/media/objects/Barrels/Sixer Keg-Top.svg b/media/objects/Barrels/Sixer Keg-Top.svg new file mode 100644 index 00000000..4e4be078 --- /dev/null +++ b/media/objects/Barrels/Sixer Keg-Top.svg @@ -0,0 +1,64 @@ + + + + +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 8285c4a7..5b3f543d 100644 --- a/presets/objects.js +++ b/presets/objects.js @@ -949,6 +949,7 @@ function makeObjects() { /* ***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.0008421204681292792}, {"name": "Angled", "height": 0.05714999884366989, "volume": 0.0008421204681292792}, {"name": "Side", "height": 0.05714999884366989, "volume": 0.0008421204681292792}, {"name": "Top", "height": 0.10159999877214432, "volume": 0.0008421204681292792}]}]})); + /* ***Barrels*** */ results.push(makeModel({"name": "Barrels", "kind": "objects", "forms": [{"name": "55 Gallon Drum", "views": [{"name": "Front", "height": 0.8716663122177124, "volume": 0.20819799602031708}, {"name": "Top", "height": 0.617232084274292, "volume": 0.20819799602031708}]}, {"name": "Sixer Keg", "views": [{"name": "Front", "height": 0.5937249660491943, "volume": 0.02345781959593296}, {"name": "Top", "height": 0.2349499762058258, "volume": 0.02345781959593296}]}, {"name": "Half Barrel Keg", "views": [{"name": "Front", "height": 0.5937249660491943, "volume": 0.07046438753604889}, {"name": "Top", "height": 0.42044833302497864, "volume": 0.07046438753604889}]}]})); /* ***INSERT HERE*** */ return results; } diff --git a/scripts/blender-model.py b/scripts/blender-model.py index b34382af..edac0920 100644 --- a/scripts/blender-model.py +++ b/scripts/blender-model.py @@ -4,7 +4,14 @@ from math import pi, sqrt import json import os import pathlib -import bmesh + +VIEW_DATA = { + "Front": [0, 1, 2, "Front"], + "Angled": [0.5, 1, 2, "Angled"], + "Side": [1, 1, 2, "Side"], + "Back": [2, 1, 2, "Back"], + "Top": [0, 0, 1, "Top"] +} def get_bounds(objects): xl = [] @@ -12,11 +19,12 @@ def get_bounds(objects): zl = [] for obj in objects: - for bounds in obj.bound_box: - v = obj.matrix_world @ Vector(bounds) - xl += [v[0] for c in obj.bound_box] - yl += [v[1] for c in obj.bound_box] - zl += [v[2] for c in obj.bound_box] + if not obj.hide_render: + for bounds in obj.bound_box: + v = obj.matrix_world @ Vector(bounds) + xl += [v[0] for c in obj.bound_box] + yl += [v[1] for c in obj.bound_box] + zl += [v[2] for c in obj.bound_box] return ( Vector([min(xl), min(yl), min(zl)]), @@ -50,18 +58,15 @@ all_data["name"] = mv["MVName"] all_data["kind"] = mv["MVKind"] all_data["forms"] = [] +default_views = [] + +for view in mv["MVViews"].split(","): + default_views.append(VIEW_DATA[view]) + workdir = pathlib.Path(parent_workdir).joinpath(all_data["name"]) os.makedirs(workdir, exist_ok=True) -VIEW_DATA = { - "Front": [0, 1, 2, "Front"], - "Angled": [0.5, 1, 2, "Angled"], - "Side": [1, 1, 2, "Side"], - "Back": [2, 1, 2, "Back"], - "Top": [0, 0, 1, "Top"] -} - for coll in collections: coll.hide_render = True @@ -89,7 +94,7 @@ for coll in collections: for view in coll["Views"].split(","): view_list.append(VIEW_DATA[view]) else: - view_list = [VIEW_DATA["Front"]] + view_list = default_views for angles in view_list: c.location = global_bbox_center @@ -108,7 +113,7 @@ for coll in collections: "height": dimensions[angles[2]] }) - if coll["Volume"]: + if "Volume" in coll: data["views"][-1]["volume"] = coll["Volume"] filename = f"{coll.name}-{angles[3]}.png"