def test_map_section(self): v1 = Volume() v2 = Volume() v2.swap('u', 'v') v2.reverse('v') v2.swap('u', 'w') ori = Orientation.compute(v1, v2) self.assertEqual(ori.map_section((-1, 0, -1)), (-1, -1, -1)) self.assertEqual(ori.map_section((0, 0, None)), (-1, None, 0))
def test_permute_and_flip(self): v1 = Volume() v2 = Volume() v2.swap('u', 'v') v2.reverse('v') v2.swap('u', 'w') ori = Orientation.compute(v1, v2) self.assertEqual(ori.perm, (1, 2, 0)) self.assertEqual(ori.flip, (True, False, False))
def test_map_array(self): v1 = Volume() v2 = Volume() v2.swap('u', 'v') v2.reverse('v') v2.swap('u', 'w') ori = Orientation.compute(v1, v2) self.assertTrue((ori.map_array( np.reshape(np.arange(8, dtype=int), (2, 2, 2))) == np.reshape([2, 6, 3, 7, 0, 4, 1, 5], (2, 2, 2))).all())
def test_flip(self): v1 = Volume() v2 = Volume() v2.reverse('u') ori = Orientation.compute(v1, v2) self.assertEqual(ori.perm, (0, 1, 2)) self.assertEqual(ori.flip, (True, False, False)) v2.reverse('w') ori = Orientation.compute(v1, v2) self.assertEqual(ori.perm, (0, 1, 2)) self.assertEqual(ori.flip, (True, False, True))
def test_reverse(self): # identity mapping, control points generated from knot vector basis1 = BSplineBasis(4, [2, 2, 2, 2, 3, 6, 12, 12, 12, 12]) basis2 = BSplineBasis(3, [-3, -3, -3, 20, 30, 33, 33, 33]) basis3 = BSplineBasis(5, [0, 0, 0, 0, 0, 8, 8, 8, 8, 8]) vol = Volume(basis1, basis2, basis3) u = np.linspace(2, 12, 5) v = np.linspace(-3, 33, 5) w = np.linspace(0, 8, 5) pt = vol(u, v, w) vol.reverse('v') pt2 = vol(u, v[::-1], w) self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0) self.assertAlmostEqual(vol.start('v'), -3) self.assertAlmostEqual(vol.end('v'), 33) vol.reverse(2) pt2 = vol(u, v[::-1], w[::-1]) self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0) self.assertAlmostEqual(vol.start('w'), 0) self.assertAlmostEqual(vol.end('w'), 8)
def test_reverse(self): # identity mapping, control points generated from knot vector basis1 = BSplineBasis(4, [2,2,2,2,3,6,12,12,12,12]) basis2 = BSplineBasis(3, [-3,-3,-3,20,30,33,33,33]) basis3 = BSplineBasis(5, [0,0,0,0,0,8,8,8,8,8]) vol = Volume(basis1, basis2, basis3) u = np.linspace( 2,12,5) v = np.linspace(-3,33,5) w = np.linspace( 0, 8,5) pt = vol(u,v,w) vol.reverse('v') pt2 = vol(u,v[::-1],w) self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0) self.assertAlmostEqual(vol.start('v'), -3) self.assertAlmostEqual(vol.end('v'), 33) vol.reverse(2) pt2 = vol(u,v[::-1],w[::-1]) self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0) self.assertAlmostEqual(vol.start('w'), 0) self.assertAlmostEqual(vol.end('w'), 8)