feat: Add unit testing for onbashira collision
This commit is contained in:
parent
2840315a51
commit
de829577aa
|
@ -1,9 +1,10 @@
|
|||
from nhf.build import Model, TargetKind, target, assembly, submodel
|
||||
from nhf.materials import Role, Material
|
||||
import nhf.utils
|
||||
from nhf.parts.fasteners import FlatHeadBolt, HexNut, Washer
|
||||
from nhf.parts.electronics import ArduinoUnoR3, BatteryBox18650
|
||||
import nhf.utils
|
||||
|
||||
import unittest
|
||||
from typing import Optional, Union
|
||||
import math
|
||||
from dataclasses import dataclass, field
|
||||
|
@ -2448,6 +2449,19 @@ class Onbashira(Model):
|
|||
material=self.material_side,
|
||||
role=Role.STRUCTURE | Role.DECORATION,
|
||||
)
|
||||
for i in range(self.n_side):
|
||||
name_bolt = f"chamber_back{i}boltFPI{i}"
|
||||
a = a.addS(
|
||||
BOLT_COMMON.generate(),
|
||||
name=name_bolt,
|
||||
material=self.material_fastener,
|
||||
role=Role.CONNECTION,
|
||||
)
|
||||
a = a.constrain(
|
||||
f"chamber_back?holeF{i}",
|
||||
f"{name_bolt}?root",
|
||||
"Plane",
|
||||
)
|
||||
if has_part(parts, "chamber_front"):
|
||||
a = a.addS(
|
||||
self.chamber_front(),
|
||||
|
@ -2455,6 +2469,19 @@ class Onbashira(Model):
|
|||
material=self.material_side,
|
||||
role=Role.STRUCTURE | Role.DECORATION,
|
||||
)
|
||||
for i in range(self.n_side):
|
||||
name_bolt = f"chamber_front{i}boltFPI{i}"
|
||||
a = a.addS(
|
||||
BOLT_COMMON.generate(),
|
||||
name=name_bolt,
|
||||
material=self.material_fastener,
|
||||
role=Role.CONNECTION,
|
||||
)
|
||||
a = a.constrain(
|
||||
f"chamber_front?holeF{i}",
|
||||
f"{name_bolt}?root",
|
||||
"Plane",
|
||||
)
|
||||
if has_part(parts, "motor"):
|
||||
a = a.add(self.assembly_motor(), name="motor")
|
||||
if has_part(parts, "machine"):
|
||||
|
@ -2474,7 +2501,6 @@ class Onbashira(Model):
|
|||
"Plane",
|
||||
)
|
||||
|
||||
# FIXME: Filter
|
||||
if has_part(parts, ["motor", "ring2"]):
|
||||
for i in range(self.n_side // 2):
|
||||
j = self.n_side // 2 - 1 - i
|
||||
|
@ -2488,12 +2514,15 @@ class Onbashira(Model):
|
|||
# f"ring2/side{i*2+1}?holeStatorL",
|
||||
# "Plane",
|
||||
#)
|
||||
|
||||
if parts:
|
||||
return a.solve()
|
||||
|
||||
for i in range(self.n_side):
|
||||
j = (i + 1) % self.n_side
|
||||
ir = (self.n_side - i) % self.n_side
|
||||
|
||||
if has_part(parts, "ring1") or has_part(parts, "machine"):
|
||||
coupler_name = f"stator_coupler{i}"
|
||||
a = a.addS(
|
||||
self.stator_coupler(),
|
||||
|
@ -2501,11 +2530,13 @@ class Onbashira(Model):
|
|||
material=self.material_brace,
|
||||
role=Role.STRUCTURE,
|
||||
)
|
||||
if has_part(parts, "ring1"):
|
||||
a = a.constrain(
|
||||
f"{coupler_name}?holeOB",
|
||||
f"ring1/side{i}?holeStatorR",
|
||||
"Plane",
|
||||
)
|
||||
if has_part(parts, "machine"):
|
||||
a = a.constrain(
|
||||
f"{coupler_name}?holeIF",
|
||||
f"machine/stator1?holeF{ir}",
|
||||
|
@ -2525,31 +2556,7 @@ class Onbashira(Model):
|
|||
# "Plane",
|
||||
#)
|
||||
|
||||
name_bolt =f"chamber_back{i}boltFPI{i}"
|
||||
a = a.addS(
|
||||
BOLT_COMMON.generate(),
|
||||
name=name_bolt,
|
||||
material=self.material_fastener,
|
||||
role=Role.CONNECTION,
|
||||
)
|
||||
a = a.constrain(
|
||||
f"chamber_back?holeF{i}",
|
||||
f"{name_bolt}?root",
|
||||
"Plane",
|
||||
)
|
||||
|
||||
name_bolt =f"chamber_front{i}boltFPI{i}"
|
||||
a = a.addS(
|
||||
BOLT_COMMON.generate(),
|
||||
name=name_bolt,
|
||||
material=self.material_fastener,
|
||||
role=Role.CONNECTION,
|
||||
)
|
||||
a = a.constrain(
|
||||
f"chamber_front?holeF{i}",
|
||||
f"{name_bolt}?root",
|
||||
"Plane",
|
||||
)
|
||||
for ih in range(len(self.angle_joint_bolt_position)):
|
||||
a = a.constrain(
|
||||
f"chamber/side{i}?holeFPI{ih}",
|
||||
|
@ -2597,3 +2604,16 @@ class Onbashira(Model):
|
|||
)
|
||||
|
||||
return a.solve()
|
||||
|
||||
|
||||
class TestOnbashira(unittest.TestCase):
|
||||
|
||||
def test_collision(self):
|
||||
from nhf.checks import pairwise_intersection
|
||||
|
||||
o = Onbashira()
|
||||
a = o.assembly()
|
||||
self.assertEqual(pairwise_intersection(a), [])
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue