mirror of
https://github.com/3b1b/manim.git
synced 2025-08-02 19:46:21 +08:00
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:
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user