diff --git a/manimlib/mobject/svg/svg_mobject.py b/manimlib/mobject/svg/svg_mobject.py index 8d400327..c9eaf60b 100644 --- a/manimlib/mobject/svg/svg_mobject.py +++ b/manimlib/mobject/svg/svg_mobject.py @@ -22,6 +22,34 @@ from manimlib.utils.color import * from manimlib.utils.config_ops import digest_config +def check_and_fix_percent_bug(sym): + # This is an ugly patch addressing something which should be + # addressed at a deeper level. + # The svg path for percent symbols have a known bug, so this + # checks if the symbol is (probably) a percentage sign, and + # splits it so that it's displayed properly. + if len(sym.points) not in [315, 483] or len(sym.get_subpaths()) != 4: + return + + sym = sym.family_members_with_points()[0] + new_sym = VMobject() + path_lengths = [len(path) for path in sym.get_subpaths()] + if len(sym.points) == 315: + n = sum(path_lengths[:2]) + p1 = sym.points[:n] + p2 = sym.points[n:] + elif len(sym.points) == 483: + p1 = np.vstack([ + sym.points[:path_lengths[0]], + sym.points[-path_lengths[3]:] + ]) + p2 = sym.points[path_lengths[0]:sum(path_lengths[:3])] + sym.points = p1 + new_sym.points = p2 + sym.add(new_sym) + sym.refresh_triangulation() + + def string_to_numbers(num_string): num_string = num_string.replace("-", ",-") num_string = num_string.replace("e,-", "e-") @@ -361,6 +389,7 @@ class VMobjectFromSVGPathstring(VMobject): self.stretch(-1, 1, about_point=ORIGIN) # Save to a file for future use np.save(filepath, self.points) + check_and_fix_percent_bug(self) def get_commands_and_coord_strings(self): all_commands = list(self.get_command_to_function_map().keys()) diff --git a/manimlib/mobject/svg/tex_mobject.py b/manimlib/mobject/svg/tex_mobject.py index 6d478d02..05ae70bc 100644 --- a/manimlib/mobject/svg/tex_mobject.py +++ b/manimlib/mobject/svg/tex_mobject.py @@ -12,21 +12,7 @@ from manimlib.utils.strings import split_string_list_to_isolate_substrings from manimlib.utils.tex_file_writing import tex_to_svg_file -TEX_MOB_SCALE_FACTOR = 0.05 - - -def fix_percent(sym): - sym = sym.family_members_with_points()[0] - # Really need to make this unneeded... - new_sym = sym.copy() - path_lengths = [len(path) for path in sym.get_subpaths()] - n = sum(path_lengths[:2]) - p1 = sym.points[:n] - p2 = sym.points[n:] - sym.points = p1 - new_sym.points = p2 - sym.add(new_sym) - sym.refresh_triangulation() +SCALE_FACTOR_PER_FONT_POINT = 0.001 class TexSymbol(VMobjectFromSVGPathstring): @@ -42,6 +28,7 @@ class SingleStringTexMobject(SVGMobject): "fill_opacity": 1.0, "stroke_width": 0, "should_center": True, + "font_size": 48, "height": None, "organize_left_to_right": False, "alignment": "", @@ -57,12 +44,9 @@ class SingleStringTexMobject(SVGMobject): ) SVGMobject.__init__(self, file_name=file_name, **kwargs) if self.height is None: - self.scale(TEX_MOB_SCALE_FACTOR) + self.scale(SCALE_FACTOR_PER_FONT_POINT * self.font_size) if self.organize_left_to_right: self.organize_submobjects_left_to_right() - # TODO, this is temporary - if tex_string == "\\%": - fix_percent(self) def get_modified_expression(self, tex_string): result = self.alignment + " " + tex_string @@ -177,7 +161,6 @@ class TexMobject(SingleStringTexMobject): ) if self.arg_separator == ' ': split_list = [str(x).strip() for x in split_list] - #split_list = list(map(str.strip, split_list)) split_list = [s for s in split_list if s != ''] return split_list