cosplay: Touhou/Houjuu Nue #4
|
@ -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,25 +476,33 @@ 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,
|
||||
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
|
||||
"""
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue