Browse Source

fixed bounding sphere helper removal of old spheres

Alexander Rose 6 years ago
parent
commit
5f67256899
2 changed files with 9 additions and 2 deletions
  1. 2 2
      src/mol-canvas3d/canvas3d.ts
  2. 7 0
      src/mol-canvas3d/helper/bounding-sphere-helper.ts

+ 2 - 2
src/mol-canvas3d/canvas3d.ts

@@ -299,11 +299,11 @@ namespace Canvas3D {
                 repr.renderObjects.forEach(o => scene.add(o))
             }
             reprRenderObjects.set(repr, newRO)
-            reprCount.next(reprRenderObjects.size)
             scene.update()
             if (debugHelper.isEnabled) debugHelper.update()
             isUpdating = false
             requestDraw(true)
+            reprCount.next(reprRenderObjects.size)
         }
 
         handleResize()
@@ -327,11 +327,11 @@ namespace Canvas3D {
                     isUpdating = true
                     renderObjects.forEach(o => scene.remove(o))
                     reprRenderObjects.delete(repr)
-                    reprCount.next(reprRenderObjects.size)
                     scene.update()
                     if (debugHelper.isEnabled) debugHelper.update()
                     isUpdating = false
                     requestDraw(true)
+                    reprCount.next(reprRenderObjects.size)
                 }
             },
             update: () => scene.update(),

+ 7 - 0
src/mol-canvas3d/helper/bounding-sphere-helper.ts

@@ -45,6 +45,8 @@ export class BoundingSphereHelper {
         if (newSceneData) this.sceneData = newSceneData
 
         const oldRO = new Set<RenderObject>()
+        this.objectsData.forEach((_, ro) => oldRO.add(ro))
+        this.instancesData.forEach((_, ro) => oldRO.add(ro))
         this.parent.forEach((r, ro) => {
             const objectData = this.objectsData.get(ro)
             const newObjectData = updateBoundingSphereData(this.scene, r.boundingSphere, objectData, ColorNames.tomato)
@@ -69,6 +71,11 @@ export class BoundingSphereHelper {
                 this.scene.remove(objectData.renderObject)
                 this.objectsData.delete(ro)
             }
+            const instanceData = this.instancesData.get(ro)
+            if (instanceData) {
+                this.scene.remove(instanceData.renderObject)
+                this.instancesData.delete(ro)
+            }
         })
 
         this.scene.update()