Ver código fonte

fix getUnitsSortedByVolume

dsehnal 4 anos atrás
pai
commit
60151c2c24
1 arquivos alterados com 13 adições e 7 exclusões
  1. 13 7
      src/mol-model/structure/structure/structure.ts

+ 13 - 7
src/mol-model/structure/structure/structure.ts

@@ -431,17 +431,23 @@ function cmpUnits(units: ArrayLike<Unit>, i: number, j: number) {
     return units[i].id - units[j].id;
 
 }
-function cmpUnitsVolume(units: ArrayLike<Unit>, i: number, j: number) {
-    return Box3D.volume(units[i].boundary.box) - Box3D.volume(units[i].boundary.box);
+function cmpUnitGroupVolume(units: ArrayLike<[index: number, volume: number]>, i: number, j: number) {
+    const d = units[i][1] - units[j][1];
+    if (d === 0) return units[i][0] - units[j][0];
+    return d;
 }
 
 function getUnitsSortedByVolume(structure: Structure) {
-    const { units } = structure;
-    const unitsByVolume: Unit[] = [];
-    for (let i = 0, _i = units.length; i < _i; i++) {
-        unitsByVolume[i] = units[i];
+    const { unitSymmetryGroups } = structure;
+    const groups = unitSymmetryGroups.map((g, i) => [i, Box3D.volume(g.units[0].lookup3d.boundary.box)] as [number, number]);
+    sort(groups, 0, groups.length, cmpUnitGroupVolume, arraySwap);
+    const ret: Unit[] = [];
+    for (const [i] of groups) {
+        for (const u of unitSymmetryGroups[i].units) {
+            ret.push(u);
+        }
     }
-    return sort(unitsByVolume, 0, unitsByVolume.length, cmpUnitsVolume, arraySwap);
+    return ret;
 }
 
 function getModels(s: Structure) {