Skip to content

Add positionable (Proof of concept) - #4923

Draft
GniLudio wants to merge 85 commits into
ManimCommunity:mainfrom
GniLudio:add-positionable
Draft

Add positionable (Proof of concept)#4923
GniLudio wants to merge 85 commits into
ManimCommunity:mainfrom
GniLudio:add-positionable

Conversation

@GniLudio

@GniLudio GniLudio commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Overview: What does this pull request change?

Moves all positioning methods of the mobject class(es) into it's own class, which the mobject class(es) then inherit from.

List of positioning methods
Attribute Positionable Cairo OpenGL
align_on_border Implemented Removed Removed
align_to Implemented Removed Removed
apply_complex_function Implemented Removed Removed
apply_function Implemented Removed Removed
apply_function_to_position Implemented Removed Removed
apply_matrix Implemented Removed Removed
apply_over_attr_arrays Implemented Removed Removed
apply_points_function Signature Implemented Implemented
apply_points_function_about_point - Deprecated
center Implemented Removed Removed
depth Implemented Removed Removed
flip Implemented Removed Removed
get_array_attrs Signature Implemented Implemented
get_bottom Implemented Removed Removed
get_boundary_point Signature Implemented Implemented
get_bounding_box Signature Missing Implemented
get_bounding_box_point - Deprecated
get_center Signature Implemented Implemented
get_center_of_mass Signature Implemented Implemented
get_continuous_bounding_box_point Missing Implemented
get_coord Signature Implemented Implemented
get_corner Implemented Removed Removed
get_critical_point Signature Implemented Implemented
get_depth Implemented New Removed
get_edge_center Implemented Removed Removed
get_extremum_along_dim Signature Implemented Missing
get_height Implemented New Removed
get_left Implemented Removed Removed
get_midpoint Implemented Removed Removed
get_nadir Implemented Removed Removed
get_points_defining_boundary - Implemented
get_right Implemented Removed Removed
get_top Implemented Removed Removed
get_width Implemented Removed Removed
get_x Implemented Removed Removed
get_y Implemented Removed Removed
get_z Implemented Removed Removed
get_zenith Implemented Removed Removed
height Implemented Removed Removed
is_off_screen Implemented Removed Removed
is_point_touching Implemented New Removed
length_over_dim Signature Implemented Implemented
match_coord Implemented Removed Removed
match_depth Implemented Removed Removed
match_dim_size Implemented Removed Removed
match_height Implemented Removed Removed
match_width Implemented Removed Removed
match_x Implemented Removed Removed
match_y Implemented Removed Removed
match_z Implemented Removed Removed
move_to Implemented Removed Removed
next_to Signature Implemented Implemented
pfp - Deprecated
point_from_proportion Signature Missing Implemented
pose_at_angle Implemented Removed New
proportion_from_point Signature Missing Missing
reduce_across_dimension Signature Implemented Missing
rescale_to_fit Implemented Removed Removed
rotate Implemented Removed Removed
rotate_about_origin Implemented Removed Removed
scale Implemented Removed Removed
scale_to_fit_depth Implemented Removed Removed
scale_to_fit_height Implemented Removed Removed
scale_to_fit_width Implemented Removed Removed
set_coord Implemented Removed Removed
set_depth Implemented New Removed
set_height Implemented New Removed
set_width Implemented New Removed
set_x Implemented Removed Removed
set_y Implemented Removed Removed
set_z Implemented Removed Removed
shift Signature Implemented Implemented
shift_onto_screen Implemented Removed Removed
stretch Implemented Removed Removed
stretch_about_point Implemented Removed Removed
stretch_to_fit_depth Implemented Removed Removed
stretch_to_fit_height Implemented Removed Removed
stretch_to_fit_width Implemented Removed Removed
to_corner Implemented Removed Removed
to_edge Implemented Removed Removed
width Implemented Removed Removed

Motivation and Explanation: Why and how do your changes improve the library?

I think separating positioning methods from the mobject classes would improve the code quality due to the following reasons:

  1. Avoids code duplication between Cairo and OpenGL.
  2. Enforces same API.
  3. Better separation of concerns.
  4. Reduce mobject class complexity.
  5. Easier Extensibility.

Further Information and Comments

Currently, this PR just moves the positioning methods into it's own class.
Here are additional changes that would sense:

  • Define a few specific methods that form the basis for positioning.
    • All other methods just rely on these few methods.
  • Replace kwargs with explicit parameters.
  • Remove methods that serve the same purpose.
    • For example the (set|get)_(width|height|depth) methods and the width|height|depth properties.
    • Or get_corner and get_edge_center just redirecting to get_critical_point.
  • Add missing implementations.
  • Make Positionable an abstract class.
  • Group methods. (currently just sorted alphabetically)

Reviewer Checklist

  • The PR title is descriptive enough for the changelog, and the PR is labeled correctly
  • If applicable: newly added non-private functions and classes have a docstring including a short summary and a PARAMETERS section
  • If applicable: newly added functions and classes are tested

@GniLudio
GniLudio marked this pull request as draft August 9, 2026 12:43
Comment on lines +550 to +558
def scale(
self,
scale_factor: float,
*,
about_point: Point3DLike | None = None,
about_edge: Vector3DLike | None = None,
works_on_bounding_box: bool = False,
**kwargs: Any,
) -> Self:
@GniLudio GniLudio closed this Aug 11, 2026
@GniLudio
GniLudio deleted the add-positionable branch August 11, 2026 20:37
@GniLudio
GniLudio restored the add-positionable branch August 11, 2026 20:37
@GniLudio GniLudio reopened this Aug 11, 2026
@GniLudio GniLudio changed the title Add positionable Add positionable (Proof of concept) Aug 19, 2026
@GniLudio GniLudio mentioned this pull request Aug 19, 2026
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants