56.6 Matching compound path outlines
These lower-level operations choose correspondence between path outlines.
procedure
(morph-to-aligned target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count]) → morph-to-aligned-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64
The target must be a present built-in path Visual when scene-play compiles the request. Both source and destination must each contain exactly one positive finite closed subpath. allow-reverse? and sample-count have the same meaning as for path-geometry-align-for-morph.
At interior eased progress values, interpolation uses the automatically aligned and normalized destination. At eased progress zero, the exact original source path is used. At eased progress one, the exact requested destination object is used, not the phase-shifted or reversed internal working representation. The endpoint therefore preserves caller-requested semantic storage while the visible closed loop has the correspondence selected for the interior morph.
The request changes the path-geometry component. It may run simultaneously with movement, rotation, scaling, or opacity changes, and conflicts with strict, normalized, or another aligned morph plus create and uncreate on the same target. Like the other morph requests, it follows the easing result and has no structural endpoint override.
procedure
(morph-to-aligned-request? value) → boolean?
value : any/c
procedure
(morph-to-open-aligned target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count]) → morph-to-open-aligned-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64
The target must be a present built-in path Visual when scene-play compiles the request. Source and destination must each contain exactly one positive finite open subpath. allow-reverse? and sample-count have the same meanings as for path-geometry-align-open-for-morph.
Interior eased progress uses the selected endpoint direction and normalized geometry. Eased progress zero uses the exact clip-start source path. Eased progress one installs the exact caller-requested destination object, including its original stored direction. Direction selection is therefore an interior correspondence choice rather than an endpoint rewrite.
The request changes the ordinary path-geometry component. It may compose with movement, rotation, scaling, or opacity animation, and conflicts with strict, normalized, closed-loop aligned, compound-aligned, another open-aligned morph, create, or uncreate on the same target.
procedure
(morph-to-open-aligned-request? value) → boolean?
value : any/c
procedure
(morph-to-open-compound-aligned target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count]) → morph-to-open-compound-aligned-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64
The target must be a present built-in path Visual when scene-play compiles the request. Source and destination must contain the same nonzero number of positive finite open subpaths. allow-reverse? and sample-count have the same meanings as for path-geometry-align-open-compound-for-morph.
Interior eased progress uses global subpath pairing, per-pair endpoint direction, and normalized geometry. Eased progress zero uses the exact clip-start source path. Eased progress one installs the exact caller-requested destination object, including its original subpath order and stored traversal directions. Pairing and reversal are therefore interior correspondence choices rather than endpoint rewrites.
The request changes the ordinary path-geometry component. It may compose with movement, rotation, scaling, or opacity animation, and conflicts with strict, normalized, one-loop aligned, closed-compound aligned, another open-compound aligned morph, create, or uncreate on the same target.
procedure
value : any/c
procedure
(morph-to-mixed-compound-aligned target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count]) → morph-to-mixed-compound-aligned-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64
The target must be a present built-in path Visual when scene-play compiles the request. Source and destination must be nonempty positive-finite compound paths with matching counts of open subpaths and matching counts of closed subpaths. allow-reverse? and sample-count have the same meaning as for path-geometry-align-mixed-compound-for-morph.
Interior eased progress uses topology-class global pairing, per-open endpoint direction, per-closed phase/direction, and normalized geometry. Eased progress zero uses the exact clip-start source. Eased progress one installs the exact caller-requested destination object, including its original interleaving, subpath order, and stored traversal representations.
The request changes the ordinary path-geometry component. It may compose with movement, rotation, scaling, or opacity animation, and conflicts with strict, normalized, one-loop aligned, open-compound aligned, closed-compound aligned, another mixed-compound aligned morph, create, or uncreate on the same target.
procedure
value : any/c
procedure
(morph-to-topology-changing target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count #:birth-anchor birth-anchor #:death-anchor death-anchor #:birth-anchor-map birth-anchor-map #:death-anchor-map death-anchor-map #:birth-penalty birth-penalty #:death-penalty death-penalty #:birth-penalty-map birth-penalty-map #:death-penalty-map death-penalty-map #:match-penalty-map match-penalty-map]) → morph-to-topology-changing-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64 birth-anchor : (or/c symbol? vec2?) = 'bounds-center death-anchor : (or/c symbol? vec2?) = 'bounds-center birth-anchor-map : hash? = #hash() death-anchor-map : hash? = #hash()
birth-penalty : (or/c symbol? (and/c finite-real? (>=/c 0))) = 'forced
death-penalty : (or/c symbol? (and/c finite-real? (>=/c 0))) = 'forced birth-penalty-map : hash? = #hash() death-penalty-map : hash? = #hash() match-penalty-map : hash? = #hash()
Matched real open/closed subpaths use the same correspondence rules as mixed-compound path alignment. Unmatched destination subpaths grow from deterministic degenerate bounds-center seeds by default, while unmatched source subpaths collapse to their own bounds-center seeds. birth-anchor and death-anchor may instead be explicit finite local vec2 values shared by all unmatched subpaths on the corresponding side. birth-anchor-map and death-anchor-map may sparsely override those shared values by original destination/source subpath index. Missing keys inherit the shared anchor and an explicit 'bounds-center entry opts that subpath back into its own center. The request snapshots both hashes immutably; index range is checked against the actual clip-start source and caller destination when the request is compiled. By default birth-penalty and death-penalty are both 'forced, which permits births and deaths only when topology counts differ. Supplying both as finite nonnegative real costs enables voluntary death+birth replacement when that lowers the global correspondence cost; exact cost ties prefer fewer topology changes. birth-penalty-map and death-penalty-map may sparsely override those shared numeric costs by original destination/source subpath index. Missing keys inherit the shared cost. The request snapshots both endpoint penalty maps immutably, and nonempty endpoint maps require numeric shared penalty mode. match-penalty-map may be used in either forced or numeric mode. Its keys are (cons source-index destination-index) pairs in original caller storage order and its finite nonnegative values add to real-edge geometric scores only. The request snapshots this map immutably as well. Pair-key range and topology validation occurs when the request is compiled against the clip-start source and stored destination. Empty source or destination geometry is legal; any real subpath that is present must have positive finite arc length.
Interior eased progress uses the prepared/normalized geometry. Eased progress zero uses the exact clip-start source path, with no synthetic birth slots present. Eased progress one installs the exact caller-requested destination, with no synthetic death slots present. Birth/death seeds, reordering, reversal, and closed-loop phase are therefore interior correspondence only.
The request changes the ordinary path-geometry component. It may compose with movement, rotation, scaling, or opacity animation and conflicts with strict, normalized, aligned, compound-aligned, another topology-changing morph, create, or uncreate on the same target.
procedure
(morph-to-topology-changing-request? value) → boolean?
value : any/c
procedure
(morph-to-compound-aligned target destination [ #:allow-reverse? allow-reverse? #:sample-count sample-count]) → morph-to-compound-aligned-request? target : (or/c path-visual? symbol?) destination : path-geometry? allow-reverse? : boolean? = #t sample-count : (and/c exact-integer? (>=/c 8)) = 64
The target must be a present built-in path Visual when scene-play compiles the request. Source and destination must have the same nonzero number of positive finite closed subpaths. allow-reverse? and sample-count have the same meaning as for path-geometry-align-compound-for-morph.
Interior eased progress uses globally paired, phase/direction-aligned, normalized geometry. Eased progress zero uses the exact clip-start source path. Eased progress one uses the exact caller-requested destination object, including its original subpath order and storage representation. Pairing is therefore an interior correspondence choice rather than an endpoint rewrite.
The request changes the ordinary path-geometry component. It may compose with movement, rotation, scaling, or opacity animation, and conflicts with strict, normalized, one-loop aligned, another compound-aligned morph, create, or uncreate on the same target.
procedure
(morph-to-compound-aligned-request? value) → boolean?
value : any/c