@adobe/data 0.7.2 → 0.7.4

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.
Files changed (190) hide show
  1. package/dist/ecs/archetype/archetype.d.ts +3 -3
  2. package/dist/ecs/archetype/create-archetype.d.ts +4 -4
  3. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  4. package/dist/ecs/archetype/create-archetype.test.js +6 -6
  5. package/dist/ecs/archetype/create-archetype.test.js.map +1 -1
  6. package/dist/ecs/archetype/delete-row.d.ts +2 -2
  7. package/dist/ecs/archetype/delete-row.js.map +1 -1
  8. package/dist/ecs/archetype/delete-row.test.js +4 -4
  9. package/dist/ecs/archetype/delete-row.test.js.map +1 -1
  10. package/dist/ecs/core-components.d.ts +3 -3
  11. package/dist/ecs/database/create-database.test.js +130 -0
  12. package/dist/ecs/database/create-database.test.js.map +1 -1
  13. package/dist/ecs/database/database.d.ts +6 -5
  14. package/dist/ecs/database/index.d.ts +0 -1
  15. package/dist/ecs/database/index.js +0 -1
  16. package/dist/ecs/database/index.js.map +1 -1
  17. package/dist/ecs/database/observe-select-entities.d.ts +3 -3
  18. package/dist/ecs/database/observe-select-entities.js.map +1 -1
  19. package/dist/ecs/database/observed/create-observed-database.js +8 -0
  20. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  21. package/dist/ecs/database/observed/observed-database.d.ts +3 -3
  22. package/dist/ecs/database/reconciling/create-reconciling-database.d.ts +8 -1
  23. package/dist/ecs/database/reconciling/create-reconciling-database.js +50 -19
  24. package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
  25. package/dist/ecs/database/reconciling/create-reconciling-database.test.js +297 -0
  26. package/dist/ecs/database/reconciling/create-reconciling-database.test.js.map +1 -1
  27. package/dist/ecs/database/replicate.js.map +1 -1
  28. package/dist/ecs/database/transactional-store/coalesce-transactions.d.ts +5 -1
  29. package/dist/ecs/database/transactional-store/coalesce-transactions.js +17 -28
  30. package/dist/ecs/database/transactional-store/coalesce-transactions.js.map +1 -1
  31. package/dist/ecs/database/transactional-store/coalesce-transactions.test.js +84 -7
  32. package/dist/ecs/database/transactional-store/coalesce-transactions.test.js.map +1 -1
  33. package/dist/ecs/database/transactional-store/create-transactional-store.js +7 -2
  34. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  35. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +5 -3
  36. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  37. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js +106 -0
  38. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js.map +1 -0
  39. package/dist/ecs/entity/entity.d.ts +8 -0
  40. package/dist/ecs/entity/entity.js +3 -0
  41. package/dist/ecs/entity/entity.js.map +1 -0
  42. package/dist/ecs/entity/u32.d.ts +8 -0
  43. package/dist/{lit/elements/service-context.js → ecs/entity/u32.js} +3 -3
  44. package/dist/ecs/entity/u32.js.map +1 -0
  45. package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +1 -1
  46. package/dist/ecs/entity-location-table/create-entity-location-table.js +27 -2
  47. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  48. package/dist/ecs/entity-location-table/create-entity-location-table.test.js +15 -2
  49. package/dist/ecs/entity-location-table/create-entity-location-table.test.js.map +1 -1
  50. package/dist/ecs/entity.d.ts +9 -7
  51. package/dist/ecs/entity.js +5 -2
  52. package/dist/ecs/entity.js.map +1 -1
  53. package/dist/ecs/index.d.ts +3 -3
  54. package/dist/ecs/index.js +4 -3
  55. package/dist/ecs/index.js.map +1 -1
  56. package/dist/ecs/optional-components.d.ts +3 -0
  57. package/dist/ecs/optional-components.js +2 -0
  58. package/dist/ecs/optional-components.js.map +1 -0
  59. package/dist/ecs/required-components.d.ts +4 -0
  60. package/dist/ecs/required-components.js +2 -0
  61. package/dist/ecs/required-components.js.map +1 -0
  62. package/dist/ecs/store/core/core.d.ts +19 -18
  63. package/dist/ecs/store/core/create-core.d.ts +2 -1
  64. package/dist/ecs/store/core/create-core.js +40 -17
  65. package/dist/ecs/store/core/create-core.js.map +1 -1
  66. package/dist/ecs/store/core/create-core.test.d.ts +1 -1
  67. package/dist/ecs/store/core/create-core.test.js +78 -2
  68. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  69. package/dist/ecs/store/core/select-entities.d.ts +3 -2
  70. package/dist/ecs/store/core/select-entities.js.map +1 -1
  71. package/dist/ecs/store/create-store.d.ts +2 -1
  72. package/dist/ecs/store/create-store.js +3 -1
  73. package/dist/ecs/store/create-store.js.map +1 -1
  74. package/dist/ecs/store/create-store.test.js.map +1 -1
  75. package/dist/ecs/store/store-schema/create-store-schema-test.js +2 -2
  76. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +1 -1
  77. package/dist/ecs/store/store-schema/create-store-schema.d.ts +1 -11
  78. package/dist/ecs/store/store-schema/create-store-schema.js +44 -30
  79. package/dist/ecs/store/store-schema/create-store-schema.js.map +1 -1
  80. package/dist/ecs/store/store-schema/index.d.ts +1 -2
  81. package/dist/ecs/store/store-schema/index.js +20 -23
  82. package/dist/ecs/store/store-schema/index.js.map +1 -1
  83. package/dist/ecs/store/store-schema/store-schema.d.ts +1 -12
  84. package/dist/ecs/store/store-schema/store-schema.js +55 -21
  85. package/dist/ecs/store/store-schema/store-schema.js.map +1 -1
  86. package/dist/ecs/store/store.d.ts +12 -11
  87. package/dist/ecs/store/store.js.map +1 -1
  88. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js +23 -23
  89. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js.map +1 -1
  90. package/dist/graphics/frame.d.ts +1 -22
  91. package/dist/graphics/frame.js +14 -11
  92. package/dist/graphics/frame.js.map +1 -1
  93. package/dist/graphics/get-web-gpu-device-and-context.d.ts +1 -2
  94. package/dist/graphics/get-web-gpu-device-and-context.js +23 -20
  95. package/dist/graphics/get-web-gpu-device-and-context.js.map +1 -1
  96. package/dist/graphics/graphics-context.d.ts +1 -5
  97. package/dist/graphics/graphics-context.js +5 -0
  98. package/dist/graphics/graphics-context.js.map +1 -1
  99. package/dist/lit/hooks/use-observable-values.d.ts +1 -2
  100. package/dist/lit/hooks/use-observable-values.js.map +1 -1
  101. package/dist/math/aabb-face/face.d.ts +51 -0
  102. package/dist/math/aabb-face/face.js +110 -0
  103. package/dist/math/aabb-face/face.js.map +1 -0
  104. package/dist/math/aabb-face/face.test.js +94 -0
  105. package/dist/math/aabb-face/face.test.js.map +1 -0
  106. package/dist/math/box/box.d.ts +50 -0
  107. package/dist/math/box/box.js +23 -0
  108. package/dist/math/box/box.js.map +1 -0
  109. package/dist/math/face/face.d.ts +51 -0
  110. package/dist/math/face/face.js +110 -0
  111. package/dist/math/face/face.js.map +1 -0
  112. package/dist/math/face/face.test.js +94 -0
  113. package/dist/math/face/face.test.js.map +1 -0
  114. package/dist/math/picking/face.d.ts +1 -0
  115. package/dist/math/picking/face.js +2 -0
  116. package/dist/math/picking/face.js.map +1 -0
  117. package/dist/math/picking/get-closest-entity-to-line.js +1 -1
  118. package/dist/math/picking/get-closest-entity-to-line.js.map +1 -1
  119. package/dist/math/picking/get-closest-entity-to-point.js +1 -1
  120. package/dist/math/picking/get-closest-entity-to-point.js.map +1 -1
  121. package/dist/math/picking/getClosestEntityToLine.d.ts +4 -0
  122. package/dist/math/picking/getClosestEntityToLine.js +29 -0
  123. package/dist/math/picking/getClosestEntityToLine.js.map +1 -0
  124. package/dist/math/picking/getClosestEntityToPoint.d.ts +4 -0
  125. package/dist/math/picking/getClosestEntityToPoint.js +27 -0
  126. package/dist/math/picking/getClosestEntityToPoint.js.map +1 -0
  127. package/dist/math/picking/getIntersectingEntities.d.ts +12 -0
  128. package/dist/math/picking/getIntersectingEntities.js +15 -0
  129. package/dist/math/picking/getIntersectingEntities.js.map +1 -0
  130. package/dist/math/picking/pick-from-tables.js +1 -1
  131. package/dist/math/picking/pick-from-tables.js.map +1 -1
  132. package/dist/math/picking/pick-result.d.ts +4 -2
  133. package/dist/math/transform/debug-inverse.d.ts +1 -0
  134. package/dist/math/transform/debug-inverse.js +28 -0
  135. package/dist/math/transform/debug-inverse.js.map +1 -0
  136. package/dist/math/transform/debug-quat.d.ts +1 -0
  137. package/dist/math/transform/debug-quat.js +23 -0
  138. package/dist/math/transform/debug-quat.js.map +1 -0
  139. package/dist/math/transform/debug-test.d.ts +1 -0
  140. package/dist/math/transform/debug-test.js +34 -0
  141. package/dist/math/transform/debug-test.js.map +1 -0
  142. package/dist/math/transform/transform.d.ts +58 -0
  143. package/dist/math/transform/transform.js +101 -0
  144. package/dist/math/transform/transform.js.map +1 -0
  145. package/dist/math/transform/transform.test.d.ts +1 -0
  146. package/dist/math/transform/transform.test.js +309 -0
  147. package/dist/math/transform/transform.test.js.map +1 -0
  148. package/dist/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +4 -3
  150. package/dist/ecs/database/applied/applied-database.d.ts +0 -47
  151. package/dist/ecs/database/applied/applied-database.js +0 -22
  152. package/dist/ecs/database/applied/applied-database.js.map +0 -1
  153. package/dist/ecs/database/applied/applied-entry.d.ts +0 -30
  154. package/dist/ecs/database/applied/applied-entry.js +0 -84
  155. package/dist/ecs/database/applied/applied-entry.js.map +0 -1
  156. package/dist/ecs/database/applied/create-applied-database.d.ts +0 -8
  157. package/dist/ecs/database/applied/create-applied-database.js +0 -266
  158. package/dist/ecs/database/applied/create-applied-database.js.map +0 -1
  159. package/dist/ecs/database/applied/create-applied-database.test.js +0 -94
  160. package/dist/ecs/database/applied/create-applied-database.test.js.map +0 -1
  161. package/dist/ecs/database/create-applied-database.d.ts +0 -49
  162. package/dist/ecs/database/create-applied-database.js +0 -275
  163. package/dist/ecs/database/create-applied-database.js.map +0 -1
  164. package/dist/ecs/database/reconciling/applied-database.d.ts +0 -47
  165. package/dist/ecs/database/reconciling/applied-database.js +0 -22
  166. package/dist/ecs/database/reconciling/applied-database.js.map +0 -1
  167. package/dist/ecs/database/reconciling/applied-entry.d.ts +0 -30
  168. package/dist/ecs/database/reconciling/applied-entry.js +0 -84
  169. package/dist/ecs/database/reconciling/applied-entry.js.map +0 -1
  170. package/dist/ecs/database/reconciling/create-applied-database.d.ts +0 -8
  171. package/dist/ecs/database/reconciling/create-applied-database.js +0 -266
  172. package/dist/ecs/database/reconciling/create-applied-database.js.map +0 -1
  173. package/dist/ecs/database/reconciling/create-applied-database.test.js +0 -94
  174. package/dist/ecs/database/reconciling/create-applied-database.test.js.map +0 -1
  175. package/dist/lit/elements/service-application.d.ts +0 -9
  176. package/dist/lit/elements/service-application.js +0 -55
  177. package/dist/lit/elements/service-application.js.map +0 -1
  178. package/dist/lit/elements/service-context.d.ts +0 -1
  179. package/dist/lit/elements/service-context.js.map +0 -1
  180. package/dist/lit/elements/service-element.d.ts +0 -6
  181. package/dist/lit/elements/service-element.js +0 -43
  182. package/dist/lit/elements/service-element.js.map +0 -1
  183. package/dist/table/compact-table.d.ts +0 -7
  184. package/dist/table/compact-table.js +0 -15
  185. package/dist/table/compact-table.js.map +0 -1
  186. package/dist/table/compact-table.test.js +0 -121
  187. package/dist/table/compact-table.test.js.map +0 -1
  188. /package/dist/ecs/database/{applied/create-applied-database.test.d.ts → transactional-store/entity-id-preservation.test.d.ts} +0 -0
  189. /package/dist/{ecs/database/reconciling/create-applied-database.test.d.ts → math/aabb-face/face.test.d.ts} +0 -0
  190. /package/dist/{table/compact-table.test.d.ts → math/face/face.test.d.ts} +0 -0
@@ -0,0 +1,29 @@
1
+ import { Aabb, Line3, Vec3, AabbFace } from "../index.js";
2
+ export function getClosestEntityToLine(rows, line) {
3
+ let closestEntity = null;
4
+ let closestDistanceSquared = Infinity;
5
+ let closestAlpha = Infinity;
6
+ let pickedPosition = null;
7
+ for (const [id, aabb] of rows) {
8
+ const aabbCenter = Aabb.center(aabb);
9
+ const alpha = Line3.closestPointOnLine(line, aabbCenter);
10
+ const closestPointOnLineSegment = Line3.interpolate(line, alpha);
11
+ const distSquared = Vec3.distanceSquared(aabbCenter, closestPointOnLineSegment);
12
+ if (distSquared < closestDistanceSquared ||
13
+ (distSquared === closestDistanceSquared && alpha < closestAlpha)) {
14
+ closestDistanceSquared = distSquared;
15
+ closestAlpha = alpha;
16
+ closestEntity = id;
17
+ pickedPosition = closestPointOnLineSegment;
18
+ }
19
+ }
20
+ if (closestEntity !== null && pickedPosition) {
21
+ return {
22
+ entity: closestEntity,
23
+ position: pickedPosition,
24
+ face: AabbFace.fromPosition(pickedPosition, rows.get(closestEntity)),
25
+ };
26
+ }
27
+ return null;
28
+ }
29
+ //# sourceMappingURL=getClosestEntityToLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getClosestEntityToLine.js","sourceRoot":"","sources":["../../../src/math/picking/getClosestEntityToLine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,UAAU,sBAAsB,CAAC,IAAuB,EAAE,IAAW;IACvE,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,sBAAsB,GAAG,QAAQ,CAAC;IACtC,IAAI,YAAY,GAAG,QAAQ,CAAC;IAC5B,IAAI,cAAc,GAAgB,IAAI,CAAC;IACvC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAChF,IAAI,WAAW,GAAG,sBAAsB;YACpC,CAAC,WAAW,KAAK,sBAAsB,IAAI,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC;YACnE,sBAAsB,GAAG,WAAW,CAAC;YACrC,YAAY,GAAG,KAAK,CAAC;YACrB,aAAa,GAAG,EAAE,CAAC;YACnB,cAAc,GAAG,yBAAyB,CAAC;QAC/C,CAAC;IACL,CAAC;IACD,IAAI,aAAa,KAAK,IAAI,IAAI,cAAc,EAAE,CAAC;QAC3C,OAAO;YACH,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;SACxE,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Entity } from "../../ecs/index.js";
2
+ import { Aabb, Vec3 } from "../index.js";
3
+ import { PickResult } from "./pick-result.js";
4
+ export declare function getClosestEntityToPoint(rows: Map<Entity, Aabb>, point: Vec3): PickResult | null;
@@ -0,0 +1,27 @@
1
+ import { Aabb, Vec3, AabbFace } from "../index.js";
2
+ export function getClosestEntityToPoint(rows, point) {
3
+ let closestRow = -1;
4
+ let closestDistanceSquared = Infinity;
5
+ let closestAabb = null;
6
+ for (const [row, aabb] of rows) {
7
+ const distSquared = Vec3.distanceSquared(point, Aabb.center(aabb));
8
+ if (distSquared < closestDistanceSquared) {
9
+ closestDistanceSquared = distSquared;
10
+ closestRow = row;
11
+ closestAabb = aabb;
12
+ }
13
+ }
14
+ if (closestRow !== -1 && closestAabb) {
15
+ // For direct intersection, use the intersection point if possible
16
+ // We'll use the intersection alpha from Aabb.lineIntersection
17
+ // If the line starts inside, alpha=0, so position is line.a
18
+ // Otherwise, Line3.interpolate at alpha
19
+ return {
20
+ entity: closestRow,
21
+ position: point,
22
+ face: AabbFace.fromPosition(point, closestAabb),
23
+ };
24
+ }
25
+ return null;
26
+ }
27
+ //# sourceMappingURL=getClosestEntityToPoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getClosestEntityToPoint.js","sourceRoot":"","sources":["../../../src/math/picking/getClosestEntityToPoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,UAAU,uBAAuB,CAAC,IAAuB,EAAE,KAAW;IACxE,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,sBAAsB,GAAG,QAAQ,CAAC;IACtC,IAAI,WAAW,GAAgB,IAAI,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,sBAAsB,EAAE,CAAC;YACvC,sBAAsB,GAAG,WAAW,CAAC;YACrC,UAAU,GAAG,GAAG,CAAC;YACjB,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC;IACL,CAAC;IACD,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;QACnC,kEAAkE;QAClE,8DAA8D;QAC9D,4DAA4D;QAC5D,wCAAwC;QACxC,OAAO;YACH,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;SAClD,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Entity } from "../../ecs/index.js";
2
+ import { Table } from "../../table/table.js";
3
+ import { Aabb, Line3 } from "../index.js";
4
+ export declare function getIntersectingEntities<T extends Table<{
5
+ id: Entity;
6
+ boundingBox: Aabb;
7
+ }>>(options: {
8
+ tables: readonly T[];
9
+ line: Line3;
10
+ radius?: number;
11
+ predicate?: (table: T, row: number) => boolean;
12
+ }): Map<Entity, Aabb>;
@@ -0,0 +1,15 @@
1
+ import { Aabb } from "../index.js";
2
+ export function getIntersectingEntities(options) {
3
+ const { tables, line, radius = 0, predicate } = options;
4
+ const rows = new Map();
5
+ for (const table of tables) {
6
+ for (let row = 0; row < table.rowCount; row++) {
7
+ const boundingBox = table.columns.boundingBox.get(row);
8
+ if (Aabb.lineIntersection(boundingBox, line, radius) !== -1 && (predicate?.(table, row) ?? true)) {
9
+ rows.set(table.columns.id.get(row), boundingBox);
10
+ }
11
+ }
12
+ }
13
+ return rows;
14
+ }
15
+ //# sourceMappingURL=getIntersectingEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIntersectingEntities.js","sourceRoot":"","sources":["../../../src/math/picking/getIntersectingEntities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAS,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,uBAAuB,CAAsD,OAK5F;IACG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC/F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -45,7 +45,7 @@ export function pickFromTables(options) {
45
45
  return {
46
46
  entity: best.id,
47
47
  lineAlpha: best.alpha,
48
- entityPosition: Line3.interpolate(line, best.alpha),
48
+ worldPosition: Line3.interpolate(line, best.alpha),
49
49
  // face: AabbFace.fromPosition(Line3.interpolate(line, best.alpha), rows.get(best.id)!),
50
50
  };
51
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pick-from-tables.js","sourceRoot":"","sources":["../../../src/math/picking/pick-from-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAGX,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAqD,OAKlF;IACG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACxD,IAAI,IAAI,GAAG,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAChB,8EAA8E;QAC9E,IAAI,IAAI,GAAyC,IAAI,CAAC;QACtD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACP,OAAO;gBACH,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;gBACnD,wFAAwF;aAC3F,CAAC;QACN,CAAC;QACD,gCAAgC;QAChC,OAAO,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"pick-from-tables.js","sourceRoot":"","sources":["../../../src/math/picking/pick-from-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAGX,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAqD,OAKlF;IACG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACxD,IAAI,IAAI,GAAG,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAChB,8EAA8E;QAC9E,IAAI,IAAI,GAAyC,IAAI,CAAC;QACtD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACP,OAAO;gBACH,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;gBAClD,wFAAwF;aAC3F,CAAC;QACN,CAAC;QACD,gCAAgC;QAChC,OAAO,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -5,6 +5,8 @@ export interface PickResult {
5
5
  entity: Entity;
6
6
  /** Alpha value (0-1) along the picking line where the intersection/closest point occurs. */
7
7
  lineAlpha: number;
8
- /** World-space position of the entity or closest point on the AABB. */
9
- entityPosition: Vec3;
8
+ /** World-space position of the picked entity. */
9
+ worldPosition: Vec3;
10
+ /** Model-space position on the picked entity. */
11
+ modelPosition?: Vec3;
10
12
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { Transform } from "./transform.js";
2
+ import { Quat } from "../quat/quat.js";
3
+ const transform = {
4
+ position: [5, -3, 7],
5
+ rotation: Quat.fromAxisAngle([1, 1, 0], Math.PI / 4),
6
+ scale: [2, 0.5, 3],
7
+ };
8
+ const point = [1, 2, 3];
9
+ console.log("Original point:", point);
10
+ const transformed = Transform.transform(transform, point);
11
+ console.log("Transformed:", transformed);
12
+ const inverted = Transform.transformInverse(transform, transformed);
13
+ console.log("Inverted back:", inverted);
14
+ console.log("Difference:", [
15
+ inverted[0] - point[0],
16
+ inverted[1] - point[1],
17
+ inverted[2] - point[2]
18
+ ]);
19
+ // Test just the rotation part
20
+ console.log("\n=== Testing rotation ===");
21
+ const rotated = Quat.rotateVec3(transform.rotation, point);
22
+ console.log("Rotated:", rotated);
23
+ const conjugate = Quat.conjugate(transform.rotation);
24
+ console.log("Conjugate quat:", conjugate);
25
+ const rotatedBack = Quat.rotateVec3(conjugate, rotated);
26
+ console.log("Rotated back:", rotatedBack);
27
+ console.log("Should equal original:", point);
28
+ //# sourceMappingURL=debug-inverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-inverse.js","sourceRoot":"","sources":["../../../src/math/transform/debug-inverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,SAAS,GAAc;IACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;CACrB,CAAC;AAEF,MAAM,KAAK,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAEtC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAEzC,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAExC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;IACvB,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACtB,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACtB,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,8BAA8B;AAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3D,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { Quat } from "../quat/quat.js";
2
+ import { Vec3 } from "../vec3/vec3.js";
3
+ // Test with normalized axis
4
+ const axis = [1, 1, 0];
5
+ const normalizedAxis = Vec3.normalize(axis);
6
+ console.log("Axis:", axis);
7
+ console.log("Normalized:", normalizedAxis);
8
+ const quat = Quat.fromAxisAngle(normalizedAxis, Math.PI / 4);
9
+ console.log("Quaternion:", quat);
10
+ console.log("Length:", Quat.length(quat));
11
+ const point = [1, 2, 3];
12
+ const rotated = Quat.rotateVec3(quat, point);
13
+ console.log("\nRotated:", rotated);
14
+ const conjugate = Quat.conjugate(quat);
15
+ const back = Quat.rotateVec3(conjugate, rotated);
16
+ console.log("Rotated back:", back);
17
+ console.log("Original:", point);
18
+ console.log("Difference:", [
19
+ back[0] - point[0],
20
+ back[1] - point[1],
21
+ back[2] - point[2]
22
+ ]);
23
+ //# sourceMappingURL=debug-quat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-quat.js","sourceRoot":"","sources":["../../../src/math/transform/debug-quat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,4BAA4B;AAC5B,MAAM,IAAI,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACjC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1C,MAAM,KAAK,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACnC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;IACvB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACrB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Transform } from "./transform.js";
2
+ import { Vec3 } from "../vec3/vec3.js";
3
+ import { Quat } from "../quat/quat.js";
4
+ import { Mat4x4 } from "../mat4x4/mat4x4.js";
5
+ // Simple rotation test
6
+ const transform = {
7
+ position: Vec3.zero,
8
+ rotation: Quat.fromAxisAngle([0, 0, 1], Math.PI / 2),
9
+ scale: Vec3.one,
10
+ };
11
+ const point = [1, 2, 3];
12
+ console.log("Transform:", transform);
13
+ console.log("Point:", point);
14
+ console.log("");
15
+ // Direct method
16
+ const directResult = Transform.transform(transform, point);
17
+ console.log("Direct result:", directResult);
18
+ // Matrix method
19
+ const matrix = Transform.toMatrix(transform);
20
+ console.log("Matrix:", matrix);
21
+ const matrixResult = Mat4x4.multiplyVec3(matrix, point);
22
+ console.log("Matrix result:", matrixResult);
23
+ console.log("");
24
+ console.log("Difference:", [
25
+ directResult[0] - matrixResult[0],
26
+ directResult[1] - matrixResult[1],
27
+ directResult[2] - matrixResult[2]
28
+ ]);
29
+ // Test quaternion rotation directly
30
+ console.log("");
31
+ console.log("Testing Quat.rotateVec3 directly:");
32
+ const quatRotated = Quat.rotateVec3(transform.rotation, point);
33
+ console.log("Quat.rotateVec3 result:", quatRotated);
34
+ //# sourceMappingURL=debug-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-test.js","sourceRoot":"","sources":["../../../src/math/transform/debug-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,uBAAuB;AACvB,MAAM,SAAS,GAAc;IACzB,QAAQ,EAAE,IAAI,CAAC,IAAI;IACnB,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,KAAK,EAAE,IAAI,CAAC,GAAG;CAClB,CAAC;AAEF,MAAM,KAAK,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEhB,gBAAgB;AAChB,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAE5C,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAE5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;IACvB,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACjC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACjC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC;AAEH,oCAAoC;AACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { FromSchema } from "../../schema/schema.js";
2
+ import { Mat4x4 } from "../mat4x4/mat4x4.js";
3
+ import { Vec3 } from "../vec3/vec3.js";
4
+ export type Transform = FromSchema<typeof Transform.schema>;
5
+ export declare namespace Transform {
6
+ const schema: {
7
+ readonly type: "object";
8
+ readonly properties: {
9
+ readonly position: {
10
+ readonly type: "array";
11
+ readonly items: {
12
+ readonly type: "number";
13
+ readonly precision: 1;
14
+ readonly default: number;
15
+ };
16
+ readonly minItems: 3;
17
+ readonly maxItems: 3;
18
+ readonly default: readonly [0, 0, 0];
19
+ };
20
+ readonly rotation: {
21
+ readonly type: "array";
22
+ readonly items: {
23
+ readonly type: "number";
24
+ readonly precision: 1;
25
+ readonly default: number;
26
+ };
27
+ readonly minItems: 4;
28
+ readonly maxItems: 4;
29
+ readonly default: readonly [0, 0, 0, 1];
30
+ };
31
+ readonly scale: {
32
+ readonly type: "array";
33
+ readonly items: {
34
+ readonly type: "number";
35
+ readonly precision: 1;
36
+ readonly default: number;
37
+ };
38
+ readonly minItems: 3;
39
+ readonly maxItems: 3;
40
+ readonly default: readonly [0, 0, 0];
41
+ };
42
+ };
43
+ readonly required: readonly ["position", "rotation", "scale"];
44
+ readonly additionalProperties: false;
45
+ readonly layout: "std140";
46
+ };
47
+ const identity: Transform;
48
+ const toMatrix: (transform: Transform) => Mat4x4;
49
+ const transform: (transform: Transform, point: Vec3) => Vec3;
50
+ /**
51
+ * Applies the inverse transformation to a point.
52
+ * This is the reverse operation of transform(): if transform(t, p) = p',
53
+ * then transformInverse(t, p') = p.
54
+ *
55
+ * Note: Assumes rotation is a unit quaternion (which is guaranteed by Quat.fromAxisAngle).
56
+ */
57
+ const transformInverse: (transform: Transform, point: Vec3) => Vec3;
58
+ }
@@ -0,0 +1,101 @@
1
+ import { Mat4x4 } from "../mat4x4/mat4x4.js";
2
+ import { Quat } from "../quat/quat.js";
3
+ import { Vec3 } from "../vec3/vec3.js";
4
+ export var Transform;
5
+ (function (Transform) {
6
+ Transform.schema = {
7
+ type: "object",
8
+ properties: {
9
+ position: Vec3.schema,
10
+ rotation: Quat.schema,
11
+ scale: Vec3.schema,
12
+ },
13
+ required: ["position", "rotation", "scale"],
14
+ additionalProperties: false,
15
+ layout: "std140",
16
+ };
17
+ Transform.identity = {
18
+ position: Vec3.zero,
19
+ rotation: Quat.identity,
20
+ scale: Vec3.one,
21
+ };
22
+ Transform.toMatrix = (transform) => {
23
+ const { position, rotation, scale } = transform;
24
+ // Create rotation matrix from quaternion
25
+ const rotationMatrix = Quat.toMat4(rotation);
26
+ // Create scale matrix
27
+ const scaleMatrix = Mat4x4.scaling(scale[0], scale[1], scale[2]);
28
+ // Create translation matrix
29
+ const translationMatrix = Mat4x4.translation(position[0], position[1], position[2]);
30
+ // Combine in TRS order: Translation * Rotation * Scale
31
+ const rs = Mat4x4.multiply(rotationMatrix, scaleMatrix);
32
+ return Mat4x4.multiply(translationMatrix, rs);
33
+ };
34
+ Transform.transform = (transform, point) => {
35
+ const { position, rotation, scale } = transform;
36
+ // Apply scale
37
+ const sx = point[0] * scale[0];
38
+ const sy = point[1] * scale[1];
39
+ const sz = point[2] * scale[2];
40
+ // Apply rotation (quaternion rotation unrolled)
41
+ const [qx, qy, qz, qw] = rotation;
42
+ // Compute qv × scaled (cross product)
43
+ const uvx = qy * sz - qz * sy;
44
+ const uvy = qz * sx - qx * sz;
45
+ const uvz = qx * sy - qy * sx;
46
+ // Compute qv × uv (cross product)
47
+ const uuvx = qy * uvz - qz * uvy;
48
+ const uuvy = qz * uvx - qx * uvz;
49
+ const uuvz = qx * uvy - qy * uvx;
50
+ // Combine: scaled + 2*w*uv + 2*uuv
51
+ const scaleFactor = 2 * qw;
52
+ const rx = sx + scaleFactor * uvx + 2 * uuvx;
53
+ const ry = sy + scaleFactor * uvy + 2 * uuvy;
54
+ const rz = sz + scaleFactor * uvz + 2 * uuvz;
55
+ // Apply translation
56
+ return [
57
+ rx + position[0],
58
+ ry + position[1],
59
+ rz + position[2]
60
+ ];
61
+ };
62
+ /**
63
+ * Applies the inverse transformation to a point.
64
+ * This is the reverse operation of transform(): if transform(t, p) = p',
65
+ * then transformInverse(t, p') = p.
66
+ *
67
+ * Note: Assumes rotation is a unit quaternion (which is guaranteed by Quat.fromAxisAngle).
68
+ */
69
+ Transform.transformInverse = (transform, point) => {
70
+ const { position, rotation, scale } = transform;
71
+ // Remove translation
72
+ const tx = point[0] - position[0];
73
+ const ty = point[1] - position[1];
74
+ const tz = point[2] - position[2];
75
+ // Apply inverse rotation using quaternion conjugate (for unit quaternions: q^-1 = conjugate(q))
76
+ const [qx, qy, qz, qw] = rotation;
77
+ const iqx = -qx;
78
+ const iqy = -qy;
79
+ const iqz = -qz;
80
+ // Compute qv × translated (cross product)
81
+ const uvx = iqy * tz - iqz * ty;
82
+ const uvy = iqz * tx - iqx * tz;
83
+ const uvz = iqx * ty - iqy * tx;
84
+ // Compute qv × uv (cross product)
85
+ const uuvx = iqy * uvz - iqz * uvy;
86
+ const uuvy = iqz * uvx - iqx * uvz;
87
+ const uuvz = iqx * uvy - iqy * uvx;
88
+ // Combine: translated + 2*w*uv + 2*uuv
89
+ const scaleFactor = 2 * qw;
90
+ const rx = tx + scaleFactor * uvx + 2 * uuvx;
91
+ const ry = ty + scaleFactor * uvy + 2 * uuvy;
92
+ const rz = tz + scaleFactor * uvz + 2 * uuvz;
93
+ // Apply inverse scale (division)
94
+ return [
95
+ rx / scale[0],
96
+ ry / scale[1],
97
+ rz / scale[2]
98
+ ];
99
+ };
100
+ })(Transform || (Transform = {}));
101
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/math/transform/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};