Browse Source

mol-plugin: added Structure.Selections groupId

David Sehnal 5 years ago
parent
commit
8b9178249d

+ 1 - 1
src/mol-plugin/state/objects.ts

@@ -99,7 +99,7 @@ export namespace PluginStateObject {
             }
             export class Representation3DState extends Create<Representation3DStateData>({ name: 'Structure 3D State', typeClass: 'Object' }) { }
 
-            export interface SelectionEntry { key: string, loci: StructureElement.Loci }
+            export interface SelectionEntry { key: string, groupId?: string, loci: StructureElement.Loci }
             export class Selections extends Create<ReadonlyArray<SelectionEntry>>({ name: 'Selections', typeClass: 'Object' }) {}
         }
     }

+ 8 - 3
src/mol-plugin/state/transforms/model.ts

@@ -352,6 +352,7 @@ const MultiStructureSelectionFromExpression = PluginStateTransform.BuiltIn({
         selections: PD.ObjectList({
             key: PD.Text(void 0, { description: 'A unique key.' }),
             ref: PD.Text(),
+            groupId: PD.Optional(PD.Text()),
             expression: PD.Value<Expression>(MolScriptBuilder.struct.generator.empty)
         }, e => e.ref, { isHidden: true }),
         isTransitive: PD.Optional(PD.Boolean(false, { isHidden: true, description: 'Remap the selections from the original structure if structurally equivalent.' })),
@@ -368,7 +369,7 @@ const MultiStructureSelectionFromExpression = PluginStateTransform.BuiltIn({
             const { selection, entry } = StructureQueryHelper.createAndRun(dependencies![sel.ref].data as Structure, sel.expression);
             entries.set(sel.key, entry);
             const loci = Sel.toLociWithSourceUnits(selection);
-            selections.push({ key: sel.key, loci });
+            selections.push({ key: sel.key, loci, groupId: sel.groupId });
             totalSize += StructureElement.Loci.size(loci);
         }
 
@@ -401,6 +402,10 @@ const MultiStructureSelectionFromExpression = PluginStateTransform.BuiltIn({
                 const entry = cacheEntries.get(sel.key)!;
                 if (StructureQueryHelper.isUnchanged(entry, sel.expression, structure) && current.has(sel.key)) {
                     const loci = current.get(sel.key)!;
+                    if (loci.groupId !== sel.groupId) {
+                        loci.groupId = sel.groupId;
+                        changed = true;
+                    }
                     entries.set(sel.key, entry);
                     selections.push(loci);
                     totalSize += StructureElement.Loci.size(loci.loci);
@@ -418,7 +423,7 @@ const MultiStructureSelectionFromExpression = PluginStateTransform.BuiltIn({
                             entry.currentStructure = structure;
                             entries.set(sel.key, entry);
                             const loci = StructureElement.Loci.remap(Sel.toLociWithSourceUnits(selection), structure);
-                            selections.push({ key: sel.key, loci });
+                            selections.push({ key: sel.key, loci, groupId: sel.groupId });
                             totalSize += StructureElement.Loci.size(loci);
                             changed = true;
                         } else {
@@ -433,7 +438,7 @@ const MultiStructureSelectionFromExpression = PluginStateTransform.BuiltIn({
                         const selection = StructureQueryHelper.updateStructure(entry, structure);
                         entries.set(sel.key, entry);
                         const loci = Sel.toLociWithSourceUnits(selection);
-                        selections.push({ key: sel.key, loci });
+                        selections.push({ key: sel.key, loci, groupId: sel.groupId });
                         totalSize += StructureElement.Loci.size(loci);
                     }
                 }

+ 2 - 2
src/mol-plugin/util/structure-measurement.ts

@@ -38,8 +38,8 @@ class StructureMeasurementManager {
         update
             .apply(StateTransforms.Model.MultiStructureSelectionFromExpression, {
                 selections: [
-                    { key: 'a', ref: cellA.transform.ref, expression: StructureElement.Loci.toExpression(a) },
-                    { key: 'b', ref: cellB.transform.ref, expression: StructureElement.Loci.toExpression(b) }
+                    { key: 'a', groupId: 'a', ref: cellA.transform.ref, expression: StructureElement.Loci.toExpression(a) },
+                    { key: 'b', groupId: 'b', ref: cellB.transform.ref, expression: StructureElement.Loci.toExpression(b) }
                 ],
                 isTransitive: true,
                 label: 'Distance'