common.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  6. */
  7. import { OrderedSet } from '../../mol-data/int';
  8. import { Mat4, Tensor, Vec3, Vec2 } from '../linear-algebra';
  9. import { Box3D } from '../geometry';
  10. import { Texture } from '../../mol-gl/webgl/texture';
  11. export interface PositionData {
  12. x: ArrayLike<number>,
  13. y: ArrayLike<number>,
  14. z: ArrayLike<number>,
  15. /** subset of indices into the x/y/z/radius arrays */
  16. indices: OrderedSet,
  17. /** optional element radius */
  18. radius?: ArrayLike<number>,
  19. /** optional element id */
  20. id?: ArrayLike<number>,
  21. }
  22. export type DensityData = {
  23. transform: Mat4,
  24. field: Tensor,
  25. idField: Tensor,
  26. resolution: number
  27. }
  28. export type DensityTextureData = {
  29. transform: Mat4,
  30. texture: Texture,
  31. bbox: Box3D,
  32. gridDim: Vec3,
  33. gridTexDim: Vec3
  34. gridTexScale: Vec2
  35. }
  36. export interface RegularGrid3d {
  37. box: Box3D,
  38. dimensions: Vec3
  39. }
  40. export function getRegularGrid3dDelta({ box, dimensions }: RegularGrid3d) {
  41. return Vec3.div(Vec3(), Box3D.size(Vec3(), box), Vec3.subScalar(Vec3(), dimensions, 1));
  42. }
  43. export function fillGridDim(length: number, start: number, step: number) {
  44. const a = new Float32Array(length);
  45. for (let i = 0; i < a.length; i++) {
  46. a[i] = start + (step * i);
  47. }
  48. return a;
  49. }