mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
Only recompute VMobject.get_unit_normal as needed
This commit is contained in:
parent
9a5386b022
commit
941513d68c
1 changed files with 10 additions and 8 deletions
|
@ -116,6 +116,7 @@ class VMobject(Mobject):
|
||||||
self.needs_new_triangulation = True
|
self.needs_new_triangulation = True
|
||||||
self.triangulation = np.zeros(0, dtype='i4')
|
self.triangulation = np.zeros(0, dtype='i4')
|
||||||
self.needs_new_joint_angles = True
|
self.needs_new_joint_angles = True
|
||||||
|
self.needs_new_unit_normal = True
|
||||||
self.outer_vert_indices = np.zeros(0, dtype='i4')
|
self.outer_vert_indices = np.zeros(0, dtype='i4')
|
||||||
|
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
@ -873,21 +874,22 @@ class VMobject(Mobject):
|
||||||
if self.get_num_points() < 3:
|
if self.get_num_points() < 3:
|
||||||
return OUT
|
return OUT
|
||||||
|
|
||||||
|
if not self.needs_new_unit_normal:
|
||||||
|
return self.data["base_normal"][1, :]
|
||||||
|
|
||||||
area_vect = self.get_area_vector()
|
area_vect = self.get_area_vector()
|
||||||
area = get_norm(area_vect)
|
area = get_norm(area_vect)
|
||||||
if area > 0:
|
if area > 0:
|
||||||
normal = area_vect / area
|
normal = area_vect / area
|
||||||
else:
|
else:
|
||||||
points = self.get_points()
|
p = self.get_points()
|
||||||
normal = get_unit_normal(
|
normal = get_unit_normal(p[1] - p[0], p[2] - p[1])
|
||||||
points[1] - points[0],
|
|
||||||
points[2] - points[1],
|
|
||||||
)
|
|
||||||
self.data["base_normal"][1::2] = normal
|
self.data["base_normal"][1::2] = normal
|
||||||
|
self.needs_new_unit_normal = False
|
||||||
return normal
|
return normal
|
||||||
|
|
||||||
def refresh_unit_normal(self) -> Self:
|
def refresh_unit_normal(self) -> Self:
|
||||||
self.get_unit_normal()
|
self.needs_new_unit_normal = True
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def rotate(
|
def rotate(
|
||||||
|
@ -1236,14 +1238,14 @@ class VMobject(Mobject):
|
||||||
self.refresh_triangulation()
|
self.refresh_triangulation()
|
||||||
if refresh_joints:
|
if refresh_joints:
|
||||||
self.get_joint_angles(refresh=True)
|
self.get_joint_angles(refresh=True)
|
||||||
self.get_unit_normal()
|
self.refresh_unit_normal()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@triggers_refreshed_triangulation
|
@triggers_refreshed_triangulation
|
||||||
def append_points(self, points: Vect3Array) -> Self:
|
def append_points(self, points: Vect3Array) -> Self:
|
||||||
assert len(points) % 2 == 0
|
assert len(points) % 2 == 0
|
||||||
super().append_points(points)
|
super().append_points(points)
|
||||||
self.get_unit_normal()
|
self.refresh_unit_normal()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@triggers_refreshed_triangulation
|
@triggers_refreshed_triangulation
|
||||||
|
|
Loading…
Add table
Reference in a new issue