Browse Source

StructureSourceControls: Fix crash when selecting "Symmetry (assembly)"

David Sehnal 5 years ago
parent
commit
57cbb2f8b6

+ 1 - 1
src/mol-model/structure/structure/symmetry.ts

@@ -57,7 +57,7 @@ namespace StructureSymmetry {
             if (models.length !== 1) throw new Error('Can only build symmetry assemblies from structures based on 1 model.');
 
             const modelCenter = Vec3()
-            const assembler = Structure.Builder({ label: structure.label });
+            const assembler = Structure.Builder({ label: structure.label, representativeModel: models[0] });
 
             const queryCtx = new QueryContext(structure);
 

+ 8 - 1
src/mol-plugin-state/manager/structure/hierarchy.ts

@@ -218,7 +218,14 @@ export namespace StructureHierarchyManager {
 
         if (structures.length === 1) {
             const s = structures[0];
-            const entryId = s.cell.obj?.data.models[0].entryId;
+            const data = s.cell.obj?.data;
+
+            if (!data) return s.cell.obj?.label || 'Structure';
+
+            const model = data.models[0] || data.representativeModel || data.masterModel;
+            if (!model) return s.cell.obj?.label || 'Structure';
+
+            const entryId = model.entryId;
             if (s.model?.trajectory?.models && s.model.trajectory.models.length === 1) return entryId;
             if (s.model) return `${s.model.cell.obj?.label} | ${entryId}`;
             return entryId;

+ 5 - 3
src/mol-plugin-ui/structure/source.tsx

@@ -50,10 +50,12 @@ export class StructureSourceControls extends CollapsableControls<{}, StructureSo
             }
             case 'structure': {
                 const model = ref.cell.obj?.data.models[0];
-                if (model?.trajectoryInfo.size! > 1) {
-                    label = `${ref.cell.obj?.data.models[0].entryId} | ${ref.cell.obj?.label} (Model ${model?.trajectoryInfo.index! + 1} of ${model?.trajectoryInfo.size})`; break;
+                if (model && model.trajectoryInfo.size! > 1) {
+                    label = `${model.entryId} | ${ref.cell.obj?.label} (Model ${model?.trajectoryInfo.index! + 1} of ${model?.trajectoryInfo.size})`; break;
+                } else if (model) {
+                    label = `${model.entryId} | ${ref.cell.obj?.label}`; break;
                 } else {
-                    label = `${ref.cell.obj?.data.models[0].entryId} | ${ref.cell.obj?.label}`; break;
+                    label = `${ref.cell.obj?.label}`; break;
                 }
             }
             default: label = ref.cell.obj?.label; break;