spec.ts 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /**
  2. * Copyright (c) 2018-2023 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 { PartialCanvas3DProps } from '../mol-canvas3d/canvas3d';
  8. import { AnimateAssemblyUnwind } from '../mol-plugin-state/animation/built-in/assembly-unwind';
  9. import { AnimateCameraSpin } from '../mol-plugin-state/animation/built-in/camera-spin';
  10. import { AnimateModelIndex } from '../mol-plugin-state/animation/built-in/model-index';
  11. import { AnimateStateSnapshots } from '../mol-plugin-state/animation/built-in/state-snapshots';
  12. import { PluginStateAnimation } from '../mol-plugin-state/animation/model';
  13. import { DataFormatProvider } from '../mol-plugin-state/formats/provider';
  14. import { StateAction, StateTransformer } from '../mol-state';
  15. import { PluginBehaviors } from './behavior';
  16. import { StructureFocusRepresentation } from './behavior/dynamic/selection/structure-focus-representation';
  17. import { PluginConfigItem } from './config';
  18. import { PluginLayoutStateProps } from './layout';
  19. import { StateActions } from '../mol-plugin-state/actions';
  20. import { AssignColorVolume } from '../mol-plugin-state/actions/volume';
  21. import { StateTransforms } from '../mol-plugin-state/transforms';
  22. import { BoxifyVolumeStreaming, CreateVolumeStreamingBehavior, InitVolumeStreaming } from '../mol-plugin/behavior/dynamic/volume-streaming/transformers';
  23. import { AnimateStateInterpolation } from '../mol-plugin-state/animation/built-in/state-interpolation';
  24. import { AnimateStructureSpin } from '../mol-plugin-state/animation/built-in/spin-structure';
  25. import { AnimateCameraRock } from '../mol-plugin-state/animation/built-in/camera-rock';
  26. export { PluginSpec };
  27. interface PluginSpec {
  28. actions?: PluginSpec.Action[],
  29. behaviors: PluginSpec.Behavior[],
  30. animations?: PluginStateAnimation[],
  31. customFormats?: [string, DataFormatProvider][],
  32. canvas3d?: PartialCanvas3DProps,
  33. layout?: {
  34. initial?: Partial<PluginLayoutStateProps>,
  35. },
  36. config?: [PluginConfigItem, unknown][]
  37. }
  38. namespace PluginSpec {
  39. export interface Action {
  40. action: StateAction | StateTransformer,
  41. /* constructible react component with <action.customControl /> */
  42. customControl?: any,
  43. autoUpdate?: boolean
  44. }
  45. export function Action(action: StateAction | StateTransformer, params?: { customControl?: any /* constructible react component with <action.customControl /> */, autoUpdate?: boolean }): Action {
  46. return { action, customControl: params && params.customControl, autoUpdate: params && params.autoUpdate };
  47. }
  48. export interface Behavior {
  49. transformer: StateTransformer,
  50. defaultParams?: any
  51. }
  52. export function Behavior<T extends StateTransformer>(transformer: T, defaultParams: Partial<StateTransformer.Params<T>> = {}): Behavior {
  53. return { transformer, defaultParams };
  54. }
  55. }
  56. export const DefaultPluginSpec = (): PluginSpec => ({
  57. actions: [
  58. PluginSpec.Action(StateActions.Structure.DownloadStructure),
  59. PluginSpec.Action(StateActions.Volume.DownloadDensity),
  60. PluginSpec.Action(StateActions.DataFormat.DownloadFile),
  61. PluginSpec.Action(StateActions.DataFormat.OpenFiles),
  62. PluginSpec.Action(StateActions.Structure.LoadTrajectory),
  63. PluginSpec.Action(StateActions.Structure.EnableModelCustomProps),
  64. PluginSpec.Action(StateActions.Structure.EnableStructureCustomProps),
  65. // Volume streaming
  66. PluginSpec.Action(InitVolumeStreaming),
  67. PluginSpec.Action(BoxifyVolumeStreaming),
  68. PluginSpec.Action(CreateVolumeStreamingBehavior),
  69. PluginSpec.Action(StateTransforms.Data.Download),
  70. PluginSpec.Action(StateTransforms.Data.ParseCif),
  71. PluginSpec.Action(StateTransforms.Data.ParseCcp4),
  72. PluginSpec.Action(StateTransforms.Data.ParseDsn6),
  73. PluginSpec.Action(StateTransforms.Model.TrajectoryFromMmCif),
  74. PluginSpec.Action(StateTransforms.Model.TrajectoryFromCifCore),
  75. PluginSpec.Action(StateTransforms.Model.TrajectoryFromPDB),
  76. PluginSpec.Action(StateTransforms.Model.TransformStructureConformation),
  77. PluginSpec.Action(StateTransforms.Model.StructureFromModel),
  78. PluginSpec.Action(StateTransforms.Model.StructureFromTrajectory),
  79. PluginSpec.Action(StateTransforms.Model.ModelFromTrajectory),
  80. PluginSpec.Action(StateTransforms.Model.StructureSelectionFromScript),
  81. PluginSpec.Action(StateTransforms.Representation.StructureRepresentation3D),
  82. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsDistance3D),
  83. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsAngle3D),
  84. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsDihedral3D),
  85. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsLabel3D),
  86. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsOrientation3D),
  87. PluginSpec.Action(StateTransforms.Representation.ModelUnitcell3D),
  88. PluginSpec.Action(StateTransforms.Representation.StructureBoundingBox3D),
  89. PluginSpec.Action(StateTransforms.Representation.ExplodeStructureRepresentation3D),
  90. PluginSpec.Action(StateTransforms.Representation.SpinStructureRepresentation3D),
  91. PluginSpec.Action(StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D),
  92. PluginSpec.Action(StateTransforms.Representation.OverpaintStructureRepresentation3DFromScript),
  93. PluginSpec.Action(StateTransforms.Representation.TransparencyStructureRepresentation3DFromScript),
  94. PluginSpec.Action(StateTransforms.Representation.ClippingStructureRepresentation3DFromScript),
  95. PluginSpec.Action(StateTransforms.Representation.SubstanceStructureRepresentation3DFromScript),
  96. PluginSpec.Action(StateTransforms.Representation.ThemeStrengthRepresentation3D),
  97. PluginSpec.Action(AssignColorVolume),
  98. PluginSpec.Action(StateTransforms.Volume.VolumeFromCcp4),
  99. PluginSpec.Action(StateTransforms.Volume.VolumeFromDsn6),
  100. PluginSpec.Action(StateTransforms.Volume.VolumeFromCube),
  101. PluginSpec.Action(StateTransforms.Volume.VolumeFromDx),
  102. PluginSpec.Action(StateTransforms.Representation.VolumeRepresentation3D),
  103. ],
  104. behaviors: [
  105. PluginSpec.Behavior(PluginBehaviors.Representation.HighlightLoci),
  106. PluginSpec.Behavior(PluginBehaviors.Representation.SelectLoci),
  107. PluginSpec.Behavior(PluginBehaviors.Representation.DefaultLociLabelProvider),
  108. PluginSpec.Behavior(PluginBehaviors.Representation.FocusLoci),
  109. PluginSpec.Behavior(PluginBehaviors.Camera.FocusLoci),
  110. PluginSpec.Behavior(PluginBehaviors.Camera.CameraAxisHelper),
  111. PluginSpec.Behavior(PluginBehaviors.Camera.CameraControls),
  112. PluginSpec.Behavior(StructureFocusRepresentation),
  113. PluginSpec.Behavior(PluginBehaviors.CustomProps.StructureInfo),
  114. PluginSpec.Behavior(PluginBehaviors.CustomProps.AccessibleSurfaceArea),
  115. PluginSpec.Behavior(PluginBehaviors.CustomProps.BestDatabaseSequenceMapping),
  116. PluginSpec.Behavior(PluginBehaviors.CustomProps.Interactions),
  117. PluginSpec.Behavior(PluginBehaviors.CustomProps.SecondaryStructure),
  118. PluginSpec.Behavior(PluginBehaviors.CustomProps.ValenceModel),
  119. PluginSpec.Behavior(PluginBehaviors.CustomProps.CrossLinkRestraint),
  120. ],
  121. animations: [
  122. AnimateModelIndex,
  123. AnimateCameraSpin,
  124. AnimateCameraRock,
  125. AnimateStateSnapshots,
  126. AnimateAssemblyUnwind,
  127. AnimateStructureSpin,
  128. AnimateStateInterpolation
  129. ]
  130. });