Project a stored path into the pose's local frame — translate (and, for
rects, rebase to the pose's width/height) so the path's AABB origin sits
at the pose origin. This is translate-only: it does NOT apply
pose.rotation. Callers that want the fully world-positioned (rotated) path
should use pathInWorld, which composes this with the rotation wrap.
Rects rebase onto the pose's width/height because resize updates the pose,
not the stored RectPath — so the live size lives on the pose. Honoring it
here keeps this in lockstep with the renderer (SceneCanvas paints the rect
at pose.width/height); otherwise world-space consumers (slice, booleans,
release-compound) would operate on the stale pre-resize dimensions.
Used by the local seams: the default painter (paint + silhouette), and as the
building block pathInWorld/findShapeSilhouette rotate on top of.
Project a stored path into the pose's local frame — translate (and, for rects, rebase to the pose's
width/height) so the path's AABB origin sits at the pose origin. This is translate-only: it does NOT applypose.rotation. Callers that want the fully world-positioned (rotated) path should usepathInWorld, which composes this with the rotation wrap.Rects rebase onto the pose's
width/heightbecause resize updates the pose, not the storedRectPath— so the live size lives on the pose. Honoring it here keeps this in lockstep with the renderer (SceneCanvaspaints the rect atpose.width/height); otherwise world-space consumers (slice, booleans, release-compound) would operate on the stale pre-resize dimensions.Used by the local seams: the default painter (paint + silhouette), and as the building block
pathInWorld/findShapeSilhouetterotate on top of.