render-object.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { PointsRenderable, MeshRenderable, RenderableState, MeshValues, PointsValues, LinesValues, LinesRenderable, Renderable } from './renderable'
  7. import { RenderableValues } from './renderable/schema';
  8. import { idFactory } from 'mol-util/id-factory';
  9. import { Context } from './webgl/context';
  10. import { GaussianDensityValues, GaussianDensityRenderable } from './renderable/gaussian-density';
  11. import { DirectVolumeValues, DirectVolumeRenderable } from './renderable/direct-volume';
  12. const getNextId = idFactory(0, 0x7FFFFFFF)
  13. export interface BaseRenderObject { id: number, type: string, values: RenderableValues, state: RenderableState }
  14. export interface MeshRenderObject extends BaseRenderObject { type: 'mesh', values: MeshValues }
  15. export interface PointsRenderObject extends BaseRenderObject { type: 'points', values: PointsValues }
  16. export interface LinesRenderObject extends BaseRenderObject { type: 'lines', values: LinesValues }
  17. export interface GaussianDensityRenderObject extends BaseRenderObject { type: 'gaussian-density', values: GaussianDensityValues }
  18. export interface DirectVolumeRenderObject extends BaseRenderObject { type: 'direct-volume', values: DirectVolumeValues }
  19. export type RenderObject = MeshRenderObject | PointsRenderObject | LinesRenderObject | GaussianDensityRenderObject | DirectVolumeRenderObject
  20. //
  21. export function createMeshRenderObject(values: MeshValues, state: RenderableState): MeshRenderObject {
  22. return { id: getNextId(), type: 'mesh', values, state }
  23. }
  24. export function createPointsRenderObject(values: PointsValues, state: RenderableState): PointsRenderObject {
  25. return { id: getNextId(), type: 'points', values, state }
  26. }
  27. export function createLinesRenderObject(values: LinesValues, state: RenderableState): LinesRenderObject {
  28. return { id: getNextId(), type: 'lines', values, state }
  29. }
  30. export function createGaussianDensityRenderObject(values: GaussianDensityValues, state: RenderableState): GaussianDensityRenderObject {
  31. return { id: getNextId(), type: 'gaussian-density', values, state }
  32. }
  33. export function createDirectVolumeRenderObject(values: DirectVolumeValues, state: RenderableState): DirectVolumeRenderObject {
  34. return { id: getNextId(), type: 'direct-volume', values, state }
  35. }
  36. export function createRenderable(ctx: Context, o: RenderObject): Renderable<any> {
  37. switch (o.type) {
  38. case 'mesh': return MeshRenderable(ctx, o.id, o.values, o.state)
  39. case 'points': return PointsRenderable(ctx, o.id, o.values, o.state)
  40. case 'lines': return LinesRenderable(ctx, o.id, o.values, o.state)
  41. case 'gaussian-density': return GaussianDensityRenderable(ctx, o.id, o.values, o.state)
  42. case 'direct-volume': return DirectVolumeRenderable(ctx, o.id, o.values, o.state)
  43. }
  44. }