Save triangulation along with points

This commit is contained in:
Grant Sanderson
2021-01-11 16:37:01 -10:00
parent d6a00bc32d
commit d1b888958b

View File

@ -281,8 +281,7 @@ class SVGMobject(VMobject):
matrix[:, 1] *= -1 matrix[:, 1] *= -1
for mob in mobject.family_members_with_points(): for mob in mobject.family_members_with_points():
# TODO, directly apply matrix? mob.apply_matrix(matrix.T)
mob.set_points(np.dot(mob.get_points(), matrix))
mobject.shift(x * RIGHT + y * UP) mobject.shift(x * RIGHT + y * UP)
except: except:
pass pass
@ -355,10 +354,13 @@ class VMobjectFromSVGPathstring(VMobject):
# higher up to Mobject somehow. # higher up to Mobject somehow.
hasher = hashlib.sha256(self.path_string.encode()) hasher = hashlib.sha256(self.path_string.encode())
path_hash = hasher.hexdigest()[:16] path_hash = hasher.hexdigest()[:16]
filepath = os.path.join(get_mobject_data_dir(), f"{path_hash}.npy") points_filepath = os.path.join(get_mobject_data_dir(), f"{path_hash}_points.npy")
tris_filepath = os.path.join(get_mobject_data_dir(), f"{path_hash}_tris.npy")
if os.path.exists(filepath): if os.path.exists(points_filepath) and os.path.exists(tris_filepath):
self.set_points(np.load(filepath)) self.set_points(np.load(points_filepath))
self.triangulation = np.load(tris_filepath)
self.needs_new_triangulation = False
else: else:
self.relative_point = np.array(ORIGIN) self.relative_point = np.array(ORIGIN)
for command, coord_string in self.get_commands_and_coord_strings(): for command, coord_string in self.get_commands_and_coord_strings():
@ -373,7 +375,8 @@ class VMobjectFromSVGPathstring(VMobject):
# SVG treats y-coordinate differently # SVG treats y-coordinate differently
self.stretch(-1, 1, about_point=ORIGIN) self.stretch(-1, 1, about_point=ORIGIN)
# Save to a file for future use # Save to a file for future use
np.save(filepath, self.get_points()) np.save(points_filepath, self.get_points())
np.save(tris_filepath, self.get_triangulation())
check_and_fix_percent_bug(self) check_and_fix_percent_bug(self)
def get_commands_and_coord_strings(self): def get_commands_and_coord_strings(self):