123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- * Copyright (c) 2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { PresetStructureRepresentations } from '../../mol-plugin-state/builder/structure/representation-preset';
- import { Color } from '../../mol-util/color';
- import { CollapsableControls, PurePluginUIComponent } from '../base';
- import { Button } from '../controls/common';
- import { MagicWandSvg } from '../controls/icons';
- import { ParamDefinition as PD } from '../../mol-util/param-definition';
- import { PostprocessingParams } from '../../mol-canvas3d/passes/postprocessing';
- import { PluginConfig } from '../../mol-plugin/config';
- import { StructureComponentManager } from '../../mol-plugin-state/manager/structure/component';
- export class StructureQuickStylesControls extends CollapsableControls {
- defaultState() {
- return {
- isCollapsed: false,
- header: 'Quick Styles',
- brand: { accent: 'gray' as const, svg: MagicWandSvg }
- };
- }
- renderControls() {
- return <>
- <QuickStyles />
- </>;
- }
- }
- export class QuickStyles extends PurePluginUIComponent {
- async default() {
- const { structures } = this.plugin.managers.structure.hierarchy.selection;
- const preset = this.plugin.config.get(PluginConfig.Structure.DefaultRepresentationPreset) || PresetStructureRepresentations.auto.id;
- const provider = this.plugin.builders.structure.representation.resolveProvider(preset);
- await this.plugin.managers.structure.component.applyPreset(structures, provider);
- this.plugin.managers.structure.component.setOptions(PD.getDefaultValues(StructureComponentManager.OptionsParams));
- if (this.plugin.canvas3d) {
- const p = PD.getDefaultValues(PostprocessingParams);
- this.plugin.canvas3d.setProps({
- postprocessing: { outline: p.outline, occlusion: p.occlusion }
- });
- }
- }
- async illustrative() {
- const { structures } = this.plugin.managers.structure.hierarchy.selection;
- await this.plugin.managers.structure.component.applyPreset(structures, PresetStructureRepresentations.illustrative);
- if (this.plugin.canvas3d) {
- this.plugin.canvas3d.setProps({
- postprocessing: {
- outline: {
- name: 'on',
- params: { scale: 1, color: Color(0x000000), threshold: 0.25, includeTransparent: true }
- },
- occlusion: {
- name: 'on',
- params: { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1 }
- },
- shadow: { name: 'off', params: {} },
- }
- });
- }
- }
- async stylized() {
- this.plugin.managers.structure.component.setOptions({ ...this.plugin.managers.structure.component.state.options, ignoreLight: true });
- if (this.plugin.canvas3d) {
- const pp = this.plugin.canvas3d.props.postprocessing;
- this.plugin.canvas3d.setProps({
- postprocessing: {
- outline: {
- name: 'on',
- params: pp.outline.name === 'on'
- ? pp.outline.params
- : { scale: 1, color: Color(0x000000), threshold: 0.33, includeTransparent: true }
- },
- occlusion: {
- name: 'on',
- params: pp.occlusion.name === 'on'
- ? pp.occlusion.params
- : { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1 }
- },
- shadow: { name: 'off', params: {} },
- }
- });
- }
- }
- render() {
- return <div className='msp-flex-row'>
- <Button noOverflow title='Applies default representation preset. Set outline and occlusion effects to defaults.' onClick={() => this.default()} style={{ width: 'auto' }}>
- Default
- </Button>
- <Button noOverflow title='Applies no representation preset. Enables outline and occlusion effects. Enables ignore-light representation parameter.' onClick={() => this.stylized()} style={{ width: 'auto' }}>
- Stylized
- </Button>
- <Button noOverflow title='Applies illustrative representation preset. Enables outline and occlusion effects. Enables ignore-light parameter.' onClick={() => this.illustrative()} style={{ width: 'auto' }}>
- Illustrative
- </Button>
- </div>;
- }
- }
|