cage.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /**
  2. * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { Mat4, Vec3 } from '../../mol-math/linear-algebra'
  7. import { NumberArray } from '../../mol-util/type-helpers'
  8. export interface Cage {
  9. readonly vertices: ArrayLike<number>
  10. readonly edges: ArrayLike<number>
  11. }
  12. export function createCage(vertices: ArrayLike<number>, edges: ArrayLike<number>): Cage {
  13. return { vertices, edges }
  14. }
  15. export function copyCage(cage: Cage): Cage {
  16. return {
  17. vertices: new Float32Array(cage.vertices),
  18. edges: new Uint32Array(cage.edges)
  19. }
  20. }
  21. const tmpV = Vec3.zero()
  22. /** Transform primitive in-place */
  23. export function transformCage(cage: Cage, t: Mat4) {
  24. const { vertices } = cage
  25. for (let i = 0, il = vertices.length; i < il; i += 3) {
  26. // position
  27. Vec3.transformMat4(tmpV, Vec3.fromArray(tmpV, vertices, i), t)
  28. Vec3.toArray(tmpV, vertices as NumberArray, i)
  29. }
  30. return cage
  31. }