fix: Torsion joint slot labeling
This commit is contained in:
parent
2395c46839
commit
bf299d338c
|
@ -1,4 +1,5 @@
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional
|
||||||
import math
|
import math
|
||||||
import cadquery as Cq
|
import cadquery as Cq
|
||||||
import nhf.parts.springs as springs
|
import nhf.parts.springs as springs
|
||||||
|
@ -454,14 +455,14 @@ class TorsionJoint:
|
||||||
.workplane()
|
.workplane()
|
||||||
.hole(self.radius_axle * 2)
|
.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)
|
theta_span = math.radians(self.rider_slot_span)
|
||||||
if abs(math.remainder(self.rider_slot_span, 360)) < TOL:
|
if abs(math.remainder(self.rider_slot_span, 360)) < TOL:
|
||||||
theta_step = theta_span / self.rider_n_slots
|
theta_step = theta_span / self.rider_n_slots
|
||||||
else:
|
else:
|
||||||
theta_step = theta_span / (self.rider_n_slots - 1)
|
theta_step = theta_span / (self.rider_n_slots - 1)
|
||||||
for i in range(self.rider_n_slots):
|
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
|
j = self.rider_n_slots - i - 1 if reverse_directrix_label else i
|
||||||
result.polyline(self._directrix(self.rider_disk_height, theta),
|
result.polyline(self._directrix(self.rider_disk_height, theta),
|
||||||
forConstruction=True).tag(f"dir{j}")
|
forConstruction=True).tag(f"dir{j}")
|
||||||
|
@ -475,25 +476,33 @@ class TorsionJoint:
|
||||||
Cq.Assembly()
|
Cq.Assembly()
|
||||||
.add(spring, name="spring", color=Role.DAMPING.color)
|
.add(spring, name="spring", color=Role.DAMPING.color)
|
||||||
.add(track, name="track", color=Role.PARENT.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,
|
TorsionJoint.add_constraints(
|
||||||
|
result,
|
||||||
rider="rider", track="track", spring="spring",
|
rider="rider", track="track", spring="spring",
|
||||||
directrix=directrix)
|
directrix=directrix)
|
||||||
return result.solve()
|
return result.solve()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_constraints(assembly: Cq.Assembly,
|
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):
|
directrix: int = 0):
|
||||||
"""
|
"""
|
||||||
Add the necessary constraints to a RT assembly
|
Add the necessary constraints to a RT assembly
|
||||||
"""
|
"""
|
||||||
|
if track:
|
||||||
(
|
(
|
||||||
assembly
|
assembly
|
||||||
.constrain(f"{track}?spring", f"{spring}?top", "Plane")
|
.constrain(f"{track}?spring", f"{spring}?top", "Plane")
|
||||||
.constrain(f"{track}?dir", f"{spring}?dir_top",
|
.constrain(f"{track}?dir", f"{spring}?dir_top",
|
||||||
"Axis", param=0)
|
"Axis", param=0)
|
||||||
|
)
|
||||||
|
if rider:
|
||||||
|
(
|
||||||
|
assembly
|
||||||
.constrain(f"{rider}?spring", f"{spring}?bot", "Plane")
|
.constrain(f"{rider}?spring", f"{spring}?bot", "Plane")
|
||||||
.constrain(f"{rider}?dir{directrix}", f"{spring}?dir_bot",
|
.constrain(f"{rider}?dir{directrix}", f"{spring}?dir_bot",
|
||||||
"Axis", param=0)
|
"Axis", param=0)
|
||||||
|
|
Loading…
Reference in New Issue