Ver Fonte

mol-plugin: fixed PluginCommands.State.Highlight (wip)

David Sehnal há 5 anos atrás
pai
commit
504c8626dc
1 ficheiros alterados com 14 adições e 11 exclusões
  1. 14 11
      src/mol-plugin/behavior/static/state.ts

+ 14 - 11
src/mol-plugin/behavior/static/state.ts

@@ -12,6 +12,8 @@ import { PluginStateObject as SO } from '../../state/objects';
 import { getFormattedTime } from '../../../mol-util/date';
 import { readFromFile } from '../../../mol-util/data-source';
 import { download } from '../../../mol-util/download';
+import { Structure } from '../../../mol-model/structure';
+import { EmptyLoci, EveryLoci } from '../../../mol-model/loci';
 
 export function registerDefault(ctx: PluginContext) {
     SyncBehaviors(ctx);
@@ -99,24 +101,25 @@ function setVisibilityVisitor(t: StateTransform, tree: StateTree, ctx: { state:
     ctx.state.updateCellState(t.ref, { isHidden: ctx.value });
 }
 
-// TODO make isHighlighted and isSelect part of StateObjectCell.State and subscribe from there???
-// TODO select structures of subtree
-// TODO should also work for volumes and shapes
 export function Highlight(ctx: PluginContext) {
     PluginCommands.State.Highlight.subscribe(ctx, ({ state, ref }) => {
-        // const cell = state.select(ref)[0]
-        // const repr = cell && SO.isRepresentation3D(cell.obj) ? cell.obj.data : undefined
-        // if (cell && cell.obj && cell.obj.type === PluginStateObject.Molecule.Structure.type) {
-        //     ctx.behaviors.canvas3d.highlight.next({ current: { loci: Structure.Loci(cell.obj.data) } });
-        // } else if (repr) {
-        //     ctx.behaviors.canvas3d.highlight.next({ current: { loci: EveryLoci, repr } });
-        // }
+        const cell = state.select(ref)[0];
+        if (!cell) return;
+        if (SO.Molecule.Structure.is(cell.obj)) {
+            ctx.interactivity.lociHighlights.highlightOnly({ loci: Structure.Loci(cell.obj.data) });
+        } else if (cell && SO.isRepresentation3D(cell.obj)) {
+            const loci = SO.Molecule.Structure.is(cell.obj.data.source) ? Structure.Loci(cell.obj.data.source.data) : EveryLoci
+            ctx.interactivity.lociHighlights.highlightOnly({ loci, repr: cell.obj.data.repr });
+        }
+
+        // TODO: highlight volumes and shapes?
+        // TODO: select structures of subtree?
     });
 }
 
 export function ClearHighlight(ctx: PluginContext) {
     PluginCommands.State.ClearHighlight.subscribe(ctx, ({ state, ref }) => {
-        // ctx.behaviors.canvas3d.highlight.next({ current: { loci: EmptyLoci } });
+        ctx.interactivity.lociHighlights.highlightOnly({ loci: EmptyLoci });
     });
 }