diff --git a/nhf/handle.py b/nhf/handle.py index 5bdd311..36462b8 100644 --- a/nhf/handle.py +++ b/nhf/handle.py @@ -36,7 +36,7 @@ class Handle: # Length for the rim on the female connector rim_length: float = 5 - insertion_length: float = 60 + insertion_length: float = 30 # Amount by which the connector goes into the segment connector_length: float = 60 @@ -174,12 +174,15 @@ class Handle: ) return result - def one_side_connector(self): + def one_side_connector(self, height=None): + if height is None: + height = self.rim_length result = ( Cq.Workplane('XY') .cylinder( radius=self.diam / 2, - height=self.rim_length, + height=height, + centered=(True, True, False) ) ) result.faces(">Z").tag("mate") @@ -197,7 +200,7 @@ class Handle: result .union( thread - .located(Cq.Location((0, 0, self.connector_length / 2)))) + .located(Cq.Location((0, 0, height)))) ) return result diff --git a/nhf/joints.py b/nhf/joints.py index 29ff40b..1fb938b 100644 --- a/nhf/joints.py +++ b/nhf/joints.py @@ -223,7 +223,7 @@ def comma_assembly(): ) return result -@dataclass(frozen=True) +@dataclass class TorsionJoint: """ This jonit consists of a rider puck on a track puck. IT is best suited if @@ -260,6 +260,7 @@ class TorsionJoint: assert self.groove_radius_outer > self.groove_radius_inner assert self.groove_radius_inner > self.radius_spring assert self.spring_height > self.groove_depth, "Groove is too deep" + assert self.radius_spring > self.radius_axle @property def total_height(self): diff --git a/nhf/touhou/houjuu_nue/trident.py b/nhf/touhou/houjuu_nue/trident.py index 769213c..71901ab 100644 --- a/nhf/touhou/houjuu_nue/trident.py +++ b/nhf/touhou/houjuu_nue/trident.py @@ -5,9 +5,17 @@ from nhf.handle import Handle def trident_assembly( handle: Handle, - handle_segment_length: float = 24*25.4): + handle_segment_length: float = 24*25.4, + terminal_height=100): def segment(): return handle.segment(handle_segment_length) + + terminal = ( + handle + .one_side_connector(height=terminal_height) + .faces(">Z") + .hole(15, terminal_height + handle.insertion_length - 10) + ) mat_i = Material.PLASTIC_PLA mat_s = Material.ACRYLIC_BLACK assembly = ( @@ -28,5 +36,7 @@ def trident_assembly( .constrain("s2?mate2", "i3?rim", "Plane", param=0) .add(handle.one_side_connector(), name="head", color=mat_i.color) .constrain("i3?mate", "head?mate", "Plane") + .add(terminal, name="terminal", color=mat_i.color) + .constrain("i0?mate", "terminal?mate", "Plane") ) return assembly.solve()