From 8d8ce1cd429182152e3f139bbe0cdaad58d1c8ea Mon Sep 17 00:00:00 2001 From: Shavez Date: Wed, 17 Sep 2025 20:47:26 +0530 Subject: [PATCH 1/4] refactor(Line): move reset_points_around_ends from Arrow to Line --- manimlib/mobject/geometry.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py index 9fc575d35e..9357ecbc24 100644 --- a/manimlib/mobject/geometry.py +++ b/manimlib/mobject/geometry.py @@ -701,6 +701,14 @@ def set_points_by_ends( alpha = min(buff / length, 0.5) self.pointwise_become_partial(self, alpha, 1 - alpha) return self + + def reset_points_around_ends(self) -> Self: + self.set_points_by_ends( + self.get_start().copy(), + self.get_end().copy(), + path_arc=self.path_arc + ) + return self def set_path_arc(self, new_value: float) -> Self: self.path_arc = new_value @@ -1171,14 +1179,6 @@ def set_points_by_ends( self.shift(start - self.get_start()) return self - def reset_points_around_ends(self) -> Self: - self.set_points_by_ends( - self.get_start().copy(), - self.get_end().copy(), - path_arc=self.path_arc - ) - return self - def get_start(self) -> Vect3: points = self.get_points() return 0.5 * (points[0] + points[-3]) From a90974821f11203d5230836a41297c65a24bd05c Mon Sep 17 00:00:00 2001 From: Shavez Date: Wed, 17 Sep 2025 20:50:19 +0530 Subject: [PATCH 2/4] fix(Line): make set_path_arc work for both Arrow and StrokeArrow --- manimlib/mobject/geometry.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py index 9357ecbc24..41318da5d8 100644 --- a/manimlib/mobject/geometry.py +++ b/manimlib/mobject/geometry.py @@ -710,9 +710,9 @@ def reset_points_around_ends(self) -> Self: ) return self - def set_path_arc(self, new_value: float) -> Self: - self.path_arc = new_value - self.init_points() + def set_path_arc(self, path_arc: float) -> Self: + self.path_arc = path_arc + self.reset_points_around_ends() return self def set_start_and_end_attrs(self, start: Vect3 | Mobject, end: Vect3 | Mobject): @@ -1203,11 +1203,6 @@ def set_thickness(self, thickness: float) -> Self: self.reset_points_around_ends() return self - def set_path_arc(self, path_arc: float) -> Self: - self.path_arc = path_arc - self.reset_points_around_ends() - return self - def set_perpendicular_to_camera(self, camera_frame): to_cam = camera_frame.get_implied_camera_location() - self.get_center() normal = self.get_unit_normal() From e1b4486abd29fb53371b411e5aae3577f049964d Mon Sep 17 00:00:00 2001 From: Shavez Date: Wed, 17 Sep 2025 20:54:28 +0530 Subject: [PATCH 3/4] refactor(Line): move set_perpendicular_to_camera from Arrow to Line --- manimlib/mobject/geometry.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py index 41318da5d8..7ce2340fdf 100644 --- a/manimlib/mobject/geometry.py +++ b/manimlib/mobject/geometry.py @@ -795,6 +795,15 @@ def get_arc_length(self) -> float: arc_len *= self.path_arc / (2 * math.sin(self.path_arc / 2)) return arc_len + def set_perpendicular_to_camera(self, camera_frame): + to_cam = camera_frame.get_implied_camera_location() - self.get_center() + normal = self.get_unit_normal() + axis = normalize(self.get_vector()) + # Project to be perpendicular to axis + trg_normal = to_cam - np.dot(to_cam, axis) * axis + mat = rotation_between_vectors(normal, trg_normal) + self.apply_matrix(mat, about_point=self.get_start()) + return self class DashedLine(Line): ''' @@ -1203,16 +1212,6 @@ def set_thickness(self, thickness: float) -> Self: self.reset_points_around_ends() return self - def set_perpendicular_to_camera(self, camera_frame): - to_cam = camera_frame.get_implied_camera_location() - self.get_center() - normal = self.get_unit_normal() - axis = normalize(self.get_vector()) - # Project to be perpendicular to axis - trg_normal = to_cam - np.dot(to_cam, axis) * axis - mat = rotation_between_vectors(normal, trg_normal) - self.apply_matrix(mat, about_point=self.get_start()) - return self - class Vector(Arrow): ''' From d7b69aa2ee7a3b12458720241bdc9918fdb10a74 Mon Sep 17 00:00:00 2001 From: Shavez Date: Wed, 17 Sep 2025 21:03:29 +0530 Subject: [PATCH 4/4] typing: add missing Tuple import in Line.get_start_and_end --- manimlib/mobject/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manimlib/mobject/geometry.py b/manimlib/mobject/geometry.py index 7ce2340fdf..a4ed7bb6fe 100644 --- a/manimlib/mobject/geometry.py +++ b/manimlib/mobject/geometry.py @@ -31,7 +31,7 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Iterable, Optional + from typing import Iterable, Optional, Tuple from manimlib.typing import ManimColor, Vect3, Vect3Array, Self