pub struct EntityRow {
pub express_id: u32,
pub ifc_type: String,
pub global_id: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub object_type: Option<String>,
pub has_geometry: bool,
pub placement: Option<Placement>,
pub property_sets: Vec<PropertySet>,
pub quantity_sets: Vec<QuantitySet>,
pub attributes: Vec<PropValue>,
}Expand description
One exportable entity row.
Usually an IfcProduct occurrence, but not always: an IfcTypeProduct
whose RepresentationMaps no occurrence instantiates gets a row of its own
(#957 Route B / #1518), so the GLB node meshed under the type’s expressId
is not left without attributes. Such a row has no placement, since a type
object has no ObjectPlacement, and no matching entry in the geometry
export, which emits occurrences only.
Fields§
§express_id: u32§ifc_type: String§global_id: Option<String>§name: Option<String>§description: Option<String>§object_type: Option<String>§has_geometry: boolTrue when the product carries a geometric Representation (attr 6).
placement: Option<Placement>The product’s placement, when [ModelOptions::placements] asked for it
AND the product carries an ObjectPlacement (attr 5).
None is therefore two different facts. The caller knows which it asked
for; it cannot tell from the row alone, and 7.5% of product occurrences
in a real corpus genuinely have no placement, so this is not a rare case
to hand-wave.
A resolvable-but-broken chain is not None. A dangling reference, a
cycle, or a chain deeper than 32 composes to the identity, and identity
is a legitimate placement — so a malformed file yields a product at the
origin rather than an error. Distinguishing those would mean changing
what the resolver returns, which is a wider change than this.
property_sets: Vec<PropertySet>§quantity_sets: Vec<QuantitySet>§attributes: Vec<PropValue>The entity’s SCHEMA-DECLARED attributes, when [ModelOptions::attributes]
asked for them. Empty otherwise, and empty for a type that declares none
beyond the rooted set.
Not property sets, and not reachable through one: NominalDiameter on
an IfcReinforcingBar or OverallHeight on an IfcDoor is declared on
the entity itself, so a consumer reading only psets never sees it. The
fields this row already carries (GlobalId, Name, Description,
ObjectType) and the reference-valued ones are excluded.
Implementations§
Trait Implementations§
impl StructuralPartialEq for EntityRow
Auto Trait Implementations§
impl Freeze for EntityRow
impl RefUnwindSafe for EntityRow
impl Send for EntityRow
impl Sync for EntityRow
impl Unpin for EntityRow
impl UnwindSafe for EntityRow
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.