cosplay: Touhou/Houjuu Nue #4
|
@ -54,6 +54,7 @@ class MountingBox(Model):
|
|||
|
||||
generate_side_tags: bool = True
|
||||
|
||||
# Determines the position of side tags
|
||||
flip_y: bool = False
|
||||
|
||||
@target(kind=TargetKind.DXF)
|
||||
|
|
|
@ -62,16 +62,15 @@ class Parameters(Model):
|
|||
wing_l1: MW.WingL = field(default_factory=lambda: MW.WingL(
|
||||
name="l1",
|
||||
wrist_angle=-45.0,
|
||||
shoulder_joint=MJ.ShoulderJoint(directrix_id=1),
|
||||
))
|
||||
wing_l2: MW.WingL = field(default_factory=lambda: MW.WingL(
|
||||
name="l2",
|
||||
wrist_angle=-30.0,
|
||||
shoulder_joint=MJ.ShoulderJoint(directrix_id=1),
|
||||
))
|
||||
wing_l3: MW.WingL = field(default_factory=lambda: MW.WingL(
|
||||
name="l3",
|
||||
wrist_angle=0.0,
|
||||
shoulder_joint=MJ.ShoulderJoint(directrix_id=1),
|
||||
))
|
||||
|
||||
trident: MT.Trident = field(default_factory=lambda: MT.Trident())
|
||||
|
|
|
@ -570,7 +570,7 @@ class DiskJoint(Model):
|
|||
|
||||
|
||||
@dataclass(kw_only=True)
|
||||
class ElbowJoint:
|
||||
class ElbowJoint(Model):
|
||||
"""
|
||||
Creates the elbow and wrist joints.
|
||||
|
||||
|
@ -629,6 +629,7 @@ class ElbowJoint:
|
|||
r = self.parent_arm_radius
|
||||
return [r - dx, r + dx]
|
||||
|
||||
@target(name="child")
|
||||
def child_joint(self) -> Cq.Assembly:
|
||||
angle = -self.disk_joint.tongue_span / 2
|
||||
dz = self.disk_joint.disk_thickness / 2
|
||||
|
@ -646,9 +647,11 @@ class ElbowJoint:
|
|||
)
|
||||
return result
|
||||
|
||||
@target(name="parent-lower")
|
||||
def parent_joint_lower(self) -> Cq.Workplane:
|
||||
return self.disk_joint.housing_lower()
|
||||
|
||||
@target(name="parent-upper")
|
||||
def parent_joint_upper(self):
|
||||
axial_offset = Cq.Location((self.parent_arm_radius, 0, 0))
|
||||
housing_dz = self.disk_joint.housing_upper_dz
|
||||
|
@ -683,6 +686,7 @@ class ElbowJoint:
|
|||
)
|
||||
return result
|
||||
|
||||
@assembly()
|
||||
def assembly(self, angle: float = 0) -> Cq.Assembly:
|
||||
result = (
|
||||
Cq.Assembly()
|
||||
|
|
|
@ -635,6 +635,10 @@ class WingProfile(Model):
|
|||
result = (
|
||||
Cq.Assembly()
|
||||
)
|
||||
tag_top, tag_bot = "top", "bot"
|
||||
if self.flip:
|
||||
tag_top, tag_bot = tag_bot, tag_top
|
||||
|
||||
if "s0" in parts:
|
||||
result.add(self.assembly_s0(), name="s0")
|
||||
if "shoulder" in parts:
|
||||
|
@ -642,20 +646,18 @@ class WingProfile(Model):
|
|||
if "s0" in parts and "shoulder" in parts:
|
||||
(
|
||||
result
|
||||
.constrain("s0/shoulder?conn_top0", "shoulder/parent_top/lip?conn0", "Plane")
|
||||
#.constrain("s0/shoulder?conn_top1", "shoulder/parent_top/lip?conn1", "Plane")
|
||||
.constrain("s0/shoulder?conn_bot0", "shoulder/parent_bot/lip?conn0", "Plane")
|
||||
#.constrain("s0/shoulder?conn_bot1", "shoulder/parent_bot/lip?conn1", "Plane")
|
||||
.constrain(f"s0/shoulder?conn_top0", f"shoulder/parent_{tag_top}/lip?conn0", "Plane")
|
||||
.constrain(f"s0/shoulder?conn_bot0", f"shoulder/parent_{tag_bot}/lip?conn0", "Plane")
|
||||
)
|
||||
if "s1" in parts:
|
||||
result.add(self.assembly_s1(), name="s1")
|
||||
if "s1" in parts and "shoulder" in parts:
|
||||
(
|
||||
result
|
||||
.constrain("s1/shoulder_top?conn0", "shoulder/child/lip_top?conn0", "Plane")
|
||||
.constrain("s1/shoulder_top?conn1", "shoulder/child/lip_top?conn1", "Plane")
|
||||
.constrain("s1/shoulder_bot?conn0", "shoulder/child/lip_bot?conn0", "Plane")
|
||||
.constrain("s1/shoulder_bot?conn1", "shoulder/child/lip_bot?conn1", "Plane")
|
||||
.constrain("s1/shoulder_top?conn0", f"shoulder/child/lip_{tag_top}?conn0", "Plane")
|
||||
.constrain("s1/shoulder_top?conn1", f"shoulder/child/lip_{tag_top}?conn1", "Plane")
|
||||
.constrain("s1/shoulder_bot?conn0", f"shoulder/child/lip_{tag_bot}?conn0", "Plane")
|
||||
.constrain("s1/shoulder_bot?conn1", f"shoulder/child/lip_{tag_bot}?conn1", "Plane")
|
||||
)
|
||||
if "elbow" in parts:
|
||||
result.add(self.elbow_joint.assembly(angle=angle_elbow_wrist), name="elbow")
|
||||
|
|
Loading…
Reference in New Issue