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

update point visual on coordinate changes

parent 0898c035
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,7 @@ import { RuntimeContext } from 'mol-task'
import { UnitsVisual, DefaultStructureProps } from '..';
import { getElementLoci, StructureElementIterator, markElement } from './util/element';
import { createTransforms, createColors, createSizes, createUnitsPointRenderObject } from './util/common';
import { deepEqual } from 'mol-util';
import { deepEqual, UUID } from 'mol-util';
import { Interval } from 'mol-data/int';
import { PickingId } from '../../../util/picking';
import { Loci, EmptyLoci, isEveryLoci } from 'mol-model/loci';
......@@ -58,6 +58,7 @@ export function ElementPointVisual(): UnitsVisual<ElementPointProps> {
let currentGroup: Unit.SymmetryGroup
let locationIt: LocationIterator
let vertices: ValueCell<Float32Array>
let currentConformationId: UUID
return {
get renderObject () { return renderObject },
......@@ -68,20 +69,31 @@ export function ElementPointVisual(): UnitsVisual<ElementPointProps> {
currentProps = Object.assign({}, DefaultElementPointProps, props)
currentGroup = group
locationIt = StructureElementIterator.fromGroup(group)
vertices = await createElementPointVertices(ctx, group.units[0], vertices)
const unit = group.units[0]
currentConformationId = Unit.conformationId(unit)
vertices = await createElementPointVertices(ctx, unit, vertices)
renderObject = await createUnitsPointRenderObject(ctx, group, vertices, locationIt, currentProps)
} else if (renderObject) {
if (group) currentGroup = group
const newProps = { ...currentProps, ...props }
const unit = currentGroup.units[0]
let updateTransform = false
let createVertices = false
let updateColor = false
let updateSize = false
const newConformationId = Unit.conformationId(unit)
if (newConformationId !== currentConformationId) {
currentConformationId = newConformationId
createVertices = true
}
if (currentGroup.units.length !== locationIt.instanceCount) updateTransform = true
if (!deepEqual(newProps.sizeTheme, currentProps.sizeTheme)) createVertices = true
if (!deepEqual(newProps.colorTheme, currentProps.colorTheme)) updateColor = true
if (!deepEqual(newProps.sizeTheme, currentProps.sizeTheme)) updateSize = true
......@@ -98,7 +110,7 @@ export function ElementPointVisual(): UnitsVisual<ElementPointProps> {
}
if (createVertices) {
await createElementPointVertices(ctx, currentGroup.units[0], vertices)
await createElementPointVertices(ctx, unit, vertices)
ValueCell.update(renderObject.values.aGroup, fillSerial(new Float32Array(locationIt.groupCount))) // TODO reuse array
ValueCell.update(renderObject.values.drawCount, locationIt.groupCount)
updateColor = true
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment