Board Root#
Code |
UO.001 |
|---|---|
Validator |
|
Applies to |
the stage |
Requirement level |
MUST |
Tags |
|
Summary#
The board asset MUST have a single defaultPrim — its name is free — and MUST contain a
board-root prim discoverable by its pcba:board:* attributes, which carry the board-level
metadata (provenance, packaging, thickness, origin convention). The board root MAY be the
default prim but need not be.
This page follows PCBA to USD Input Contract 1.0.2, sections 2, 3 and 11.
Description#
Consumers read defaultPrim programmatically, so its name is any valid identifier. Discovery
is by attribute, never by prim name or position: the board root is the prim carrying
pcba:board:* root metadata. Three arrangements are all conformant:
a bare board whose default prim is the board root;
a stage whose default prim is a scene wrapper (e.g. a
/Worldholding cameras and lights) with the board prim beneath it;a panel whose board master is a
classprim referenced once per position — the master’spcba:board:*values resolve on every position, authored once.
pcba:board:name (OPTIONAL, human-readable board name) is board-root only and MUST NOT be
repeated on child prims — keep vendor names and part numbers out of the prim hierarchy. A
panel position resolving the master’s name through its reference is not a repetition.
Fields#
Attribute |
Type |
Req |
Notes |
|---|---|---|---|
|
|
MUST |
Exporter / generator version (UO.015). |
|
|
MUST |
Content hash of referenced assets (UO.015). |
|
|
MUST for a distributed package |
Inventory of packaged files (UO.013). |
|
|
MUST |
Pressed board thickness, mm (BG.001). |
|
|
MUST |
|
|
|
MUST when |
The datum in board-local mm (UO.014). |
|
|
SHOULD |
Name of the datum feature, e.g. |
|
|
SHOULD |
The board’s own part number. |
|
|
SHOULD |
Board variant / SKU id. |
|
|
OPTIONAL |
Human-readable board name. Board-root only. |
Why is it required?#
Every consumer needs one entry point (
defaultPrim) and one place to find board-level metadata; attribute-based discovery keeps that independent of how an exporter names or nests its prims.A panel legitimately has several board roots sharing one master; discovery by attribute is what makes that work.
Example#
#usda 1.0
(
defaultPrim = "Board" # any valid identifier
metersPerUnit = 0.001
upAxis = "Z"
)
def Xform "Board" (
kind = "component"
)
{
string pcba:board:generatorVersion = "example_pcb_export 1.4.2"
string pcba:board:contentHash = "sha256:0000…"
asset pcba:board:packageManifest = @./package_manifest.json@
float pcba:board:thicknessMm = 1.6
token pcba:board:originConvention = "datum_explicit"
float2 pcba:board:originPointMm = (5.0, 5.0)
string pcba:board:originLabel = "MH1"
string pcba:board:name = "DEMO-BOARD-A" # optional, board-root only
}
How to comply#
Set a single
defaultPrim; name it freely.Author the
pcba:board:*metadata on the board prim itself, whether it is the default prim, a child of a wrapper, or a panel’s class master.Author
pcba:board:nameon the board root only.
What the checker proves#
BoardRootChecker fails when the stage has no defaultPrim or it is not Xformable, and when no
prim carries a board-root pcba:board:* marker (thicknessMm, originConvention,
generatorVersion, contentHash, packageManifest, name, variant, partNumber). It warns
when pcba:board:name appears on a non-instance prim other than the board root. The individual
root attributes are checked by BG.001, UO.013, UO.014 and UO.015.