mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
Get rid of cached _has_stroke and _has_fill parameters
This commit is contained in:
parent
058914fdd2
commit
b288d5301e
3 changed files with 4 additions and 39 deletions
|
@ -139,8 +139,6 @@ class DrawBorderThenFill(Animation):
|
||||||
submob.pointwise_become_partial(outline, 0, subalpha)
|
submob.pointwise_become_partial(outline, 0, subalpha)
|
||||||
else:
|
else:
|
||||||
submob.interpolate(outline, start, subalpha)
|
submob.interpolate(outline, start, subalpha)
|
||||||
submob.note_changed_stroke()
|
|
||||||
submob.note_changed_fill()
|
|
||||||
|
|
||||||
|
|
||||||
class Write(DrawBorderThenFill):
|
class Write(DrawBorderThenFill):
|
||||||
|
|
|
@ -69,7 +69,6 @@ class StringMobject(SVGMobject, ABC):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.set_stroke(stroke_color, stroke_width)
|
self.set_stroke(stroke_color, stroke_width)
|
||||||
self.set_fill(fill_color, border_width=fill_border_width)
|
self.set_fill(fill_color, border_width=fill_border_width)
|
||||||
self.note_changed_stroke()
|
|
||||||
self.labels = [submob.label for submob in self.submobjects]
|
self.labels = [submob.label for submob in self.submobjects]
|
||||||
|
|
||||||
def get_file_path(self, is_labelled: bool = False) -> str:
|
def get_file_path(self, is_labelled: bool = False) -> str:
|
||||||
|
|
|
@ -69,7 +69,7 @@ class VMobject(Mobject):
|
||||||
('stroke_width', np.float32, (1,)),
|
('stroke_width', np.float32, (1,)),
|
||||||
('joint_product', np.float32, (4,)),
|
('joint_product', np.float32, (4,)),
|
||||||
('fill_rgba', np.float32, (4,)),
|
('fill_rgba', np.float32, (4,)),
|
||||||
('base_normal', np.float32, (3,)), # Every other holds base point and unit normal vector
|
('base_normal', np.float32, (3,)), # Base points and unit normal vectors are interleaved in this array
|
||||||
('fill_border_width', np.float32, (1,)),
|
('fill_border_width', np.float32, (1,)),
|
||||||
])
|
])
|
||||||
pre_function_handle_to_anchor_scale_factor: float = 0.01
|
pre_function_handle_to_anchor_scale_factor: float = 0.01
|
||||||
|
@ -112,8 +112,6 @@ class VMobject(Mobject):
|
||||||
self.anti_alias_width = anti_alias_width
|
self.anti_alias_width = anti_alias_width
|
||||||
self.fill_border_width = fill_border_width
|
self.fill_border_width = fill_border_width
|
||||||
self._use_winding_fill = use_winding_fill
|
self._use_winding_fill = use_winding_fill
|
||||||
self._has_fill = False
|
|
||||||
self._has_stroke = False
|
|
||||||
|
|
||||||
self.needs_new_triangulation = True
|
self.needs_new_triangulation = True
|
||||||
self.triangulation = np.zeros(0, dtype='i4')
|
self.triangulation = np.zeros(0, dtype='i4')
|
||||||
|
@ -137,16 +135,6 @@ class VMobject(Mobject):
|
||||||
return super().add(*vmobjects)
|
return super().add(*vmobjects)
|
||||||
|
|
||||||
# Colors
|
# Colors
|
||||||
def note_changed_fill(self) -> Self:
|
|
||||||
for submob in self.get_family():
|
|
||||||
submob._has_fill = submob.has_fill()
|
|
||||||
return self
|
|
||||||
|
|
||||||
def note_changed_stroke(self) -> Self:
|
|
||||||
for submob in self.get_family():
|
|
||||||
submob._has_stroke = submob.has_stroke()
|
|
||||||
return self
|
|
||||||
|
|
||||||
def init_colors(self):
|
def init_colors(self):
|
||||||
self.set_fill(
|
self.set_fill(
|
||||||
color=self.fill_color,
|
color=self.fill_color,
|
||||||
|
@ -164,17 +152,6 @@ class VMobject(Mobject):
|
||||||
self.color = self.get_color()
|
self.color = self.get_color()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_rgba_array(
|
|
||||||
self,
|
|
||||||
rgba_array: Vect4Array,
|
|
||||||
name: str = "stroke_rgba",
|
|
||||||
recurse: bool = False
|
|
||||||
) -> Self:
|
|
||||||
super().set_rgba_array(rgba_array, name, recurse)
|
|
||||||
self.note_changed_fill()
|
|
||||||
self.note_changed_stroke()
|
|
||||||
return self
|
|
||||||
|
|
||||||
def set_fill(
|
def set_fill(
|
||||||
self,
|
self,
|
||||||
color: ManimColor | Iterable[ManimColor] = None,
|
color: ManimColor | Iterable[ManimColor] = None,
|
||||||
|
@ -188,7 +165,6 @@ class VMobject(Mobject):
|
||||||
for mob in self.get_family(recurse):
|
for mob in self.get_family(recurse):
|
||||||
data = mob.data if mob.has_points() > 0 else mob._data_defaults
|
data = mob.data if mob.has_points() > 0 else mob._data_defaults
|
||||||
data["fill_border_width"] = border_width
|
data["fill_border_width"] = border_width
|
||||||
self.note_changed_fill()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_stroke(
|
def set_stroke(
|
||||||
|
@ -219,7 +195,6 @@ class VMobject(Mobject):
|
||||||
if flat is not None:
|
if flat is not None:
|
||||||
self.set_flat_stroke(flat)
|
self.set_flat_stroke(flat)
|
||||||
|
|
||||||
self.note_changed_stroke()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_backstroke(
|
def set_backstroke(
|
||||||
|
@ -278,8 +253,6 @@ class VMobject(Mobject):
|
||||||
|
|
||||||
if shading is not None:
|
if shading is not None:
|
||||||
mob.set_shading(*shading, recurse=False)
|
mob.set_shading(*shading, recurse=False)
|
||||||
self.note_changed_fill()
|
|
||||||
self.note_changed_stroke()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def get_style(self) -> dict[str, Any]:
|
def get_style(self) -> dict[str, Any]:
|
||||||
|
@ -1041,10 +1014,7 @@ class VMobject(Mobject):
|
||||||
) -> Self:
|
) -> Self:
|
||||||
super().interpolate(mobject1, mobject2, alpha, *args, **kwargs)
|
super().interpolate(mobject1, mobject2, alpha, *args, **kwargs)
|
||||||
|
|
||||||
self._has_stroke = mobject1._has_stroke or mobject2._has_stroke
|
if not self._use_winding_fill and self.has_fill():
|
||||||
self._has_fill = mobject1._has_fill or mobject2._has_fill
|
|
||||||
|
|
||||||
if self._has_fill and not self._use_winding_fill:
|
|
||||||
tri1 = mobject1.get_triangulation()
|
tri1 = mobject1.get_triangulation()
|
||||||
tri2 = mobject2.get_triangulation()
|
tri2 = mobject2.get_triangulation()
|
||||||
if not arrays_match(tri1, tri2):
|
if not arrays_match(tri1, tri2):
|
||||||
|
@ -1284,8 +1254,6 @@ class VMobject(Mobject):
|
||||||
@triggers_refreshed_triangulation
|
@triggers_refreshed_triangulation
|
||||||
def set_data(self, data: np.ndarray) -> Self:
|
def set_data(self, data: np.ndarray) -> Self:
|
||||||
super().set_data(data)
|
super().set_data(data)
|
||||||
self.note_changed_fill()
|
|
||||||
self.note_changed_stroke()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
# TODO, how to be smart about tangents here?
|
# TODO, how to be smart about tangents here?
|
||||||
|
@ -1342,7 +1310,7 @@ class VMobject(Mobject):
|
||||||
|
|
||||||
stroke_behind = False
|
stroke_behind = False
|
||||||
for submob in family:
|
for submob in family:
|
||||||
if submob._has_fill:
|
# Maybe do this on set points instead? Or on noting changed data?
|
||||||
submob.data["base_normal"][0::2] = submob.data["point"][0]
|
submob.data["base_normal"][0::2] = submob.data["point"][0]
|
||||||
if submob.stroke_behind:
|
if submob.stroke_behind:
|
||||||
stroke_behind = True
|
stroke_behind = True
|
||||||
|
|
Loading…
Add table
Reference in a new issue