def ZoomOnBranch(self, branch, total_frames, reset_view=False, margin=20): d = self.d x0, y0, x1, y1 = std.d.viewBox n = self.tree & branch x0f, y0f, x1f, y1f = n.x_coor - margin, n.y_coor - margin, n.x_coor + margin, n.y_coor + margin x0s = (x0f - x0) / float(total_frames) y0s = (y0f - y0) / float(total_frames) x1s = (x1f - x1) / float(total_frames) y1s = (y1f - y1) / float(total_frames) def draw_frame(i): std.d.viewBox = ( x0 + i * x0s, y0 + i * y0s, x1 + i * x1s, y1 + i * y1s, ) return (d) with draw.animate_jupyter(draw_frame, delay=0.05) as anim: for i in range(total_frames): anim.draw_frame(i) if reset_view: std.d.viewBox = x0, y0, x1, y1
def ZoomOnPoint(self, point, total_frames, reset_view=False): d = self.d x0, y0, x1, y1 = std.d.viewBox x0f, y0f, x1f, y1f = point x0s = (x0f - x0) / float(total_frames) y0s = (y0f - y0) / float(total_frames) x1s = (x1f - x1) / float(total_frames) y1s = (y1f - y1) / float(total_frames) def draw_frame(i): std.d.viewBox = ( x0 + i * x0s, y0 + i * y0s, x1 + i * x1s, y1 + i * y1s, ) return (d) with draw.animate_jupyter(draw_frame, delay=0.05) as anim: for i in range(total_frames): anim.draw_frame(i) if reset_view: std.d.viewBox = x0, y0, x1, y1
def AnimateForward(self, url): total_frames = 200 d = self.d p = draw.Rectangle(0, 0, self.width, self.height, fill="black", id="Square") d.append(p) def draw_frame(i): std.d.elements[-1].args["y"] += (self.height / total_frames) #d.setRenderSize(h=self.height) #d.saveSvg(url) return (d) with draw.animate_jupyter(draw_frame, delay=0.05) as anim: for i in range(total_frames): anim.draw_frame(i)
def wrapper(func): if save == 'mp4': with draw.animate_video( f'{name}.mp4', draw_frame, fps=fps, jupyter=preview, ) as anim: state = AnimState(anim, fps=fps) func(state) elif save == 'gif' or save is True: with draw.animate_video( f'{name}.gif', draw_frame, duration=1 / fps, jupyter=preview, ) as anim: state = AnimState(anim, fps=fps) func(state) else: with draw.animate_jupyter(draw_frame, delay=1 / fps) as anim: state = AnimState(anim, fps=fps) func(state) return func
import drawSvg as draw # Draw a frame of the animation def draw_frame(t): d = draw.Drawing(2, 5.00, origin=(-1, -1.05)) d.setRenderSize(h=150) d.append(draw.Rectangle(-4, -4, 8, 10, fill='white')) d.append(draw.Rectangle(-1, -1.00, 8, 1.05, fill='brown')) t = (t + 1) % 2 - 1 y = 4 - t**2 * 4 d.append(draw.Circle(0, y, 1, fill='lime')) return d with draw.animate_jupyter(draw_frame, delay=0.10) as anim: # Or: #with draw.animate_video('example6.gif', draw_frame, duration=0.05 # ) as anim: # Add each frame to the animation for i in range(40): anim.draw_frame(i / 10) for i in range(40): anim.draw_frame(i / 10) for i in range(40): anim.draw_frame(i / 10)