Performance improved in set_color_by_rgba_func (#2316)

* removing 1 in neg axis if unit_tex is specified

* performance improved in `set_color_by_rgba_func`

* resolving imag axis number mob in ComplexPlane
This commit is contained in:
Varniex
2025-03-21 00:26:29 +05:30
committed by GitHub
parent 7a61a13691
commit dbfe7ac75d
3 changed files with 15 additions and 21 deletions

View File

@ -770,13 +770,6 @@ class ComplexPlane(NumberPlane):
axis = self.get_x_axis()
value = z.real
number_mob = axis.get_number_mobject(value, font_size=font_size, **kwargs)
# For -i, remove the "1"
if z.imag == -1:
number_mob.remove(number_mob[1])
number_mob[0].next_to(
number_mob[1], LEFT,
buff=number_mob[0].get_width() / 4
)
self.coordinate_labels.add(number_mob)
self.add(self.coordinate_labels)
return self

View File

@ -52,7 +52,7 @@ SubmobjectType = TypeVar('SubmobjectType', bound='Mobject')
if TYPE_CHECKING:
from typing import Callable, Iterator, Union, Tuple, Optional, Any
import numpy.typing as npt
from manimlib.typing import ManimColor, Vect3, Vect4, Vect3Array, UniformDict, Self
from manimlib.typing import ManimColor, Vect3, Vect4Array, Vect3Array, UniformDict, Self
from moderngl.context import Context
T = TypeVar('T')
@ -163,7 +163,7 @@ class Mobject(object):
def animate(self) -> _AnimationBuilder:
"""
Methods called with Mobject.animate.method() can be passed
into a Scene.play call, as if you were calling
into a Scene.play call, as if you were calling
ApplyMethod(mobject.method)
Borrowed from https://github.com/ManimCommunity/manim/
@ -287,10 +287,7 @@ class Mobject(object):
about_point = self.get_bounding_box_point(about_edge)
for mob in self.get_family():
arrs = []
if mob.has_points():
for key in mob.pointlike_data_keys:
arrs.append(mob.data[key])
arrs = [mob.data[key] for key in mob.pointlike_data_keys if mob.has_points()]
if works_on_bounding_box:
arrs.append(mob.get_bounding_box())
@ -1323,20 +1320,19 @@ class Mobject(object):
def set_color_by_rgba_func(
self,
func: Callable[[Vect3], Vect4],
func: Callable[[Vect3Array], Vect4Array],
recurse: bool = True
) -> Self:
"""
Func should take in a point in R3 and output an rgba value
"""
for mob in self.get_family(recurse):
rgba_array = [func(point) for point in mob.get_points()]
mob.set_rgba_array(rgba_array)
mob.set_rgba_array(func(mob.get_points()))
return self
def set_color_by_rgb_func(
self,
func: Callable[[Vect3], Vect3],
func: Callable[[Vect3Array], Vect3Array],
opacity: float = 1,
recurse: bool = True
) -> Self:
@ -1344,8 +1340,9 @@ class Mobject(object):
Func should take in a point in R3 and output an rgb value
"""
for mob in self.get_family(recurse):
rgba_array = [[*func(point), opacity] for point in mob.get_points()]
mob.set_rgba_array(rgba_array)
points = mob.get_points()
opacity = np.ones((points.shape[0], 1)) * opacity
mob.set_rgba_array(np.hstack((func(points), opacity)))
return self
@affects_family_data

View File

@ -182,9 +182,13 @@ class NumberLine(Line):
if x < 0 and direction[0] == 0:
# Align without the minus sign
num_mob.shift(num_mob[0].get_width() * LEFT / 2)
if x == unit and unit_tex:
if abs(x) == unit and unit_tex:
center = num_mob.get_center()
num_mob.remove(num_mob[0])
if x > 0:
num_mob.remove(num_mob[0])
else:
num_mob.remove(num_mob[1])
num_mob[0].next_to(num_mob[1], LEFT, buff=num_mob[0].get_width() / 4)
num_mob.move_to(center)
return num_mob