From a4ffe9b4e5b70401fc6afa41dc6e8bc6e6a08f3e Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Fri, 18 Nov 2022 09:11:29 -0800 Subject: [PATCH] Allow group_by_rows and group_bg_cols option for creating grids --- manimlib/mobject/mobject.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/manimlib/mobject/mobject.py b/manimlib/mobject/mobject.py index a8a2931d..a2d272a8 100644 --- a/manimlib/mobject/mobject.py +++ b/manimlib/mobject/mobject.py @@ -681,16 +681,35 @@ class Mobject(object): group_class = self.get_group_class() return group_class(*(self.copy() for _ in range(n))) - def get_grid(self, n_rows: int, n_cols: int, height: float | None = None, **kwargs) -> Group: + def get_grid(self, + n_rows: int, + n_cols: int, + height: float | None = None, + width: float | None = None, + group_by_rows: bool = False, + group_by_cols: bool = False, + **kwargs) -> Group: """ Returns a new mobject containing multiple copies of this one arranged in a grid """ - grid = self.replicate(n_rows * n_cols) + total = n_rows * n_cols + grid = self.replicate(total) + if group_by_cols: + kwargs["fill_rows_first"] = False grid.arrange_in_grid(n_rows, n_cols, **kwargs) if height is not None: grid.set_height(height) - return grid + if width is not None: + grid.set_height(width) + + group_class = self.get_group_class() + if group_by_rows: + return group_class(*(grid[n:n + n_cols] for n in range(0, total, n_cols))) + elif group_by_cols: + return group_class(*(grid[n:n + n_rows] for n in range(0, total, n_rows))) + else: + return grid # Updating