growing.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import annotations
  2. from manimlib.animation.transform import Transform
  3. from manimlib.constants import PI
  4. from typing import TYPE_CHECKING
  5. if TYPE_CHECKING:
  6. import numpy as np
  7. from manimlib.mobject.geometry import Arrow
  8. from manimlib.mobject.mobject import Mobject
  9. from manimlib.typing import ManimColor
  10. class GrowFromPoint(Transform):
  11. def __init__(
  12. self,
  13. mobject: Mobject,
  14. point: np.ndarray,
  15. point_color: ManimColor = None,
  16. **kwargs
  17. ):
  18. self.point = point
  19. self.point_color = point_color
  20. super().__init__(mobject, **kwargs)
  21. def create_target(self) -> Mobject:
  22. return self.mobject.copy()
  23. def create_starting_mobject(self) -> Mobject:
  24. start = super().create_starting_mobject()
  25. start.scale(0)
  26. start.move_to(self.point)
  27. if self.point_color is not None:
  28. start.set_color(self.point_color)
  29. return start
  30. class GrowFromCenter(GrowFromPoint):
  31. def __init__(self, mobject: Mobject, **kwargs):
  32. point = mobject.get_center()
  33. super().__init__(mobject, point, **kwargs)
  34. class GrowFromEdge(GrowFromPoint):
  35. def __init__(self, mobject: Mobject, edge: np.ndarray, **kwargs):
  36. point = mobject.get_bounding_box_point(edge)
  37. super().__init__(mobject, point, **kwargs)
  38. class GrowArrow(GrowFromPoint):
  39. def __init__(self, arrow: Arrow, **kwargs):
  40. point = arrow.get_start()
  41. super().__init__(arrow, point, **kwargs)