cosplay: Touhou/Houjuu Nue #4

Open
aniva wants to merge 189 commits from touhou/houjuu-nue into main
5 changed files with 75 additions and 13 deletions
Showing only changes of commit 133c69b846 - Show all commits

View File

@ -15,3 +15,10 @@ and this should succeed
python3 -c "import nhf" python3 -c "import nhf"
``` ```
## Testing
Run all tests with
``` sh
python3 -m unittest
```

View File

@ -1,10 +1,8 @@
import cadquery as Cq import cadquery as Cq
import math import math
import unittest
def hirth_joint(radius=60, def hirth_joint(radius=60,
radius_inner=40, radius_inner=40,
radius_centre=30,
base_height=20, base_height=20,
n_tooth=16, n_tooth=16,
tooth_height=16, tooth_height=16,
@ -226,12 +224,3 @@ def comma_assembly():
) )
return result return result
class TestJoints(unittest.TestCase):
def test_hirth_assembly(self):
hirth_assembly()
def test_comma_assembly(self):
comma_assembly()
if __name__ == '__main__':
unittest.main()

12
nhf/test.py Normal file
View File

@ -0,0 +1,12 @@
import unittest
import nhf.joints
class TestJoints(unittest.TestCase):
def test_joints_hirth_assembly(self):
nhf.joints.hirth_assembly()
def test_joints_comma_assembly(self):
nhf.joints.comma_assembly()
if __name__ == '__main__':
unittest.main()

View File

@ -1,5 +1,6 @@
import cadquery as Cq
from dataclasses import dataclass from dataclasses import dataclass
import unittest
import cadquery as Cq
@dataclass(frozen=True) @dataclass(frozen=True)
class Parameters: class Parameters:
@ -16,9 +17,46 @@ class Parameters:
""" """
root_radius: float = 60 root_radius: float = 60
"""
Heights for various wing joints, where the numbers start from the first joint.
"""
wing_r1_height = 100
wing_r1_width = 400
wing_r2_height = 100
wing_r3_height = 100
def wing_r1_profile(self) -> Cq.Sketch:
"""
Generates the first wing segment profile, with the wing root pointing in
the positive x axis.
"""
# Depression of the wing middle
bend = 200
factor = 0.7
result = (
Cq.Sketch()
.segment((0, 0), (0, self.wing_r1_height))
.spline([
(0, self.wing_r1_height),
(0.5 * self.wing_r1_width, self.wing_r1_height - factor * bend),
(self.wing_r1_width, self.wing_r1_height - bend),
])
.segment(
(self.wing_r1_width, self.wing_r1_height - bend),
(self.wing_r1_width, -bend),
)
.spline([
(self.wing_r1_width, - bend),
(0.5 * self.wing_r1_width, - factor * bend),
(0, 0),
])
.assemble()
)
return result
def wing_root(self, def wing_root(self,
side_width=30, side_width=30,
side_height=100): side_height=100) -> Cq.Shape:
""" """
Generate the wing root which contains a Hirth joint at its base and a Generate the wing root which contains a Hirth joint at its base and a
rectangular opening on its side, with the necessary interfaces. rectangular opening on its side, with the necessary interfaces.
@ -30,5 +68,7 @@ class Parameters:
rotate=Cq.Vector(0, 45, 0)) rotate=Cq.Vector(0, 45, 0))
.rect(side_width, side_height) .rect(side_width, side_height)
.loft() .loft()
.val()
) )
return result return result

View File

@ -0,0 +1,14 @@
import unittest
import nhf.touhou.houjuu_nue as M
class Test(unittest.TestCase):
def test_wing_root(self):
p = M.Parameters()
p.wing_root()
def test_wing_profiles(self):
p = M.Parameters()
p.wing_r1_profile()
if __name__ == '__main__':
unittest.main()