Shared preflight logging for the spatial-index loaders' query path.
Each loader's queryVisible*Ranges method opens with the same two log
statements:
warnExtendToAllNoDimensions — fires UNCONDITIONALLY at the
top of the query when extend_to_all is configured but the caller
hasn't supplied resolved dimensions in the view state. The query
proceeds anyway, but extend_to_all will not actually work until
the scene dimensions are initialized.
announceExtendToAllOnce — fires only on the FIRST load and
only AFTER the loader confirmed it has a usable chunk index. This
is purely a one-time UX hint: surface the broadcast emoji so the
console shows that this node is configured for extend_to_all.
Splitting into two functions matches the existing call structure of
the loaders (warning → chunkIndex early-return → broadcast) so that
the broadcast doesn't fire on the load-all fallback path. Centralizing
keeps the wording, emoji, and "first-load only" semantics in one place.
The "resolved dimensions" predicate differs slightly across loaders
(gsplats / lines check dimensions.length, points checks
dimensions.metadata.length), so callers pass it as a boolean.
Shared preflight logging for the spatial-index loaders' query path.
Each loader's queryVisible*Ranges method opens with the same two log statements:
warnExtendToAllNoDimensions — fires UNCONDITIONALLY at the top of the query when
extend_to_allis configured but the caller hasn't supplied resolved dimensions in the view state. The query proceeds anyway, but extend_to_all will not actually work until the scene dimensions are initialized.announceExtendToAllOnce — fires only on the FIRST load and only AFTER the loader confirmed it has a usable chunk index. This is purely a one-time UX hint: surface the broadcast emoji so the console shows that this node is configured for extend_to_all.
Splitting into two functions matches the existing call structure of the loaders (warning → chunkIndex early-return → broadcast) so that the broadcast doesn't fire on the load-all fallback path. Centralizing keeps the wording, emoji, and "first-load only" semantics in one place.
The "resolved dimensions" predicate differs slightly across loaders (gsplats / lines check
dimensions.length, points checksdimensions.metadata.length), so callers pass it as a boolean.