pub enum ParquetLayout {
Flat,
SharedShapes,
}Expand description
Which flat-Parquet mesh-table layout a request asked for.
OPT-IN, defaulting to Self::Flat, and that default is the whole point.
The flat wire carries no version byte (unlike /optimized), so a client
that predates the shared layout cannot fail loud on one — it decodes a
shared blob without error and draws every occurrence of a shared shape at
the template’s placement. A server cannot tell those clients apart, so it
must not produce the new layout unless the client says it understands it.
Serving a smaller payload is not worth silently drawing the wrong building.
Variants§
Flat
-parquet-v8: one block of vertices per mesh row, no rotation columns.
Byte-identical to what the route emitted before issue #3888.
-parquet-v9: occurrences of one shape share a block of vertices,
placed by world = origin + R * p via the rot0..rot8 columns. v7 =
v6’s schema plus a second, content-hash sharing stage
(ShapePlan::shared_shapes, issue #5130): v6 only ran the
rotation-aware collator, so a model whose repeats are bit-identical but
not IfcMappedItem/IfcRepresentationMap occurrences (the common case
on models with no instancing metadata at all) shared nothing and paid
for nine all-identity rot* columns on every row for nothing.
Implementations§
Source§impl ParquetLayout
impl ParquetLayout
Sourcepub(crate) fn has_rotation(self) -> bool
pub(crate) fn has_rotation(self) -> bool
Whether the mesh table carries rot0..rot8.
Follows the LAYOUT, not the plan: the streaming route shares nothing
unless the client also sent StreamShapes::CrossBatch, yet still
emits the columns as identity when the client asked for this layout,
so that everything stored under the v7 key is a v7 payload.
Sourcepub(crate) fn cache_suffix(self) -> &'static str
pub(crate) fn cache_suffix(self) -> &'static str
The cache-key suffix naming this layout.
Trait Implementations§
Source§impl Clone for ParquetLayout
impl Clone for ParquetLayout
Source§fn clone(&self) -> ParquetLayout
fn clone(&self) -> ParquetLayout
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ParquetLayout
impl Debug for ParquetLayout
Source§impl Default for ParquetLayout
impl Default for ParquetLayout
Source§fn default() -> ParquetLayout
fn default() -> ParquetLayout
Source§impl<'de> Deserialize<'de> for ParquetLayout
impl<'de> Deserialize<'de> for ParquetLayout
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for ParquetLayout
impl PartialEq for ParquetLayout
impl Copy for ParquetLayout
impl Eq for ParquetLayout
impl StructuralPartialEq for ParquetLayout
Auto Trait Implementations§
impl Freeze for ParquetLayout
impl RefUnwindSafe for ParquetLayout
impl Send for ParquetLayout
impl Sync for ParquetLayout
impl Unpin for ParquetLayout
impl UnwindSafe for ParquetLayout
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read moreSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.