ManimCommunity / ManimCommunity/manim
Refactor TipableVMobject tip placement to avoid curve deformation and transform coupling
- Dominant language
- Python
- Stars
- 40.9k
- Forks
- 3.1k
- Avg merge
- 3d 12h
- Merged PRs (30d)
- 25
Description
## Overview
`TipableVMobject` tip handling currently conflates tip placement with geometry reshaping of the parent curve.
While working on #4503, two code TODOs highlighted behavior that should be tracked explicitly in an issue instead of comments in source.
## Current behavior
1. `position_tip()` directly shifts/rotates the tip mobject to place it at the anchor point.
- This tightly couples the tip's local transform to parent-side placement logic.
- It is awkward for custom tip implementations that expect stable local coordinates.
2. `reset_endpoints_based_on_tip()` calls `put_start_and_end_on(...)` with tip base points.
- For non-linear tipable mobjects (e.g. arcs), this can redefine/deform the underlying curve instead of only accounting for the tip attachment.
## Desired direction
- Tip placement should be representable as attachment/anchoring logic without mutating the conceptual shape of the underlying curve.
- Endpoint adjustment should trim/extend along the curve direction (or equivalent local rule), not reparameterize the whole curve via `put_start_and_end_on`.
- Keep tip local transforms as independent as possible from parent placement mechanics.
## Related
- PR: #4503
- Existing reports likely touching the same root cause:
- #1801
- #3099
Contributor guide
Research direction
Start with TipableVMobject.position_tip() and reset_endpoints_based_on_tip(), then review the context from PR #4503 and related reports #1801 and #3099. Define an attachment approach that preserves the parent curve and keeps tip local transforms independent; done means non-linear tipable objects are not deformed by endpoint adjustment.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- computer-graphics
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100