From 969aa82f0442c4693b053991bb6db7bc5068ac37 Mon Sep 17 00:00:00 2001 From: Sunkisser <40634339+sunkisser@users.noreply.github.com> Date: Sat, 26 Mar 2022 23:43:11 +0000 Subject: [PATCH 1/5] user feedback for SVGs that take a while --- manimlib/utils/space_ops.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index 4dde08d5..bd9064e2 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -17,6 +17,7 @@ from manimlib.constants import PI from manimlib.constants import TAU from manimlib.utils.iterables import adjacent_pairs from manimlib.utils.simple_functions import clip +from manimlib.logger import log def cross(v1: np.ndarray, v2: np.ndarray) -> list[np.ndarray]: @@ -415,6 +416,8 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list[int]) -> list: chilren = [[] for i in rings] for idx, i in enumerate(rings_sorted): + if len(rings_sorted) > 100 and (not idx%100 or idx+1==len(rings_sorted)): + log.info(f"SVG triangulation: {idx}/{len(rings_sorted)}") for j in rings_sorted[:idx][::-1]: if is_in_fast(i, j): chilren[j].append(i) From a3e4246938ece17ed8c0183a573b12ea1f890dfd Mon Sep 17 00:00:00 2001 From: Sunkisser <40634339+sunkisser@users.noreply.github.com> Date: Sun, 27 Mar 2022 21:59:49 +0000 Subject: [PATCH 2/5] use log.debug and display idx+1 --- manimlib/utils/space_ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index bd9064e2..38cb78e8 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -417,7 +417,7 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list[int]) -> list: chilren = [[] for i in rings] for idx, i in enumerate(rings_sorted): if len(rings_sorted) > 100 and (not idx%100 or idx+1==len(rings_sorted)): - log.info(f"SVG triangulation: {idx}/{len(rings_sorted)}") + log.debug(f"SVG triangulation: {idx+1}/{len(rings_sorted)}") for j in rings_sorted[:idx][::-1]: if is_in_fast(i, j): chilren[j].append(i) From e11c5def6337168c3c19951fd0a2f5c15e864672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B9=A4=E7=BF=94=E4=B8=87=E9=87=8C?= Date: Mon, 28 Mar 2022 08:05:41 +0800 Subject: [PATCH 3/5] style: some style fixes --- manimlib/utils/space_ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index 38cb78e8..fc7f39e5 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -416,7 +416,7 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list[int]) -> list: chilren = [[] for i in rings] for idx, i in enumerate(rings_sorted): - if len(rings_sorted) > 100 and (not idx%100 or idx+1==len(rings_sorted)): + if len(rings_sorted) > 100 and (idx%100 == 0 or idx+1 == len(rings_sorted)): log.debug(f"SVG triangulation: {idx+1}/{len(rings_sorted)}") for j in rings_sorted[:idx][::-1]: if is_in_fast(i, j): From cfba6c431f8a333c766b79b1472e207815534031 Mon Sep 17 00:00:00 2001 From: Sunkisser <40634339+sunkisser@users.noreply.github.com> Date: Mon, 28 Mar 2022 02:55:21 +0000 Subject: [PATCH 4/5] revert previous changes - we will refactor using tqdm --- manimlib/utils/space_ops.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index fc7f39e5..4dde08d5 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -17,7 +17,6 @@ from manimlib.constants import PI from manimlib.constants import TAU from manimlib.utils.iterables import adjacent_pairs from manimlib.utils.simple_functions import clip -from manimlib.logger import log def cross(v1: np.ndarray, v2: np.ndarray) -> list[np.ndarray]: @@ -416,8 +415,6 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list[int]) -> list: chilren = [[] for i in rings] for idx, i in enumerate(rings_sorted): - if len(rings_sorted) > 100 and (idx%100 == 0 or idx+1 == len(rings_sorted)): - log.debug(f"SVG triangulation: {idx+1}/{len(rings_sorted)}") for j in rings_sorted[:idx][::-1]: if is_in_fast(i, j): chilren[j].append(i) From c4ea79410732a375ea124365752717490193b4fc Mon Sep 17 00:00:00 2001 From: Sunkisser <40634339+sunkisser@users.noreply.github.com> Date: Mon, 28 Mar 2022 03:30:10 +0000 Subject: [PATCH 5/5] use tqdm to display progress bar for long running SVG triangulations --- manimlib/utils/space_ops.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/manimlib/utils/space_ops.py b/manimlib/utils/space_ops.py index 4dde08d5..d570d04d 100644 --- a/manimlib/utils/space_ops.py +++ b/manimlib/utils/space_ops.py @@ -4,11 +4,13 @@ import math import operator as op from functools import reduce from typing import Callable, Iterable, Sequence +import platform import numpy as np import numpy.typing as npt from mapbox_earcut import triangulate_float32 as earcut from scipy.spatial.transform import Rotation +from tqdm import tqdm as ProgressDisplay from manimlib.constants import RIGHT from manimlib.constants import DOWN @@ -414,7 +416,16 @@ def earclip_triangulation(verts: np.ndarray, ring_ends: list[int]) -> list: )) chilren = [[] for i in rings] - for idx, i in enumerate(rings_sorted): + ringenum = ProgressDisplay( + enumerate(rings_sorted), + total=len(rings), + leave=False, + ascii=True if platform.system() == 'Windows' else None, + dynamic_ncols=True, + desc="SVG Triangulation", + delay=3, + ) + for idx, i in ringenum: for j in rings_sorted[:idx][::-1]: if is_in_fast(i, j): chilren[j].append(i)