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

StructureElement type tweaks

parent fa912a1d
Branches
Tags
No related merge requests found
......@@ -134,7 +134,7 @@ export function PolymerTraceVisual(): UnitsVisual<PolymerTraceProps> {
const { objectId, instanceId, elementId } = pickingId
if (renderObject.id === objectId) {
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 EmptyLoci
......
......@@ -96,7 +96,7 @@ export function getElementLoci(id: number, group: Unit.SymmetryGroup, pickingId:
const { objectId, instanceId, elementId } = pickingId
if (id === objectId) {
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 EmptyLoci
......
......@@ -36,12 +36,12 @@ namespace Selection {
}
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;
for (const unit of unionStructure(sel).units) {
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 {
loci[loci.length] = {
unit,
......
......@@ -17,10 +17,11 @@ interface StructureElement<U = Unit> {
namespace StructureElement {
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>
/** 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 Predicate extends Property<boolean> { }
......@@ -46,11 +47,11 @@ namespace StructureElement {
* Indices into the unit.elements array.
* 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'] };
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment