Description
Currently, Scene.mobjects
is implemented as a list, and the Scene
class does a lot of bookkeeping in order to keep it neatly organized. This is necessary because mobjects
must be kept in the order that mobjects are going to be rendered on screen.
Or at least that was the case, until z-index was implemented #117. It is not without bugs (#327) but I think that keeping the z-order of each mobject is far better than trying to keep the list organized.
The truth is that Scene.mobjects
should never have been a list. There main reason is that you cannot just choose to append
something to it. You have to use restructure_mobjects
every time you touch it. This is done so that mobjects are kept in the right order, but also to avoid duplication, deal with VGroup
s, etc. So, Scene.mobjects
is implemented as a list but it's never used as one. Sounds familiar? This means that Scene.mobjects
should be its own class that handles all of these operations. If Scene.mobjects
were a different class, then any dev working on Scene
-derived classes will never have to think about whether to use append
, add
, or when to call restructure_mobjects
.
In my mind I can think of a few things to do here:
- Extract all of the
Scene.mobjects
logic and define a new classOrderedMobjectList
or something along those lines. - Inside the new class, the
mobjects
collection need not be a list. I think it should be a priority queue instead, where the priority values are the z-order of each mobject. - (Maybe) I'm not sure if
mobjects
needs to ever contain aGroup
orVGroup
. I cannot find a reason whyself.add(some_group)
could't just add each element in the group to the scene, instead of adding the group itself to the scene. Does aScene
really need to keep track of which objects are grouped together? If the only reason to do this is to keep track of rendering order, we already have z-index for that!
Please share your thoughts.
Metadata
Metadata
Assignees
Type
Projects
Status