three-usd-robot 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -7
- package/dist/ThreeUsdRobot-BxnCluuK.d.ts +347 -0
- package/dist/{ThreeUsdRobotLoader-DYtvelif.d.ts → ThreeUsdRobotLoader-C-E9uwEe.d.ts} +15 -2
- package/dist/{buildKinematicTree-DQ4Vr4sJ.d.ts → buildKinematicTree-BCySuZZn.d.ts} +4 -0
- package/dist/chunk-5SVRTKS4.js +966 -0
- package/dist/chunk-5SVRTKS4.js.map +1 -0
- package/dist/{chunk-2UD32EGU.js → chunk-AXPMXEQC.js} +1005 -175
- package/dist/chunk-AXPMXEQC.js.map +1 -0
- package/dist/{chunk-TE4MPP5Q.js → chunk-BCRRXGNB.js} +4 -4
- package/dist/{chunk-TE4MPP5Q.js.map → chunk-BCRRXGNB.js.map} +1 -1
- package/dist/chunk-ENWFOYHU.js +701 -0
- package/dist/chunk-ENWFOYHU.js.map +1 -0
- package/dist/{chunk-IYKPVUZ2.js → chunk-LDO5FKQS.js} +39 -3
- package/dist/chunk-LDO5FKQS.js.map +1 -0
- package/dist/core.d.ts +173 -5
- package/dist/core.js +3 -3
- package/dist/extras.d.ts +2 -2
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.js +2 -2
- package/dist/index.d.ts +101 -17
- package/dist/index.js +8 -8
- package/dist/react.d.ts +3 -3
- package/dist/react.js +4 -4
- package/package.json +1 -1
- package/dist/ThreeUsdRobot-BAh-48DD.d.ts +0 -185
- package/dist/chunk-2UD32EGU.js.map +0 -1
- package/dist/chunk-IYKPVUZ2.js.map +0 -1
- package/dist/chunk-WROYLUSS.js +0 -393
- package/dist/chunk-WROYLUSS.js.map +0 -1
- package/dist/chunk-XEXFGL7R.js +0 -529
- package/dist/chunk-XEXFGL7R.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/three/axis.ts","../src/three/JointObject.ts","../src/three/LinkObject.ts","../src/three/ThreeUsdRobot.ts"],"names":["THREE","THREE2","THREE3"],"mappings":"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","file":"chunk-ENWFOYHU.js","sourcesContent":["import * as THREE from \"three\";\nimport type { Axis } from \"../robot/RobotDescription.js\";\n\n/** Unit vector for a USD joint axis token. Returns a fresh vector each call. */\nexport function axisVector(axis: Axis): THREE.Vector3 {\n switch (axis) {\n case \"X\":\n return new THREE.Vector3(1, 0, 0);\n case \"Y\":\n return new THREE.Vector3(0, 1, 0);\n case \"Z\":\n return new THREE.Vector3(0, 0, 1);\n }\n}\n","import * as THREE from \"three\";\nimport type { Axis, JointDescription, JointType } from \"../robot/RobotDescription.js\";\nimport { axisVector } from \"./axis.js\";\n\n/**\n * The articulated \"motion\" node of a joint, inserted between the joint's two\n * fixed frames (`jointFrame0` and `inverse(jointFrame1)`). {@link setValue}\n * rotates it about the axis (revolute/continuous) or slides it along the axis\n * (prismatic); fixed joints are inert.\n */\nexport class JointObject extends THREE.Object3D {\n readonly isJointObject = true;\n readonly jointName: string;\n /** Full USD prim path of the joint — the collision-proof address. */\n readonly primPath: string;\n readonly jointType: JointType;\n readonly axisToken: Axis;\n readonly axis: THREE.Vector3;\n readonly lower: number | undefined;\n readonly upper: number | undefined;\n\n private _value = 0;\n\n constructor(joint: JointDescription) {\n super();\n this.name = joint.name;\n this.jointName = joint.name;\n this.primPath = joint.primPath;\n this.jointType = joint.type;\n this.axisToken = joint.axis;\n this.axis = axisVector(joint.axis);\n this.lower = joint.lower;\n this.upper = joint.upper;\n }\n\n get value(): number {\n return this._value;\n }\n\n get articulated(): boolean {\n return this.jointType !== \"fixed\";\n }\n\n /**\n * Set the joint value (radians for revolute/continuous, length for prismatic).\n * Optionally clamps to authored limits. Returns the value actually applied.\n */\n setValue(value: number, clampToLimits = true): number {\n if (!this.articulated) return this._value; // fixed joint: inert\n\n let v = value;\n if (clampToLimits) {\n if (this.lower !== undefined && v < this.lower) v = this.lower;\n if (this.upper !== undefined && v > this.upper) v = this.upper;\n }\n this._value = v;\n\n if (this.jointType === \"prismatic\") {\n this.position.copy(this.axis).multiplyScalar(v);\n this.quaternion.identity();\n } else {\n this.quaternion.setFromAxisAngle(this.axis, v);\n this.position.set(0, 0, 0);\n }\n return v;\n }\n}\n","import * as THREE from \"three\";\nimport type { LinkDescription } from \"../robot/RobotDescription.js\";\n\n/**\n * Three.js node for a robot link. Its frame is the USD link prim's frame;\n * visual/collision meshes (M6) attach as children relative to it. Placement\n * relative to the parent is supplied by the joint chain, so a link's own local\n * matrix is identity (except the root, which carries the world-fixed placement).\n */\nexport class LinkObject extends THREE.Object3D {\n readonly isLinkObject = true;\n readonly linkName: string;\n readonly primPath: string;\n\n constructor(link: LinkDescription) {\n super();\n this.name = link.name;\n this.linkName = link.name;\n this.primPath = link.primPath;\n // Placement comes from the parent joint chain; keep the local matrix fixed.\n this.matrixAutoUpdate = false;\n }\n}\n","import * as THREE from \"three\";\nimport {\n type JointRelativeDecomposition,\n decomposeJointRelative,\n nearestAngleBranch,\n} from \"../kinematics/jointResiduals.js\";\nimport { interpolate } from \"../kinematics/sampling.js\";\nimport { type Mat4, identity4, invert, multiply, multiplyAll } from \"../kinematics/transforms.js\";\nimport type {\n JointDescription,\n LinkDescription,\n RobotDescription,\n} from \"../robot/RobotDescription.js\";\nimport type { KinematicTree } from \"../robot/buildKinematicTree.js\";\nimport type { Stage } from \"../usd/Stage.js\";\nimport { JointObject } from \"./JointObject.js\";\nimport { LinkObject } from \"./LinkObject.js\";\n\n/** Target world up-axis: normalize to Y-up / Z-up, or keep the authored orientation. */\nexport type WorldUpAxis = \"Y\" | \"Z\" | \"keep\";\n\nexport type ThreeUsdRobotOptions = {\n /** Clamp `setJointValue` to authored limits (default `true`). */\n clampJointLimits?: boolean;\n /** Size of the built-in joint-axis / link-frame helpers (stage units, default `0.15`). */\n helperSize?: number;\n /**\n * Target world up-axis. The root is rotated so the stage's authored `upAxis`\n * lands in that convention: `\"Y\"` for a standard three.js scene, `\"Z\"` for a\n * robotics-style Z-up world, `\"keep\"` for no correction. Takes precedence\n * over the deprecated {@link ThreeUsdRobotOptions.upAxisConversion}.\n */\n worldUp?: WorldUpAxis;\n /**\n * Legacy up-axis correction: `\"auto\"` ≡ `worldUp: \"Y\"`, `\"Y\"` / `\"none\"` ≡\n * `worldUp: \"keep\"`, and `\"Z\"` forces the Z-up→Y-up rotation regardless of\n * stage metadata. Default `\"none\"` (the loader defaults to `\"auto\"`).\n * @deprecated Use {@link ThreeUsdRobotOptions.worldUp}.\n */\n upAxisConversion?: \"auto\" | \"Y\" | \"Z\" | \"none\";\n /** Extra uniform scale multiplied with the stage `metersPerUnit` (default `1`). */\n unitScale?: number;\n /** Seed joints from their authored initial value (drive target / joint state). Default `true`. */\n applyInitialPose?: boolean;\n /**\n * Diagnose {@link ThreeUsdRobot.setLinkTransforms} poses against the joint\n * constraints and `console.warn` once per baked session when one deviates\n * beyond tolerance (default 1 mm anchor / 0.01 rad axis). `true` uses the\n * defaults; pass an object to tune them.\n */\n debugBakedTransforms?: boolean | { anchorTolerance?: number; axisTolerance?: number };\n};\n\n/**\n * A rigid world pose for {@link ThreeUsdRobot.setLinkTransforms} —\n * `quaternion` in Three.js `[x, y, z, w]` order (USD authors quatf as\n * `(w, x, y, z)`; reorder when reading recorded USD by hand).\n */\nexport type LinkPose = {\n position: [number, number, number];\n quaternion: [number, number, number, number];\n};\n\n/**\n * Coordinate space of {@link LinkPose} batches. `\"world\"` (default) is the\n * Three.js scene world *after* `worldUp` / unit normalization — with\n * `worldUp: \"Z\"` you hand in Z-up poses — including any transform on the\n * robot object itself (which must stay a similarity: uniform scale, no\n * shear). `\"stage\"` is the authored USD stage space (before up-axis rotation\n * and `metersPerUnit` scaling), as prim world transforms are written in the\n * file.\n */\nexport type LinkPoseSpace = \"world\" | \"stage\";\n\nexport type LinkPosesOptions = {\n /** Interpretation of the poses (default `\"world\"`). */\n space?: LinkPoseSpace;\n};\n\nexport type JointValuesFromLinkTransformsOptions = LinkPosesOptions & {\n /**\n * Previous joint values (keyed like the returned `values`): each\n * revolute/continuous joint picks the 2πk branch of its projection nearest\n * this, for frame-to-frame continuity past ±π.\n */\n previous?: Record<string, number>;\n /** Clamp `values` to authored limits (default `false` — deviations are reported, not hidden). */\n clampLimits?: boolean;\n};\n\n/**\n * Per-joint constraint residual of a link-pose batch, keyed by joint prim\n * path. The ideal parent→child transform of a joint is a pure motion along\n * its DOF; whatever the poses leave over splits into `anchorError` /\n * `axisError` (see {@link ThreeUsdRobot.validateLinkTransforms}).\n */\nexport type JointResidual = {\n /** Translation residual at the joint anchor, in meters (`metersPerUnit` applied). */\n anchorError: number;\n /** Rotation residual off the joint DOF, in radians. */\n axisError: number;\n /** Projected joint value (SI: radians / stage length units; `0` for fixed joints). */\n q: number;\n /** Whether `q` lies outside the authored limits. */\n limitExceeded: boolean;\n};\n\n/**\n * A Three.js `Object3D` that realizes a {@link RobotDescription} as a kinematic\n * hierarchy and drives forward kinematics via {@link setJointValue}.\n *\n * Per joint the hierarchy is\n * `parentLink → jointFrame0 → jointMotion → jointFrame1⁻¹ → childLink`,\n * where only `jointMotion` (a {@link JointObject}) changes with the joint value;\n * world poses then fall out of Three.js's `updateMatrixWorld`.\n *\n * **Naming contract** — a link/joint's key is its prim's leaf name when that\n * is unique across the robot, else its full prim path (deterministic; see the\n * extractor). Every accessor taking a name equally accepts the full prim path,\n * which is stable regardless of collisions; {@link getLinkObjectsByPath} /\n * {@link getJointObjectsByPath} enumerate the path-keyed tables.\n */\nexport class ThreeUsdRobot extends THREE.Object3D {\n readonly isThreeUsdRobot = true;\n readonly robot: RobotDescription;\n readonly tree: KinematicTree;\n readonly clampJointLimits: boolean;\n /**\n * The composed USD stage this robot was built from — the full prim tree, for\n * inspection tooling (structure panels, attribute browsers). Attached by\n * {@link ThreeUsdRobotLoader}; `undefined` for programmatically-built robots.\n */\n stage?: Stage;\n\n private readonly linkObjects = new Map<string, LinkObject>();\n private readonly jointObjects = new Map<string, JointObject>();\n private readonly linkKeyByPath = new Map<string, string>();\n private readonly jointKeyByPath = new Map<string, string>();\n private dirty = true;\n\n /** Constructed (fk rest) local matrix of every link, for baked→fk restore. */\n private readonly restLocal = new Map<string, Mat4>();\n private _displayMode: \"fk\" | \"baked\" = \"fk\";\n /** Stage-space link worlds while baked (`null` in fk mode). */\n private bakedStageWorld: Map<string, Mat4> | null = null;\n /** Frozen `frame0 · motion · frame1⁻¹` per tree joint while baked. */\n private bakedChainRel: Map<string, Mat4> | null = null;\n private readonly debugBaked: { anchorTolerance: number; axisTolerance: number } | null;\n private bakedDebugWarned = false;\n private readonly warnedPoseKeys = new Set<string>();\n private warnedNonUniformScale = false;\n\n private readonly helperSize: number;\n private _showVisual = true;\n private _showCollision = false;\n private _showJointAxes = false;\n private _showLinkFrames = false;\n private jointAxesHelpers: THREE.AxesHelper[] = [];\n private linkFrameHelpers: THREE.AxesHelper[] = [];\n\n constructor(robot: RobotDescription, tree: KinematicTree, options: ThreeUsdRobotOptions = {}) {\n super();\n this.name = robot.name;\n this.robot = robot;\n this.tree = tree;\n this.clampJointLimits = options.clampJointLimits ?? true;\n this.helperSize = options.helperSize ?? 0.15;\n\n // Create a node for every link up front; index links and joints by path.\n for (const [key, link] of Object.entries(robot.links)) {\n this.linkObjects.set(key, new LinkObject(link));\n this.linkKeyByPath.set(link.primPath, key);\n }\n for (const [key, joint] of Object.entries(robot.joints)) {\n this.jointKeyByPath.set(joint.primPath, key);\n }\n\n this.attachRoot();\n this.attachTreeEdges();\n this.attachIsolatedLinks();\n this.applyStageNormalization(robot, options);\n if (options.applyInitialPose ?? true) this.applyInitialPose(robot);\n\n for (const [key, obj] of this.linkObjects) this.restLocal.set(key, obj.matrix.toArray());\n const debug = options.debugBakedTransforms;\n this.debugBaked = debug\n ? {\n anchorTolerance: (typeof debug === \"object\" ? debug.anchorTolerance : undefined) ?? 1e-3,\n axisTolerance: (typeof debug === \"object\" ? debug.axisTolerance : undefined) ?? 0.01,\n }\n : null;\n }\n\n /** Orient (authored upAxis → target world up) and scale (metersPerUnit × unitScale) the root. */\n private applyStageNormalization(robot: RobotDescription, options: ThreeUsdRobotOptions): void {\n const scale = (robot.metersPerUnit || 1) * (options.unitScale ?? 1);\n if (scale !== 1) this.scale.setScalar(scale);\n\n const rotateX = (angle: number) =>\n this.quaternion.setFromAxisAngle(new THREE.Vector3(1, 0, 0), angle);\n\n if (options.worldUp) {\n if (options.worldUp === \"Y\" && robot.upAxis === \"Z\") rotateX(-Math.PI / 2);\n else if (options.worldUp === \"Z\" && robot.upAxis === \"Y\") rotateX(Math.PI / 2);\n return; // matching axis or \"keep\": leave as authored\n }\n const conv = options.upAxisConversion ?? \"none\";\n if (conv === \"Z\" || (conv === \"auto\" && robot.upAxis === \"Z\")) rotateX(-Math.PI / 2);\n }\n\n /** Apply each joint's authored initial value, if any. */\n private applyInitialPose(robot: RobotDescription): void {\n for (const [key, joint] of Object.entries(robot.joints)) {\n if (joint.initialValue === undefined) continue;\n this.jointObjects.get(key)?.setValue(joint.initialValue, this.clampJointLimits);\n }\n this.dirty = true;\n }\n\n private attachRoot(): void {\n const rootObj = this.linkObjects.get(this.tree.root);\n if (!rootObj) return; // empty robot\n const rootJointKey = this.tree.rootJoint;\n const rootLink = this.robot.links[this.tree.root];\n if (rootJointKey) {\n const j = this.robot.joints[rootJointKey];\n // World-fixed placement: jointFrame0 (in world) · inverse(jointFrame1).\n if (j) setMatrix(rootObj, multiply(j.jointFrame0, invert(j.jointFrame1)));\n } else if (rootLink?.worldTransform) {\n // Floating base: keep the authored stage placement.\n setMatrix(rootObj, rootLink.worldTransform);\n }\n this.add(rootObj);\n }\n\n private attachTreeEdges(): void {\n for (const linkKey of this.tree.order) {\n const node = this.tree.nodes[linkKey];\n if (!node || node.parent === null || node.jointToParent === null) continue;\n\n const parentObj = this.linkObjects.get(node.parent);\n const childObj = this.linkObjects.get(linkKey);\n const joint = this.robot.joints[node.jointToParent];\n if (!parentObj || !childObj || !joint) continue;\n\n this.attachJointChain(parentObj, childObj, node.jointToParent, joint);\n }\n }\n\n /** Build `parent → frame0 → motion → frame1⁻¹ → child` for one joint. */\n private attachJointChain(\n parent: LinkObject,\n child: LinkObject,\n jointKey: string,\n joint: JointDescription,\n ): void {\n const frame0 = new THREE.Group();\n frame0.name = `${joint.name}:frame0`;\n setMatrix(frame0, joint.jointFrame0);\n\n const motion = new JointObject(joint);\n\n const frame1Inv = new THREE.Group();\n frame1Inv.name = `${joint.name}:frame1Inv`;\n setMatrix(frame1Inv, invert(joint.jointFrame1));\n\n parent.add(frame0);\n frame0.add(motion);\n motion.add(frame1Inv);\n frame1Inv.add(child);\n\n this.jointObjects.set(jointKey, motion);\n }\n\n private attachIsolatedLinks(): void {\n for (const key of this.tree.isolatedLinks) {\n const obj = this.linkObjects.get(key);\n if (!obj || obj.parent) continue;\n // Not placeable by any joint chain — keep the authored stage placement\n // (other machines / free bodies on a multi-articulation stage).\n const worldTransform = this.robot.links[key]?.worldTransform;\n if (worldTransform) setMatrix(obj, worldTransform);\n this.add(obj);\n }\n }\n\n // -- Naming --------------------------------------------------------------\n\n /** Resolve a link reference — key or full prim path — to the extractor key. */\n private linkKey(ref: string): string {\n if (this.linkObjects.has(ref)) return ref;\n return this.linkKeyByPath.get(ref) ?? ref;\n }\n\n /** Resolve a joint reference — key or full prim path — to the extractor key. */\n private jointKey(ref: string): string {\n if (this.jointObjects.has(ref)) return ref;\n return this.jointKeyByPath.get(ref) ?? ref;\n }\n\n // -- Joint control -------------------------------------------------------\n\n /**\n * Set one joint value, addressed by key or full prim path. Unknown joints\n * are ignored. Returns whether it applied. Always restores `\"fk\"` display\n * mode first (see {@link setLinkTransforms}).\n */\n setJointValue(name: string, value: number): boolean {\n this.exitBakedMode();\n const joint = this.jointObjects.get(this.jointKey(name));\n if (!joint) return false;\n joint.setValue(value, this.clampJointLimits);\n this.dirty = true;\n return true;\n }\n\n /**\n * Set several joint values at once (matrix update is coalesced). Always\n * restores `\"fk\"` display mode first, recomputing every link purely from\n * joint values — even an empty batch returns from baked playback (see\n * {@link setLinkTransforms}).\n */\n setJointValues(values: Record<string, number>): void {\n this.exitBakedMode();\n for (const [name, value] of Object.entries(values)) {\n const joint = this.jointObjects.get(this.jointKey(name));\n if (joint) {\n joint.setValue(value, this.clampJointLimits);\n this.dirty = true;\n }\n }\n }\n\n getJointValue(name: string): number | undefined {\n return this.jointObjects.get(this.jointKey(name))?.value;\n }\n\n /** Recompute world matrices. Called lazily by the getters; safe to call directly. */\n updateKinematics(): void {\n this.updateMatrixWorld(true);\n this.dirty = false;\n }\n\n private ensureUpdated(): void {\n if (this.dirty) this.updateKinematics();\n }\n\n // -- Baked link transforms (M23) -----------------------------------------\n\n /**\n * `\"fk\"` (default): link placements derive from joint values. `\"baked\"`:\n * {@link setLinkTransforms} wrote link poses directly and the joints no\n * longer constrain the display; any `setJointValue`-family call restores fk.\n */\n get displayMode(): \"fk\" | \"baked\" {\n return this._displayMode;\n }\n\n /**\n * Drive link world poses directly — the display path for baked recordings\n * (Isaac Sim body-transform time samples, maximal-coordinate playback).\n * usdview-like semantics: constraint deviations are shown, never corrected —\n * {@link validateLinkTransforms} measures them,\n * {@link jointValuesFromLinkTransforms} projects onto the joints instead.\n *\n * Enters `\"baked\"` display mode; joint values stay untouched. Return to fk\n * with {@link setJointValues} (any batch, even `{}`), which recomputes\n * every link purely from joint values.\n *\n * Keys are link keys or full prim paths; unknown keys warn once and are\n * skipped. Unspecified links KEEP their current world pose — a track that\n * omits a link means \"it did not move\". Poses are rigid, `quaternion` in\n * `[x, y, z, w]` order, interpreted per `opts.space` (default `\"world\"`:\n * the Three.js scene world after `worldUp` normalization — pair a Z-up\n * meter track with `worldUp: \"Z\"`). Matrix updates are coalesced into the\n * next render / world query. Returns the number of poses applied.\n */\n setLinkTransforms(poses: Record<string, LinkPose>, opts: LinkPosesOptions = {}): number {\n const targets = this.resolvePoseTargets(poses, opts.space ?? \"world\");\n if (this._displayMode !== \"baked\") this.enterBakedMode();\n const current = this.bakedStageWorld ?? new Map<string, Mat4>();\n const rels = this.bakedChainRel ?? new Map<string, Mat4>();\n\n // Rewrite every link's local matrix parents-first: written links land on\n // their target, held links keep their world pose while ancestors move.\n // The chain nodes in between stay frozen at their fk values; each link's\n // local absorbs the difference, so world matrices come out exact.\n const next = new Map<string, Mat4>();\n for (const key of this.tree.order) {\n const node = this.tree.nodes[key];\n const obj = this.linkObjects.get(key);\n if (!node || !obj) continue;\n const world = targets.get(key) ?? current.get(key);\n if (!world) continue;\n if (node.parent === null || node.jointToParent === null) {\n next.set(key, world); // the root's Object3D parent is the robot itself\n setMatrix(obj, world);\n continue;\n }\n const parentWorld = next.get(node.parent);\n const chainRel = rels.get(node.jointToParent);\n if (!parentWorld || !chainRel) continue;\n next.set(key, world);\n setMatrix(obj, multiply(invert(multiply(parentWorld, chainRel)), world));\n }\n for (const key of this.tree.isolatedLinks) {\n const obj = this.linkObjects.get(key);\n const world = targets.get(key) ?? current.get(key);\n if (!obj || !world) continue;\n next.set(key, world);\n setMatrix(obj, world);\n }\n\n this.bakedStageWorld = next;\n this.dirty = true;\n this.warnBakedDeviationOnce(next);\n return targets.size;\n }\n\n /**\n * Measure how far a link-pose batch deviates from the joint constraints,\n * without touching the display. Unspecified links resolve to their current\n * displayed pose, so the report predicts exactly what\n * {@link setLinkTransforms} with the same batch would show.\n *\n * Keyed by joint prim path; covers every joint — fixed joints (`q` = 0\n * check), loop joints dropped from the fk tree (closure error) and the\n * world-fixed root attachment (a moved base against a fixed-base model).\n * Typical signatures: a constant `anchorError` offset on every joint —\n * recording/model mismatch (wrong version or scale); growth over time —\n * maximal-coordinate solver drift; large uniform `axisError` — a\n * coordinate-convention bug (Y/Z-up or quaternion order).\n */\n validateLinkTransforms(\n poses: Record<string, LinkPose>,\n opts: LinkPosesOptions = {},\n ): Record<string, JointResidual> {\n const out: Record<string, JointResidual> = {};\n for (const { joint, rel } of this.decomposeJoints(poses, opts.space ?? \"world\")) {\n out[joint.primPath] = this.buildResidual(joint, rel.q, rel);\n }\n return out;\n }\n\n /**\n * Project a link-pose batch onto the joint manifold: the closed-form 1-DOF\n * joint values that best reproduce it, plus the same residuals as\n * {@link validateLinkTransforms}. `values` covers the articulated tree\n * joints, keyed by joint prim path, and feeds {@link setJointValues}\n * directly — the constraint-respecting playback of the same track:\n *\n * ```ts\n * robot.setJointValues(robot.jointValuesFromLinkTransforms(poses, { previous }).values);\n * ```\n *\n * Residual `q` / `limitExceeded` always report the unclamped projection,\n * also when `clampLimits` clamps `values`.\n */\n jointValuesFromLinkTransforms(\n poses: Record<string, LinkPose>,\n opts: JointValuesFromLinkTransformsOptions = {},\n ): { values: Record<string, number>; residuals: Record<string, JointResidual> } {\n const values: Record<string, number> = {};\n const residuals: Record<string, JointResidual> = {};\n for (const { key, joint, rel } of this.decomposeJoints(poses, opts.space ?? \"world\")) {\n let q = rel.q;\n if (joint.type === \"revolute\" || joint.type === \"continuous\") {\n const previous = opts.previous?.[joint.primPath] ?? opts.previous?.[key];\n if (previous !== undefined) q = nearestAngleBranch(q, previous);\n }\n residuals[joint.primPath] = this.buildResidual(joint, q, rel);\n if (!this.jointObjects.get(key)?.articulated) continue;\n if (opts.clampLimits) {\n if (joint.lower !== undefined && q < joint.lower) q = joint.lower;\n if (joint.upper !== undefined && q > joint.upper) q = joint.upper;\n }\n values[joint.primPath] = q;\n }\n return { values, residuals };\n }\n\n /** Restore the constructed fk link placements (no-op when already `\"fk\"`). */\n private exitBakedMode(): void {\n if (this._displayMode === \"fk\") return;\n for (const [key, local] of this.restLocal) {\n const obj = this.linkObjects.get(key);\n if (obj) setMatrix(obj, local);\n }\n this.bakedStageWorld = null;\n this.bakedChainRel = null;\n this.bakedDebugWarned = false;\n this._displayMode = \"fk\";\n this.dirty = true;\n }\n\n /** Freeze the fk state a baked session builds on (joints cannot move while baked). */\n private enterBakedMode(): void {\n const rels = this.computeChainRels();\n this.bakedChainRel = rels;\n this.bakedStageWorld = this.computeStageWorlds(rels);\n this._displayMode = \"baked\";\n }\n\n /** `frame0 · motion(q) · frame1⁻¹` of every tree joint, from live joint values. */\n private computeChainRels(): Map<string, Mat4> {\n const rels = new Map<string, Mat4>();\n for (const [key, motion] of this.jointObjects) {\n const joint = this.robot.joints[key];\n if (!joint) continue;\n motion.updateMatrix();\n rels.set(\n key,\n multiplyAll([joint.jointFrame0, motion.matrix.toArray(), invert(joint.jointFrame1)]),\n );\n }\n return rels;\n }\n\n /** Stage-space world transform of every link under the current display state. */\n private computeStageWorlds(rels: Map<string, Mat4>): Map<string, Mat4> {\n const worlds = new Map<string, Mat4>();\n for (const key of this.tree.order) {\n const node = this.tree.nodes[key];\n const obj = this.linkObjects.get(key);\n if (!node || !obj) continue;\n const local = obj.matrix.toArray();\n if (node.parent === null || node.jointToParent === null) {\n worlds.set(key, local);\n continue;\n }\n const parentWorld = worlds.get(node.parent);\n const chainRel = rels.get(node.jointToParent);\n if (!parentWorld || !chainRel) continue;\n worlds.set(key, multiplyAll([parentWorld, chainRel, local]));\n }\n for (const key of this.tree.isolatedLinks) {\n const obj = this.linkObjects.get(key);\n if (obj) worlds.set(key, obj.matrix.toArray());\n }\n return worlds;\n }\n\n private currentStageWorlds(): Map<string, Mat4> {\n return this.bakedStageWorld ?? this.computeStageWorlds(this.computeChainRels());\n }\n\n /** Resolve pose keys to link keys and convert each pose to a rigid stage-space matrix. */\n private resolvePoseTargets(\n poses: Record<string, LinkPose>,\n space: LinkPoseSpace,\n ): Map<string, Mat4> {\n const targets = new Map<string, Mat4>();\n const entries = Object.entries(poses);\n if (entries.length === 0) return targets;\n\n const toStage = space === \"world\" ? this.sceneToStageConverter() : null;\n const position = new THREE.Vector3();\n const quaternion = new THREE.Quaternion();\n const matrix = new THREE.Matrix4();\n for (const [ref, pose] of entries) {\n const key = this.linkKey(ref);\n if (!this.linkObjects.has(key)) {\n this.warnUnknownPoseKey(ref);\n continue;\n }\n position.fromArray(pose.position);\n quaternion.fromArray(pose.quaternion).normalize();\n toStage?.(position, quaternion);\n targets.set(key, matrix.compose(position, quaternion, UNIT_SCALE).toArray());\n }\n return targets;\n }\n\n /**\n * Scene world → stage space, undoing the robot's own world transform\n * (up-axis rotation, unit scale, any user placement) as a similarity — so\n * link locals stay rigid and the root keeps carrying the scale.\n */\n private sceneToStageConverter(): (position: THREE.Vector3, quaternion: THREE.Quaternion) => void {\n this.updateWorldMatrix(true, false);\n const rootPosition = new THREE.Vector3();\n const rootQuaternion = new THREE.Quaternion();\n const rootScale = new THREE.Vector3();\n this.matrixWorld.decompose(rootPosition, rootQuaternion, rootScale);\n const s = rootScale.x;\n if (\n !this.warnedNonUniformScale &&\n (Math.abs(rootScale.y - s) > 1e-6 * Math.abs(s) ||\n Math.abs(rootScale.z - s) > 1e-6 * Math.abs(s))\n ) {\n this.warnedNonUniformScale = true;\n console.warn(\n `three-usd-robot: non-uniform world scale on \"${this.name}\"; space:\"world\" poses are off`,\n );\n }\n const invQuaternion = rootQuaternion.clone().invert();\n const invScale = s !== 0 ? 1 / s : 1;\n return (position, quaternion) => {\n position.sub(rootPosition).applyQuaternion(invQuaternion).multiplyScalar(invScale);\n quaternion.premultiply(invQuaternion);\n };\n }\n\n /**\n * Decompose every joint's parent→child transform under a pose batch\n * (unspecified links resolve to their current displayed pose, mirroring\n * {@link setLinkTransforms}). Pure — the display is untouched.\n */\n private decomposeJoints(\n poses: Record<string, LinkPose>,\n space: LinkPoseSpace,\n ): { key: string; joint: JointDescription; rel: JointRelativeDecomposition }[] {\n const worlds = new Map(this.currentStageWorlds());\n for (const [key, world] of this.resolvePoseTargets(poses, space)) worlds.set(key, world);\n\n const out: { key: string; joint: JointDescription; rel: JointRelativeDecomposition }[] = [];\n for (const [key, joint] of Object.entries(this.robot.joints)) {\n const childWorld = worlds.get(joint.child);\n const parentWorld = joint.parent === \"\" ? IDENTITY4 : worlds.get(joint.parent);\n if (!childWorld || !parentWorld) continue;\n out.push({ key, joint, rel: decomposeJointRelative(joint, parentWorld, childWorld) });\n }\n return out;\n }\n\n private buildResidual(\n joint: JointDescription,\n q: number,\n rel: JointRelativeDecomposition,\n ): JointResidual {\n return {\n anchorError: rel.anchorError * this.robot.metersPerUnit,\n axisError: rel.axisError,\n q,\n limitExceeded:\n (joint.lower !== undefined && q < joint.lower - LIMIT_EPS) ||\n (joint.upper !== undefined && q > joint.upper + LIMIT_EPS),\n };\n }\n\n private warnUnknownPoseKey(ref: string): void {\n if (this.warnedPoseKeys.has(ref)) return;\n this.warnedPoseKeys.add(ref);\n console.warn(`three-usd-robot: unknown link \"${ref}\" in a pose batch; ignoring`);\n }\n\n /** `debugBakedTransforms`: warn once per baked session when poses break the constraints. */\n private warnBakedDeviationOnce(worlds: Map<string, Mat4>): void {\n if (!this.debugBaked || this.bakedDebugWarned) return;\n const { anchorTolerance, axisTolerance } = this.debugBaked;\n let count = 0;\n let worst: { path: string; anchor: number; axis: number; score: number } | null = null;\n for (const joint of Object.values(this.robot.joints)) {\n const childWorld = worlds.get(joint.child);\n const parentWorld = joint.parent === \"\" ? IDENTITY4 : worlds.get(joint.parent);\n if (!childWorld || !parentWorld) continue;\n const rel = decomposeJointRelative(joint, parentWorld, childWorld);\n const anchor = rel.anchorError * this.robot.metersPerUnit;\n if (anchor <= anchorTolerance && rel.axisError <= axisTolerance) continue;\n count++;\n const score = anchor / anchorTolerance + rel.axisError / axisTolerance;\n if (!worst || score > worst.score) {\n worst = { path: joint.primPath, anchor, axis: rel.axisError, score };\n }\n }\n if (!worst) return;\n this.bakedDebugWarned = true;\n console.warn(\n `three-usd-robot: baked poses deviate from ${count} joint constraint(s) — worst ` +\n `${worst.path}: anchor ${(worst.anchor * 1e3).toFixed(3)} mm, axis ` +\n `${worst.axis.toFixed(4)} rad (recording/model mismatch? warned once per baked session)`,\n );\n }\n\n // -- Queries -------------------------------------------------------------\n\n /** World matrix of a link, addressed by key or full prim path. */\n getLinkWorldMatrix(name: string): THREE.Matrix4 {\n const obj = this.linkObjects.get(this.linkKey(name));\n if (!obj) throw new Error(`unknown link \"${name}\"`);\n this.ensureUpdated();\n return obj.matrixWorld.clone();\n }\n\n getLinkWorldPosition(name: string): THREE.Vector3 {\n return new THREE.Vector3().setFromMatrixPosition(this.getLinkWorldMatrix(name));\n }\n\n /** Link object by key or full prim path. */\n getLinkObject(name: string): LinkObject | undefined {\n return this.linkObjects.get(this.linkKey(name));\n }\n\n /** Joint object by key or full prim path. */\n getJointObject(name: string): JointObject | undefined {\n return this.jointObjects.get(this.jointKey(name));\n }\n\n /**\n * Table of link prim path → {@link LinkObject}. Prim paths are the\n * collision-proof way to pin a link (e.g. to attach tools or gizmos).\n */\n getLinkObjectsByPath(): Map<string, LinkObject> {\n const out = new Map<string, LinkObject>();\n for (const [path, key] of this.linkKeyByPath) {\n const obj = this.linkObjects.get(key);\n if (obj) out.set(path, obj);\n }\n return out;\n }\n\n /**\n * Table of joint prim path → {@link JointObject}, covering the joints\n * realized in the kinematic tree (loop joints have no motion node).\n */\n getJointObjectsByPath(): Map<string, JointObject> {\n const out = new Map<string, JointObject>();\n for (const [path, key] of this.jointKeyByPath) {\n const obj = this.jointObjects.get(key);\n if (obj) out.set(path, obj);\n }\n return out;\n }\n\n getJoints(): JointDescription[] {\n return Object.values(this.robot.joints);\n }\n\n getLinks(): LinkDescription[] {\n return Object.values(this.robot.links);\n }\n\n /** Names of the articulated (controllable) joints. */\n getJointNames(): string[] {\n return [...this.jointObjects.keys()];\n }\n\n getLinkNames(): string[] {\n return [...this.linkObjects.keys()];\n }\n\n getKinematicTree(): KinematicTree {\n return this.tree;\n }\n\n /** Authored stage up-axis (`\"Y\"` or `\"Z\"`) — unaffected by `worldUp` normalization. */\n get upAxis(): \"Y\" | \"Z\" {\n return this.robot.upAxis;\n }\n\n /** Authored stage scale in meters per unit (already applied to the root). */\n get metersPerUnit(): number {\n return this.robot.metersPerUnit;\n }\n\n // -- Animation playback --------------------------------------------------\n\n /** Playback rate in time codes per second (from the stage; default 24). */\n getTimeCodesPerSecond(): number {\n return this.robot.timeCodesPerSecond ?? 24;\n }\n\n /** Whether any joint has a time-sampled trajectory. */\n hasAnimation(): boolean {\n return Object.values(this.robot.joints).some((j) => j.valueSamples !== undefined);\n }\n\n /**\n * Animation range in time codes: the union of authored joint sample ranges,\n * falling back to the stage `startTimeCode`/`endTimeCode`. `null` if neither.\n */\n getTimeRange(): { start: number; end: number } | null {\n let start = Number.POSITIVE_INFINITY;\n let end = Number.NEGATIVE_INFINITY;\n for (const joint of Object.values(this.robot.joints)) {\n const times = joint.valueSamples?.times;\n if (!times || times.length === 0) continue;\n start = Math.min(start, times[0]!);\n end = Math.max(end, times[times.length - 1]!);\n }\n if (start <= end) return { start, end };\n\n const { startTimeCode, endTimeCode } = this.robot;\n if (startTimeCode !== undefined && endTimeCode !== undefined) {\n return { start: startTimeCode, end: endTimeCode };\n }\n return null;\n }\n\n /** Sample every animated joint at time code `t` and apply the values (an fk drive — leaves baked mode). */\n setTime(t: number): void {\n this.exitBakedMode();\n for (const [key, joint] of Object.entries(this.robot.joints)) {\n if (joint.valueSamples) this.setJointValue(key, interpolate(joint.valueSamples, t));\n }\n }\n\n // -- Display toggles -----------------------------------------------------\n\n get showVisual(): boolean {\n return this._showVisual;\n }\n set showVisual(v: boolean) {\n this._showVisual = v;\n this.setKindVisibility(\"visual\", v);\n }\n\n get showCollision(): boolean {\n return this._showCollision;\n }\n set showCollision(v: boolean) {\n this._showCollision = v;\n this.setKindVisibility(\"collision\", v);\n }\n\n get showJointAxes(): boolean {\n return this._showJointAxes;\n }\n set showJointAxes(v: boolean) {\n this._showJointAxes = v;\n if (v && this.jointAxesHelpers.length === 0) {\n for (const joint of this.jointObjects.values()) {\n const h = new THREE.AxesHelper(this.helperSize);\n h.name = `${joint.jointName}:axes`;\n joint.add(h);\n this.jointAxesHelpers.push(h);\n }\n }\n for (const h of this.jointAxesHelpers) h.visible = v;\n }\n\n get showLinkFrames(): boolean {\n return this._showLinkFrames;\n }\n set showLinkFrames(v: boolean) {\n this._showLinkFrames = v;\n if (v && this.linkFrameHelpers.length === 0) {\n for (const link of this.linkObjects.values()) {\n const h = new THREE.AxesHelper(this.helperSize);\n h.name = `${link.linkName}:frame`;\n link.add(h);\n this.linkFrameHelpers.push(h);\n }\n }\n for (const h of this.linkFrameHelpers) h.visible = v;\n }\n\n private setKindVisibility(kind: string, visible: boolean): void {\n this.traverse((o) => {\n if ((o.userData as { kind?: string }).kind === kind) o.visible = visible;\n });\n }\n}\n\nconst UNIT_SCALE = new THREE.Vector3(1, 1, 1);\nconst IDENTITY4: Mat4 = identity4();\n/** Slack for `limitExceeded` so poses exactly at a limit round-trip clean. */\nconst LIMIT_EPS = 1e-9;\n\n/** Assign a fixed local matrix to an object (disables Three.js auto-update). */\nfunction setMatrix(obj: THREE.Object3D, m: Mat4): void {\n obj.matrixAutoUpdate = false;\n obj.matrix.fromArray(m);\n obj.matrixWorldNeedsUpdate = true;\n}\n"]}
|
|
@@ -374,6 +374,42 @@ function cross(a, b) {
|
|
|
374
374
|
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
+
// src/kinematics/jointResiduals.ts
|
|
378
|
+
var AXIS_INDEX = { X: 0, Y: 1, Z: 2 };
|
|
379
|
+
function decomposeJointRelative(joint, parentWorld, childWorld) {
|
|
380
|
+
const d = multiplyAll([
|
|
381
|
+
invert(joint.jointFrame0),
|
|
382
|
+
invert(parentWorld),
|
|
383
|
+
childWorld,
|
|
384
|
+
joint.jointFrame1
|
|
385
|
+
]);
|
|
386
|
+
const t = [d[12], d[13], d[14]];
|
|
387
|
+
const { orientation } = decomposeRigid(d);
|
|
388
|
+
const sign = orientation.real < 0 ? -1 : 1;
|
|
389
|
+
const w = sign * orientation.real;
|
|
390
|
+
const vx = sign * orientation.imaginary[0];
|
|
391
|
+
const vy = sign * orientation.imaginary[1];
|
|
392
|
+
const vz = sign * orientation.imaginary[2];
|
|
393
|
+
const rotationAngle = 2 * Math.atan2(Math.hypot(vx, vy, vz), w);
|
|
394
|
+
const i = AXIS_INDEX[joint.axis];
|
|
395
|
+
if (joint.type === "prismatic") {
|
|
396
|
+
const anchor = Math.hypot(i === 0 ? 0 : t[0], i === 1 ? 0 : t[1], i === 2 ? 0 : t[2]);
|
|
397
|
+
return { q: t[i], anchorError: anchor, axisError: rotationAngle };
|
|
398
|
+
}
|
|
399
|
+
if (joint.type === "fixed") {
|
|
400
|
+
return { q: 0, anchorError: Math.hypot(...t), axisError: rotationAngle };
|
|
401
|
+
}
|
|
402
|
+
const proj = i === 0 ? vx : i === 1 ? vy : vz;
|
|
403
|
+
const twistNorm = Math.hypot(w, proj);
|
|
404
|
+
const q = twistNorm > 1e-12 ? 2 * Math.atan2(proj, w) : 0;
|
|
405
|
+
const swing = 2 * Math.atan2(Math.sqrt(Math.max(0, 1 - twistNorm * twistNorm)), twistNorm);
|
|
406
|
+
return { q, anchorError: Math.hypot(...t), axisError: swing };
|
|
407
|
+
}
|
|
408
|
+
function nearestAngleBranch(q, previous) {
|
|
409
|
+
const TWO_PI = 2 * Math.PI;
|
|
410
|
+
return q + TWO_PI * Math.round((previous - q) / TWO_PI);
|
|
411
|
+
}
|
|
412
|
+
|
|
377
413
|
// src/kinematics/sampling.ts
|
|
378
414
|
function interpolate(channel, t) {
|
|
379
415
|
const { times, values } = channel;
|
|
@@ -401,6 +437,6 @@ function channelFromSamples(samples) {
|
|
|
401
437
|
return { times, values };
|
|
402
438
|
}
|
|
403
439
|
|
|
404
|
-
export { AssetPath, DEG2RAD, Quat, RAD2DEG, UsdMatrix, channelFromSamples, decomposeRigid, fromUsdMatrix, getTranslation, identity4, interpolate, invert, makeEuler, makeRotationFromQuat, makeRotationX, makeRotationY, makeRotationZ, makeScale, makeTranslation, multiply, multiplyAll, toUsdMatrix };
|
|
405
|
-
//# sourceMappingURL=chunk-
|
|
406
|
-
//# sourceMappingURL=chunk-
|
|
440
|
+
export { AssetPath, DEG2RAD, Quat, RAD2DEG, UsdMatrix, channelFromSamples, decomposeJointRelative, decomposeRigid, fromUsdMatrix, getTranslation, identity4, interpolate, invert, makeEuler, makeRotationFromQuat, makeRotationX, makeRotationY, makeRotationZ, makeScale, makeTranslation, multiply, multiplyAll, nearestAngleBranch, toUsdMatrix };
|
|
441
|
+
//# sourceMappingURL=chunk-LDO5FKQS.js.map
|
|
442
|
+
//# sourceMappingURL=chunk-LDO5FKQS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/parser/ast.ts","../src/kinematics/transforms.ts","../src/kinematics/jointResiduals.ts","../src/kinematics/sampling.ts"],"names":[],"mappings":"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","file":"chunk-LDO5FKQS.js","sourcesContent":["/**\n * AST and value types for the USDA (ASCII USD) format.\n *\n * The parser (`parseUsda`) produces a {@link UsdaFile}. The USD-conformant\n * runtime layer (`usd/Stage.ts` etc.) wraps this AST to expose a pxr-USD-style\n * API (`GetPrimAtPath`, `GetAttribute`, `Get`, `GetTargets`, ...).\n */\n\n// ---------------------------------------------------------------------------\n// Value types\n// ---------------------------------------------------------------------------\n\n/** Fixed-length numeric tuples, mirroring `GfVec2/3/4`. */\nexport type Vec2 = [number, number];\nexport type Vec3 = [number, number, number];\nexport type Vec4 = [number, number, number, number];\n\n/**\n * A quaternion, mirroring `GfQuatf/d/h`.\n *\n * USDA authors quats as `(w, x, y, z)` — real part first. We keep the real and\n * imaginary parts explicit so downstream code never has to guess the component\n * order (Three.js, by contrast, uses `(x, y, z, w)`).\n */\nexport class Quat {\n constructor(\n readonly real: number,\n readonly imaginary: Vec3,\n ) {}\n\n /** Components in Three.js order `[x, y, z, w]`. */\n toXYZW(): Vec4 {\n return [this.imaginary[0], this.imaginary[1], this.imaginary[2], this.real];\n }\n\n static identity(): Quat {\n return new Quat(1, [0, 0, 0]);\n }\n}\n\n/**\n * A square matrix (`GfMatrix3d`/`GfMatrix4d`), stored flat in **row-major**\n * order exactly as authored in USD (USD matrices are row-major).\n */\nexport class UsdMatrix {\n constructor(\n readonly values: number[],\n readonly dim: 3 | 4,\n ) {}\n\n static identity4(): UsdMatrix {\n // biome-ignore format: keep matrix layout readable\n return new UsdMatrix([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ], 4);\n }\n}\n\n/** An asset reference (`SdfAssetPath`), e.g. `@./meshes/link0.usd@`. */\nexport class AssetPath {\n constructor(readonly path: string) {}\n}\n\n/**\n * A namespace path into a stage (`SdfPath`), e.g. `/World/robot/link0` or a\n * property path `/World/robot.xformOp:translate`. Stored as the authored\n * string; relationship/connection resolution happens in the runtime layer.\n */\nexport type SdfPath = string;\n\n/** A reference / payload composition arc as authored (resolved in M8). */\nexport type CompositionArc = {\n assetPath?: AssetPath;\n primPath?: SdfPath;\n};\n\n/** Any value an attribute or metadatum can hold. */\nexport type UsdValue =\n | number\n | boolean\n | string\n | null\n | Vec2\n | Vec3\n | Vec4\n | Quat\n | UsdMatrix\n | AssetPath\n | SdfPath\n | CompositionArc\n | UsdValue[]\n | UsdDictionary;\n\n/** A nested metadata dictionary (`customData`, `assetInfo`, ...). */\nexport type UsdDictionary = { [key: string]: UsdValue };\n\n// ---------------------------------------------------------------------------\n// AST nodes\n// ---------------------------------------------------------------------------\n\nexport type Specifier = \"def\" | \"over\" | \"class\";\n\nexport type Variability = \"varying\" | \"uniform\";\n\n/** List-editing qualifier on relationships and list-op metadata. */\nexport type ListOp = \"explicit\" | \"prepend\" | \"append\" | \"add\" | \"delete\" | \"reorder\";\n\nexport type MetadataMap = { [key: string]: UsdValue };\n\n/** A parsed `.usda` layer. */\nexport type UsdaFile = {\n /** Version from the `#usda X.Y` magic line. */\n version: string;\n /** Layer-level metadata (`defaultPrim`, `upAxis`, `metersPerUnit`, ...). */\n metadata: MetadataMap;\n /** Root prims, in authored order. */\n prims: PrimSpec[];\n};\n\nexport type PrimSpec = {\n specifier: Specifier;\n /** Schema type, e.g. `Xform`, `Mesh`, `PhysicsRevoluteJoint`. Empty if typeless. */\n typeName: string;\n name: string;\n metadata: MetadataMap;\n properties: PropertySpec[];\n children: PrimSpec[];\n /** Authored variant sets (`variantSet \"name\" = { ... }`), if any. */\n variantSets?: VariantSetMap;\n /** 1-based source line of the prim declaration (for diagnostics). */\n line: number;\n};\n\n/** The opinions a single variant contributes when selected. */\nexport type VariantContent = {\n properties: PropertySpec[];\n children: PrimSpec[];\n /**\n * Metadata authored on the variant itself. Composition arcs live here — the\n * common \"this variant references another layer\" pattern in Isaac Sim assets.\n */\n metadata: MetadataMap;\n};\n\n/** `variantSetName → variantName → content`. */\nexport type VariantSetMap = { [setName: string]: { [variantName: string]: VariantContent } };\n\nexport type PropertySpec = AttributeSpec | RelationshipSpec;\n\nexport type AttributeSpec = {\n kind: \"attribute\";\n name: string;\n /** USD type name without the `[]` suffix, e.g. `float3`, `token`, `quatf`. */\n typeName: string;\n isArray: boolean;\n variability: Variability;\n custom: boolean;\n /** Default (time-independent) value, if authored. */\n value?: UsdValue;\n /** Time samples keyed by time code, if authored as `{ t: v, ... }`. */\n timeSamples?: Map<number, UsdValue>;\n /** Connection target paths (`attr.connect = <path>`), if authored. */\n connections?: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n\nexport type RelationshipSpec = {\n kind: \"relationship\";\n name: string;\n custom: boolean;\n listOp: ListOp;\n /** Target paths; empty when authored as `None`. */\n targets: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n","/**\n * Minimal 4×4 matrix math, Three.js-independent.\n *\n * ## Convention\n *\n * A {@link Mat4} is a flat 16-element array in **column-major** order — the\n * exact layout of `THREE.Matrix4.elements`, so a `Mat4` can be handed to\n * `matrix4.fromArray(m)` with no transposition. Transforms use the\n * column-vector convention `v' = M · v`; the translation lives at indices\n * `[12, 13, 14]`.\n *\n * Conveniently, OpenUSD stores `GfMatrix4d` **row-major** with a row-vector\n * convention (`v' = v · M`). The two raw 16-number arrays for the *same*\n * transform are therefore bit-identical, which is why {@link fromUsdMatrix} is\n * a plain copy. See the module test for a worked example.\n */\n\nimport { Quat, UsdMatrix, type Vec3 } from \"../parser/ast.js\";\n\n/** Column-major 4×4 matrix (Three.js `elements` layout). */\nexport type Mat4 = number[];\n\nexport const DEG2RAD = Math.PI / 180;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport function identity4(): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Matrix product `a · b` (column-major), matching `THREE.Matrix4.multiplyMatrices`. */\nexport function multiply(a: Mat4, b: Mat4): Mat4 {\n const a11 = a[0]!,\n a21 = a[1]!,\n a31 = a[2]!,\n a41 = a[3]!;\n const a12 = a[4]!,\n a22 = a[5]!,\n a32 = a[6]!,\n a42 = a[7]!;\n const a13 = a[8]!,\n a23 = a[9]!,\n a33 = a[10]!,\n a43 = a[11]!;\n const a14 = a[12]!,\n a24 = a[13]!,\n a34 = a[14]!,\n a44 = a[15]!;\n\n const b11 = b[0]!,\n b21 = b[1]!,\n b31 = b[2]!,\n b41 = b[3]!;\n const b12 = b[4]!,\n b22 = b[5]!,\n b32 = b[6]!,\n b42 = b[7]!;\n const b13 = b[8]!,\n b23 = b[9]!,\n b33 = b[10]!,\n b43 = b[11]!;\n const b14 = b[12]!,\n b24 = b[13]!,\n b34 = b[14]!,\n b44 = b[15]!;\n\n return [\n a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41,\n a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41,\n a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41,\n a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41,\n\n a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42,\n a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42,\n a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42,\n a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42,\n\n a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43,\n a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43,\n a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43,\n a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43,\n\n a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44,\n a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44,\n a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44,\n a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44,\n ];\n}\n\n/** Product of a list of matrices, left-to-right (`m[0] · m[1] · …`). */\nexport function multiplyAll(matrices: Mat4[]): Mat4 {\n let m = identity4();\n for (const next of matrices) m = multiply(m, next);\n return m;\n}\n\n/** Inverse (column-major), matching `THREE.Matrix4.invert`. Throws if singular. */\nexport function invert(m: Mat4): Mat4 {\n const n11 = m[0]!,\n n21 = m[1]!,\n n31 = m[2]!,\n n41 = m[3]!;\n const n12 = m[4]!,\n n22 = m[5]!,\n n32 = m[6]!,\n n42 = m[7]!;\n const n13 = m[8]!,\n n23 = m[9]!,\n n33 = m[10]!,\n n43 = m[11]!;\n const n14 = m[12]!,\n n24 = m[13]!,\n n34 = m[14]!,\n n44 = m[15]!;\n\n const t11 =\n n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44;\n const t12 =\n n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44;\n const t13 =\n n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44;\n const t14 =\n n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0) throw new Error(\"cannot invert a singular matrix\");\n const idet = 1 / det;\n\n return [\n t11 * idet,\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n idet,\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n idet,\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n idet,\n\n t12 * idet,\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n idet,\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n idet,\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n idet,\n\n t13 * idet,\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n idet,\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n idet,\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n idet,\n\n t14 * idet,\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n idet,\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n idet,\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n idet,\n ];\n}\n\nexport function makeTranslation([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n x, y, z, 1,\n ];\n}\n\nexport function makeScale([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationX(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, c, s, 0,\n 0, -s, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationY(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, 0, -s, 0,\n 0, 1, 0, 0,\n s, 0, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationZ(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, s, 0, 0,\n -s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Rotation matrix from a (normalized) quaternion, matching `THREE.Matrix4.compose`. */\nexport function makeRotationFromQuat(q: Quat): Mat4 {\n let x = q.imaginary[0];\n let y = q.imaginary[1];\n let z = q.imaginary[2];\n let w = q.real;\n const len = Math.hypot(x, y, z, w);\n if (len > 0 && Math.abs(len - 1) > 1e-9) {\n x /= len;\n y /= len;\n z /= len;\n w /= len;\n }\n\n const x2 = x + x,\n y2 = y + y,\n z2 = z + z;\n const xx = x * x2,\n xy = x * y2,\n xz = x * z2;\n const yy = y * y2,\n yz = y * z2,\n zz = z * z2;\n const wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n // biome-ignore format: matrix layout\n return [\n 1 - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1 - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1 - (xx + yy), 0,\n 0, 0, 0, 1,\n ];\n}\n\n/**\n * Euler rotation matrix for the given axis order (e.g. `\"XYZ\"`), with per-axis\n * angles in **radians** indexed by axis (`angles[0]`=X, `[1]`=Y, `[2]`=Z).\n *\n * Follows OpenUSD's `rotate<ORDER>` semantics: the first listed axis is applied\n * first to the geometry, so `\"XYZ\"` yields `Rz · Ry · Rx` in column-vector form.\n */\nexport function makeEuler(angles: Vec3, order: string): Mat4 {\n const perAxis: Record<string, Mat4> = {\n X: makeRotationX(angles[0]),\n Y: makeRotationY(angles[1]),\n Z: makeRotationZ(angles[2]),\n };\n let m = identity4();\n for (let i = order.length - 1; i >= 0; i--) {\n const axis = perAxis[order[i]!];\n if (!axis)\n throw new Error(\n `invalid euler axis ${JSON.stringify(order[i])} in order ${JSON.stringify(order)}`,\n );\n m = multiply(m, axis);\n }\n return m;\n}\n\n/**\n * Copy a USD matrix into a {@link Mat4}. USD's row-major storage is identical to\n * Three.js column-major elements for the same transform (see module docs), so\n * this is a straight copy after a dimension check.\n */\nexport function fromUsdMatrix(m: UsdMatrix): Mat4 {\n if (m.dim !== 4 || m.values.length !== 16) {\n throw new Error(`expected a 4x4 matrix but got dim=${m.dim}, length=${m.values.length}`);\n }\n return [...m.values];\n}\n\n/** Extract the translation component `[x, y, z]` from a {@link Mat4}. */\nexport function getTranslation(m: Mat4): Vec3 {\n return [m[12]!, m[13]!, m[14]!];\n}\n\n/** Copy a {@link Mat4} into a USD `matrix4d` — same flat layout (see module docs). */\nexport function toUsdMatrix(m: Mat4): UsdMatrix {\n if (m.length !== 16) {\n throw new Error(`expected 16 matrix elements but got ${m.length}`);\n }\n return new UsdMatrix([...m], 4);\n}\n\n/**\n * Decompose a rigid transform into translation + orientation (M13 export).\n *\n * The rotation basis is orthonormalized (Gram-Schmidt, right-handed) before\n * quaternion extraction; `rigid` reports whether the input already was rigid\n * within tolerance, so callers can warn that scale/shear/reflection was\n * discarded.\n */\nexport function decomposeRigid(m: Mat4): { position: Vec3; orientation: Quat; rigid: boolean } {\n const position: Vec3 = [m[12]!, m[13]!, m[14]!];\n\n // Rotation-block basis columns.\n const b0: Vec3 = [m[0]!, m[1]!, m[2]!];\n const b1: Vec3 = [m[4]!, m[5]!, m[6]!];\n const b2: Vec3 = [m[8]!, m[9]!, m[10]!];\n\n const EPS = 1e-6;\n const rigid =\n Math.abs(norm(b0) - 1) < EPS &&\n Math.abs(norm(b1) - 1) < EPS &&\n Math.abs(norm(b2) - 1) < EPS &&\n Math.abs(dot(b0, b1)) < EPS &&\n Math.abs(dot(b1, b2)) < EPS &&\n Math.abs(dot(b0, b2)) < EPS &&\n dot(cross(b0, b1), b2) > 0; // right-handed (no reflection)\n\n const c0 = normalizeVec(b0);\n const c1 = normalizeVec(subVec(b1, scaleVec(c0, dot(c0, b1))));\n const c2 = cross(c0, c1);\n\n // Row-major rotation entries from the orthonormal columns.\n const r11 = c0[0],\n r12 = c1[0],\n r13 = c2[0];\n const r21 = c0[1],\n r22 = c1[1],\n r23 = c2[1];\n const r31 = c0[2],\n r32 = c1[2],\n r33 = c2[2];\n\n // Matrix → quaternion (Shepperd's method, as in THREE.Quaternion.setFromRotationMatrix).\n const trace = r11 + r22 + r33;\n let w: number;\n let x: number;\n let y: number;\n let z: number;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n w = 0.25 / s;\n x = (r32 - r23) * s;\n y = (r13 - r31) * s;\n z = (r21 - r12) * s;\n } else if (r11 > r22 && r11 > r33) {\n const s = 2 * Math.sqrt(1 + r11 - r22 - r33);\n w = (r32 - r23) / s;\n x = 0.25 * s;\n y = (r12 + r21) / s;\n z = (r13 + r31) / s;\n } else if (r22 > r33) {\n const s = 2 * Math.sqrt(1 + r22 - r11 - r33);\n w = (r13 - r31) / s;\n x = (r12 + r21) / s;\n y = 0.25 * s;\n z = (r23 + r32) / s;\n } else {\n const s = 2 * Math.sqrt(1 + r33 - r11 - r22);\n w = (r21 - r12) / s;\n x = (r13 + r31) / s;\n y = (r23 + r32) / s;\n z = 0.25 * s;\n }\n\n return { position, orientation: new Quat(w, [x, y, z]), rigid };\n}\n\n// --- small Vec3 helpers for decomposeRigid ---------------------------------\n\nfunction dot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction norm(v: Vec3): number {\n return Math.hypot(v[0], v[1], v[2]);\n}\n\nfunction subVec(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction scaleVec(v: Vec3, s: number): Vec3 {\n return [v[0] * s, v[1] * s, v[2] * s];\n}\n\nfunction normalizeVec(v: Vec3): Vec3 {\n const n = norm(v);\n return n > 0 ? scaleVec(v, 1 / n) : [1, 0, 0];\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n","/**\n * Closed-form decomposition of a joint's observed parent→child transform\n * against its ideal single-DOF model (baked-playback diagnostics, M23).\n *\n * A UsdPhysics joint constrains child body1 to parent body0 through its two\n * authored frames: `inv(Wp) · Wc = F0 · M(q) · inv(F1)`, where `M(q)` rotates\n * about the joint axis (revolute / continuous), slides along it (prismatic),\n * or is identity (fixed). Observed world transforms therefore yield\n *\n * D = inv(F0) · inv(Wp) · Wc · F1\n *\n * which equals `M(q)` exactly for a constraint-consistent pose. This module\n * extracts `q` from `D` and reports what remains as residuals: translation at\n * the joint anchor (`anchorError`, stage linear units) and rotation off the\n * DOF (`axisError`, radians — the swing of a swing–twist split for revolute\n * joints). Inputs must be rigid stage-space transforms, before any\n * `metersPerUnit` or up-axis normalization.\n */\n\nimport { type Mat4, decomposeRigid, invert, multiplyAll } from \"./transforms.js\";\n\n/** The slice of a joint description the decomposition needs (structurally satisfied by `JointDescription`). */\nexport type JointDofInput = {\n type: \"fixed\" | \"revolute\" | \"continuous\" | \"prismatic\";\n /** Axis token as authored (`physics:axis`). */\n axis: \"X\" | \"Y\" | \"Z\";\n /** Joint frame in the parent (body0) local space. */\n jointFrame0: Mat4;\n /** Joint frame in the child (body1) local space. */\n jointFrame1: Mat4;\n};\n\nexport type JointRelativeDecomposition = {\n /** Joint value along the DOF (radians / stage length units; `0` for fixed). */\n q: number;\n /** Translation residual at the joint anchor (stage linear units). */\n anchorError: number;\n /** Rotation residual off the DOF (radians). */\n axisError: number;\n};\n\nconst AXIS_INDEX = { X: 0, Y: 1, Z: 2 } as const;\n\n/** Decompose `inv(Wp)·Wc` against the joint's single-DOF model (see module docs). */\nexport function decomposeJointRelative(\n joint: JointDofInput,\n parentWorld: Mat4,\n childWorld: Mat4,\n): JointRelativeDecomposition {\n const d = multiplyAll([\n invert(joint.jointFrame0),\n invert(parentWorld),\n childWorld,\n joint.jointFrame1,\n ]);\n const t: [number, number, number] = [d[12]!, d[13]!, d[14]!];\n\n // Principal-branch (w ≥ 0) unit quaternion of D's rotation block.\n const { orientation } = decomposeRigid(d);\n const sign = orientation.real < 0 ? -1 : 1;\n const w = sign * orientation.real;\n const vx = sign * orientation.imaginary[0];\n const vy = sign * orientation.imaginary[1];\n const vz = sign * orientation.imaginary[2];\n const rotationAngle = 2 * Math.atan2(Math.hypot(vx, vy, vz), w);\n\n const i = AXIS_INDEX[joint.axis];\n if (joint.type === \"prismatic\") {\n const anchor = Math.hypot(i === 0 ? 0 : t[0], i === 1 ? 0 : t[1], i === 2 ? 0 : t[2]);\n return { q: t[i], anchorError: anchor, axisError: rotationAngle };\n }\n if (joint.type === \"fixed\") {\n return { q: 0, anchorError: Math.hypot(...t), axisError: rotationAngle };\n }\n\n // Revolute / continuous — swing–twist about the axis: the twist is the joint\n // value, the swing is the violation. With d normalized and w ≥ 0 the twist\n // is (w, proj·axis)/‖(w, proj)‖ and cos(swing/2) = ‖(w, proj)‖.\n const proj = i === 0 ? vx : i === 1 ? vy : vz;\n const twistNorm = Math.hypot(w, proj);\n const q = twistNorm > 1e-12 ? 2 * Math.atan2(proj, w) : 0;\n const swing = 2 * Math.atan2(Math.sqrt(Math.max(0, 1 - twistNorm * twistNorm)), twistNorm);\n return { q, anchorError: Math.hypot(...t), axisError: swing };\n}\n\n/**\n * Move `q` to the 2πk branch nearest `previous` — frame-to-frame continuity\n * past ±π for revolute/continuous joints (`opts.previous` of\n * `jointValuesFromLinkTransforms`).\n */\nexport function nearestAngleBranch(q: number, previous: number): number {\n const TWO_PI = 2 * Math.PI;\n return q + TWO_PI * Math.round((previous - q) / TWO_PI);\n}\n","/**\n * Time-sample interpolation for animated values (e.g. joint trajectories).\n *\n * USD time samples are keyed by time code. We linearly interpolate between the\n * two bracketing samples and hold the endpoints outside the authored range\n * (matching USD's held extrapolation).\n */\n\n/** A sorted time-sampled scalar channel. */\nexport type SampleChannel = {\n /** Sample times, ascending. */\n times: number[];\n /** Sample values, parallel to {@link times} (SI units). */\n values: number[];\n};\n\n/** Linearly sample `channel` at time `t` (held outside the range). */\nexport function interpolate(channel: SampleChannel, t: number): number {\n const { times, values } = channel;\n const n = times.length;\n if (n === 0) return 0;\n if (t <= times[0]!) return values[0]!;\n if (t >= times[n - 1]!) return values[n - 1]!;\n\n // Binary search for the first sample time > t.\n let lo = 0;\n let hi = n - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (times[mid]! <= t) lo = mid + 1;\n else hi = mid;\n }\n const i = lo - 1; // times[i] <= t < times[i+1]\n const t0 = times[i]!;\n const t1 = times[i + 1]!;\n const span = t1 - t0;\n const f = span > 0 ? (t - t0) / span : 0;\n return values[i]! + (values[i + 1]! - values[i]!) * f;\n}\n\n/** Build a sorted {@link SampleChannel} from `(time → value)` pairs via `map`. */\nexport function channelFromSamples(samples: Map<number, number>): SampleChannel {\n const times = [...samples.keys()].sort((a, b) => a - b);\n const values = times.map((t) => samples.get(t) ?? 0);\n return { times, values };\n}\n"]}
|
package/dist/core.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { U as UsdaFile, b as Vec3, V as Vec2, M as Mat4, L as LinkDescription, S as Stage, R as RobotDescription, P as Prim, x as UsdValue, J as JointType, A as Axis, s as SdfPath, d as LinkInertialDescription } from './buildKinematicTree-
|
|
2
|
-
export { e as AssetPath, f as Attribute, g as AttributeSpec, B as BuildTreeOptions, C as CompositionArc, D as DEFAULT_METERS_PER_UNIT, h as DEG2RAD, a as JointDescription, c as JointDriveDescription, i as KinematicNode, K as KinematicTree, j as Layer, k as ListOp, l as MetadataMap, m as PrimSpec, n as PropertySpec, Q as Quat, o as RAD2DEG, p as Relationship, q as RelationshipSpec, r as SampleChannel, t as Specifier, T as TreeEdge, u as UpAxis, v as UsdDictionary, w as UsdMatrix, y as Variability, z as Vec4, E as buildKinematicTree, F as channelFromSamples, G as decomposeRigid, H as fromUsdMatrix, I as getTranslation, N as identity4, O as interpolate, W as invert, X as makeEuler, Y as makeRotationFromQuat, Z as makeRotationX, _ as makeRotationY, $ as makeRotationZ, a0 as makeScale, a1 as makeTranslation, a2 as multiply, a3 as multiplyAll, a4 as toUsdMatrix } from './buildKinematicTree-
|
|
1
|
+
import { U as UsdaFile, b as Vec3, V as Vec2, M as Mat4, L as LinkDescription, S as Stage, R as RobotDescription, P as Prim, x as UsdValue, J as JointType, A as Axis, s as SdfPath, d as LinkInertialDescription } from './buildKinematicTree-BCySuZZn.js';
|
|
2
|
+
export { e as AssetPath, f as Attribute, g as AttributeSpec, B as BuildTreeOptions, C as CompositionArc, D as DEFAULT_METERS_PER_UNIT, h as DEG2RAD, a as JointDescription, c as JointDriveDescription, i as KinematicNode, K as KinematicTree, j as Layer, k as ListOp, l as MetadataMap, m as PrimSpec, n as PropertySpec, Q as Quat, o as RAD2DEG, p as Relationship, q as RelationshipSpec, r as SampleChannel, t as Specifier, T as TreeEdge, u as UpAxis, v as UsdDictionary, w as UsdMatrix, y as Variability, z as Vec4, E as buildKinematicTree, F as channelFromSamples, G as decomposeRigid, H as fromUsdMatrix, I as getTranslation, N as identity4, O as interpolate, W as invert, X as makeEuler, Y as makeRotationFromQuat, Z as makeRotationX, _ as makeRotationY, $ as makeRotationZ, a0 as makeScale, a1 as makeTranslation, a2 as multiply, a3 as multiplyAll, a4 as toUsdMatrix } from './buildKinematicTree-BCySuZZn.js';
|
|
3
3
|
import { A as AssetResolver } from './bytes-MOJ2oN-u.js';
|
|
4
4
|
export { B as BinarySource, D as DefaultAssetResolver, U as UsdSource, c as createMemoryResolver, j as joinPosix, t as toBytes } from './bytes-MOJ2oN-u.js';
|
|
5
5
|
|
|
@@ -247,6 +247,86 @@ declare function composeLayer(text: string, baseUrl: string, resolver: AssetReso
|
|
|
247
247
|
/** Compose an already-parsed layer (used by the binary-crate path too). */
|
|
248
248
|
declare function composeFile(file: UsdaFile, baseUrl: string, resolver: AssetResolver, options?: ComposeOptions, stack?: ReadonlySet<string>, cache?: LayerCache): Promise<UsdaFile>;
|
|
249
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Minimal `.mdl` **declaration** parser (M20) — reads material signatures, not
|
|
252
|
+
* the MDL language.
|
|
253
|
+
*
|
|
254
|
+
* USD stores only the *overridden* inputs of an MDL shader; every other
|
|
255
|
+
* parameter value lives in the referenced `.mdl` module. Two declaration
|
|
256
|
+
* shapes carry the values we can recover without executing MDL:
|
|
257
|
+
*
|
|
258
|
+
* - parameter defaults —
|
|
259
|
+
* `export material OmniPBR(color diffuse_color_constant = color(0.2), …)`
|
|
260
|
+
* - wrapper materials (the usual shape of per-asset `Materials/*.mdl`) —
|
|
261
|
+
* `export material Steel(*) = OmniPBR::OmniPBR(diffuse_color_constant: color(…), …);`
|
|
262
|
+
*
|
|
263
|
+
* Only literal values are extracted: numbers, bools, strings, `color(…)` /
|
|
264
|
+
* `floatN(…)` vectors, and `texture_2d("path", ::tex::gamma_*)`. Defaults that
|
|
265
|
+
* are expressions, function calls, or cross-module references are skipped, as
|
|
266
|
+
* are comments and `[[ … ]]` annotation blocks. Executing MDL stays out of
|
|
267
|
+
* scope — this is a fidelity aid, not an interpreter.
|
|
268
|
+
*/
|
|
269
|
+
/** A literal value read from an MDL declaration. */
|
|
270
|
+
type MdlValue = number | boolean | string | number[] | MdlTextureValue;
|
|
271
|
+
/** A `texture_2d("path", ::tex::gamma_*)` literal. */
|
|
272
|
+
interface MdlTextureValue {
|
|
273
|
+
/** Path as written in the module — relative paths anchor at the `.mdl` file. */
|
|
274
|
+
assetPath: string;
|
|
275
|
+
/** From the gamma argument: `gamma_srgb` → `"sRGB"`, `gamma_linear` → `"raw"`. */
|
|
276
|
+
sourceColorSpace?: "sRGB" | "raw";
|
|
277
|
+
}
|
|
278
|
+
/** Narrow an {@link MdlValue} to a texture literal. */
|
|
279
|
+
declare function isMdlTexture(value: MdlValue | undefined): value is MdlTextureValue;
|
|
280
|
+
/** One `export material` declaration. */
|
|
281
|
+
interface MdlMaterialDecl {
|
|
282
|
+
name: string;
|
|
283
|
+
/** Literal defaults from the declaration's own parameter list (empty for `(*)`). */
|
|
284
|
+
defaults: Map<string, MdlValue>;
|
|
285
|
+
/** Base material of the wrapper form `X(…) = Base(args…)` (last `::` segment). */
|
|
286
|
+
base?: string;
|
|
287
|
+
/** Literal named arguments of the wrapper's base call. */
|
|
288
|
+
args: Map<string, MdlValue>;
|
|
289
|
+
}
|
|
290
|
+
/** The exported material declarations of one `.mdl` file. */
|
|
291
|
+
interface MdlModule {
|
|
292
|
+
materials: Map<string, MdlMaterialDecl>;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Look up the parsed module for an authored `info:mdl:sourceAsset` path.
|
|
296
|
+
* Returning `undefined` means "module unavailable" — resolution then falls
|
|
297
|
+
* back to authored USD inputs alone.
|
|
298
|
+
*/
|
|
299
|
+
type MdlModuleProvider = (assetPath: string) => MdlModule | undefined;
|
|
300
|
+
/** Parse the `export material` declarations of an `.mdl` module's source text. */
|
|
301
|
+
declare function parseMdl(text: string): MdlModule;
|
|
302
|
+
/**
|
|
303
|
+
* Evaluate one MDL literal expression, or `undefined` for anything beyond the
|
|
304
|
+
* supported literal subset (identifiers, arithmetic, function calls, …).
|
|
305
|
+
*/
|
|
306
|
+
declare function parseMdlLiteral(src: string): MdlValue | undefined;
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Prefetches and parses the `.mdl` modules referenced by a stage's MDL shaders.
|
|
310
|
+
*
|
|
311
|
+
* Shaders authored from MDL (`info:mdl:sourceAsset`) often carry **no** USD
|
|
312
|
+
* inputs at all — their look lives in a wrapper module shipped next to the
|
|
313
|
+
* asset (`export material X(*) = OmniPBR(...)`). Fetching those modules up
|
|
314
|
+
* front lets {@link resolveBoundMaterial} read the wrapper arguments and
|
|
315
|
+
* declaration defaults. Modules that can't be fetched (typically the
|
|
316
|
+
* Omniverse-core `OmniPBR.mdl`, which lives in the DCC's search path, not next
|
|
317
|
+
* to the asset) are skipped silently — resolution then falls back to authored
|
|
318
|
+
* inputs plus the name-based family mapping.
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
/** Authored `info:mdl:sourceAsset` paths of every MDL shader on the stage. */
|
|
322
|
+
declare function collectMdlAssetPaths(stage: Stage): string[];
|
|
323
|
+
/**
|
|
324
|
+
* Fetch + parse each referenced `.mdl` module through the resolver, keyed by
|
|
325
|
+
* the **authored** asset path. Returns `undefined` when the stage references
|
|
326
|
+
* no MDL modules or none could be fetched.
|
|
327
|
+
*/
|
|
328
|
+
declare function loadMdlModules(stage: Stage, resolver: AssetResolver, baseUrl: string): Promise<MdlModuleProvider | undefined>;
|
|
329
|
+
|
|
250
330
|
/**
|
|
251
331
|
* Resolves a prim's `xformOpOrder` into a single local transform matrix.
|
|
252
332
|
*
|
|
@@ -370,12 +450,45 @@ declare class CrateReader {
|
|
|
370
450
|
private readSpecs;
|
|
371
451
|
/** Decode a `ValueRep` into a {@link UsdValue} (or `undefined` if unsupported). */
|
|
372
452
|
getValue(rep: bigint): UsdValue | undefined;
|
|
453
|
+
/**
|
|
454
|
+
* Decode a `timeSamples` field (a {@link CrateType.TimeSamples} rep) into
|
|
455
|
+
* parallel times/values arrays; `undefined` if `rep` is some other type.
|
|
456
|
+
*
|
|
457
|
+
* Layout (pxr `crateFile.cpp`, `Write(TimeSamples)`): an `int64` offset —
|
|
458
|
+
* relative to its own position — jumps over the recursively-written times
|
|
459
|
+
* data to the times `ValueRep` (a `DoubleVector`); a second such offset
|
|
460
|
+
* jumps over the samples' data to `[u64 count][count × ValueRep]`. Sample
|
|
461
|
+
* reps decode through {@link getValue}, so every scalar/array type works.
|
|
462
|
+
*/
|
|
463
|
+
getTimeSamples(rep: bigint): {
|
|
464
|
+
times: number[];
|
|
465
|
+
values: (UsdValue | undefined)[];
|
|
466
|
+
} | undefined;
|
|
373
467
|
private readInlined;
|
|
374
468
|
private readScalar;
|
|
469
|
+
/** Array headers store a u32 count before crate 0.7.0, a u64 from 0.7.0 on. */
|
|
470
|
+
private arrayHeader;
|
|
375
471
|
private readArray;
|
|
472
|
+
/**
|
|
473
|
+
* Decode an array whose rep has the compressed bit. Int arrays are
|
|
474
|
+
* integer-compressed; half/float/double arrays (crate 0.6.0+) carry a code
|
|
475
|
+
* byte — `'i'` when every value is integral, `'t'` for a lookup table +
|
|
476
|
+
* compressed indexes. Arrays under {@link MIN_COMPRESSED_ARRAY_SIZE} elements
|
|
477
|
+
* are stored raw even when the bit is set (mirrors pxr's writer).
|
|
478
|
+
*/
|
|
479
|
+
private readCompressedArray;
|
|
376
480
|
private readFloat32s;
|
|
377
481
|
private readFloat64s;
|
|
378
|
-
private
|
|
482
|
+
private readHalfs;
|
|
483
|
+
private readInt32s;
|
|
484
|
+
/** Read `count` fixed-size `n`-tuples (vec2/3/4 of the given element kind). */
|
|
485
|
+
private readTupleArray;
|
|
486
|
+
/**
|
|
487
|
+
* Read a `VtDictionary`: `[u64 count]`, then per entry a string index (key)
|
|
488
|
+
* followed by a recursive VtValue — an `int64` offset (relative to its own
|
|
489
|
+
* position) over the value's data to an 8-byte `ValueRep`.
|
|
490
|
+
*/
|
|
491
|
+
private readDictionary;
|
|
379
492
|
/**
|
|
380
493
|
* Read an `SdfVariantSelectionMap`: `[u64 count]` then `count` pairs of
|
|
381
494
|
* string indexes (`variantSetName → variantName`). Surfaces as a dictionary
|
|
@@ -402,6 +515,52 @@ declare class CrateReader {
|
|
|
402
515
|
|
|
403
516
|
declare function crateToUsdaFile(crate: CrateReader): UsdaFile;
|
|
404
517
|
|
|
518
|
+
/**
|
|
519
|
+
* Closed-form decomposition of a joint's observed parent→child transform
|
|
520
|
+
* against its ideal single-DOF model (baked-playback diagnostics, M23).
|
|
521
|
+
*
|
|
522
|
+
* A UsdPhysics joint constrains child body1 to parent body0 through its two
|
|
523
|
+
* authored frames: `inv(Wp) · Wc = F0 · M(q) · inv(F1)`, where `M(q)` rotates
|
|
524
|
+
* about the joint axis (revolute / continuous), slides along it (prismatic),
|
|
525
|
+
* or is identity (fixed). Observed world transforms therefore yield
|
|
526
|
+
*
|
|
527
|
+
* D = inv(F0) · inv(Wp) · Wc · F1
|
|
528
|
+
*
|
|
529
|
+
* which equals `M(q)` exactly for a constraint-consistent pose. This module
|
|
530
|
+
* extracts `q` from `D` and reports what remains as residuals: translation at
|
|
531
|
+
* the joint anchor (`anchorError`, stage linear units) and rotation off the
|
|
532
|
+
* DOF (`axisError`, radians — the swing of a swing–twist split for revolute
|
|
533
|
+
* joints). Inputs must be rigid stage-space transforms, before any
|
|
534
|
+
* `metersPerUnit` or up-axis normalization.
|
|
535
|
+
*/
|
|
536
|
+
|
|
537
|
+
/** The slice of a joint description the decomposition needs (structurally satisfied by `JointDescription`). */
|
|
538
|
+
type JointDofInput = {
|
|
539
|
+
type: "fixed" | "revolute" | "continuous" | "prismatic";
|
|
540
|
+
/** Axis token as authored (`physics:axis`). */
|
|
541
|
+
axis: "X" | "Y" | "Z";
|
|
542
|
+
/** Joint frame in the parent (body0) local space. */
|
|
543
|
+
jointFrame0: Mat4;
|
|
544
|
+
/** Joint frame in the child (body1) local space. */
|
|
545
|
+
jointFrame1: Mat4;
|
|
546
|
+
};
|
|
547
|
+
type JointRelativeDecomposition = {
|
|
548
|
+
/** Joint value along the DOF (radians / stage length units; `0` for fixed). */
|
|
549
|
+
q: number;
|
|
550
|
+
/** Translation residual at the joint anchor (stage linear units). */
|
|
551
|
+
anchorError: number;
|
|
552
|
+
/** Rotation residual off the DOF (radians). */
|
|
553
|
+
axisError: number;
|
|
554
|
+
};
|
|
555
|
+
/** Decompose `inv(Wp)·Wc` against the joint's single-DOF model (see module docs). */
|
|
556
|
+
declare function decomposeJointRelative(joint: JointDofInput, parentWorld: Mat4, childWorld: Mat4): JointRelativeDecomposition;
|
|
557
|
+
/**
|
|
558
|
+
* Move `q` to the 2πk branch nearest `previous` — frame-to-frame continuity
|
|
559
|
+
* past ±π for revolute/continuous joints (`opts.previous` of
|
|
560
|
+
* `jointValuesFromLinkTransforms`).
|
|
561
|
+
*/
|
|
562
|
+
declare function nearestAngleBranch(q: number, previous: number): number;
|
|
563
|
+
|
|
405
564
|
/**
|
|
406
565
|
* Extracts a {@link RobotDescription} from a USD {@link Stage}.
|
|
407
566
|
*
|
|
@@ -448,7 +607,16 @@ declare function isScope(prim: Prim): boolean;
|
|
|
448
607
|
declare function isMesh(prim: Prim): boolean;
|
|
449
608
|
/** True for a `Cube` / `Sphere` / `Cylinder` / `Capsule` / `Cone` prim. */
|
|
450
609
|
declare function isSolidGprim(prim: Prim): boolean;
|
|
451
|
-
/** True for
|
|
610
|
+
/** True for a `Points` (point cloud) prim. */
|
|
611
|
+
declare function isPoints(prim: Prim): boolean;
|
|
612
|
+
/** True for a `BasisCurves` (linear / cubic curve batch) prim. */
|
|
613
|
+
declare function isBasisCurves(prim: Prim): boolean;
|
|
614
|
+
/** True for a gprim schema the runtime knows about but cannot render (yet). */
|
|
615
|
+
declare function isUnsupportedGprim(prim: Prim): boolean;
|
|
616
|
+
/**
|
|
617
|
+
* True for any gprim the runtime can render: a `Mesh`, a parametric solid,
|
|
618
|
+
* a `Points` cloud, or a `BasisCurves` batch.
|
|
619
|
+
*/
|
|
452
620
|
declare function isRenderableGprim(prim: Prim): boolean;
|
|
453
621
|
/** Depth-first iterator over all descendant prims (excluding `prim` itself). */
|
|
454
622
|
declare function iterDescendants(prim: Prim): Generator<Prim>;
|
|
@@ -507,4 +675,4 @@ declare function getJointStatePosition(prim: Prim, kind: "angular" | "linear"):
|
|
|
507
675
|
/** Read `UsdPhysicsMassAPI` properties, or `undefined` when none are authored (M16). */
|
|
508
676
|
declare function getMassProperties(prim: Prim): LinkInertialDescription | undefined;
|
|
509
677
|
|
|
510
|
-
export { ARTICULATION_ROOT_API, AssetResolver, Axis, COLLISION_API, type CollisionApproximation, type ComposeOptions, CrateReader, type ExportMaterial, type ExportMesh, type ExportPhysicsMaterial, type ExportRobotOptions, type ExtractOptions, JointType, LinkDescription, LinkInertialDescription, MASS_API, MESH_COLLISION_API, Mat4, PACKAGE_NAME, PHYSICS_MATERIAL_API, ParseError, Prim, RIGID_BODY_API, type ResolvedXform, RobotDescription, type RobotGeometryProvider, SdfPath, Stage, type TextureChannel, TokenizeError, UsdValue, UsdaFile, type UsdzPackage, VERSION, type ValidateRobotOptions, type ValidationIssue, type ValidationSeverity, Vec2, Vec3, composeFile, composeLayer, computeLocalTransform, computeWorldTransform, crateToUsdaFile, driveKindFor, exportRobotUsda, extractRobotDescription, gatherGprimDescendants, gatherMeshDescendants, getJointAxis, getJointBodies, getJointDrive, getJointLimits, getJointLocalFrame, getJointStatePosition, getJointType, getMassProperties, hasArticulationRootAPI, hasCollisionAPI, hasRigidBodyAPI, isMesh, isRenderableGprim, isScope, isSolidGprim, isXform, isZip, iterDescendants, jointValueFromSI, jointValueToSI, normalizeJointLimits, openUsdz, parseOpType, parseUsda, refineJointType, serializeUsda, stageGeometryProvider, tokenize, validateRobotDescription, writeUsdz };
|
|
678
|
+
export { ARTICULATION_ROOT_API, AssetResolver, Axis, COLLISION_API, type CollisionApproximation, type ComposeOptions, CrateReader, type ExportMaterial, type ExportMesh, type ExportPhysicsMaterial, type ExportRobotOptions, type ExtractOptions, type JointDofInput, type JointRelativeDecomposition, JointType, LinkDescription, LinkInertialDescription, MASS_API, MESH_COLLISION_API, Mat4, type MdlMaterialDecl, type MdlModule, type MdlModuleProvider, type MdlTextureValue, type MdlValue, PACKAGE_NAME, PHYSICS_MATERIAL_API, ParseError, Prim, RIGID_BODY_API, type ResolvedXform, RobotDescription, type RobotGeometryProvider, SdfPath, Stage, type TextureChannel, TokenizeError, UsdValue, UsdaFile, type UsdzPackage, VERSION, type ValidateRobotOptions, type ValidationIssue, type ValidationSeverity, Vec2, Vec3, collectMdlAssetPaths, composeFile, composeLayer, computeLocalTransform, computeWorldTransform, crateToUsdaFile, decomposeJointRelative, driveKindFor, exportRobotUsda, extractRobotDescription, gatherGprimDescendants, gatherMeshDescendants, getJointAxis, getJointBodies, getJointDrive, getJointLimits, getJointLocalFrame, getJointStatePosition, getJointType, getMassProperties, hasArticulationRootAPI, hasCollisionAPI, hasRigidBodyAPI, isBasisCurves, isMdlTexture, isMesh, isPoints, isRenderableGprim, isScope, isSolidGprim, isUnsupportedGprim, isXform, isZip, iterDescendants, jointValueFromSI, jointValueToSI, loadMdlModules, nearestAngleBranch, normalizeJointLimits, openUsdz, parseMdl, parseMdlLiteral, parseOpType, parseUsda, refineJointType, serializeUsda, stageGeometryProvider, tokenize, validateRobotDescription, writeUsdz };
|
package/dist/core.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { PACKAGE_NAME, VERSION, exportRobotUsda, stageGeometryProvider, validateRobotDescription, writeUsdz } from './chunk-
|
|
2
|
-
export { ARTICULATION_ROOT_API, Attribute, COLLISION_API, CrateReader, DEFAULT_METERS_PER_UNIT, DefaultAssetResolver, Layer, MASS_API, MESH_COLLISION_API, PHYSICS_MATERIAL_API, ParseError, Prim, RIGID_BODY_API, Relationship, Stage, TokenizeError, buildKinematicTree, composeFile, composeLayer, computeLocalTransform, computeWorldTransform, crateToUsdaFile, createMemoryResolver, driveKindFor, extractRobotDescription, gatherGprimDescendants, gatherMeshDescendants, getJointAxis, getJointBodies, getJointDrive, getJointLimits, getJointLocalFrame, getJointStatePosition, getJointType, getMassProperties, hasArticulationRootAPI, hasCollisionAPI, hasRigidBodyAPI, isMesh, isRenderableGprim, isScope, isSolidGprim, isXform, isZip, iterDescendants, joinPosix, jointValueFromSI, jointValueToSI, normalizeJointLimits, openUsdz, parseOpType, parseUsda, refineJointType, serializeUsda, toBytes, tokenize } from './chunk-
|
|
3
|
-
export { AssetPath, DEG2RAD, Quat, RAD2DEG, UsdMatrix, channelFromSamples, decomposeRigid, fromUsdMatrix, getTranslation, identity4, interpolate, invert, makeEuler, makeRotationFromQuat, makeRotationX, makeRotationY, makeRotationZ, makeScale, makeTranslation, multiply, multiplyAll, toUsdMatrix } from './chunk-
|
|
1
|
+
export { PACKAGE_NAME, VERSION, exportRobotUsda, stageGeometryProvider, validateRobotDescription, writeUsdz } from './chunk-BCRRXGNB.js';
|
|
2
|
+
export { ARTICULATION_ROOT_API, Attribute, COLLISION_API, CrateReader, DEFAULT_METERS_PER_UNIT, DefaultAssetResolver, Layer, MASS_API, MESH_COLLISION_API, PHYSICS_MATERIAL_API, ParseError, Prim, RIGID_BODY_API, Relationship, Stage, TokenizeError, buildKinematicTree, collectMdlAssetPaths, composeFile, composeLayer, computeLocalTransform, computeWorldTransform, crateToUsdaFile, createMemoryResolver, driveKindFor, extractRobotDescription, gatherGprimDescendants, gatherMeshDescendants, getJointAxis, getJointBodies, getJointDrive, getJointLimits, getJointLocalFrame, getJointStatePosition, getJointType, getMassProperties, hasArticulationRootAPI, hasCollisionAPI, hasRigidBodyAPI, isBasisCurves, isMdlTexture, isMesh, isPoints, isRenderableGprim, isScope, isSolidGprim, isUnsupportedGprim, isXform, isZip, iterDescendants, joinPosix, jointValueFromSI, jointValueToSI, loadMdlModules, normalizeJointLimits, openUsdz, parseMdl, parseMdlLiteral, parseOpType, parseUsda, refineJointType, serializeUsda, toBytes, tokenize } from './chunk-AXPMXEQC.js';
|
|
3
|
+
export { AssetPath, DEG2RAD, Quat, RAD2DEG, UsdMatrix, channelFromSamples, decomposeJointRelative, decomposeRigid, fromUsdMatrix, getTranslation, identity4, interpolate, invert, makeEuler, makeRotationFromQuat, makeRotationX, makeRotationY, makeRotationZ, makeScale, makeTranslation, multiply, multiplyAll, nearestAngleBranch, toUsdMatrix } from './chunk-LDO5FKQS.js';
|
|
4
4
|
//# sourceMappingURL=core.js.map
|
|
5
5
|
//# sourceMappingURL=core.js.map
|
package/dist/extras.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { T as ThreeUsdRobot } from './ThreeUsdRobot-
|
|
1
|
+
import { T as ThreeUsdRobot } from './ThreeUsdRobot-BxnCluuK.js';
|
|
2
2
|
import 'three';
|
|
3
|
-
import './buildKinematicTree-
|
|
3
|
+
import './buildKinematicTree-BCySuZZn.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* `three-usd-robot/extras`
|
package/dist/helpers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
-
import { T as ThreeUsdRobot, J as JointObject } from './ThreeUsdRobot-
|
|
3
|
-
import './buildKinematicTree-
|
|
2
|
+
import { T as ThreeUsdRobot, J as JointObject } from './ThreeUsdRobot-BxnCluuK.js';
|
|
3
|
+
import './buildKinematicTree-BCySuZZn.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Per-link appearance helpers: highlight (tint), material replacement, and
|
package/dist/helpers.js
CHANGED