Viewer State Management
Canvas3D Properties
Properties of the Canvas3D can be changed using PluginCommands.
Change background, highlight, or select color
import { ColorNames } from 'molstar/lib/mol-util/color/names';
import { PluginCommands } from 'molstar/lib/mol-plugin/commands';
const renderer = plugin.canvas3d!.props.renderer;
PluginCommands.Canvas3D.SetSettings(plugin, { settings: { renderer: { ...renderer, backgroundColor: ColorNames.red /* or: 0xff0000 as Color */ } } });Similarly, highlightColor and selectColor can be updated.
Interactivity
Interactivity in Mol* is based on the concept of Loci. A Loci usually references a collection of objects and can be created by a Selection. For example, the Loci captures all atoms in the chain with label_asym_id B of a protein:
import { Script } from 'molstar/lib/mol-script/script';
import { StructureSelection } from 'molstar/lib/mol-model/structure/query';
const data = plugin.managers.structure.hierarchy.current.structures[0]?.cell.obj?.data;
if (!data) return;
const selection = Script.getStructureSelection(Q => Q.struct.generator.atomGroups({
'chain-test': Q.core.rel.eq(['B', Q.ammp('label_asym_id')])
}), data);
const loci = StructureSelection.toLociWithSourceUnits(selection);A Loci can be used to trigger custom Behaviors.
Log message to Mol* console
The built-in console in the bottom center of the plugin shows log entries.
plugin.log.message('This message will appear in the Mol* console');Other log levels are: info, warn, and error.
Show toast message
Toast messages will appear in the bottom right of the plugin and will linger for a limited time before disappearing.
import { PluginCommands } from 'molstar/lib/mol-plugin/commands';
PluginCommands.Toast.Show(plugin, {
title: 'Custom Message',
message: 'A custom toast message that will disappear after 2 seconds.',
key: 'toast-custom',
timeoutMs: 2000
});Behaviors
The state of the Mol* plugin is usually governed by dynamic behaviors which can be set up in initial plugin specification or updated during the plugin runtime. This allows for high modularity and customizability of individual plugin instances.
Highlight Loci
Highlighting adds a transient overpaint to a representation that will linger until the mouse enters hovers over another object. Highlights can be applied to a previously defined Loci by:
plugin.managers.interactivity.lociHighlights.highlightOnly({ loci }); // loci: LociReset all highlights by:
plugin.managers.interactivity.clearHighlights();Select Loci
Selected elements will appear with distinct visuals and, if applicable, the corresponding sequence positions will be shown in the Sequence Viewer panel. Selections persist until removed, for example by clicking the background. A Loci is selected by:
plugin.managers.interactivity.lociSelects.select({ loci }); // loci: LociDeselect a specific Loci by:
plugin.managers.interactivity.lociSelects.deselect({ loci }); // loci: LociTo deselect everything:
plugin.managers.interactivity.lociSelects.deselectAll();Focus Loci
The focus representation shows a Loci in ball-and-stick representation and, additionally, visualizes non-covalent interactions between atoms of the Loci as well as interactions with surrounding residues (default: 5 Å).
plugin.managers.structure.focus.setFromLoci(loci);Extend an existing focus representation by:
plugin.managers.structure.focus.addFromLoci(loci); // loci: LociReset by:
plugin.managers.structure.focus.clear();Zoom Loci
A Loci can also be used to manipulate the camera. Zoom in by:
plugin.managers.camera.focusLoci(loci); // loci: LociRestore the default camera position by:
plugin.managers.camera.reset();Turn off view resetting on new representations
A new representation via something like
.apply(StateTransforms.Representation.VolumeRepresentation3D, ...)can reset the view to make the whole representation visible. When one wants to keep the view the same instead of having the rep reset the view, keep the view constant by:
plugin.canvas3d?.setProps({ camera: { manualReset: true } });