소스 검색

mol-model/query querySelection

David Sehnal 6 년 전
부모
커밋
394813233b
2개의 변경된 파일21개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 2
      src/mol-model/structure/query/queries/generators.ts
  2. 19 1
      src/mol-model/structure/query/queries/modifiers.ts

+ 2 - 2
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();

+ 19 - 1
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
+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