Scene helper

class manim_extensions.compass.CompassScene(camera_class=<class 'manim.camera.moving_camera.MovingCamera'>, **kwargs)[source]

Bases: MovingCameraScene

A scene equipped with a compass, ruler, and pencil. Mainly implements compass placement, arc drawing, and ruler/pencil animations.

Example: CompassSceneDocExample

from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneDocExample(CompassScene):
    def construct(self):
        self.draw_arc(ORIGIN, RIGHT, PI / 2)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneDocExample(CompassScene):
    def construct(self):
        self.draw_arc(ORIGIN, RIGHT, PI / 2)
        self.wait()

setup()[source]

CompassScene.setup example.

Example: CompassSceneSetupDocExample

../../_images/CompassSceneSetupDocExample-1.png
from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneSetupDocExample(CompassScene):
    def setup(self):
        super().setup()
        self.compass.move_to(ORIGIN)

    def construct(self):
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneSetupDocExample(CompassScene):
    def setup(self):
        super().setup()
        self.compass.move_to(ORIGIN)

    def construct(self):
        self.wait()

compass_move_niddle_tip_to(pos=array([0., 0., 0.]), run_time=1)[source]

Move the compass needle tip to pos.

Example: CompassSceneMoveNiddleTipToDocExample

from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneMoveNiddleTipToDocExample(CompassScene):
    def construct(self):
        self.compass_move_niddle_tip_to(ORIGIN)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class CompassSceneMoveNiddleTipToDocExample(CompassScene):
    def construct(self):
        self.compass_move_niddle_tip_to(ORIGIN)
        self.wait()

rotate_compass_about_niddle_tip(angle_or_arc, arc=None, added_anims=None, **kwargs)[source]

Rotate angle around the compass needle tip (niddle_tip).

Example: RotateCompassAboutNiddleTipDocExample

from manim import *
from manim_extensions.compass import CompassScene

class RotateCompassAboutNiddleTipDocExample(CompassScene):
    def construct(self):
        self.rotate_compass_about_niddle_tip(PI / 2)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class RotateCompassAboutNiddleTipDocExample(CompassScene):
    def construct(self):
        self.rotate_compass_about_niddle_tip(PI / 2)
        self.wait()

compass_split_span(span=3, run_time=1)[source]

Rotate the two compass legs uniformly outward/inward so the opened distance equals span.

Example: CompassSplitSpanDocExample

from manim import *
from manim_extensions.compass import CompassScene

class CompassSplitSpanDocExample(CompassScene):
    def construct(self):
        self.compass_split_span(2)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class CompassSplitSpanDocExample(CompassScene):
    def construct(self):
        self.compass_split_span(2)
        self.wait()

split_cmpass_span(span=1, run_time=1)[source]

Fix niddle_tip, then move pen_tip along the line through niddle_tip and pen_tip to reach the given span.

Example: SplitCmpassSpanDocExample

from manim import *
from manim_extensions.compass import CompassScene

class SplitCmpassSpanDocExample(CompassScene):
    def construct(self):
        self.split_cmpass_span(2)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class SplitCmpassSpanDocExample(CompassScene):
    def construct(self):
        self.split_cmpass_span(2)
        self.wait()

set_compass(niddle_pos=None, pen_pos=None, run_time=1.0)[source]

Place the compass at the specified positions: move niddle_tip to niddle_pos and pen_tip to pen_pos.

Parameters:
  • niddle_pos (Point) – target position for the compass needle tip (niddle_tip)

  • pen_pos (Point) – target position for the compass pen tip (pen_tip)

  • manim: (..) –

    CompassSceneSetCompassDocExample: from manim import * from manim_extensions.compass import CompassScene

    class CompassSceneSetCompassDocExample(CompassScene):
    def construct(self):

    self.set_compass(ORIGIN, 2 * RIGHT) self.wait()

draw_arc(niddle_point=array([0., 0., 0.]), pen_point=array([1., 0., 0.]), angle=1.0471975511965976, move_time=1.0, wait_time=1.0, run_time=1.0, arc_color=None, **kwargs)[source]

Draw an arc with the compass. The arc radius is computed from niddle_point and pen_point.

Parameters:
  • niddle_point – centre of the arc

  • pen_point – starting point of the arc

  • angle – central angle of the arc

  • move_time – time to move the compass into position

  • run_time – time to draw the arc

  • wait_time – wait time between the two animations

  • arc_color – colour of the arc

  • kwargs – other keyword arguments for the arc

  • return – The drawn arc

  • manim: (..) –

    CompassSceneDrawArcDocExample: from manim import * from manim_extensions.compass import CompassScene

    class CompassSceneDrawArcDocExample(CompassScene):
    def construct(self):

    self.draw_arc(ORIGIN, RIGHT, PI / 2) self.wait()

Return type:

Arc

flip_compass(run_time=1)[source]

Flip the compass.

Example: FlipCompassDocExample

from manim import *
from manim_extensions.compass import CompassScene

class FlipCompassDocExample(CompassScene):
    def construct(self):
        self.flip_compass()
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class FlipCompassDocExample(CompassScene):
    def construct(self):
        self.flip_compass()
        self.wait()

put_compass_aside(aside_pos=array([1., 0., 0.]), span_buff=0.1, run_time=1.0)[source]

Put the compass aside.

Parameters:
  • aside_pos (Point) – position to place the compass

  • span_buff (float) – distance between the two compass tips when placed aside

  • run_time (float) – time required to place the compass

  • manim: (..) –

    PutCompassAsideDocExample: from manim import * from manim_extensions.compass import CompassScene

    class PutCompassAsideDocExample(CompassScene):
    def construct(self):

    self.put_compass_aside(2 * RIGHT) self.wait()

set_ruler(start=None, end=None, lag_ratio=0.5, run_time=1.0, with_pencil=True)[source]

Place the ruler so that one of its edges aligns with start and end.

Parameters:
  • start (Point) – start point of the ruler placement

  • end (Point) – end point of the ruler placement

  • lag_ratio (float) – lag ratio between the ruler and pencil placement animations

  • run_time (float) – time to place the ruler

  • with_pencil (bool) – whether to place the pencil at the same time

  • manim: (..) –

    CompassSceneSetRulerDocExample: from manim import * from manim_extensions.compass import CompassScene

    class CompassSceneSetRulerDocExample(CompassScene):
    def construct(self):

    self.set_ruler(LEFT, RIGHT, with_pencil=False) self.wait()

set_pencil(pos, run_time=1.0)[source]

Move the pencil nib to the specified position.

Example: SetPencilDocExample

from manim import *
from manim_extensions.compass import CompassScene

class SetPencilDocExample(CompassScene):
    def construct(self):
        self.set_pencil(ORIGIN)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class SetPencilDocExample(CompassScene):
    def construct(self):
        self.set_pencil(ORIGIN)
        self.wait()

draw_line(start=None, end=None, run_time=1.0, with_pencil=True, color=ManimColor('#F7D96F'), **kwargs)[source]

Draw a straight line using the ruler.

Example: DrawLineDocExample

from manim import *
from manim_extensions.compass import CompassScene

class DrawLineDocExample(CompassScene):
    def construct(self):
        self.draw_line(LEFT, RIGHT)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class DrawLineDocExample(CompassScene):
    def construct(self):
        self.draw_line(LEFT, RIGHT)
        self.wait()

Return type:

Line

put_pencil_away(pos=array([0., -3., 0.]), run_time=1)[source]

Translate the pencil as a whole to the specified position.

Example: CompassScenePutPencilAwayDocExample

from manim import *
from manim_extensions.compass import CompassScene

class CompassScenePutPencilAwayDocExample(CompassScene):
    def construct(self):
        self.put_pencil_away(2 * DOWN)
        self.wait()
from manim import *
from manim_extensions.compass import CompassScene

class CompassScenePutPencilAwayDocExample(CompassScene):
    def construct(self):
        self.put_pencil_away(2 * DOWN)
        self.wait()

put_ruler_aside(aside_pos=array([0., -3., 0.]), horizontal_or_vertical=True, run_time=1.0)[source]

Put the ruler aside at aside_pos.

Parameters:
  • aside_pos (Point) – position where the ruler will be placed

  • horizontal_or_vertical (bool) – whether to place it horizontally

  • run_time (float) – time required to place the ruler

  • manim: (..) –

    PutRulerAsideDocExample: from manim import * from manim_extensions.compass import CompassScene

    class PutRulerAsideDocExample(CompassScene):
    def construct(self):

    self.put_ruler_aside(2 * DOWN) self.wait()