Refactoring Scene.mobjects
See original GitHub issueCurrently, 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 VGroups, 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.mobjectslogic and define a new classOrderedMobjectListor something along those lines. - Inside the new class, the
mobjectscollection 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
mobjectsneeds to ever contain aGrouporVGroup. 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 aScenereally 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.
Issue Analytics
- State:
- Created 3 years ago
- Comments:6 (6 by maintainers)

Top Related StackOverflow Question
Everything seems very good to me. Mobjects handling is very, very messy.
And I don’t think so, as every time manim extract every family members to add them to
scene.mobjects.Yeah I think there’s no problem in using floating point indices. As long as there is a unique way of sorting the mobjects, you should be able to implement “move behind” and “move to the back”.