diff --git a/src/mol-repr/shape/representation.ts b/src/mol-repr/shape/representation.ts index d0cec8c695b11ae764bce218f07d7e4c6c2de871..7083810e3bc1d5a342f646b6fb6a77b3e5be1e87 100644 --- a/src/mol-repr/shape/representation.ts +++ b/src/mol-repr/shape/representation.ts @@ -95,14 +95,14 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa } if (updateState.createNew) { - renderObjects.length = 0 + renderObjects.length = 0 // clear list o renderObjects locationIt = ShapeGroupIterator.fromShape(_shape) const transform = createShapeTransform(_shape.transforms) const values = geometryUtils.createValues(_shape.geometry, transform, locationIt, _theme, newProps) const state = geometryUtils.createRenderableState(newProps) _renderObject = createRenderObject(_shape.geometry.kind, values, state) - if (_renderObject) renderObjects.push(_renderObject) + if (_renderObject) renderObjects.push(_renderObject) // add new renderObject to list } else { if (!_renderObject) { throw new Error('expected renderObject to be available') @@ -144,6 +144,7 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa } currentProps = newProps + // increment version updated.next(version++) }); } @@ -151,11 +152,11 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa return { label: 'Shape geometry', get groupCount () { return locationIt ? locationIt.count : 0 }, - get renderObjects () { return renderObjects }, get props () { return currentProps }, get params () { return currentParams }, get state() { return _state }, get theme() { return _theme }, + renderObjects, updated, createOrUpdate, getLoci(pickingId: PickingId) { diff --git a/src/mol-repr/structure/complex-representation.ts b/src/mol-repr/structure/complex-representation.ts index b3ca4d2358bf6803e0451ea8b3d7196a3d0a5640..05d82e964ea6794c1a1743211dea863c3e3346c4 100644 --- a/src/mol-repr/structure/complex-representation.ts +++ b/src/mol-repr/structure/complex-representation.ts @@ -16,10 +16,12 @@ import { RepresentationContext, RepresentationParamsGetter } from 'mol-repr/repr import { Theme, createEmptyTheme } from 'mol-theme/theme'; import { ParamDefinition as PD } from 'mol-util/param-definition'; import { Subject } from 'rxjs'; +import { GraphicsRenderObject } from 'mol-gl/render-object'; export function ComplexRepresentation<P extends StructureParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, P>, visualCtor: () => ComplexVisual<P>): StructureRepresentation<P> { let version = 0 const updated = new Subject<number>() + const renderObjects: GraphicsRenderObject[] = [] const _state = StructureRepresentationStateBuilder.create() let visual: ComplexVisual<P> | undefined @@ -40,6 +42,10 @@ export function ComplexRepresentation<P extends StructureParams>(label: string, if (!visual) visual = visualCtor() const promise = visual.createOrUpdate({ webgl: ctx.webgl, runtime }, _theme, _props, structure) if (promise) await promise + // update list of renderObjects + renderObjects.length = 0 + if (visual && visual.renderObject) renderObjects.push(visual.renderObject) + // increment version updated.next(version++) }); } @@ -81,13 +87,11 @@ export function ComplexRepresentation<P extends StructureParams>(label: string, get groupCount() { return visual ? visual.groupCount : 0 }, - get renderObjects() { - return visual && visual.renderObject ? [ visual.renderObject ] : [] - }, get props() { return _props }, get params() { return _params }, get state() { return _state }, get theme() { return _theme }, + renderObjects, updated, createOrUpdate, setState, diff --git a/src/mol-repr/structure/units-representation.ts b/src/mol-repr/structure/units-representation.ts index ccf0e37f31d6fc7fe69a0c0dbd926de9d2657030..ab8bb1d26eaba02884f724660f366eead917b016 100644 --- a/src/mol-repr/structure/units-representation.ts +++ b/src/mol-repr/structure/units-representation.ts @@ -31,6 +31,7 @@ export interface UnitsVisual<P extends UnitsParams> extends Visual<StructureGrou export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, P>, visualCtor: () => UnitsVisual<P>): StructureRepresentation<P> { let version = 0 const updated = new Subject<number>() + const renderObjects: GraphicsRenderObject[] = [] const _state = StructureRepresentationStateBuilder.create() let visuals = new Map<number, { group: Unit.SymmetryGroup, visual: UnitsVisual<P> }>() @@ -140,7 +141,14 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: R if (runtime.shouldUpdate) await runtime.update({ message: 'Creating or updating UnitsVisual', current: i, max: il }) } } + // update list of renderObjects + renderObjects.length = 0 + visuals.forEach(({ visual }) => { + if (visual.renderObject) renderObjects.push(visual.renderObject) + }) + // set new structure if (structure) _structure = structure + // increment version updated.next(version++) }); } @@ -199,17 +207,11 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: R }) return groupCount }, - get renderObjects() { - const renderObjects: GraphicsRenderObject[] = [] - visuals.forEach(({ visual }) => { - if (visual.renderObject) renderObjects.push(visual.renderObject) - }) - return renderObjects - }, get props() { return _props }, get params() { return _params }, get state() { return _state }, get theme() { return _theme }, + renderObjects, updated, createOrUpdate, setState, diff --git a/src/mol-repr/volume/representation.ts b/src/mol-repr/volume/representation.ts index 1822e400ee7579b4c2e30ac980e0d0c39de55db6..ac14576170376528c81837850a63c7b6460812e9 100644 --- a/src/mol-repr/volume/representation.ts +++ b/src/mol-repr/volume/representation.ts @@ -154,6 +154,7 @@ export type VolumeParams = typeof VolumeParams export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<VolumeData, P>, visualCtor: (volume: VolumeData) => VolumeVisual<P>): VolumeRepresentation<P> { let version = 0 const updated = new Subject<number>() + const renderObjects: GraphicsRenderObject[] = [] const _state = Representation.createState() let visual: VolumeVisual<P> @@ -187,6 +188,10 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx: await visual.createOrUpdate({ webgl: ctx.webgl, runtime }, _theme, _props, volume) busy = false } + // update list of renderObjects + renderObjects.length = 0 + if (visual && visual.renderObject) renderObjects.push(visual.renderObject) + // increment version updated.next(version++) }); } @@ -220,13 +225,11 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx: get groupCount() { return visual ? visual.groupCount : 0 }, - get renderObjects() { - return visual && visual.renderObject ? [ visual.renderObject ] : [] - }, get props () { return _props }, get params() { return _params }, get state() { return _state }, get theme() { return _theme }, + renderObjects, updated, createOrUpdate, setState,