diff --git a/nhf/touhou/yasaka_kanako/onbashira.py b/nhf/touhou/yasaka_kanako/onbashira.py index f279562..afc8aa6 100644 --- a/nhf/touhou/yasaka_kanako/onbashira.py +++ b/nhf/touhou/yasaka_kanako/onbashira.py @@ -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,29 +2514,34 @@ 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 - coupler_name = f"stator_coupler{i}" - a = a.addS( - self.stator_coupler(), - name=coupler_name, - material=self.material_brace, - role=Role.STRUCTURE, - ) - a = a.constrain( - f"{coupler_name}?holeOB", - f"ring1/side{i}?holeStatorR", - "Plane", - ) - a = a.constrain( - f"{coupler_name}?holeIF", - f"machine/stator1?holeF{ir}", - "Plane", - ) + if has_part(parts, "ring1") or has_part(parts, "machine"): + coupler_name = f"stator_coupler{i}" + a = a.addS( + self.stator_coupler(), + name=coupler_name, + 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}", + "Plane", + ) #name_bolt =f"stator_outer_bolt{i}" #a = a.addS( @@ -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}", @@ -2595,5 +2602,18 @@ class Onbashira(Model): f"{nc}/side{i}?holeRSM{ih}", "Plane", ) - + 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()