Skip to content

M7b engineering carry-overs: cross-session dedup, pick-normal inverse-transpose, opening depth clamp #92

Description

@Rowee13

Engineering carry-overs surfaced during M7b (v0.2.2) implementation/review. None affect v0.2.2 behavior at defaults; recorded for later.

  • Cross-session dedup: Model.opening_definitions is a session-runtime dedup registry (identical (kind,w,h,depth) share one Component). It is not persisted, and it is now reset on document swap (load_from). Persisting/rebuilding it so a placement after save/reload reuses an existing Definition is a follow-up.
  • Model.pick_face_local normal under non-uniform scale: the returned face normal uses the instance transform's linear block (inst.transform[:3,:3]), exact for rigid/uniform-scale hierarchies (all M7b walls/openings) but only approximate under a non-uniformly-scaled ancestor. Upgrade to the inverse-transpose of the linear block. (Documented in the method's docstring.)
  • CreateWallCommand instance bookkeeping: has the same do/undo shape that leaked Definition.instances in PlaceOpeningCommand (fixed in M7b to mirror CreateInstanceCommand). It is benign for walls because each wall gets its own unshared Definition, but worth aligning for consistency.
  • opening_frame depth clamp: when depth < infill thickness (0.04 m door panel / 0.006 m window glazing), the panel/glazing box protrudes past the flush outer face. Not reachable at the 100 mm default, but the Depth field only checks > 0. Clamp depth >= profile/infill.
  • Options-bar unit resync: OpeningOptionsBar shares the display-only unit-resync staleness on Units-menu change / New / Open tracked in M7a review carry-overs: options-bar unit resync + test/polish niceties #89 for WallOptionsBar (self-heals on next tool switch/edit).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions