Browse Source

createComponent method overload

bioinsilico 4 years ago
parent
commit
41c41dd84e
2 changed files with 36 additions and 9 deletions
  1. 1 1
      package.json
  2. 35 8
      src/viewer/index.ts

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
     "name": "@rcsb/rcsb-molstar",
-    "version": "1.0.32",
+    "version": "1.0.33",
     "description": "RCSB PDB apps and props based on Mol*.",
     "homepage": "https://github.com/rcsb/rcsb-molstar#readme",
     "repository": {

+ 35 - 8
src/viewer/index.ts

@@ -35,6 +35,7 @@ import {Loci} from 'molstar/lib/mol-model/loci';
 import {StructureSelection} from 'molstar/lib/mol-model/structure/query';
 import {StructureRef} from 'molstar/lib/mol-plugin-state/manager/structure/hierarchy-state';
 import {StructureSelectionQuery} from 'molstar/lib/mol-plugin-state/helpers/structure-selection-query';
+import {StructureRepresentationRegistry} from 'molstar/lib/mol-repr/structure/registry';
 
 /** package version, filled in at bundle build time */
 declare const __RCSB_MOLSTAR_VERSION__: string;
@@ -280,14 +281,41 @@ export class Viewer {
         }
     }
 
-    public async createComponentFromSet(componentId: string, modelId: string, residues: Array<{asymId: string, position: number}>, representationType: 'ball-and-stick'|'spacefill'|'gaussian-surface'|'cartoon'){
+    public createComponent(componentId: string, modelId: string, asymId: string, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>;
+    public createComponent(componentId: string, modelId: string, residues: Array<{asymId: string, position: number}>, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>;
+    public createComponent(componentId: string, modelId: string, asymId: string, begin: number, end: number, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>;
+    public createComponent(...args: any[]): Promise<void>{
+        if(args.length === 4 && typeof args[2] === 'string'){
+            return this.createComponentFromChain(args[0], args[1], args[2], args[3]);
+        }else if(args.length === 4 && args[2] instanceof Array){
+            return this.createComponentFromSet(args[0], args[1], args[2], args[3]);
+        }else if(args.length === 6 ){
+            return this.createComponentFromRange(args[0], args[1], args[2], args[3], args[4], args[5]);
+        }
+        throw 'createComponent error: wrong arguments';
+    }
+    private async createComponentFromChain(componentId: string, modelId: string, asymId: string, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>{
         const structureRef: StructureRef | undefined = getStructureRefWithModelId(this.plugin.managers.structure.hierarchy.current.structures, modelId);
         if(structureRef == null)
             return;
-
         await this.plugin.managers.structure.component.add({
             selection: StructureSelectionQuery(
-                'innerLabel',
+                'innerQuery_' + Math.random().toString(36).substr(2),
+                MolScriptBuilder.struct.generator.atomGroups({
+                    'chain-test': MolScriptBuilder.core.rel.eq([asymId, MolScriptBuilder.ammp('label_asym_id')])
+                })
+            ),
+            options: { checkExisting: false, label: componentId },
+            representation: representationType,
+        }, [structureRef]);
+    }
+    private async createComponentFromSet(componentId: string, modelId: string, residues: Array<{asymId: string, position: number}>, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>{
+        const structureRef: StructureRef | undefined = getStructureRefWithModelId(this.plugin.managers.structure.hierarchy.current.structures, modelId);
+        if(structureRef == null)
+            return;
+        await this.plugin.managers.structure.component.add({
+            selection: StructureSelectionQuery(
+                'innerQuery_' + Math.random().toString(36).substr(2),
                 MolScriptBuilder.struct.combinator.merge(
                     residues.map(r=>MolScriptBuilder.struct.generator.atomGroups({
                         'chain-test': MolScriptBuilder.core.rel.eq([r.asymId, MolScriptBuilder.ammp('label_asym_id')]),
@@ -295,12 +323,11 @@ export class Viewer {
                     }))
                 )
             ),
-            options: { checkExisting: true, label: componentId },
+            options: { checkExisting: false, label: componentId },
             representation: representationType,
         }, [structureRef]);
     }
-
-    public async createComponentFromRange(componentId: string, modelId: string, asymId: string, begin: number, end: number, representationType: 'ball-and-stick'|'spacefill'|'gaussian-surface'|'cartoon'){
+    private async createComponentFromRange(componentId: string, modelId: string, asymId: string, begin: number, end: number, representationType: StructureRepresentationRegistry.BuiltIn): Promise<void>{
         const structureRef: StructureRef | undefined = getStructureRefWithModelId(this.plugin.managers.structure.hierarchy.current.structures, modelId);
         if(structureRef == null)
             return;
@@ -310,13 +337,13 @@ export class Viewer {
         }
         await this.plugin.managers.structure.component.add({
             selection: StructureSelectionQuery(
-                'innerLabel',
+                'innerQuery_' + Math.random().toString(36).substr(2),
                 MolScriptBuilder.struct.generator.atomGroups({
                     'chain-test': MolScriptBuilder.core.rel.eq([asymId, MolScriptBuilder.ammp('label_asym_id')]),
                     'residue-test': MolScriptBuilder.core.set.has([MolScriptBuilder.set(...SetUtils.toArray(new Set(seq_id))), MolScriptBuilder.ammp('label_seq_id')])
                 })
             ),
-            options: { checkExisting: true, label: componentId },
+            options: { checkExisting: false, label: componentId },
             representation: representationType,
         }, [structureRef]);
     }