Viewer State Management
Canvas3D Properties
Section titled “Canvas3D Properties”Properties of the Canvas3D can be
changed using PluginCommands.
Change background, highlight, or select color
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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 } });