#[non_exhaustive]pub struct ModelOptions {
pub placements: bool,
pub inherit_type_properties: bool,
pub attributes: bool,
}Expand description
What the export should resolve beyond the attributes it always reads.
let opts = ModelOptions::default().with_placements(true);#[non_exhaustive] plus builders, rather than a plain struct: this will
grow, and non_exhaustive forbids EVERY struct expression from outside this
crate — including ..Default::default(), which is the one people reach for
to survive new fields and which does not compile here. Builders are the
shape that actually works for an external caller and keeps working when a
field is added.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.placements: boolResolve each product’s ObjectPlacement into [EntityRow::placement].
Off by default because it is not free: the placement memo is ~128 B per
distinct placement — one per product in most files, so O(products) on
top of the entity index — and each product costs a few extra decodes of
its own chain after the shared upper levels are memoized.
inherit_type_properties: boolMerge the property/quantity sets an occurrence inherits from its
IfcTypeObject into EntityRow::property_sets and
EntityRow::quantity_sets, per property, occurrence wins.
Off by default, which is NOT a claim that off is more correct. It is
not: authoring tools put a great deal on types, a type carrying
Pset_WallCommon yields no row of its own here (it only gets one when
it also has orphan geometry), and the browser has resolved inheritance
this way since #1913. Off is the default only because this changes what
every existing CSV/JSON/IFCX/Parquet export contains, and that is a
decision to take deliberately rather than as a side effect of adding
the capability.
It costs one extra IfcRelDefinesByType map in pass 1 (O(typed occurrences)) and one resolve per distinct type, memoized.
attributes: boolRender the attributes each entity’s own IFC class declares, into
EntityRow::attributes.
Off by default for the same reason as the others: it adds columns to every flattened export. It is cheap when on, though, since the row’s entity is already decoded and this only formats fields already in hand.
Implementations§
Source§impl ModelOptions
impl ModelOptions
Sourcepub fn with_placements(self, yes: bool) -> Self
pub fn with_placements(self, yes: bool) -> Self
Resolve each product’s ObjectPlacement. See ModelOptions::placements.
Sourcepub fn with_inherit_type_properties(self, yes: bool) -> Self
pub fn with_inherit_type_properties(self, yes: bool) -> Self
Merge type-inherited property/quantity sets into each occurrence. See
ModelOptions::inherit_type_properties.
Sourcepub fn with_attributes(self, yes: bool) -> Self
pub fn with_attributes(self, yes: bool) -> Self
Render each entity class’s declared attributes into every row. See
ModelOptions::attributes.
Trait Implementations§
Source§impl Clone for ModelOptions
impl Clone for ModelOptions
Source§fn clone(&self) -> ModelOptions
fn clone(&self) -> ModelOptions
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ModelOptions
impl Debug for ModelOptions
Source§impl Default for ModelOptions
impl Default for ModelOptions
Source§fn default() -> ModelOptions
fn default() -> ModelOptions
Auto Trait Implementations§
impl Freeze for ModelOptions
impl RefUnwindSafe for ModelOptions
impl Send for ModelOptions
impl Sync for ModelOptions
impl Unpin for ModelOptions
impl UnwindSafe for ModelOptions
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<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.