Skip to content
Snippets Groups Projects
Commit 03067ca6 authored by Alexander Rose's avatar Alexander Rose
Browse files

wip, structure tools quality option

parent a69f1337
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,7 @@ import { ColorOptions, ParameterControls } from '../controls/parameters'; ...@@ -12,6 +12,7 @@ import { ColorOptions, ParameterControls } from '../controls/parameters';
import { Color } from '../../../mol-util/color'; import { Color } from '../../../mol-util/color';
import { ButtonSelect, Options } from '../controls/common' import { ButtonSelect, Options } from '../controls/common'
import { ParamDefinition as PD } from '../../../mol-util/param-definition'; import { ParamDefinition as PD } from '../../../mol-util/param-definition';
import { VisualQuality, VisualQualityOptions } from '../../../mol-geo/geometry/base';
abstract class BaseStructureRepresentationControls extends PluginUIComponent { abstract class BaseStructureRepresentationControls extends PluginUIComponent {
onChange = (value: string) => { onChange = (value: string) => {
...@@ -94,23 +95,30 @@ export class StructureRepresentationControls extends PluginUIComponent { ...@@ -94,23 +95,30 @@ export class StructureRepresentationControls extends PluginUIComponent {
} }
onChange = async (p: { param: PD.Base<any>, name: string, value: any }) => { onChange = async (p: { param: PD.Base<any>, name: string, value: any }) => {
if (p.name === 'showHydrogens') { if (p.name === 'options') {
await this.plugin.helpers.structureRepresentation.setIgnoreHydrogens(!p.value) await this.plugin.helpers.structureRepresentation.setIgnoreHydrogens(!p.value.showHydrogens)
} await this.plugin.helpers.structureRepresentation.setQuality(p.value.visualQuality)
this.forceUpdate() this.forceUpdate()
} }
}
get params () { get params () {
const values = this.values const { options } = this.values
return { return {
showHydrogens: PD.Boolean(values.showHydrogens) options: PD.Group({
showHydrogens: PD.Boolean(options.showHydrogens),
visualQuality: PD.Select<VisualQuality>(options.visualQuality, VisualQualityOptions),
}, { isExpanded: true })
} }
} }
get values () { get values () {
const { structureRepresentation: rep } = this.plugin.helpers const { structureRepresentation: rep } = this.plugin.helpers
return { return {
showHydrogens: !rep.ignoreHydrogens options: {
showHydrogens: !rep.ignoreHydrogens,
visualQuality: rep.quality,
}
} }
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import { PluginStateObject as PSO } from '../../mol-plugin/state/objects'; import { PluginStateObject as PSO } from '../../mol-plugin/state/objects';
import { StateTransforms } from '../../mol-plugin/state/transforms'; import { StateTransforms } from '../../mol-plugin/state/transforms';
import { StateTransformer, StateSelection, StateObjectCell, StateTransform } from '../../mol-state'; import { StateTransformer, StateSelection, StateObjectCell, StateTransform, StateBuilder } from '../../mol-state';
import { StructureElement, Structure, StructureSelection, QueryContext } from '../../mol-model/structure'; import { StructureElement, Structure, StructureSelection, QueryContext } from '../../mol-model/structure';
import { PluginContext } from '../context'; import { PluginContext } from '../context';
import { StructureRepresentation3DHelpers } from '../state/transforms/representation'; import { StructureRepresentation3DHelpers } from '../state/transforms/representation';
...@@ -14,8 +14,10 @@ import Expression from '../../mol-script/language/expression'; ...@@ -14,8 +14,10 @@ import Expression from '../../mol-script/language/expression';
import { compile } from '../../mol-script/runtime/query/compiler'; import { compile } from '../../mol-script/runtime/query/compiler';
import { StructureSelectionQueries as Q } from '../util/structure-selection-helper'; import { StructureSelectionQueries as Q } from '../util/structure-selection-helper';
import { MolScriptBuilder as MS } from '../../mol-script/language/builder'; import { MolScriptBuilder as MS } from '../../mol-script/language/builder';
import { VisualQuality } from '../../mol-geo/geometry/base';
type StructureTransform = StateObjectCell<PSO.Molecule.Structure, StateTransform<StateTransformer<any, PSO.Molecule.Structure, any>>> type StructureTransform = StateObjectCell<PSO.Molecule.Structure, StateTransform<StateTransformer<any, PSO.Molecule.Structure, any>>>
type RepresentationTransform = StateObjectCell<PSO.Molecule.Structure.Representation3D, StateTransform<StateTransformer<any, PSO.Molecule.Structure.Representation3D, any>>>
const RepresentationManagerTag = 'representation-controls' const RepresentationManagerTag = 'representation-controls'
export function getRepresentationManagerTag(type: string) { export function getRepresentationManagerTag(type: string) {
...@@ -65,9 +67,10 @@ export class StructureRepresentationHelper { ...@@ -65,9 +67,10 @@ export class StructureRepresentationHelper {
} else { } else {
const combinedLoci = getCombinedLoci(modifier, loci, StructureElement.Loci(s, [])) const combinedLoci = getCombinedLoci(modifier, loci, StructureElement.Loci(s, []))
const params = StructureRepresentation3DHelpers.getDefaultParams(this.plugin, type as any, s) const params = StructureRepresentation3DHelpers.getDefaultParams(this.plugin, type as any, s)
if (params.type.params.ignoreHydrogens !== undefined) {
params.type.params.ignoreHydrogens = this._ignoreHydrogens const p = params.type.params
} if (p.ignoreHydrogens !== undefined) p.ignoreHydrogens = this._ignoreHydrogens
if (p.quality !== undefined) p.quality = this._quality
update.to(structure.transform.ref) update.to(structure.transform.ref)
.apply( .apply(
...@@ -119,32 +122,50 @@ export class StructureRepresentationHelper { ...@@ -119,32 +122,50 @@ export class StructureRepresentationHelper {
await this.plugin.runTask(state.updateTree(update, { doNotUpdateCurrent: true })) await this.plugin.runTask(state.updateTree(update, { doNotUpdateCurrent: true }))
} }
private _ignoreHydrogens = false async eachRepresentation(callback: (repr: RepresentationTransform, update: StateBuilder.Root) => void) {
get ignoreHydrogens () { return this._ignoreHydrogens }
async setIgnoreHydrogens(ignoreHydrogens: boolean) {
if (ignoreHydrogens === this._ignoreHydrogens) return
const { registry } = this.plugin.structureRepresentation const { registry } = this.plugin.structureRepresentation
const state = this.plugin.state.dataState; const state = this.plugin.state.dataState;
const update = state.build() const update = state.build()
const structures = state.select(StateSelection.Generators.rootsOfType(PSO.Molecule.Structure)) const structures = state.select(StateSelection.Generators.rootsOfType(PSO.Molecule.Structure))
for (const structure of structures) { for (const structure of structures) {
for (let i = 0, il = registry.types.length; i < il; ++i) { for (let i = 0, il = registry.types.length; i < il; ++i) {
const type = registry.types[i][0] const repr = this.getRepresentation(structure.transform.ref, registry.types[i][0])
const repr = this.getRepresentation(structure.transform.ref, type) if (repr) callback(repr, update)
if (repr && repr.params && repr.params.values.type.params.ignoreHydrogens !== undefined) { }
}
await this.plugin.runTask(state.updateTree(update, { doNotUpdateCurrent: true }))
}
private _ignoreHydrogens = false
get ignoreHydrogens () { return this._ignoreHydrogens }
async setIgnoreHydrogens(ignoreHydrogens: boolean) {
if (ignoreHydrogens === this._ignoreHydrogens) return
await this.eachRepresentation((repr, update) => {
if (repr.params && repr.params.values.type.params.ignoreHydrogens !== undefined) {
const { name, params } = repr.params.values.type const { name, params } = repr.params.values.type
update.to(repr.transform.ref).update( update.to(repr.transform.ref).update(
StateTransforms.Representation.StructureRepresentation3D, StateTransforms.Representation.StructureRepresentation3D,
props => ({ ...props, type: { name, params: { ...params, ignoreHydrogens }}}) props => ({ ...props, type: { name, params: { ...params, ignoreHydrogens }}})
) )
} }
})
this._ignoreHydrogens = ignoreHydrogens
} }
}
await this.plugin.runTask(state.updateTree(update, { doNotUpdateCurrent: true }))
this._ignoreHydrogens = ignoreHydrogens private _quality = 'auto' as VisualQuality
get quality () { return this._quality }
async setQuality(quality: VisualQuality) {
if (quality === this._quality) return
await this.eachRepresentation((repr, update) => {
if (repr.params && repr.params.values.type.params.quality !== undefined) {
const { name, params } = repr.params.values.type
update.to(repr.transform.ref).update(
StateTransforms.Representation.StructureRepresentation3D,
props => ({ ...props, type: { name, params: { ...params, quality }}})
)
}
})
this._quality = quality
} }
async preset() { async preset() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment