Resolve the file's declared units from IFCPROJECT → IFCUNITASSIGNMENT.
projectId defaults to the file's first IFCPROJECT (pass explicitly,
from resolveOwningIfcProjectId, for an entity owning a later one).
Source-only reads never throw: an absent/malformed assignment yields an
empty resolver. An optional current provider refuses unreadable native
contexts with ProjectUnitReadError instead of guessing their units.
Resolve the file's declared units from
IFCPROJECT → IFCUNITASSIGNMENT.projectIddefaults to the file's first IFCPROJECT (pass explicitly, fromresolveOwningIfcProjectId, for an entity owning a later one). Source-only reads never throw: an absent/malformed assignment yields an empty resolver. An optional current provider refuses unreadable native contexts with ProjectUnitReadError instead of guessing their units.