From 394813233b1d015e1575b0dba99b0728ffaa66fd Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Thu, 23 Aug 2018 16:59:14 +0200
Subject: [PATCH] mol-model/query querySelection

---
 .../structure/query/queries/generators.ts     |  4 ++--
 .../structure/query/queries/modifiers.ts      | 20 ++++++++++++++++++-
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/mol-model/structure/query/queries/generators.ts b/src/mol-model/structure/query/queries/generators.ts
index 04d2b32cd..e24ae2589 100644
--- a/src/mol-model/structure/query/queries/generators.ts
+++ b/src/mol-model/structure/query/queries/generators.ts
@@ -210,8 +210,8 @@ export function querySelection(selection: StructureQuery, query: StructureQuery,
         if (StructureSelection.structureCount(targetSel) === 0) return targetSel;
 
         const target = inComplement
-        ? structureSubtract(ctx.inputStructure, StructureSelection.unionStructure(targetSel))
-        : StructureSelection.unionStructure(targetSel);
+            ? structureSubtract(ctx.inputStructure, StructureSelection.unionStructure(targetSel))
+            : StructureSelection.unionStructure(targetSel);
 
         if (target.elementCount === 0) return StructureSelection.Empty(ctx.inputStructure);
         ctx.throwIfTimedOut();
diff --git a/src/mol-model/structure/query/queries/modifiers.ts b/src/mol-model/structure/query/queries/modifiers.ts
index 94847da47..0756c86f3 100644
--- a/src/mol-model/structure/query/queries/modifiers.ts
+++ b/src/mol-model/structure/query/queries/modifiers.ts
@@ -99,4 +99,22 @@ export function includeSurroundings(query: StructureQuery, params: IncludeSurrou
     };
 }
 
-// TODO: queryEach, intersectBy, exceptBy, unionBy, union, cluster, includeConnected
\ No newline at end of file
+export function querySelection(selection: StructureQuery, query: StructureQuery): StructureQuery {
+    return ctx => {
+        const targetSel = selection(ctx);
+        if (StructureSelection.structureCount(targetSel) === 0) return targetSel;
+
+        const ret = StructureSelection.UniqueBuilder(ctx.inputStructure);
+        const add = (s: Structure) => ret.add(s);
+
+        StructureSelection.forEach(targetSel, (s, sI) => {
+            ctx.pushInputStructure(s);
+            StructureSelection.forEach(query(ctx), add);
+            ctx.popInputStructure();
+            if (sI % 10 === 0) ctx.throwIfTimedOut();
+        })
+        return ret.getSelection();
+    }
+}
+
+// TODO: intersectBy, exceptBy, unionBy, union, cluster, includeConnected
\ No newline at end of file
-- 
GitLab