Skip to content
Snippets Groups Projects
Select Git revision
  • df9b367e0b05ca568d38e18cc93133823e8c258e
  • master default protected
  • rednatco-v2
  • rednatco
  • test
  • ntc-tube-uniform-color
  • ntc-tube-missing-atoms
  • restore-vertex-array-per-program
  • watlas2
  • dnatco_new
  • cleanup-old-nodejs
  • webmmb
  • fix_auth_seq_id
  • update_deps
  • ext_dev
  • ntc_balls
  • nci-2
  • plugin
  • bugfix-0.4.5
  • nci
  • servers
  • v0.5.0-dev.1
  • v0.4.5
  • v0.4.4
  • v0.4.3
  • v0.4.2
  • v0.4.1
  • v0.4.0
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • v0.3.3
  • v0.3.2
  • v0.3.1
  • v0.3.0
41 results

objects.ts

Blame
  • user avatar
    Alexander Rose authored
    2c55165c
    History
    objects.ts 5.92 KiB
    /**
     * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author David Sehnal <david.sehnal@gmail.com>
     * @author Alexander Rose <alexander.rose@weirdbyte.de>
     */
    
    import { CifFile } from '../../mol-io/reader/cif';
    import { PlyFile } from '../../mol-io/reader/ply/schema';
    import { Model as _Model, Structure as _Structure } from '../../mol-model/structure';
    import { VolumeData } from '../../mol-model/volume';
    import { PluginBehavior } from '../../mol-plugin/behavior/behavior';
    import { Representation } from '../../mol-repr/representation';
    import { StructureRepresentation, StructureRepresentationState } from '../../mol-repr/structure/representation';
    import { VolumeRepresentation } from '../../mol-repr/volume/representation';
    import { StateObject, StateTransformer } from '../../mol-state';
    import { Ccp4File } from '../../mol-io/reader/ccp4/schema';
    import { Dsn6File } from '../../mol-io/reader/dsn6/schema';
    import { ShapeRepresentation } from '../../mol-repr/shape/representation';
    import { Shape as _Shape } from '../../mol-model/shape';
    import { ShapeProvider } from '../../mol-model/shape/provider';
    
    export type TypeClass = 'root' | 'data' | 'prop'
    
    export namespace PluginStateObject {
        export type Any = StateObject<any, TypeInfo>
    
        export type TypeClass = 'Root' | 'Group' | 'Data' | 'Object' | 'Representation3D' | 'Behavior'
        export interface TypeInfo { name: string, typeClass: TypeClass }
    
        export const Create = StateObject.factory<TypeInfo>();
    
        export function isRepresentation3D(o?: Any): o is StateObject<Representation3DData<Representation.Any>, TypeInfo> {
            return !!o && o.type.typeClass === 'Representation3D';
        }
    
        export function isBehavior(o?: Any): o is StateObject<PluginBehavior, TypeInfo> {
            return !!o && o.type.typeClass === 'Behavior';
        }
    
        export interface Representation3DData<T extends Representation.Any, S extends StateObject = StateObject> { repr: T, source: S }
        export function CreateRepresentation3D<T extends Representation.Any, S extends StateObject = StateObject>(type: { name: string }) {
            return Create<Representation3DData<T, S>>({ ...type, typeClass: 'Representation3D' });
        }
    
        export function CreateBehavior<T extends PluginBehavior>(type: { name: string }) {
            return Create<T>({ ...type, typeClass: 'Behavior' })
        }
    
        export class Root extends Create({ name: 'Root', typeClass: 'Root' }) { }
        export class Group extends Create({ name: 'Group', typeClass: 'Group' }) { }
    
        export namespace Data {
            export class String extends Create<string>({ name: 'String Data', typeClass: 'Data', }) { }
            export class Binary extends Create<Uint8Array>({ name: 'Binary Data', typeClass: 'Data' }) { }
    
            export type BlobEntry = { id: string } &
                ( { kind: 'string', data: string }
                | { kind: 'binary', data: Uint8Array })
            export type BlobData = BlobEntry[]
            export class Blob extends Create<BlobData>({ name: 'Data Blob', typeClass: 'Data' }) { }
        }
    
        export namespace Format {
            export class Json extends Create<any>({ name: 'JSON Data', typeClass: 'Data' }) { }
            export class Cif extends Create<CifFile>({ name: 'CIF File', typeClass: 'Data' }) { }
            export class Ply extends Create<PlyFile>({ name: 'PLY File', typeClass: 'Data' }) { }
            export class Ccp4 extends Create<Ccp4File>({ name: 'CCP4/MRC/MAP File', typeClass: 'Data' }) { }
            export class Dsn6 extends Create<Dsn6File>({ name: 'DSN6/BRIX File', typeClass: 'Data' }) { }
    
            export type BlobEntry = { id: string } &
                ( { kind: 'json', data: unknown }
                | { kind: 'string', data: string }
                | { kind: 'binary', data: Uint8Array }
                | { kind: 'cif', data: CifFile }
                | { kind: 'ccp4', data: Ccp4File }
                | { kind: 'dsn6', data: Dsn6File }
                | { kind: 'ply', data: PlyFile }
                // For non-build in extensions
                | { kind: 'custom', data: unknown, tag: string })
            export type BlobData = BlobEntry[]
            export class Blob extends Create<BlobData>({ name: 'Format Blob', typeClass: 'Data' }) { }
        }
    
        export namespace Molecule {
            export class Trajectory extends Create<ReadonlyArray<_Model>>({ name: 'Trajectory', typeClass: 'Object' }) { }
            export class Model extends Create<_Model>({ name: 'Model', typeClass: 'Object' }) { }
            export class Structure extends Create<_Structure>({ name: 'Structure', typeClass: 'Object' }) { }
    
            export namespace Structure {
                export class Representation3D extends CreateRepresentation3D<StructureRepresentation<any> | ShapeRepresentation<any, any, any>, Structure>({ name: 'Structure 3D' }) { }
    
                export interface Representation3DStateData {
                    source: Representation3D,
                    /** used to restore state when the obj is removed */
                    initialState: Partial<StructureRepresentationState>,
                    state: Partial<StructureRepresentationState>,
                    info?: unknown
                }
                export class Representation3DState extends Create<Representation3DStateData>({ name: 'Structure 3D State', typeClass: 'Object' }) { }
            }
        }
    
        export namespace Volume {
            export class Data extends Create<VolumeData>({ name: 'Volume Data', typeClass: 'Object' }) { }
            export class Representation3D extends CreateRepresentation3D<VolumeRepresentation<any>>({ name: 'Volume 3D' }) { }
        }
    
        export namespace Shape {
            export class Provider extends Create<ShapeProvider<any, any, any>>({ name: 'Shape Provider', typeClass: 'Object' }) { }
            export class Representation3D extends CreateRepresentation3D<ShapeRepresentation<any, any, any>>({ name: 'Shape 3D' }) { }
        }
    }
    
    export namespace PluginStateTransform {
        export const CreateBuiltIn = StateTransformer.factory('ms-plugin');
        export const BuiltIn = StateTransformer.builderFactory('ms-plugin');
    }