Skip to content
Snippets Groups Projects
Commit 73e187c5 authored by David Sehnal's avatar David Sehnal
Browse files

fixed scene syncing issue, temporarily removed SceneLabels from behaviors

parent a7e45077
No related branches found
No related tags found
No related merge requests found
......@@ -162,7 +162,7 @@ namespace Canvas3D {
reprRenderObjects.forEach((_, _repr) => { changed = _repr.mark(loci.loci, action) || changed })
}
if (changed) {
scene.update(true)
scene.update(void 0, true)
const prevPickDirty = pickDirty
draw(true)
pickDirty = prevPickDirty // marking does not change picking buffers
......@@ -317,16 +317,17 @@ namespace Canvas3D {
const oldRO = reprRenderObjects.get(repr)
const newRO = new Set<GraphicsRenderObject>()
repr.renderObjects.forEach(o => newRO.add(o))
if (oldRO) {
if (!SetUtils.areEqual(newRO, oldRO)) {
for (const o of Array.from(newRO)) { if (!oldRO.has(o)) scene.add(o) }
for (const o of Array.from(newRO)) { if (!oldRO.has(o)) scene.add(o); }
for (const o of Array.from(oldRO)) { if (!newRO.has(o)) scene.remove(o) }
}
} else {
repr.renderObjects.forEach(o => scene.add(o))
}
reprRenderObjects.set(repr, newRO)
scene.update()
scene.update(repr.renderObjects, false)
if (debugHelper.isEnabled) debugHelper.update()
isUpdating = false
requestDraw(true)
......@@ -354,14 +355,14 @@ namespace Canvas3D {
isUpdating = true
renderObjects.forEach(o => scene.remove(o))
reprRenderObjects.delete(repr)
scene.update()
scene.update(void 0, false)
if (debugHelper.isEnabled) debugHelper.update()
isUpdating = false
requestDraw(true)
reprCount.next(reprRenderObjects.size)
}
},
update: () => scene.update(),
update: () => scene.update(void 0, false),
clear: () => {
reprRenderObjects.clear()
scene.clear()
......
......@@ -81,7 +81,7 @@ export class BoundingSphereHelper {
}
})
this.scene.update()
this.scene.update(void 0, false);
}
syncVisibility() {
......
......@@ -7,7 +7,7 @@
import { Renderable } from './renderable'
import { WebGLContext } from './webgl/context';
import { RenderableValues, BaseValues } from './renderable/schema';
import { RenderObject, createRenderable } from './render-object';
import { RenderObject, createRenderable, GraphicsRenderObject } from './render-object';
import { Object3D } from './object3d';
import { Sphere3D } from 'mol-math/geometry';
import { Vec3 } from 'mol-math/linear-algebra';
......@@ -57,8 +57,8 @@ interface Scene extends Object3D {
readonly renderables: ReadonlyArray<Renderable<RenderableValues & BaseValues>>
readonly boundingSphere: Sphere3D
update: (keepBoundingSphere?: boolean) => void
add: (o: RenderObject) => void
update: (objects: ArrayLike<GraphicsRenderObject> | undefined, keepBoundingSphere: boolean) => void
add: (o: RenderObject) => Renderable<any>
remove: (o: RenderObject) => void
has: (o: RenderObject) => boolean
clear: () => void
......@@ -80,10 +80,18 @@ namespace Scene {
get direction () { return object3d.direction },
get up () { return object3d.up },
update: (keepBoundingSphere?: boolean) => {
update(objects, keepBoundingSphere) {
Object3D.update(object3d)
for (let i = 0, il = renderables.length; i < il; ++i) {
renderables[i].update()
if (objects) {
for (let i = 0, il = objects.length; i < il; ++i) {
const o = renderableMap.get(objects[i]);
if (!o) continue;
o.update();
}
} else {
for (let i = 0, il = renderables.length; i < il; ++i) {
renderables[i].update()
}
}
if (!keepBoundingSphere) boundingSphereDirty = true
},
......@@ -94,8 +102,10 @@ namespace Scene {
renderables.sort(renderableSort)
renderableMap.set(o, renderable)
boundingSphereDirty = true
return renderable;
} else {
console.warn(`RenderObject with id '${o.id}' already present`)
return renderableMap.get(o)!
}
},
remove: (o: RenderObject) => {
......
......@@ -52,7 +52,7 @@ export const DefaultPluginSpec: PluginSpec = {
PluginSpec.Behavior(PluginBehaviors.Representation.DefaultLociLabelProvider),
PluginSpec.Behavior(PluginBehaviors.Camera.FocusLociOnSelect, { minRadius: 20, extraRadius: 4 }),
PluginSpec.Behavior(PluginBehaviors.Animation.StructureAnimation, { rotate: false, rotateValue: 0, explode: false, explodeValue: 0 }),
PluginSpec.Behavior(PluginBehaviors.Labels.SceneLabels),
// PluginSpec.Behavior(PluginBehaviors.Labels.SceneLabels),
PluginSpec.Behavior(PluginBehaviors.CustomProps.PDBeStructureQualityReport, { autoAttach: true }),
PluginSpec.Behavior(PluginBehaviors.CustomProps.RCSBAssemblySymmetry, { autoAttach: 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