Skip to content
Snippets Groups Projects
Select Git revision
  • 0b143812551e417008a53b88c08eb489e45f8a7e
  • 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

render-structure.ts

Blame
  • render-structure.ts 8.16 KiB
    /**
     * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author Alexander Rose <alexander.rose@weirdbyte.de>
     */
    
    import './index.html';
    import { Canvas3D } from '../../mol-canvas3d/canvas3d';
    import { CIF, CifFrame } from '../../mol-io/reader/cif';
    import { Model, Structure } from '../../mol-model/structure';
    import { ColorTheme } from '../../mol-theme/color';
    import { SizeTheme } from '../../mol-theme/size';
    import { CartoonRepresentationProvider } from '../../mol-repr/structure/representation/cartoon';
    import { trajectoryFromMmCIF } from '../../mol-model-formats/structure/mmcif';
    import { MolecularSurfaceRepresentationProvider } from '../../mol-repr/structure/representation/molecular-surface';
    import { BallAndStickRepresentationProvider } from '../../mol-repr/structure/representation/ball-and-stick';
    import { GaussianSurfaceRepresentationProvider } from '../../mol-repr/structure/representation/gaussian-surface';
    import { resizeCanvas } from '../../mol-canvas3d/util';
    import { Representation } from '../../mol-repr/representation';
    import { throttleTime } from 'rxjs/operators';
    import { MarkerAction } from '../../mol-util/marker-action';
    import { EveryLoci } from '../../mol-model/loci';
    import { lociLabel } from '../../mol-theme/label';
    import { InteractionsRepresentationProvider } from '../../mol-model-props/computed/representations/interactions';
    import { InteractionsProvider } from '../../mol-model-props/computed/interactions';
    import { SecondaryStructureProvider } from '../../mol-model-props/computed/secondary-structure';
    import { SyncRuntimeContext } from '../../mol-task/execution/synchronous';
    import { AssetManager } from '../../mol-util/assets';
    
    const parent = document.getElementById('app')!;
    parent.style.width = '100%';
    parent.style.height = '100%';
    
    const canvas = document.createElement('canvas');
    parent.appendChild(canvas);
    resizeCanvas(canvas, parent);
    
    const canvas3d = Canvas3D.fromCanvas(canvas);
    canvas3d.animate();
    
    const info = document.createElement('div');
    info.style.position = 'absolute';
    info.style.fontFamily = 'sans-serif';
    info.style.fontSize = '16pt';
    info.style.bottom = '20px';
    info.style.right = '20px';
    info.style.color = 'white';
    parent.appendChild(info);
    
    let prevReprLoci = Representation.Loci.Empty;
    canvas3d.input.move.pipe(throttleTime(100)).subscribe(({x, y}) => {
        const pickingId = canvas3d.identify(x, y);
        let label = '';
        if (pickingId) {
            const reprLoci = canvas3d.getLoci(pickingId);
            label = lociLabel(reprLoci.loci);
            if (!Representation.Loci.areEqual(prevReprLoci, reprLoci)) {
                canvas3d.mark(prevReprLoci, MarkerAction.RemoveHighlight);
                canvas3d.mark(reprLoci, MarkerAction.Highlight);
                prevReprLoci = reprLoci;
            }
        } else {
            canvas3d.mark({ loci: EveryLoci }, MarkerAction.RemoveHighlight);
            prevReprLoci = Representation.Loci.Empty;
        }
        info.innerHTML = label;
    });
    
    async function parseCif(data: string|Uint8Array) {
        const comp = CIF.parse(data);