示例#1
0
    def test_edge_surfaces_six_sides(self):
        # create the unit cube
        vol = Volume()
        vol.raise_order(2,2,2)
        vol.refine(3)

        edges = vol.faces()

        # edge_surface should give back the same unit cube
        vol2 = VolumeFactory.edge_surfaces(edges)

        # check discretization
        self.assertEqual(vol2.order(0), 4)
        self.assertEqual(vol2.order(1), 4)
        self.assertEqual(vol2.order(2), 4)

        self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1]
        self.assertEqual(len(vol2.knots(1)), 5)
        self.assertEqual(len(vol2.knots(2)), 5)

        # check a 5x5x5 evaluation grid
        u = np.linspace(0,1,5)
        v = np.linspace(0,1,5)
        w = np.linspace(0,1,5)
        pt  = vol( u,v,w)
        pt2 = vol2(u,v,w)
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
示例#2
0
    def test_edge_surfaces_six_sides(self):
        # create the unit cube
        vol = Volume()
        vol.raise_order(2,2,2)
        vol.refine(3)

        edges = vol.faces()

        # edge_surface should give back the same unit cube
        vol2 = vf.edge_surfaces(edges)

        # check discretization
        self.assertEqual(vol2.order(0), 4)
        self.assertEqual(vol2.order(1), 4)
        self.assertEqual(vol2.order(2), 4)

        self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1]
        self.assertEqual(len(vol2.knots(1)), 5)
        self.assertEqual(len(vol2.knots(2)), 5)

        # check a 5x5x5 evaluation grid
        u = np.linspace(0,1,5)
        v = np.linspace(0,1,5)
        w = np.linspace(0,1,5)
        pt  = vol( u,v,w)
        pt2 = vol2(u,v,w)
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
示例#3
0
    def test_edge_surfaces_six_sides_issue_141(self):
        # create the unit cube
        vol = Volume()
        # modify slightly one edge: umin(w=0) is now a parabola instead of a line
        vol.raise_order(0,1,0)
        vol.controlpoints[-1, 1, 0, 0] += 1

        faces = vol.faces()

        # edge_surface should give back the same modified unit cube
        vol2 = vf.edge_surfaces(faces)

        # check discretization
        self.assertEqual(vol2.order(0),2)
        self.assertEqual(vol2.order(1),3)
        self.assertEqual(vol2.order(2),2)

        self.assertEqual(len(vol2.knots(0)),2) # [0, 1]
        self.assertEqual(len(vol2.knots(1)),2)
        self.assertEqual(len(vol2.knots(2)),2)

        # check a 5x5x5 evaluation grid
        u = np.linspace(0,1,5)
        v = np.linspace(0,1,5)
        w = np.linspace(0,1,5)
        pt  = vol( u,v,w)
        pt2 = vol2(u,v,w)

        self.assertTrue(np.allclose(pt, pt2))
示例#4
0
    def test_faces(self):
        vol1 = Volume()
        faces = vol1.faces()
        self.assertEqual(len(faces), 6)
        # check that it all comes out in the order umin, umax, vmin, vmax, wmin, wmax
        self.assertTrue(np.allclose(faces[0][0, 0], (0, 0, 0)))
        self.assertTrue(np.allclose(faces[0][1, 1], (0, 1, 1)))
        self.assertTrue(np.allclose(faces[1][0, 0], (1, 0, 0)))
        self.assertTrue(np.allclose(faces[1][1, 1], (1, 1, 1)))
        self.assertTrue(np.allclose(faces[2][0, 0], (0, 0, 0)))
        self.assertTrue(np.allclose(faces[2][1, 1], (1, 0, 1)))
        self.assertTrue(np.allclose(faces[3][0, 0], (0, 1, 0)))
        self.assertTrue(np.allclose(faces[3][1, 1], (1, 1, 1)))
        self.assertTrue(np.allclose(faces[4][0, 0], (0, 0, 0)))
        self.assertTrue(np.allclose(faces[4][1, 1], (1, 1, 0)))
        self.assertTrue(np.allclose(faces[5][0, 0], (0, 0, 1)))
        self.assertTrue(np.allclose(faces[5][1, 1], (1, 1, 1)))

        # one parametric direction is periodic, these indices should return None
        vol2 = vf.cylinder()
        faces = vol2.faces()
        self.assertEqual(len(faces), 6)
        self.assertIsNotNone(faces[0])
        self.assertIsNotNone(faces[1])
        self.assertIsNone(faces[2])
        self.assertIsNone(faces[3])
        self.assertIsNotNone(faces[4])
        self.assertIsNotNone(faces[5])

        # two parametric directions are periodic
        vol3 = vf.torus()
        faces = vol3.faces()
        self.assertEqual(len(faces), 6)
        self.assertIsNotNone(faces[0])
        self.assertIsNotNone(faces[1])
        self.assertIsNone(faces[2])
        self.assertIsNone(faces[3])
        self.assertIsNone(faces[4])
        self.assertIsNone(faces[5])