Bladeren bron

Element and Bond loci

David Sehnal 6 jaren geleden
bovenliggende
commit
3803181895

+ 3 - 2
src/mol-model/structure/structure.ts

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  *
  * @author David Sehnal <david.sehnal@gmail.com>
  */
@@ -8,5 +8,6 @@ import Element from './structure/element'
 import Structure from './structure/structure'
 import Unit from './structure/unit'
 import StructureSymmetry from './structure/symmetry'
+import { Bond } from './structure/unit/bonds'
 
-export { Element, Structure, Unit, StructureSymmetry }
+export { Element, Bond, Structure, Unit, StructureSymmetry }

+ 13 - 2
src/mol-model/structure/structure/element.ts

@@ -24,7 +24,7 @@ namespace Element {
 
     /** All the information required to access element properties */
     export interface Location { unit: Unit, element: number }
-    export function Location(): Location { return { unit: {} as any, element: 0 }; }
+    export function Location(unit?: Unit, element?: number): Location { return { unit: unit as any, element: element || 0 }; }
     export interface Property<T> { (location: Location): T }
     export interface Predicate extends Property<boolean> { }
 
@@ -37,7 +37,18 @@ namespace Element {
     export function property<T>(p: Property<T>) { return p; }
 
     /** Represents multiple element locations */
-    export type Loci = ReadonlyArray<{ unit: Unit, elements: SortedArray }>
+    export interface Loci {
+        readonly kind: 'element-loci',
+        readonly elements: ReadonlyArray<{ unit: Unit, elements: SortedArray }>
+    }
+
+    export function Loci(elements: ArrayLike<{ unit: Unit, elements: SortedArray }>): Loci {
+        return { kind: 'element-loci', elements: elements as Loci['elements'] };
+    }
+
+    export function isLoci(x: any): x is Loci {
+        return !!x && x.kind === 'element-loci';
+    }
 }
 
 export default Element

+ 25 - 1
src/mol-model/structure/structure/unit/bonds.ts

@@ -4,5 +4,29 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
+import { Element } from '../../structure'
+
 export * from './bonds/intra-data'
-export * from './bonds/intra-compute'
+export * from './bonds/intra-compute'
+
+interface Bond {
+    readonly a: Readonly<Element.Location>,
+    readonly b: Readonly<Element.Location>
+}
+
+namespace Bond {
+    export interface Loci {
+        readonly kind: 'bond-loci',
+        readonly bonds: ReadonlyArray<Bond>
+    }
+
+    export function Loci(bonds: ArrayLike<Bond>): Loci {
+        return { kind: 'bond-loci', bonds: bonds as Loci['bonds'] };
+    }
+
+    export function isLoci(x: any): x is Loci {
+        return !!x && x.kind === 'bond-loci';
+    }
+}
+
+export { Bond }