def from_arc(cls, arc: ConstructionArc, start_width: float, end_width: float, segments: int = 64) -> 'CurvedTrace': """ Create curved trace from an arc. Args: arc: :class:`~ezdxf.math.ConstructionArc` object start_width: start width end_width: end width segments: count of segments for full circle (360 degree) approximation, partial arcs have proportional less segments, but at least 3 Raises: ValueError: if arc.radius <= 0 """ if arc.radius <= 0: raise ValueError(f'Invalid radius: {arc.radius}.') curve_trace = cls() count = max(math.ceil(arc.angle_span / 360.0 * segments), 3) + 1 center = Vec2(arc.center) for point, width in zip(arc.vertices(arc.angles(count)), linspace(start_width, end_width, count)): curve_trace._append(point, point - center, width) return curve_trace
def test_vertices(): angles = [0, 45, 90, 135, -45, -90, -135, 180] arc = ConstructionArc(center=(1, 1)) vertices = list(arc.vertices(angles)) for v, a in zip(vertices, angles): a = math.radians(a) assert v.isclose(Vec2((1 + math.cos(a), 1 + math.sin(a))))