分组¶
影片代码
import manimgx as m
class GroupsHero(m.Scene):
def construct(self) -> None:
shapes = m.VGroup(
m.Circle(color=m.BLUE, fill_opacity=0.5),
m.Square(color=m.GREEN, fill_opacity=0.5),
m.Triangle(color=m.YELLOW, fill_opacity=0.5),
m.Star(color=m.RED, fill_opacity=0.5),
)
shapes.arrange(buff=0.6)
self.play(m.LaggedStart(*[m.Create(shape) for shape in shapes], lag_ratio=0.2))
self.play(shapes.animate.arrange_in_grid(rows=2, buff=0.6))
self.play(shapes.animate.arrange(m.DOWN, buff=0.3).scale(0.6))
self.play(shapes.animate.set_color(m.TEAL))
self.wait()
mobject 可以持有其他 mobject,即其组成部分。分组不持有其他任何东西:其组成部分就是它所 展示的内容。移动、缩放、着色或动画化一个分组,每个组成部分都会随之变化。
m.VGroup 和 m.Group 是同一个类的两个名称:Manim CE 的代码中两者都有使用。分组是其
组成部分的列表:group[0] 是第一个,group[1:3] 是由第二个和第三个组成的分组,
len(group) 计数其数量,for part in group: 遍历它们。每个 mobject 的组成部分都以相同
方式工作:公式的项、图表的坐标轴。
Group
¶
代码
import manimgx as m
class GroupExample(m.Scene):
def construct(self) -> None:
shapes = m.Group(
m.Circle(color=m.BLUE), m.Square(color=m.GREEN), m.Triangle()
).arrange(buff=1)
self.play(m.Create(shapes))
self.play(shapes.animate.scale(1.5).set_fill(opacity=0.5))
self.play(shapes[1].animate.shift(m.UP))
将各种类型的 mobject 组合在一起:路径、文本、图像、点云、其他组。
组没有自身的点:其成员即其子 mobject,对组执行的任何操作——
移动、缩放、设置样式、动画——都作用于其所有成员。
VGroup 是其另一个名称。组可以被索引(group[0])、切片(group[1:3] 是这些
成员的新组)和迭代,group + mobject、group - mobject、+= 和 -=
添加和移除成员。
其成员类型从创建时所用的内容推断;旨在容纳多种
类型的组声明一次,如 Group[Mobject](…),而 Group[Integer](…) 仅容纳整数,
因此 group[0] 对类型检查器是 Integer。
*mobjects成员,按绘制顺序:mobject 或 mobject 的可迭代对象 (其中每个 mobject 为一个成员)。
color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobject.py
submobjects
¶
组的成员,按绘制顺序排列。
add
¶
在组已有成员之后添加成员:mobject 或 mobject 的可迭代对象 (其中每个 mobject 为一个成员)。
已在组中的成员移至末尾。添加非 mobject 的对象,或 将组添加到自身,抛出异常。
*mobjects要添加的成员,按顺序排列。
源码
manimgx\mobject.py
添加与移除组成部分¶
add_to_back
¶
在 mobject 已有的子 mobject 之前添加子 mobject:它们绘制在之前的 之下(在相同 z 索引下)。
已经是子 mobject 的会移到前面;add 拒绝的操作,此方法同样拒绝。
*mobjects要添加的 mobject,按顺序排列。
源码
manimgx\mobject.py
insert
¶
在 mobject 的其他子 mobject 之间某处插入一个子 mobject。
已经是子 mobject 的会移到该位置;add 拒绝的操作,此方法同样拒绝。
index其在其他子 mobject 列表中的位置,与
list.insert接受的方式相同。mobject要插入的 mobject。
源码
manimgx\mobject.py
remove
¶
移除子 mobject:在 mobject 自身的子 mobject 中(而非其子 mobject 的子 mobject 中) 与给定者匹配的那些;其余的被忽略。
*mobjects要移除的 mobject。
源码
manimgx\mobject.py
get_family
¶
mobject 及其所有后代:自身,然后依次是每个子 mobject 的家族, 每个成员出现一次(若树中持有它两次,则在其最后出现的位置)。
返回 一个新列表。
family_members_with_points
¶
mobject 家族中拥有自身点的成员:即被绘制的那些。
返回 一个新列表,按家族顺序排列。
排列组成部分¶
arrange
¶

代码
import manimgx as m
class MobjectArrangeExample(m.Scene):
def construct(self) -> None:
sizes = (0.5, 1, 2)
squares = m.VGroup(*(m.Square(s, color=m.BLUE) for s in sizes))
squares.arrange(buff=0.5, aligned_edge=m.DOWN)
words = m.VGroup(m.Text("one"), m.Text("three"), m.Text("eleven"))
words.arrange(m.DOWN, aligned_edge=m.LEFT)
self.add(m.VGroup(squares, words).arrange(buff=1.5))
将子 mobject 排成一行:每个在前一个旁边(参见
next_to),间距 buff;然后将整体居中于
原点。
mobject.arrange(direction=RIGHT, buff=DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, center=True, **kwargs)
direction行的方向:RIGHT(默认),DOWN 表示列,…
buff相邻者之间的间距,以场景单位表示(默认 0.25)。
center之后是否将 mobject 居中于原点;若否, 第一个子 mobject 保持原位。
aligned_edge两个对象在它们相遇侧旁对齐所沿的边,以方向表示:当方向为 RIGHT 和 UP 时, 它们的顶部对齐(默认 ORIGIN:居中)。
submobject_to_align要放在另一对象旁边的 mobject 的一部分,代替其位置;其余部分随其移动 (默认 None:整个 mobject)。
index_of_submobject_to_align每个 mobject 中要对齐部分的索引:此对象的部分放在另一对象的部分旁边 (默认 None:各自的全部)。
coor_mask哪些坐标可以改变:mobject 沿其移动的每个轴为 1,保持不变的轴为 0 (默认 (1, 1, 1))。
源码
manimgx\mobject.py
arrange_in_grid
¶

代码
import manimgx as m
def cells() -> m.VGroup:
return m.VGroup(
*(
m.Square(0.9, color=m.BLUE).add(m.Text(str(i), font_size=36))
for i in range(1, 11)
)
)
class MobjectArrangeInGridExample(m.Scene):
def construct(self) -> None:
by_rows = cells().arrange_in_grid(rows=3, buff=0.2)
by_cols = cells().arrange_in_grid(rows=3, buff=0.2, flow_order="dr")
self.add(m.VGroup(by_rows, by_cols).arrange(buff=1.5))
将子 mobject 排成行列网格,居中于 mobject 原来的位置。
每行与其最高的 mobject 等高,每列与其最宽的 mobject 等宽,除非另行指定。
每个 mobject 按 cell_alignment 所示位于其单元格中,
但垂直方向按 row_alignments 为其行所示,水平方向按
col_alignments 为其列所示,在已指定的地方。行和列太少
无法容纳所有子 mobject 时抛出异常。
mobject.arrange_in_grid(rows=None, cols=None, buff=MED_SMALL_BUFF, cell_alignment=ORIGIN, row_alignments=None, col_alignments=None, row_heights=None, col_widths=None, flow_order='rd')
rows行数;None 表示与
row_alignments或row_heights列出的数量相同,否则与子 mobject 所需的数量相同。当rows和cols均未指定时,网格尽可能呈正方形。cols列数;None 表示与
col_alignments或col_widths列出的数量相同,否则与子 mobject 所需的数量相同。buff单元格之间的间距,以场景单位表示:两个方向共用一个值,或 (水平, 垂直)(默认 0.25)。
cell_alignment每个 mobject 在其单元格中的位置,以方向命名: UL 表示其左上角(默认 ORIGIN:居中)。
row_alignments每行的垂直对齐方式,从上到下:每行一个 字母,"u"(上)、"c"(居中)或 "d"(下);None:按
cell_alignment的垂直部分所示(UL:上)。col_alignments每列的水平对齐方式,从左到右:每列一个 字母,"l"(左)、"c"(居中)或 "r"(右);None:按
cell_alignment的水平部分所示(UL:左)。row_heights每行的高度,从上到下,以场景单位表示;None(对于 网格或某行)表示该行最高 mobject 的高度。
col_widths每列的宽度,从左到右,以场景单位表示;None(对于 网格或某列)表示该列最宽 mobject 的宽度。
flow_order单元格的填充顺序:两个字母,一行单元格的填充方向, 随后是各行彼此跟随的方向, "r"(右)、"l"(左)、"u"(上)或 "d"(下)。默认 "rd" 表示 行从左到右,从上到下;"dr" 表示列从上到下, 从左到右。
源码
manimgx\mobject.py
2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 | |
排序组成部分¶
sort
¶
按数字排序子 mobject:从每个子 mobject 的中心计算(默认 为其 x 坐标,即从左到右),或从每个子 mobject 本身计算。
它们的顺序即绘制顺序(在相同 z 索引下),也是
lag_ratio 错开其动画的顺序。
point_to_num_func关于子 mobject 中心的函数,给出排序 所依据的数字。
submob_func关于子 mobject 的函数,给出排序所依据的数字, 替代
point_to_num_func。
源码
manimgx\mobject.py
shuffle
¶
将子 mobject 置于随机顺序,从 Python 的 random 中抽取。
recursive每个子 mobject 的子 mobject 是否也被打乱, 以及它们的。
源码
manimgx\mobject.py
invert
¶
反转子 mobject 的顺序。
recursive每个子 mobject 的子 mobject 是否也被反转, 以及它们的。
源码
manimgx\mobject.py
命名组成部分¶
VDict
¶
代码
import manimgx as m
class VDictExample(m.Scene):
def construct(self) -> None:
shapes = m.VDict(
{
"circle": m.Circle(radius=0.9, color=m.RED),
"square": m.Square(side_length=1.8, color=m.GREEN),
},
show_keys=True,
)
shapes["triangle"] = m.Triangle(color=m.BLUE)
self.add(shapes.arrange(buff=1))
self.play(shapes["square"].animate.set_color(m.YELLOW))
成员带键的组,如同字典:vdict[key] 是一个成员。
任何类型的成员都可按键添加、替换(vdict[key] = mobject)和移除;
如同任何组,它按添加顺序一起绘制、移动和设置样式。使用 show_keys 时,
每个成员以键标注。
mapping_or_iterable初始成员:键和 mobject 的字典,或 (key, mobject) 对。
show_keys每个成员(现在或以后添加的)是否以键标注: 在其左侧添加
str(key)的 Tex,加入成员自身, 因此标注随其移动、动画和离开,并计入其尺寸。color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobject.py
submob_dict
¶
成员,按键索引。
add
¶
按键在组的成员之后添加成员。
若组显示键,每个成员以键标注。组中已有的键被赋予
新的 mobject,但旧的仍留在组中:要替换
成员,请设置它(vdict[key] = mobject)。
mapping_or_iterable键和 mobject 的字典,或 (key, mobject) 对。
源码
manimgx\mobject.py
remove
¶
按键从组中移除成员。
若组中无此键则抛出异常。
key成员的键。
源码
manimgx\mobject.py
index_labels
¶

为一个 mobject 的子对象编号:在每个子对象中心放置一个 Integer,带深色轮廓,用于查找某个部分的索引。
一种调试辅助:将标签添加到场景中即可看到它们;它们不跟随该 mobject。
mobject其子对象从 0 开始编号的 mobject。
label_height每个标签的高度,以场景单位计。
mob_class每个字符排版所用的类(默认为 MathTex)。
include_sign非负数是否带加号书写(默认为 False)。
group_with_commas小数点前的数字是否按三位一组用逗号分组,如 12,345(默认为 True)。
digit_buff_per_font_unit字符之间的间距,按字体大小单位计:默认值 0.001 在字体大小 48 时为 0.048 个场景单位。
show_ellipsis数字后是否跟"…",用于表示持续变化的值(默认为 False)。
unit数字后的单位,以 LaTeX 数学表示:
"^\circ"表示度,r"\text{ m}"表示米; 以 "^" 开头的单位会提升到数字的顶部(默认为 None)。unit_buff_per_font_unit单位前的间距,超出字符间距之外的部分,按字体大小单位计(默认为 0)。
include_background_rectangle数字后是否有背景矩形(默认为 False)。
edge_to_fix当新值改变数字宽度时保持不动的边缘,以方向表示(默认为 LEFT:向右生长)。
font_size字符的字体大小,以
mob_class的度量方式计(默认为 48)。color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
返回 由标签按顺序组成的新组。
源码
manimgx\mobjects\numbers.py
Beside
¶
next_to 如何将一个 mobject 对齐到另一个旁边:其关键字, 但不包括方向和间距,供传递它们的类使用 (arrange)。
aligned_edge两个对象在它们相遇侧旁对齐所沿的边,以方向表示:当方向为 RIGHT 和 UP 时, 它们的顶部对齐(默认 ORIGIN:居中)。
submobject_to_align要放在另一对象旁边的 mobject 的一部分,代替其位置;其余部分随其移动 (默认 None:整个 mobject)。
index_of_submobject_to_align每个 mobject 中要对齐部分的索引:此对象的部分放在另一对象的部分旁边 (默认 None:各自的全部)。
coor_mask哪些坐标可以改变:mobject 沿其移动的每个轴为 1,保持不变的轴为 0 (默认 (1, 1, 1))。
NumberStyle
¶
数字的书写方式:DecimalNumber 的关键字,但不包括 其小数位数,供传递这些关键字的类使用。
除此之外,它们还接受样式关键字。
mob_class每个字符排版所用的类(默认为 MathTex)。
include_sign非负数是否带加号书写(默认为 False)。
group_with_commas小数点前的数字是否按三位一组用逗号分组,如 12,345(默认为 True)。
digit_buff_per_font_unit字符之间的间距,按字体大小单位计:默认值 0.001 在字体大小 48 时为 0.048 个场景单位。
show_ellipsis数字后是否跟"…",用于表示持续变化的值(默认为 False)。
unit数字后的单位,以 LaTeX 数学表示:
"^\circ"表示度,r"\text{ m}"表示米; 以 "^" 开头的单位会提升到数字的顶部(默认为 None)。unit_buff_per_font_unit单位前的间距,超出字符间距之外的部分,按字体大小单位计(默认为 0)。
include_background_rectangle数字后是否有背景矩形(默认为 False)。
edge_to_fix当新值改变数字宽度时保持不动的边缘,以方向表示(默认为 LEFT:向右生长)。
font_size字符的字体大小,以
mob_class的度量方式计(默认为 48)。color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。