
    lj                    "   d Z ddlmZ g dZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ er dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ  G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )a  Animations that introduce mobjects to scene by growing them from points.

.. manim:: Growing

    class Growing(Scene):
        def construct(self):
            square = Square()
            circle = Circle()
            triangle = Triangle()
            arrow = Arrow(LEFT, RIGHT)
            star = Star()

            VGroup(square, circle, triangle).set_x(0).arrange(buff=1.5).set_y(2)
            VGroup(arrow, star).move_to(DOWN).set_x(0).arrange(buff=1.5).set_y(-2)

            self.play(GrowFromPoint(square, ORIGIN))
            self.play(GrowFromCenter(circle))
            self.play(GrowFromEdge(triangle, DOWN))
            self.play(GrowArrow(arrow))
            self.play(SpinInFromNothing(star))

    )annotations)GrowFromPointGrowFromCenterGrowFromEdge	GrowArrowSpinInFromNothing)TYPE_CHECKINGAny   )	Transform)PI)spiral_path)Arrow)OpenGLMobject)Point3DLikeVector3DLike)ParsableManimColor)Mobjectc                  <     e Zd ZdZ	 dd fdZddZd fdZ xZS )r   a  Introduce an :class:`~.Mobject` by growing it from a point.

    Parameters
    ----------
    mobject
        The mobjects to be introduced.
    point
        The point from which the mobject grows.
    point_color
        Initial color of the mobject before growing to its full size. Leave empty to match mobject's color.

    Examples
    --------

    .. manim :: GrowFromPointExample

        class GrowFromPointExample(Scene):
            def construct(self):
                dot = Dot(3 * UR, color=GREEN)
                squares = [Square() for _ in range(4)]
                VGroup(*squares).set_x(0).arrange(buff=1)
                self.add(dot)
                self.play(GrowFromPoint(squares[0], ORIGIN))
                self.play(GrowFromPoint(squares[1], [-2, 2, 0]))
                self.play(GrowFromPoint(squares[2], [3, -2, 0], RED))
                self.play(GrowFromPoint(squares[3], dot, dot.get_color()))

    Nmobjectr   pointr   point_colorParsableManimColor | Nonekwargsr
   c                \    || _         || _         t                      j        |fddi| d S )N
introducerT)r   r   super__init__)selfr   r   r   r   	__class__s        R/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/animation/growing.pyr   zGrowFromPoint.__init__O   s>     
&<<T<V<<<<<    returnMobject | OpenGLMobjectc                    | j         S N)r   )r   s    r!   create_targetzGrowFromPoint.create_targetZ   s
    |r"   c                    t                                                      }|                    d           |                    | j                   | j        r|                    | j                   |S )Nr   )r   create_starting_mobjectscalemove_tor   r   	set_color)r   startr    s     r!   r)   z%GrowFromPoint.create_starting_mobject]   s`    //11Adj!!! 	.OOD,---r"   r&   )r   r   r   r   r   r   r   r
   r#   r$   )__name__
__module____qualname____doc__r   r'   r)   __classcell__r    s   @r!   r   r   1   s         B 26		= 	= 	= 	= 	= 	= 	=            r"   r   c                  (     e Zd ZdZ	 d
d fd	Z xZS )r   a  Introduce an :class:`~.Mobject` by growing it from its center.

    Parameters
    ----------
    mobject
        The mobjects to be introduced.
    point_color
        Initial color of the mobject before growing to its full size. Leave empty to match mobject's color.

    Examples
    --------

    .. manim :: GrowFromCenterExample

        class GrowFromCenterExample(Scene):
            def construct(self):
                squares = [Square() for _ in range(2)]
                VGroup(*squares).set_x(0).arrange(buff=2)
                self.play(GrowFromCenter(squares[0]))
                self.play(GrowFromCenter(squares[1], point_color=RED))

    Nr   r   r   r   r   r
   c                j    |                                 } t                      j        ||fd|i| d S Nr   )
get_centerr   r   )r   r   r   r   r   r    s        r!   r   zGrowFromCenter.__init__~   sB     ""$$%KK[KFKKKKKr"   r&   )r   r   r   r   r   r
   r/   r0   r1   r2   r   r3   r4   s   @r!   r   r   f   s\         4 26L L L L L L L L L L Lr"   r   c                  (     e Zd ZdZ	 dd fdZ xZS )r   a^  Introduce an :class:`~.Mobject` by growing it from one of its bounding box edges.

    Parameters
    ----------
    mobject
        The mobjects to be introduced.
    edge
        The direction to seek bounding box edge of mobject.
    point_color
        Initial color of the mobject before growing to its full size. Leave empty to match mobject's color.

    Examples
    --------

    .. manim :: GrowFromEdgeExample

        class GrowFromEdgeExample(Scene):
            def construct(self):
                squares = [Square() for _ in range(4)]
                VGroup(*squares).set_x(0).arrange(buff=1)
                self.play(GrowFromEdge(squares[0], DOWN))
                self.play(GrowFromEdge(squares[1], RIGHT))
                self.play(GrowFromEdge(squares[2], UR))
                self.play(GrowFromEdge(squares[3], UP, point_color=RED))


    Nr   r   edger   r   r   r   r
   c                l    |                     |          } t                      j        ||fd|i| d S r7   )get_critical_pointr   r   )r   r   r;   r   r   r   r    s         r!   r   zGrowFromEdge.__init__   sD     **400%KK[KFKKKKKr"   r&   )r   r   r;   r   r   r   r   r
   r9   r4   s   @r!   r   r      s]         @ 26	L L L L L L L L L L Lr"   r   c                  0     e Zd ZdZ	 dd fd	ZddZ xZS )r   a  Introduce an :class:`~.Arrow` by growing it from its start toward its tip.

    Parameters
    ----------
    arrow
        The arrow to be introduced.
    point_color
        Initial color of the arrow before growing to its full size. Leave empty to match arrow's color.

    Examples
    --------

    .. manim :: GrowArrowExample

        class GrowArrowExample(Scene):
            def construct(self):
                arrows = [Arrow(2 * LEFT, 2 * RIGHT), Arrow(2 * DR, 2 * UL)]
                VGroup(*arrows).set_x(0).arrange(buff=2)
                self.play(GrowArrow(arrows[0]))
                self.play(GrowArrow(arrows[1], point_color=RED))

    Narrowr   r   r   r   r
   c                j    |                                 } t                      j        ||fd|i| d S r7   )	get_startr   r   )r   r?   r   r   r   r    s        r!   r   zGrowArrow.__init__   s@     !!II;I&IIIIIr"   r#   r$   c                    | j                                         }|                    dd| j                   | j        r|                    | j                   |S )Nr   T)
scale_tipsabout_point)r   copyr*   r   r   r,   )r   start_arrows     r!   r)   z!GrowArrow.create_starting_mobject   sZ    l''))!$*EEE 	4!!$"2333r"   r&   )r?   r   r   r   r   r
   r.   )r/   r0   r1   r2   r   r)   r3   r4   s   @r!   r   r      sn         0 FJJ J J J J J J       r"   r   c                  0     e Zd ZdZedz  dfd fdZ xZS )r   a  Introduce an :class:`~.Mobject` spinning and growing it from its center.

    Parameters
    ----------
    mobject
        The mobjects to be introduced.
    angle
        The amount of spinning before mobject reaches its full size. E.g. 2*PI means
        that the object will do one full spin before being fully introduced.
    point_color
        Initial color of the mobject before growing to its full size. Leave empty to match mobject's color.

    Examples
    --------

    .. manim :: SpinInFromNothingExample

        class SpinInFromNothingExample(Scene):
            def construct(self):
                squares = [Square() for _ in range(3)]
                VGroup(*squares).set_x(0).arrange(buff=2)
                self.play(SpinInFromNothing(squares[0]))
                self.play(SpinInFromNothing(squares[1], angle=2 * PI))
                self.play(SpinInFromNothing(squares[2], point_color=RED))

    r   Nr   r   anglefloatr   r   r   r
   c                j    || _          t                      j        |ft          |          |d| d S )N)	path_funcr   )rH   r   r   r   )r   r   rH   r   r   r    s        r!   r   zSpinInFromNothing.__init__   sS     
	
*511{	
 	
NT	
 	
 	
 	
 	
r"   )r   r   rH   rI   r   r   r   r
   )r/   r0   r1   r2   r   r   r3   r4   s   @r!   r   r      sX         < Av15	

 

 

 

 

 

 

 

 

 

 

r"   r   N)r2   
__future__r   __all__typingr	   r
   animation.transformr   	constantsr   utils.pathsr   manim.mobject.geometry.liner   #manim.mobject.opengl.opengl_mobjectr   manim.typingr   r   manim.utils.colorr   mobject.mobjectr   r   r   r   r   r    r"   r!   <module>rX      s   . # " " " " "   & % % % % % % % + + + + + +       % % % % % % *111111AAAAAA66666666444444))))))2 2 2 2 2I 2 2 2jL L L L L] L L LD%L %L %L %L %L= %L %L %LP# # # # # # # #L&
 &
 &
 &
 &
 &
 &
 &
 &
 &
r"   