From 5b5ccee94e701409c6cbd251652f0022034b1056 Mon Sep 17 00:00:00 2001 From: Leni Aniva Date: Tue, 13 May 2025 09:11:28 -0700 Subject: [PATCH] Optimize angle joint geometry; Mirror stub --- nhf/touhou/yasaka_kanako/__init__.py | 5 ++++ nhf/touhou/yasaka_kanako/mirror.py | 43 +++++++++++++++++++++++++++ nhf/touhou/yasaka_kanako/onbashira.py | 9 +++--- 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 nhf/touhou/yasaka_kanako/mirror.py diff --git a/nhf/touhou/yasaka_kanako/__init__.py b/nhf/touhou/yasaka_kanako/__init__.py index 01fde9d..ab34d4e 100644 --- a/nhf/touhou/yasaka_kanako/__init__.py +++ b/nhf/touhou/yasaka_kanako/__init__.py @@ -2,12 +2,14 @@ from dataclasses import dataclass, field import cadquery as Cq from nhf.build import Model, TargetKind, target, assembly, submodel import nhf.touhou.yasaka_kanako.onbashira as MO +import nhf.touhou.yasaka_kanako.mirror as MM import nhf.utils @dataclass class Parameters(Model): onbashira: MO.Onbashira = field(default_factory=lambda: MO.Onbashira()) + mirror: MM.Mirror = field(default_factory=lambda: MM.Mirror()) def __post_init__(self): super().__init__(name="yasaka-kanako") @@ -15,6 +17,9 @@ class Parameters(Model): @submodel(name="onbashira") def submodel_onbashira(self) -> Model: return self.onbashira + @submodel(name="mirror") + def submodel_mirror(self) -> Model: + return self.mirror if __name__ == '__main__': diff --git a/nhf/touhou/yasaka_kanako/mirror.py b/nhf/touhou/yasaka_kanako/mirror.py new file mode 100644 index 0000000..25eef43 --- /dev/null +++ b/nhf/touhou/yasaka_kanako/mirror.py @@ -0,0 +1,43 @@ +from dataclasses import dataclass, field +import cadquery as Cq +from nhf.build import Model, TargetKind, target, assembly, submodel +import nhf.touhou.yasaka_kanako.onbashira as MO +import nhf.utils + +@dataclass +class Mirror(Model): + """ + Kanako's mirror, made of three levels. + """ + width: float = 50.0 + height: float = 70.0 + + wall_thickness: float = 10.0 + + @target(name="core", kind=TargetKind.DXF) + def profile_core(self) -> Cq.Sketch: + return Cq.Sketch().ellipse(self.width/2, self.height/2) + + @target(name="casing-bot", kind=TargetKind.DXF) + def profile_casing(self) -> Cq.Sketch: + """ + Base of the casing with no holes carved out + """ + dx = self.wall_thickness + return ( + Cq.Sketch() + .ellipse(self.width/2+dx, self.height/2+dx) + ) + @target(name="casing-top", kind=TargetKind.DXF) + def profile_casing_top(self) -> Cq.Sketch: + """ + Base of the casing with no holes carved out + """ + return ( + self.profile_casing() + .ellipse(self.width/2, self.height/2, mode="s") + ) + + @assembly() + def assembly(self) -> Cq.Assembly: + pass diff --git a/nhf/touhou/yasaka_kanako/onbashira.py b/nhf/touhou/yasaka_kanako/onbashira.py index 46b1367..4ce8bb0 100644 --- a/nhf/touhou/yasaka_kanako/onbashira.py +++ b/nhf/touhou/yasaka_kanako/onbashira.py @@ -277,10 +277,10 @@ class Onbashira(Model): self.side_width, self.n_side ) - .regularPolygon( - self.side_width_inner, - self.n_side, mode="s", - ) + #.regularPolygon( + # self.side_width_inner, + # self.n_side, mode="s", + #) ) slot = ( Cq.Workplane() @@ -476,6 +476,7 @@ class Onbashira(Model): ) return a + @assembly() def assembly(self) -> Cq.Assembly: a = Cq.Assembly() a = (