Skip to content
Snippets Groups Projects
Select Git revision
  • 2c5c43fa091b3a4b6446e44f6e2761f66f04c43d
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

README

Blame
  • camera.ts 1.94 KiB
    /**
     * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author David Sehnal <david.sehnal@gmail.com>
     */
    
    import { PluginContext } from 'mol-plugin/context';
    import { PluginCommands } from 'mol-plugin/command';
    import { PluginStateObject as SO } from '../../state/objects';
    import { CameraSnapshotManager } from 'mol-plugin/state/camera';
    
    export function registerDefault(ctx: PluginContext) {
        Reset(ctx);
        SetSnapshot(ctx);
        Snapshots(ctx);
    }
    
    export function Reset(ctx: PluginContext) {
        PluginCommands.Camera.Reset.subscribe(ctx, () => {
            const sel = ctx.state.dataState.select(q => q.root.subtree().ofType(SO.Molecule.Structure));
            if (!sel.length) return;
    
            const center = (sel[0].obj! as SO.Molecule.Structure).data.boundary.sphere.center;
            ctx.canvas3d.camera.setState({ target: center });
            ctx.canvas3d.requestDraw(true);
    
            // TODO
            // ctx.canvas3d.resetCamera();
        })
    }
    
    export function SetSnapshot(ctx: PluginContext) {
        PluginCommands.Camera.SetSnapshot.subscribe(ctx, ({ snapshot, durationMs }) => {
            ctx.canvas3d.camera.transition.apply(snapshot, durationMs);
        })
    }
    
    export function Snapshots(ctx: PluginContext) {
        PluginCommands.Camera.Snapshots.Clear.subscribe(ctx, () => {
            ctx.state.cameraSnapshots.clear();
        });
    
        PluginCommands.Camera.Snapshots.Remove.subscribe(ctx, ({ id }) => {
            ctx.state.cameraSnapshots.remove(id);
        });
    
        PluginCommands.Camera.Snapshots.Add.subscribe(ctx, ({ name, description }) => {
            const entry = CameraSnapshotManager.Entry(ctx.canvas3d.camera.getSnapshot(), name, description);
            ctx.state.cameraSnapshots.add(entry);
        });
    
        PluginCommands.Camera.Snapshots.Apply.subscribe(ctx, ({ id }) => {
            const e = ctx.state.cameraSnapshots.getEntry(id);
            return PluginCommands.Camera.SetSnapshot.dispatch(ctx, { snapshot: e.snapshot, durationMs: 200 });
        });
    }