diff --git a/nhf/touhou/houjuu_nue/joints.py b/nhf/touhou/houjuu_nue/joints.py index 098a1cd..5461668 100644 --- a/nhf/touhou/houjuu_nue/joints.py +++ b/nhf/touhou/houjuu_nue/joints.py @@ -390,11 +390,12 @@ class ShoulderJoint(Model): angle_neutral: float = -15.0 angle_max_deflection: float = 65.0 - spool_radius: float = 14.0 + spool_radius: float = 12.0 spool_groove_depth: float = 1.0 spool_base_height: float = 3.0 spool_height: float = 5.0 - spool_groove_inset: float = 2.0 + spool_cap_height: float = 1.0 + spool_groove_inset: float = 3.0 flip: bool = False actuator: LinearActuator = LINEAR_ACTUATOR_21 @@ -554,17 +555,19 @@ class ShoulderJoint(Model): Generates the spool piece which holds the line in tension """ t = self.spool_groove_depth - bulk = Cq.Solid.makeCylinder( - radius=self.spool_radius, + radius_core_inner = self.torsion_joint.radius_rider - self.child_core_thickness + spindle = Cq.Solid.makeCone( + radius1=self.spool_radius, + radius2=radius_core_inner, height=self.spool_height, - ).located(Cq.Location((0, 0, self.spool_base_height))) - base = Cq.Solid.makeCylinder( - radius=self.spool_radius - t, - height=self.spool_base_height, ) - hole_x = self.spool_radius - (t + self.spool_groove_inset) + cap = Cq.Solid.makeCylinder( + radius=radius_core_inner, + height=self.spool_cap_height + ).located(Cq.Location((0,0,self.spool_height))) + hole_x = radius_core_inner - self.spool_groove_inset slot = Cq.Solid.makeBox( - length=t + self.spool_groove_inset, + length=t, width=t, height=self.spool_base_height, ).located(Cq.Location((hole_x, -t/2, 0))) @@ -577,7 +580,7 @@ class ShoulderJoint(Model): radius=self.torsion_joint.radius_axle, height=self.spool_height + self.spool_base_height, ) - return bulk.fuse(base).cut(slot, hole, centre_hole) + return spindle.fuse(cap).cut(slot, hole, centre_hole) @target(name="child") def child(self) -> Cq.Assembly: @@ -618,6 +621,11 @@ class ShoulderJoint(Model): width=self.child_lip_width - self.child_lip_thickness * 2, height=self.child_lip_height, ).located(Cq.Location((0, self.child_lip_thickness, 0)))) + .cut(Cq.Solid.makeBox( + length=self.child_lip_ext - self.child_guard_ext - self.child_lip_thickness, + width=self.child_lip_width, + height=self.child_lip_height - self.child_lip_thickness * 2, + ).located(Cq.Location((0, 0, self.child_lip_thickness)))) .located(Cq.Location(( self.child_guard_ext, -self.child_lip_width / 2,