cosplay: Touhou/Houjuu Nue #4

Open
aniva wants to merge 189 commits from touhou/houjuu-nue into main
2 changed files with 33 additions and 10 deletions
Showing only changes of commit 014784be34 - Show all commits

View File

@ -54,16 +54,18 @@ ROLE_COLOR_MAP = {
class Material(Enum):
"""
A catalog of common material properties
Density listed is in g/cm^3 or mg/mm^3
"""
WOOD_BIRCH = 0.8, _color('bisque', 0.9)
PLASTIC_PLA = 0.5, _color('mistyrose', 0.8)
RESIN_TRANSPERENT = 1.1, _color('cadetblue2', 0.6)
RESIN_TOUGH_1500 = 1.1, _color('seashell3', 0.7)
ACRYLIC_BLACK = 0.5, _color('gray5', 0.8)
ACRYLIC_TRANSLUSCENT = 0.5, _color('ivory2', 0.8)
ACRYLIC_TRANSPARENT = 0.5, _color('ghostwhite', 0.5)
STEEL_SPRING = 1.0, _color('gray', 0.8)
WOOD_BIRCH = 0.71, _color('bisque', 0.9)
PLASTIC_PLA = 1.2, _color('mistyrose', 0.8)
RESIN_TRANSPERENT = 1.17, _color('cadetblue2', 0.6)
RESIN_TOUGH_1500 = 1.17, _color('seashell3', 0.7)
ACRYLIC_BLACK = 1.18, _color('gray5', 0.8)
ACRYLIC_TRANSLUSCENT = 1.18, _color('ivory2', 0.8)
ACRYLIC_TRANSPARENT = 1.18, _color('ghostwhite', 0.5)
STEEL_SPRING = 7.8, _color('gray', 0.8)
def __init__(self, density: float, color: Cq.Color):
self.density = density
@ -110,3 +112,16 @@ def color_by_role(self: Cq.Assembly, avg: bool = True) -> Cq.Assembly:
a.color = role.color_avg() if avg else role.color_head()
return self
Cq.Assembly.color_by_role = color_by_role
def total_mass(self: Cq.Assembly) -> float:
"""
Calculates the total mass in units of g
"""
total = 0.0
for _, a in self.traverse():
if 'material' not in a.metadata:
continue
vol = a.toCompound().Volume()
total += vol * a.metadata['material'].density
return total / 1000.0
Cq.Assembly.total_mass = total_mass

View File

@ -146,11 +146,19 @@ class Parameters(Model):
bbox = a.toCompound().BoundingBox()
return {
"wing-span": bbox.xlen,
"wing-thickness": bbox.ylen,
"wing-depth": bbox.ylen,
"wing-height": bbox.zlen,
"wing-mass": a.total_mass(),
}
if __name__ == '__main__':
import sys
p = Parameters()
p.build_all()
if len(sys.argv) == 1:
p.build_all()
sys.exit(0)
if sys.argv[1] == 'stat':
print(p.stat())