def __init__(self, mobject: Mobject, direction: np.ndarray = DOWN, **kwargs): digest_config(self, kwargs, locals()) angle = -math.atan2(*direction[:2]) + PI mobject.rotate(-angle, about_point=ORIGIN) left = mobject.get_corner(DOWN + LEFT) right = mobject.get_corner(DOWN + RIGHT) target_width = right[0] - left[0] super().__init__(self.tex_string, **kwargs) self.tip_point_index = np.argmin(self.get_all_points()[:, 1]) self.set_initial_width(target_width) self.shift(left - self.get_corner(UP + LEFT) + self.buff * DOWN) for mob in mobject, self: mob.rotate(angle, about_point=ORIGIN)
def get_corner_dots(self, mobject: Mobject) -> Mobject: dots = DotCloud(**self.corner_dot_config) radius = self.corner_dot_config["radius"] if mobject.get_depth() < 1e-2: vects = [DL, UL, UR, DR] else: vects = np.array(list(it.product(*3 * [[-1, 1]]))) dots.add_updater(lambda d: d.set_points( [mobject.get_corner(v) + v * radius for v in vects])) return dots