Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 14 additions & 16 deletions manim/mobject/svg/text_mobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,30 +148,29 @@ def __init__(self, *text, line_spacing=-1, alignment=None, **config):

lines_str = "\n".join(list(text))
self.lines_text = Text(lines_str, line_spacing=line_spacing, **config)
lines_str_list = lines_str.split("\n")
lines_str_list = lines_str.splitlines(keepends=True)
self.chars = self.gen_chars(lines_str_list)

chars_lines_text_list = self.get_group_class()()
char_index_counter = 0
for line_index in range(lines_str_list.__len__()):
for line_index in range(len(lines_str_list)):
chars_lines_text_list.add(
self.lines_text[
char_index_counter : char_index_counter
+ lines_str_list[line_index].__len__()
+ 1
+ len(Text(lines_str_list[line_index]))
],
)
char_index_counter += lines_str_list[line_index].__len__() + 1
char_index_counter += len(Text(lines_str_list[line_index]))
self.lines = []
self.lines.append([])
for line_no in range(chars_lines_text_list.__len__()):
for line_no in range(len(chars_lines_text_list)):
self.lines[0].append(chars_lines_text_list[line_no])
self.lines_initial_positions = []
for line_no in range(self.lines[0].__len__()):
for line_no in range(len(self.lines[0])):
self.lines_initial_positions.append(self.lines[0][line_no].get_center())
self.lines.append([])
self.lines[1].extend(
[self.alignment for _ in range(chars_lines_text_list.__len__())],
[self.alignment for _ in range(len(chars_lines_text_list))],
)
self.add(*self.lines[0])
self.move_to(np.array([0, 0, 0]))
Expand All @@ -193,16 +192,15 @@ def gen_chars(self, lines_str_list):
"""
char_index_counter = 0
chars = self.get_group_class()()
for line_no in range(lines_str_list.__len__()):
for line_no in range(len(lines_str_list)):
chars.add(self.get_group_class()())
chars[line_no].add(
*self.lines_text.chars[
char_index_counter : char_index_counter
+ lines_str_list[line_no].__len__()
+ 1
+ len(Text(lines_str_list[line_no]))
]
)
char_index_counter += lines_str_list[line_no].__len__() + 1
char_index_counter += len(Text(lines_str_list[line_no]))
Copy link
Copy Markdown
Collaborator

@k4pran k4pran Sep 8, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems this is only created to get the length of the Text right? Is there a way to avoid creating this? It seems to impact performance for the opengl renderer (that already has performance issues). Same with the other places where Text is created only to check the length

return chars

def set_all_lines_alignments(self, alignment):
Expand All @@ -213,7 +211,7 @@ def set_all_lines_alignments(self, alignment):
alignment : :class:`str`
Defines the alignment of paragraph. Possible values are "left", "right", "center".
"""
for line_no in range(0, self.lines[0].__len__()):
for line_no in range(0, len(self.lines[0])):
self.change_alignment_for_a_line(alignment, line_no)
return self

Expand All @@ -232,8 +230,8 @@ def set_line_alignment(self, alignment, line_no):

def set_all_lines_to_initial_positions(self):
"""Set all lines to their initial positions."""
self.lines[1] = [None for _ in range(self.lines[0].__len__())]
for line_no in range(0, self.lines[0].__len__()):
self.lines[1] = [None for _ in range(len(self.lines[0]))]
for line_no in range(0, len(self.lines[0])):
self[line_no].move_to(
self.get_center() + self.lines_initial_positions[line_no],
)
Expand Down Expand Up @@ -555,7 +553,7 @@ def font_size(self, font_val):
def gen_chars(self):
chars = self.get_group_class()()
submobjects_char_index = 0
for char_index in range(self.text.__len__()):
for char_index in range(len(self.text)):
if self.text[char_index] in (" ", "\t", "\n"):
space = Dot(radius=0, fill_opacity=0, stroke_opacity=0)
if char_index == 0:
Expand Down