mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
Some cleanup for interactive mobjects
This commit is contained in:
parent
baab9ddf02
commit
5a2a363a87
4 changed files with 37 additions and 32 deletions
|
@ -414,7 +414,7 @@ class ControlsExample(Scene):
|
|||
def text_updater(old_text):
|
||||
assert(isinstance(old_text, Text))
|
||||
new_text = Text(self.textbox.get_value(), size=old_text.size)
|
||||
new_text.align_data_and_family(old_text)
|
||||
# new_text.align_data_and_family(old_text)
|
||||
new_text.move_to(old_text)
|
||||
if self.checkbox.get_value():
|
||||
new_text.set_fill(
|
||||
|
@ -430,8 +430,7 @@ class ControlsExample(Scene):
|
|||
self.add(MotionMobject(text))
|
||||
|
||||
self.textbox.set_value("Manim")
|
||||
self.wait(60)
|
||||
self.embed()
|
||||
# self.embed()
|
||||
|
||||
|
||||
# See https://github.com/3b1b/videos for many, many more
|
||||
|
|
|
@ -353,7 +353,11 @@ class Camera(object):
|
|||
if shader_wrapper.vert_indices is None:
|
||||
ibo = None
|
||||
else:
|
||||
ibo = self.ctx.buffer(shader_wrapper.vert_indices.astype('i4').tobytes())
|
||||
vert_index_data = shader_wrapper.vert_indices.astype('i4').tobytes()
|
||||
if vert_index_data:
|
||||
ibo = self.ctx.buffer(vert_index_data)
|
||||
else:
|
||||
ibo = None
|
||||
|
||||
# Program and vertex array
|
||||
shader_program, vert_format = self.get_shader_program(shader_wrapper)
|
||||
|
|
|
@ -29,7 +29,8 @@ class MotionMobject(Mobject):
|
|||
def __init__(self, mobject, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.mobject = mobject
|
||||
self.mobject.add_updater(lambda mob: None) # To avoid locking it as static mobject
|
||||
# To avoid locking it as static mobject
|
||||
self.mobject.add_updater(lambda mob: None)
|
||||
self.add(mobject)
|
||||
|
||||
def on_mouse_drag(self, point, d_point, buttons, modifiers):
|
||||
|
@ -69,7 +70,8 @@ class ContolMobject(ValueTracker):
|
|||
super().__init__(value=value, **kwargs)
|
||||
self.add(*mobjects)
|
||||
|
||||
self.add_updater(lambda mob: None) # To avoid lock_static_mobject_data while waiting in scene
|
||||
# To avoid lock_static_mobject_data while waiting in scene
|
||||
self.add_updater(lambda mob: None)
|
||||
self.fix_in_frame()
|
||||
|
||||
def set_value(self, value):
|
||||
|
@ -85,6 +87,7 @@ class ContolMobject(ValueTracker):
|
|||
# To be implemented in subclasses
|
||||
pass
|
||||
|
||||
|
||||
class EnableDisableButton(ContolMobject):
|
||||
CONFIG = {
|
||||
"value_type": np.dtype(bool),
|
||||
|
@ -103,12 +106,12 @@ class EnableDisableButton(ContolMobject):
|
|||
super().__init__(value, self.box, **kwargs)
|
||||
|
||||
def assert_value(self, value):
|
||||
assert(value == True or value == False)
|
||||
assert(isinstance(value, bool))
|
||||
|
||||
def set_value_anim(self, value):
|
||||
if value == True:
|
||||
if value:
|
||||
self.box.set_fill(self.enable_color)
|
||||
elif value == False:
|
||||
else:
|
||||
self.box.set_fill(self.disable_color)
|
||||
|
||||
def toggle_value(self):
|
||||
|
@ -146,15 +149,15 @@ class Checkbox(ContolMobject):
|
|||
super().__init__(value, self.box, self.box_content, **kwargs)
|
||||
|
||||
def assert_value(self, value):
|
||||
assert(value == True or value == False)
|
||||
assert(isinstance(value, bool))
|
||||
|
||||
def toggle_value(self):
|
||||
super().set_value(not self.get_value())
|
||||
|
||||
def set_value_anim(self, value):
|
||||
if value == True:
|
||||
if value:
|
||||
self.box_content.become(self.get_checkmark())
|
||||
elif value == False:
|
||||
else:
|
||||
self.box_content.become(self.get_cross())
|
||||
|
||||
def on_mouse_press(self, point, button, mods):
|
||||
|
@ -191,7 +194,6 @@ class Checkbox(ContolMobject):
|
|||
class LinearNumberSlider(ContolMobject):
|
||||
CONFIG = {
|
||||
"value_type": np.float64,
|
||||
|
||||
"min_value": -10.0,
|
||||
"max_value": 10.0,
|
||||
"step": 1.0,
|
||||
|
@ -245,6 +247,7 @@ class LinearNumberSlider(ContolMobject):
|
|||
value_nearest_to_step = self.min_value + no_of_steps * self.step
|
||||
return value_nearest_to_step
|
||||
|
||||
|
||||
class ColorSliders(Group):
|
||||
CONFIG = {
|
||||
"sliders_kwargs": {},
|
||||
|
@ -377,12 +380,16 @@ class Textbox(ContolMobject):
|
|||
self.update_text(value)
|
||||
|
||||
def update_text(self, value):
|
||||
self.remove(self.text)
|
||||
self.text.__init__(value, **self.text_kwargs)
|
||||
self.text.set_width(self.box.get_width() - 2*self.text_buff, stretch=True)
|
||||
self.text.add_updater(lambda mob: mob.move_to(self.box))
|
||||
self.text.fix_in_frame()
|
||||
self.add(self.text)
|
||||
text = self.text
|
||||
self.remove(text)
|
||||
text.__init__(value, **self.text_kwargs)
|
||||
height = text.get_height()
|
||||
text.set_width(self.box.get_width() - 2 * self.text_buff)
|
||||
if text.get_height() > height:
|
||||
text.set_height(height)
|
||||
text.add_updater(lambda mob: mob.move_to(self.box))
|
||||
text.fix_in_frame()
|
||||
self.add(text)
|
||||
|
||||
def active_anim(self, isActive):
|
||||
if isActive:
|
||||
|
@ -415,10 +422,10 @@ class Textbox(ContolMobject):
|
|||
self.set_value(new_value)
|
||||
return False
|
||||
|
||||
|
||||
class ControlPanel(Group):
|
||||
CONFIG = {
|
||||
"listen_to_events": True,
|
||||
|
||||
"panel_kwargs": {
|
||||
"width": FRAME_WIDTH / 4,
|
||||
"height": MED_SMALL_BUFF + FRAME_HEIGHT,
|
||||
|
@ -514,4 +521,3 @@ class ControlPanel(Group):
|
|||
factor = 10 * offset[1]
|
||||
self.controls.set_y(self.controls.get_y() + factor)
|
||||
return False
|
||||
|
||||
|
|
|
@ -218,12 +218,8 @@ class Mobject(object):
|
|||
return self
|
||||
|
||||
def is_point_touching(self, point, buff=MED_SMALL_BUFF):
|
||||
self.refresh_bounding_box()
|
||||
bb = self.get_bounding_box()
|
||||
if np.all(point >= (bb[0] - buff)) and np.all(point <= (bb[2] + buff)):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return np.all(point >= (bb[0] - buff)) and np.all(point <= (bb[2] + buff))
|
||||
|
||||
# Family matters
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue