def test_remove_2(self): points = np.array( [[0, 0, 0], [0, 1, 0], [1, 2, 0], [2, 2, 0], [3, 1, 0], [3, 0, 0]], dtype=np.float64) degree = 3 kv = np.array([0, 0, 0, 0, 0.25, 0.75, 1, 1, 1, 1]) weights = [1, 1, 1, 1, 1, 1] curve = SvNativeNurbsCurve(degree, kv, points, weights) kv_err = sv_knotvector.check(degree, kv, len(points)) if kv_err is not None: raise Exception(kv_err) knot = 0.1 inserted = curve.insert_knot(knot, 1) self.assertEquals(len(inserted.get_control_points()), len(points) + 1) expected_inserted_kv = np.array( [0, 0, 0, 0, 0.1, 0.25, 0.75, 1, 1, 1, 1]) self.assert_numpy_arrays_equal(inserted.get_knotvector(), expected_inserted_kv, precision=8) inserted_kv = inserted.get_knotvector() k = np.searchsorted(inserted_kv, knot, side='right') - 1 s = sv_knotvector.find_multiplicity(inserted_kv, knot) print("K:", k, "S:", s) removed = inserted.remove_knot(knot, 1) self.assert_numpy_arrays_equal(removed.get_knotvector(), kv, precision=8)
def test_remove_1(self): points = np.array([[0, 0, 0], [1, 1, 0], [2, 1, 0], [3, 0, 0]]) degree = 3 kv = np.array([0, 0, 0, 0, 1, 1, 1, 1], dtype=np.float64) weights = [1, 1, 1, 1] ts = np.linspace(0.0, 1.0, num=5) curve = SvNativeNurbsCurve(degree, kv, points, weights) orig_pts = curve.evaluate_array(ts) kv_err = sv_knotvector.check(degree, kv, len(points)) if kv_err is not None: raise Exception(kv_err) knot = 0.5 inserted = curve.insert_knot(knot, 2) self.assertEquals(len(inserted.get_control_points()), len(points) + 2) self.assert_numpy_arrays_equal(inserted.evaluate_array(ts), orig_pts, precision=8) expected_inserted_kv = np.array([0, 0, 0, 0, 0.5, 0.5, 1, 1, 1, 1]) inserted_kv = inserted.get_knotvector() self.assert_numpy_arrays_equal(inserted_kv, expected_inserted_kv, precision=8) removed = inserted.remove_knot(knot, 2) expected_removed_kv = kv self.assert_numpy_arrays_equal(removed.get_knotvector(), expected_removed_kv, precision=8) self.assert_numpy_arrays_equal(removed.evaluate_array(ts), orig_pts, precision=8)
def test_insert_2(self): points = np.array([[0, 0, 0], [1, 1, 0], [2, 0, 0]]) degree = 2 kv = sv_knotvector.generate(degree, 3) weights = [1, 1, 1] curve = SvNativeNurbsCurve(degree, kv, points, weights) inserted = curve.insert_knot(0.5, 2) ts = np.array([0, 0.25, 0.5, 0.75, 1.0]) expected = curve.evaluate_array(ts) result = inserted.evaluate_array(ts) self.assert_numpy_arrays_equal(result, expected, precision=8)
def test_insert_1(self): points = np.array([[0, 0, 0], [1, 0, 0]]) kv = sv_knotvector.generate(1, 2) weights = [1, 1] curve = SvNativeNurbsCurve(1, kv, points, weights) curve = curve.insert_knot(0.5) ts = np.array([0, 0.25, 0.5, 0.75, 1.0]) expected = np.array([[0, 0, 0], [0.25, 0, 0], [0.5, 0, 0], [0.75, 0, 0], [1, 0, 0]]) result = curve.evaluate_array(ts) self.assert_numpy_arrays_equal(result, expected, precision=8)
def test_insert_3(self): points = np.array([[0, 0, 0], [1, 1, 0], [2, 1, 0], [3, 0, 0]]) degree = 2 kv = sv_knotvector.generate(degree, 4) weights = [1, 1, 1, 1] #print("test_insert_3: Kv:", kv) curve = SvNativeNurbsCurve(degree, kv, points, weights) inserted = curve.insert_knot(0.5) #print("Ins.kv:", inserted.knotvector) #print("Ins.cp:", inserted.control_points) ts = np.array([0, 0.25, 0.5, 0.75, 1.0]) expected = curve.evaluate_array(ts) result = inserted.evaluate_array(ts) self.assert_numpy_arrays_equal(result, expected, precision=8)