def test_bezire4p_tangents_2d(): dbcurve = Bezier4P(DEFPOINTS2D) for index, epoint in enumerate(TANGENTS2D): etx, ety = epoint d1 = dbcurve.tangent(index * .1) assert equals_almost(etx, d1[0], places=3) assert equals_almost(ety, d1[1], places=3)
def test_derivative_1(dbezier): for rpoint, epoint in iter_data(dbezier, 1): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_points_2d_2(): dbcurve = DBezier(DEFPOINTS2D) for index, epoint in enumerate(POINTS2D): epx, epy = epoint pnt, d1, d2 = dbcurve.point(index * .1) assert equals_almost(epx, pnt[0], places=3) assert equals_almost(epy, pnt[1], places=3)
def test_bezier4p_points_2d(): bcurve = Bezier4P(DEFPOINTS2D) for index, epoint in enumerate(POINTS2D): epx, epy = epoint rpx, rpy, rpz = bcurve.point(index * .1) assert equals_almost(epx, rpx, places=3) is True assert equals_almost(epy, rpy, places=3) is True
def test_dbspline_derivative_2(dbspline): for rpoint, epoint in iter_data(dbspline, 2): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_tangents_2d(): dbcurve = DBezier(DEFPOINTS2D) for index, epoint in enumerate(TANGENTS2D): etx, ety = epoint pnt, d1, d2 = dbcurve.point(index * .1) assert equals_almost(etx, d1[0], places=3) assert equals_almost(ety, d1[1], places=3)
def test_points(dbezier): for rpoint, epoint in iter_data(dbezier, 0): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_dbspline_points(dbspline): for rpoint, epoint in iter_data(dbspline, 0): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_check_values(): test_points = [(0., 0.), (1., 2.), (3., 1.), (5., 3.)] spline = bspline_control_frame(test_points, degree=3, method='distance') result = list(spline.approximate(49)) assert len(result) == 50 for p1, p2 in zip(result, expected): assert equals_almost(p1[0], p2[0], 4) assert equals_almost(p1[1], p2[1], 4)
def check(y, x1, x2): result = circle.get_x(y) self.assertTrue(result) # order of results unknown v1 = equals_almost(result[0], x1, 4) and equals_almost( result[1], x2, 4) v2 = equals_almost(result[0], x2, 4) and equals_almost( result[1], x1, 4) return v1 or v2
def check(x, y1, y2): result = circle.get_y(x) self.assertTrue(result) # order of results unknown v1 = equals_almost(result[0], y1, 4) and equals_almost( result[1], y2, 4) v2 = equals_almost(result[0], y2, 4) and equals_almost( result[1], y1, 4) return v1 or v2
def test_points_3d(): bcurve = Bezier(DEFPOINTS3D) points = list(bcurve.approximate(40)) for rpoint, epoint in zip(points, iter_dbezier(DBEZIER3D, 0)): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_bspine_points(): curve = BSpline(DEFPOINTS, order=3) points = list(curve.approximate(40)) for rpoint, epoint in zip(points, iter_points(DBSPLINE, 0)): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_rbsplineu(): curve = BSplineU(DEFPOINTS, order=3, weights=DEFWEIGHTS) expected = RBSPLINEU points = list(curve.approximate(40)) for rpoint, epoint in zip(points, expected): epx, epy, epz = epoint rpx, rpy, rpz = rpoint assert equals_almost(epx, rpx) assert equals_almost(epy, rpy) assert equals_almost(epz, rpz)
def test_touch(testnum, x, y, _angle, places=7): result = True ray = Ray2D((x, y), angle=_angle) points = circle.intersect_ray(ray, places) if len(points) != 1: result = False else: point = points[0] # print ("{0}: x= {1:.{places}f} y= {2:.{places}f} : x'= {3:.{places}f} y' = {4:.{places}f}".format(testnum, x, y, point[0], point[1], places=places)) if not equals_almost(point[0], x, 4): result = False if not equals_almost(point[1], y, 4): result = False return result
def equal_vector(v1, v2, precision=4): if len(v1) != len(v2): return False for index in range(len(v1)): if not equals_almost(v1[index], v2[index], precision): return False return True
def test_arc_from_2p_angle_complex(): p1 = (-15.73335, 10.98719) p2 = (-12.67722, 8.76554) angle = 55.247230 arc = Arc.from_2p_angle(start_point=p1, end_point=p2, angle=angle) arc_result = Arc( center=(-12.08260, 12.79635), radius=4.07443, start_angle=-153.638906, end_angle=-98.391676, ) assert almost_equal_points(arc.center, arc_result.center, places=5) assert equals_almost(arc.radius, arc_result.radius, places=5) assert equals_almost(arc.start_angle, arc_result.start_angle, places=3) assert equals_almost(arc.end_angle, arc_result.end_angle, places=3)
def test_arc_from_3p(): p1 = (-15.73335, 10.98719) p2 = (-12.67722, 8.76554) p3 = (-8.00817, 12.79635) arc = Arc.from_3p(start_point=p1, end_point=p2, def_point=p3) arc_result = Arc( center=(-12.08260, 12.79635), radius=4.07443, start_angle=-153.638906, end_angle=-98.391676, ) assert almost_equal_points(arc.center, arc_result.center, places=5) assert equals_almost(arc.radius, arc_result.radius, places=5) assert equals_almost(arc.start_angle, arc_result.start_angle, places=3) assert equals_almost(arc.end_angle, arc_result.end_angle, places=3)
def test_spatial_arc_from_3p(): start_point_wcs = Vector(0, 1, 0) end_point_wcs = Vector(1, 0, 0) def_point_wcs = Vector(0, 0, 1) ucs = UCS.from_x_axis_and_point_in_xy(origin=def_point_wcs, axis=end_point_wcs - def_point_wcs, point=start_point_wcs) start_point_ucs = ucs.from_wcs(start_point_wcs) end_point_ucs = ucs.from_wcs(end_point_wcs) def_point_ucs = Vector(0, 0) arc = Arc.from_3p(start_point_ucs, end_point_ucs, def_point_ucs) dwg = ezdxf.new('R12') msp = dwg.modelspace() dxf_arc = arc.add_to_layout(msp, ucs) assert dxf_arc.dxftype() == 'ARC' assert equals_almost(dxf_arc.dxf.radius, 0.81649658) assert equals_almost(dxf_arc.dxf.start_angle, -30.) assert equals_almost(dxf_arc.dxf.end_angle, -150.) assert almost_equal_points(dxf_arc.dxf.extrusion, (0.57735027, 0.57735027, 0.57735027))
def test_arc_from_2p_angle_simple(): p1 = (2, 1) p2 = (0, 3) angle = 90 arc = Arc.from_2p_angle(start_point=p1, end_point=p2, angle=angle) assert almost_equal_points(arc.center, Vector(0, 1)) assert equals_almost(arc.radius, 2) assert equals_almost(arc.start_angle, 0) assert equals_almost(arc.end_angle, 90) arc = Arc.from_2p_angle(start_point=p2, end_point=p1, angle=angle) assert almost_equal_points(arc.center, Vector(2, 3)) assert equals_almost(arc.radius, 2) assert equals_almost(arc.start_angle, 180) assert equals_almost(arc.end_angle, -90)
def test_arc_from_2p_radius(): p1 = (2, 1) p2 = (0, 3) radius = 2 arc = Arc.from_2p_radius(start_point=p1, end_point=p2, radius=radius) assert almost_equal_points(arc.center, Vector(0, 1)) assert equals_almost(arc.radius, radius) assert equals_almost(arc.start_angle, 0) assert equals_almost(arc.end_angle, 90) arc = Arc.from_2p_radius(start_point=p2, end_point=p1, radius=radius) assert almost_equal_points(arc.center, Vector(2, 3)) assert equals_almost(arc.radius, radius) assert equals_almost(arc.start_angle, 180) assert equals_almost(arc.end_angle, -90)
def equal_matrix(m1, m2, precision=4): for row in range(4): for col in range(4): if not equals_almost(m1[row, col], m2[row, col], precision): return False return True
def equal_points_almost(p1, p2, places=7): return equals_almost(p1[0], p2[0], places) and equals_almost( p1[1], p2[1], places)