mirror of
https://github.com/3b1b/manim.git
synced 2025-09-01 00:48:45 +00:00
Fix Brace. (#2288)
This commit is contained in:
parent
24eefef5bf
commit
99925e96a1
1 changed files with 24 additions and 23 deletions
|
@ -6,7 +6,7 @@ import copy
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from manimlib.constants import DEFAULT_MOBJECT_TO_MOBJECT_BUFF, SMALL_BUFF
|
from manimlib.constants import DEFAULT_MOBJECT_TO_MOBJECT_BUFF, SMALL_BUFF
|
||||||
from manimlib.constants import DOWN, LEFT, ORIGIN, RIGHT, DL, DR, UL
|
from manimlib.constants import UP, DOWN, ORIGIN, RIGHT, UL, UR, DR
|
||||||
from manimlib.constants import PI
|
from manimlib.constants import PI
|
||||||
from manimlib.animation.composition import AnimationGroup
|
from manimlib.animation.composition import AnimationGroup
|
||||||
from manimlib.animation.fading import FadeIn
|
from manimlib.animation.fading import FadeIn
|
||||||
|
@ -29,41 +29,42 @@ if TYPE_CHECKING:
|
||||||
from manimlib.typing import Vect3
|
from manimlib.typing import Vect3
|
||||||
|
|
||||||
|
|
||||||
class Brace(Tex):
|
class Brace(Text):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
mobject: Mobject,
|
mobject: Mobject,
|
||||||
direction: Vect3 = DOWN,
|
direction: Vect3 = DOWN,
|
||||||
buff: float = 0.2,
|
buff: float = 0.2,
|
||||||
tex_string: str = R"\underbrace{\qquad}",
|
# This depends on font that you choose.
|
||||||
|
# Used to align different parts of the brace
|
||||||
|
extend_offset: float = .0085,
|
||||||
**kwargs
|
**kwargs
|
||||||
):
|
):
|
||||||
super().__init__(tex_string, **kwargs)
|
# \u's are different parts of the brace
|
||||||
|
super().__init__("\u23AB\n\u23AA\n\u23AC\n\u23AA\n\u23AD", **kwargs)
|
||||||
|
|
||||||
angle = -math.atan2(*direction[:2]) + PI
|
angle = PI / 2 - math.atan2(*direction[:2])
|
||||||
mobject.rotate(-angle, about_point=ORIGIN)
|
mobject.rotate(-angle, about_point=ORIGIN)
|
||||||
left = mobject.get_corner(DL)
|
up = mobject.get_corner(UR)
|
||||||
right = mobject.get_corner(DR)
|
down = mobject.get_corner(DR)
|
||||||
target_width = right[0] - left[0]
|
target_height = up[1] - down[1]
|
||||||
|
|
||||||
self.tip_point_index = np.argmin(self.get_all_points()[:, 1])
|
self.extend_offset = extend_offset
|
||||||
self.set_initial_width(target_width)
|
self.tip_point_index = np.argmax(self.get_all_points()[:, 0])
|
||||||
self.shift(left - self.get_corner(UL) + buff * DOWN)
|
self.set_initial_height(target_height)
|
||||||
|
self.shift(up - self.get_corner(UL) + buff * RIGHT)
|
||||||
for mob in mobject, self:
|
for mob in mobject, self:
|
||||||
mob.rotate(angle, about_point=ORIGIN)
|
mob.rotate(angle, about_point=ORIGIN)
|
||||||
|
|
||||||
def set_initial_width(self, width: float):
|
def set_initial_height(self, height: float):
|
||||||
width_diff = width - self.get_width()
|
h0 = sum([self[i].get_height() for i in [0,2,4]])
|
||||||
if width_diff > 0:
|
extend_height = max(height - h0, 0) / 2
|
||||||
for tip, rect, vect in [(self[0], self[1], RIGHT), (self[5], self[4], LEFT)]:
|
for extend in self[1::2]:
|
||||||
rect.set_width(
|
extend.set_height(extend_height, True)
|
||||||
width_diff / 2 + rect.get_width(),
|
extend.shift(RIGHT * self.extend_offset)
|
||||||
about_edge=vect, stretch=True
|
self.arrange(DOWN, buff=0, coor_mask=UP)
|
||||||
)
|
if extend_height == 0:
|
||||||
tip.shift(-width_diff / 2 * vect)
|
self.set_height(height, True)
|
||||||
else:
|
|
||||||
self.set_width(width, stretch=True)
|
|
||||||
return self
|
|
||||||
|
|
||||||
def put_at_tip(
|
def put_at_tip(
|
||||||
self,
|
self,
|
||||||
|
|
Loading…
Add table
Reference in a new issue