diff --git a/nhf/parts/joints.py b/nhf/parts/joints.py index 3761882..2f5b62b 100644 --- a/nhf/parts/joints.py +++ b/nhf/parts/joints.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from typing import Optional import math import cadquery as Cq import nhf.parts.springs as springs @@ -454,14 +455,14 @@ class TorsionJoint: .workplane() .hole(self.radius_axle * 2) ) - theta_begin = math.radians(rider_slot_begin) + theta_begin = -math.radians(rider_slot_begin) theta_span = math.radians(self.rider_slot_span) if abs(math.remainder(self.rider_slot_span, 360)) < TOL: theta_step = theta_span / self.rider_n_slots else: theta_step = theta_span / (self.rider_n_slots - 1) for i in range(self.rider_n_slots): - theta = theta_begin + i * theta_step + theta = theta_begin - i * theta_step j = self.rider_n_slots - i - 1 if reverse_directrix_label else i result.polyline(self._directrix(self.rider_disk_height, theta), forConstruction=True).tag(f"dir{j}") @@ -475,26 +476,34 @@ class TorsionJoint: Cq.Assembly() .add(spring, name="spring", color=Role.DAMPING.color) .add(track, name="track", color=Role.PARENT.color) - .add(rider, name="rider", color=Role.PARENT.color) + .add(rider, name="rider", color=Role.CHILD.color) ) - TorsionJoint.add_constraints(result, - rider="rider", track="track", spring="spring", - directrix=directrix) + TorsionJoint.add_constraints( + result, + rider="rider", track="track", spring="spring", + directrix=directrix) return result.solve() @staticmethod def add_constraints(assembly: Cq.Assembly, - rider: str, track: str, spring: str, + spring: str, + rider: Optional[str] = None, + track: Optional[str] = None, directrix: int = 0): """ Add the necessary constraints to a RT assembly """ - ( - assembly - .constrain(f"{track}?spring", f"{spring}?top", "Plane") - .constrain(f"{track}?dir", f"{spring}?dir_top", - "Axis", param=0) - .constrain(f"{rider}?spring", f"{spring}?bot", "Plane") - .constrain(f"{rider}?dir{directrix}", f"{spring}?dir_bot", - "Axis", param=0) - ) + if track: + ( + assembly + .constrain(f"{track}?spring", f"{spring}?top", "Plane") + .constrain(f"{track}?dir", f"{spring}?dir_top", + "Axis", param=0) + ) + if rider: + ( + assembly + .constrain(f"{rider}?spring", f"{spring}?bot", "Plane") + .constrain(f"{rider}?dir{directrix}", f"{spring}?dir_bot", + "Axis", param=0) + )