3b1b-manim/manimlib/animation/growing.py
2022-12-16 20:19:18 -08:00

55 lines
1.5 KiB
Python

from __future__ import annotations
from manimlib.animation.transform import Transform
from manimlib.constants import PI
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import numpy as np
from manimlib.mobject.geometry import Arrow
from manimlib.mobject.mobject import Mobject
from manimlib.typing import ManimColor
class GrowFromPoint(Transform):
def __init__(
self,
mobject: Mobject,
point: np.ndarray,
point_color: ManimColor = None,
**kwargs
):
self.point = point
self.point_color = point_color
super().__init__(mobject, **kwargs)
def create_target(self) -> Mobject:
return self.mobject
def create_starting_mobject(self) -> Mobject:
start = super().create_starting_mobject()
start.scale(0)
start.move_to(self.point)
if self.point_color is not None:
start.set_color(self.point_color)
return start
class GrowFromCenter(GrowFromPoint):
def __init__(self, mobject: Mobject, **kwargs):
point = mobject.get_center()
super().__init__(mobject, point, **kwargs)
class GrowFromEdge(GrowFromPoint):
def __init__(self, mobject: Mobject, edge: np.ndarray, **kwargs):
point = mobject.get_bounding_box_point(edge)
super().__init__(mobject, point, **kwargs)
class GrowArrow(GrowFromPoint):
def __init__(self, arrow: Arrow, **kwargs):
point = arrow.get_start()
super().__init__(arrow, point, **kwargs)