123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
- import { PluginBehavior } from '../behavior';
- import { PluginStateObject as SO } from '../../state/base';
- import { EmptyLoci, Loci, areLociEqual } from 'mol-model/loci';
- import { MarkerAction } from 'mol-geo/geometry/marker-data';
- export const AddRepresentationToCanvas = PluginBehavior.create({
- name: 'add-representation-to-canvas',
- ctor: class extends PluginBehavior.Handler {
- register(): void {
- this.subscribeObservable(this.ctx.events.state.data.object.created, o => {
- if (!SO.isRepresentation3D(o.obj)) return;
- this.ctx.canvas3d.add(o.obj.data);
- this.ctx.canvas3d.requestDraw(true);
- });
- this.subscribeObservable(this.ctx.events.state.data.object.updated, o => {
- const oo = o.obj;
- if (!SO.isRepresentation3D(oo)) return;
- this.ctx.canvas3d.add(oo.data);
- this.ctx.canvas3d.requestDraw(true);
- });
- this.subscribeObservable(this.ctx.events.state.data.object.removed, o => {
- const oo = o.obj;
- if (!SO.isRepresentation3D(oo)) return;
- this.ctx.canvas3d.remove(oo.data);
- this.ctx.canvas3d.requestDraw(true);
- oo.data.destroy();
- });
- this.subscribeObservable(this.ctx.events.state.data.object.replaced, o => {
- if (o.oldObj && SO.isRepresentation3D(o.oldObj)) {
- this.ctx.canvas3d.remove(o.oldObj.data);
- this.ctx.canvas3d.requestDraw(true);
- o.oldObj.data.destroy();
- }
- if (o.newObj && SO.isRepresentation3D(o.newObj)) {
- this.ctx.canvas3d.add(o.newObj.data);
- this.ctx.canvas3d.requestDraw(true);
- }
- });
- }
- },
- display: { name: 'Add Representation To Canvas', group: 'Data' }
- });
- export const HighlightLoci = PluginBehavior.create({
- name: 'representation-highlight-loci',
- ctor: class extends PluginBehavior.Handler {
- register(): void {
- let prevLoci: Loci = EmptyLoci, prevRepr: any = void 0;
- this.subscribeObservable(this.ctx.behaviors.canvas.highlightLoci, current => {
- if (!this.ctx.canvas3d) return;
- if (current.repr !== prevRepr || !areLociEqual(current.loci, prevLoci)) {
- this.ctx.canvas3d.mark(prevLoci, MarkerAction.RemoveHighlight);
- this.ctx.canvas3d.mark(current.loci, MarkerAction.Highlight);
- prevLoci = current.loci;
- prevRepr = current.repr;
- }
- });
- }
- },
- display: { name: 'Highlight Loci on Canvas', group: 'Data' }
- });
- export const SelectLoci = PluginBehavior.create({
- name: 'representation-select-loci',
- ctor: class extends PluginBehavior.Handler {
- register(): void {
- this.subscribeObservable(this.ctx.behaviors.canvas.selectLoci, ({ loci }) => {
- if (!this.ctx.canvas3d) return;
- this.ctx.canvas3d.mark(loci, MarkerAction.Toggle);
- });
- }
- },
- display: { name: 'Select Loci on Canvas', group: 'Data' }
- });
|