cosplay: Touhou/Houjuu Nue #4
|
@ -174,16 +174,20 @@ class Parameters:
|
|||
(-dx, dx),
|
||||
]
|
||||
|
||||
def hs_joint_component(self):
|
||||
hirth = nhf.joints.hirth_joint(
|
||||
radius=self.hs_joint_radius,
|
||||
radius_inner=self.hs_joint_radius_inner,
|
||||
tooth_height=self.hs_joint_tooth_height,
|
||||
base_height=self.hs_joint_ring_thickness)
|
||||
return hirth
|
||||
|
||||
def hs_joint_parent(self):
|
||||
"""
|
||||
Parent part of the Houjuu-Scarlett joint, which is composed of a Hirth
|
||||
coupling, a cylindrical base, and a mounting base.
|
||||
"""
|
||||
hirth = nhf.joints.hirth_joint(
|
||||
radius=self.hs_joint_radius,
|
||||
radius_inner=self.hs_joint_radius_inner,
|
||||
tooth_height=self.hs_joint_tooth_height,
|
||||
base_height=self.hs_joint_ring_thickness).val()
|
||||
hirth = self.hs_joint_component().val()
|
||||
#hirth = (
|
||||
# hirth
|
||||
# .faces("<Z")
|
||||
|
@ -289,7 +293,7 @@ class Parameters:
|
|||
Generate the wing root which contains a Hirth joint at its base and a
|
||||
rectangular opening on its side, with the necessary interfaces.
|
||||
"""
|
||||
return MW.wing_base().val()#self.wing_root_radius)
|
||||
return MW.wing_root()
|
||||
|
||||
######################
|
||||
# Assemblies #
|
||||
|
|
|
@ -12,6 +12,12 @@ class Test(unittest.TestCase):
|
|||
p = M.Parameters()
|
||||
obj = p.wing_root()
|
||||
self.assertIsInstance(obj.solids(), Cq.Solid, msg="Wing root must be in one piece")
|
||||
bbox = obj.BoundingBox()
|
||||
|
||||
msg = "Must fix 256^3 bbox"
|
||||
self.assertLess(bbox.xlen, 255, msg=msg)
|
||||
self.assertLess(bbox.ylen, 255, msg=msg)
|
||||
self.assertLess(bbox.zlen, 255, msg=msg)
|
||||
def test_wings(self):
|
||||
p = M.Parameters()
|
||||
p.wing_r1()
|
||||
|
|
|
@ -117,7 +117,7 @@ def wing_root_profiles(
|
|||
.wires().val()
|
||||
)
|
||||
return base, middle, tip
|
||||
def wing_base():
|
||||
def wing_root():
|
||||
root_profile, middle_profile, tip_profile = wing_root_profiles()
|
||||
|
||||
rotate_centre = Cq.Vector(-200, 0, -25)
|
||||
|
@ -130,12 +130,17 @@ def wing_base():
|
|||
middle_profile = middle_profile.rotate(
|
||||
startVector=rotate_centre,
|
||||
endVector=rotate_centre + rotate_axis,
|
||||
angleDegrees = 35,
|
||||
angleDegrees = 30,
|
||||
)
|
||||
antetip_profile = tip_profile.rotate(
|
||||
startVector=rotate_centre,
|
||||
endVector=rotate_centre + rotate_axis,
|
||||
angleDegrees = 60,
|
||||
)
|
||||
tip_profile = tip_profile.rotate(
|
||||
startVector=rotate_centre,
|
||||
endVector=rotate_centre + rotate_axis,
|
||||
angleDegrees = 70,
|
||||
angleDegrees = 90,
|
||||
)
|
||||
seg1 = (
|
||||
Cq.Workplane('XY')
|
||||
|
@ -154,9 +159,20 @@ def wing_base():
|
|||
.add(middle_profile)
|
||||
.toPending()
|
||||
.workplane()
|
||||
.add(antetip_profile)
|
||||
.toPending()
|
||||
.loft()
|
||||
)
|
||||
seg3 = (
|
||||
Cq.Workplane('XY')
|
||||
.add(antetip_profile)
|
||||
.toPending()
|
||||
.workplane()
|
||||
.add(tip_profile)
|
||||
.toPending()
|
||||
.loft()
|
||||
)
|
||||
seg1 = seg1.union(seg2)
|
||||
return seg1
|
||||
result = seg1.union(seg2).union(seg3)
|
||||
result.faces("<Z").tag("base")
|
||||
result.faces(">X").tag("conn")
|
||||
return result
|
||||
|
|
Loading…
Reference in New Issue