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