pub struct ComponentRecord {
pub id: String,
pub part_name: String,
pub transform: AffineTransform,
pub fixed: bool,
pub source: Value,
pub solids: Vec<String>,
pub ports: Vec<String>,
pub nested_constraints: Vec<NestedConstraint>,
pub nested_poses: BTreeMap<String, AffineTransform>,
pub pattern: Option<PatternFollow>,
pub flexible: Option<FlexibleSpec>,
}Expand description
One scene component: an ACOMP instance’s identity, pose, and member solids.
Rides the crate::feature_pipeline::FeatureResult components side-channel
into SceneMap::apply, exactly like profiles/frames — the scene’s component
set is rebuilt from feature results every history run (a projected view,
never an owning data structure).
Fields§
§id: StringThe owning ACOMP feature id — also the namespace prefix segment.
part_name: StringThe display / parts-library part name (M4-bolt in M4-bolt (ACOMP3)).
transform: AffineTransformThe rigid instance pose (part-local snapshot space -> assembly space),
already baked into the member geometry. Kept so a pose UPDATE can apply
the delta new · old⁻¹ and so the solver can read the current pose.
fixed: boolGrounded flag (the feature’s isFixed; the solver never moves it).
source: ValueOpaque source metadata slot (sourceKey / sourceSignature / …) for the
parts-library + update-components lanes; the scene never interprets it.
solids: Vec<String>Member solid scene names, already namespaced ({id}:{part solid name}).
ports: Vec<String>The part’s harness PORT ids, namespaced ({id}:{part port id}) — the
wire-harness entities a placed part carries. Their records live in
SceneMap::ports; the re-pose lane moves them with the members.
nested_constraints: Vec<NestedConstraint>A sub-assembly’s own constraint statuses (and those of every level
below it), namespaced with this component’s id — solved inside the
sub-assembly’s run, reported by the parent’s (see NestedConstraint).
nested_poses: BTreeMap<String, AffineTransform>A sub-assembly’s SOLVED occurrence poses: occurrence path below this
component (ACOMP2, ACOMP2:ACOMP1, …) → its pose in this component’s
part-local frame. Its own solve can move an occurrence away from the
transform its document authors, so anything that needs where a nested
occurrence actually sits composes transform with this, never the
authored transform. Empty for a part (and for a sub-assembly built from
a snapshot before its first solve this session).
pattern: Option<PatternFollow>An instance of a Pattern Component (APAT): which seed it follows and
how. None for every ACOMP-placed component.
flexible: Option<FlexibleSpec>Set on a FLEXIBLE sub-assembly instance (inputParams.flexible): what
the parent’s solve needs to move its occurrences individually. None
= rigid, the default.