diff --git a/src/mol-model/structure/query/queries/generators.ts b/src/mol-model/structure/query/queries/generators.ts index 04d2b32cd382b5b8004ece20b385688a51b864d2..e24ae25892ea88a0fc715c5b45622887827ebb66 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 94847da473058b66c4af92c78725c3ab5050f835..0756c86f367cf64ae4413293a5c7b22a00ebf854 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