Skip to content
Snippets Groups Projects
Commit 9de8f2a1 authored by David Sehnal's avatar David Sehnal
Browse files

StructureElement type tweaks

parent fa912a1d
No related branches found
No related tags found
No related merge requests found
...@@ -134,7 +134,7 @@ export function PolymerTraceVisual(): UnitsVisual<PolymerTraceProps> { ...@@ -134,7 +134,7 @@ export function PolymerTraceVisual(): UnitsVisual<PolymerTraceProps> {
const { objectId, instanceId, elementId } = pickingId const { objectId, instanceId, elementId } = pickingId
if (renderObject.id === objectId) { if (renderObject.id === objectId) {
const unit = currentGroup.units[instanceId] const unit = currentGroup.units[instanceId]
const indices = OrderedSet.ofSingleton(elementId as StructureElement.Index); const indices = OrderedSet.ofSingleton(elementId as StructureElement.UnitIndex);
return StructureElement.Loci([{ unit, indices }]) return StructureElement.Loci([{ unit, indices }])
} }
return EmptyLoci return EmptyLoci
......
...@@ -96,7 +96,7 @@ export function getElementLoci(id: number, group: Unit.SymmetryGroup, pickingId: ...@@ -96,7 +96,7 @@ export function getElementLoci(id: number, group: Unit.SymmetryGroup, pickingId:
const { objectId, instanceId, elementId } = pickingId const { objectId, instanceId, elementId } = pickingId
if (id === objectId) { if (id === objectId) {
const unit = group.units[instanceId] const unit = group.units[instanceId]
const indices = OrderedSet.ofSingleton(elementId as StructureElement.Index); const indices = OrderedSet.ofSingleton(elementId as StructureElement.UnitIndex);
return StructureElement.Loci([{ unit, indices }]) return StructureElement.Loci([{ unit, indices }])
} }
return EmptyLoci return EmptyLoci
......
...@@ -36,12 +36,12 @@ namespace Selection { ...@@ -36,12 +36,12 @@ namespace Selection {
} }
export function toLoci(sel: Selection): StructureElement.Loci { export function toLoci(sel: Selection): StructureElement.Loci {
const loci: { unit: Unit, indices: OrderedSet<StructureElement.Index> }[] = []; const loci: { unit: Unit, indices: OrderedSet<StructureElement.UnitIndex> }[] = [];
const { unitMap } = sel.source; const { unitMap } = sel.source;
for (const unit of unionStructure(sel).units) { for (const unit of unionStructure(sel).units) {
if (unit === unitMap.get(unit.id)) { if (unit === unitMap.get(unit.id)) {
loci[loci.length] = { unit, indices: OrderedSet.ofBounds(0 as StructureElement.Index, unit.elements.length as StructureElement.Index) }; loci[loci.length] = { unit, indices: OrderedSet.ofBounds(0 as StructureElement.UnitIndex, unit.elements.length as StructureElement.UnitIndex) };
} else { } else {
loci[loci.length] = { loci[loci.length] = {
unit, unit,
......
...@@ -17,10 +17,11 @@ interface StructureElement<U = Unit> { ...@@ -17,10 +17,11 @@ interface StructureElement<U = Unit> {
namespace StructureElement { namespace StructureElement {
export function create(unit?: Unit, element?: ElementIndex): StructureElement { return { unit: unit as any, element: element || (0 as ElementIndex) }; } export function create(unit?: Unit, element?: ElementIndex): StructureElement { return { unit: unit as any, element: element || (0 as ElementIndex) }; }
// TODO: when nominal types are available, make this indexed by UnitIndex
export type Set = SortedArray<ElementIndex> export type Set = SortedArray<ElementIndex>
/** Index into Unit.elements */ /** Index into Unit.elements */
export type Index = { readonly '@type': 'element-index' } & number export type UnitIndex = { readonly '@type': 'structure-element-index' } & number
export interface Property<T> { (location: StructureElement): T } export interface Property<T> { (location: StructureElement): T }
export interface Predicate extends Property<boolean> { } export interface Predicate extends Property<boolean> { }
...@@ -46,11 +47,11 @@ namespace StructureElement { ...@@ -46,11 +47,11 @@ namespace StructureElement {
* Indices into the unit.elements array. * Indices into the unit.elements array.
* Can use OrderedSet.forEach to iterate (or OrderedSet.size + OrderedSet.getAt) * Can use OrderedSet.forEach to iterate (or OrderedSet.size + OrderedSet.getAt)
*/ */
indices: OrderedSet<Index> indices: OrderedSet<UnitIndex>
}> }>
} }
export function Loci(elements: ArrayLike<{ unit: Unit, indices: OrderedSet<Index> }>): Loci { export function Loci(elements: ArrayLike<{ unit: Unit, indices: OrderedSet<UnitIndex> }>): Loci {
return { kind: 'element-loci', elements: elements as Loci['elements'] }; return { kind: 'element-loci', elements: elements as Loci['elements'] };
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment