mirror of
https://github.com/helblazer811/ManimML.git
synced 2025-05-18 03:05:23 +08:00
85 lines
2.2 KiB
Python
85 lines
2.2 KiB
Python
from manim import *
|
|
|
|
|
|
class ListGroup(Mobject):
|
|
"""Indexable Group with traditional list operations"""
|
|
|
|
def __init__(self, *layers):
|
|
super().__init__()
|
|
self.items = [*layers]
|
|
|
|
def __getitem__(self, indices):
|
|
"""Traditional list indexing"""
|
|
return self.items[indices]
|
|
|
|
def insert(self, index, item):
|
|
"""Inserts item at index"""
|
|
self.items.insert(index, item)
|
|
self.submobjects = self.items
|
|
|
|
def remove_at_index(self, index):
|
|
"""Removes item at index"""
|
|
if index > len(self.items):
|
|
raise Exception(f"ListGroup index out of range: {index}")
|
|
item = self.items[index]
|
|
del self.items[index]
|
|
self.submobjects = self.items
|
|
|
|
return item
|
|
|
|
def remove_at_indices(self, indices):
|
|
"""Removes items at indices"""
|
|
items = []
|
|
for index in indices:
|
|
item = self.remove_at_index(index)
|
|
items.append(item)
|
|
|
|
return items
|
|
|
|
def remove(self, item):
|
|
"""Removes first instance of item"""
|
|
self.items.remove(item)
|
|
self.submobjects = self.items
|
|
|
|
return item
|
|
|
|
def get(self, index):
|
|
"""Gets item at index"""
|
|
return self.items[index]
|
|
|
|
def add(self, item):
|
|
"""Adds to end"""
|
|
self.items.append(item)
|
|
self.submobjects = self.items
|
|
|
|
def replace(self, index, item):
|
|
"""Replaces item at index"""
|
|
self.items[index] = item
|
|
self.submobjects = self.items
|
|
|
|
def index_of(self, item):
|
|
"""Returns index of item if it exists"""
|
|
for index, obj in enumerate(self.items):
|
|
if item is obj:
|
|
return index
|
|
return -1
|
|
|
|
def __len__(self):
|
|
"""Length of items"""
|
|
return len(self.items)
|
|
|
|
def set_z_index(self, z_index_value, family=True):
|
|
"""Sets z index of all values in ListGroup"""
|
|
for item in self.items:
|
|
item.set_z_index(z_index_value, family=True)
|
|
|
|
def __iter__(self):
|
|
self.current_index = -1
|
|
return self
|
|
|
|
def __next__(self): # Python 2: def next(self)
|
|
self.current_index += 1
|
|
if self.current_index < len(self.items):
|
|
return self.items[self.current_index]
|
|
raise StopIteration
|