/**
 * Copyright (c) 2018-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 * @author Gianluca Tomasello <giagitom@gmail.com>
 */
import { Unit, StructureElement, Structure } from '../../../../../mol-model/structure.js';
import { MoleculeType, SecondaryStructureType } from '../../../../../mol-model/structure/model/types.js';
import { Iterator } from '../../../../../mol-data/iterator.js';
import { Vec3 } from '../../../../../mol-math/linear-algebra.js';
type PolymerTraceIteratorOptions = {
    ignoreSecondaryStructure?: boolean;
    useHelixOrientation?: boolean;
};
/**
 * Iterates over individual residues/coarse elements in polymers of a unit while
 * providing information about the neighbourhood in the underlying model for drawing splines
 */
export declare function PolymerTraceIterator(unit: Unit, structure: Structure, options?: PolymerTraceIteratorOptions): Iterator<PolymerTraceElement>;
interface PolymerTraceElement {
    center: StructureElement.Location;
    centerPrev: StructureElement.Location;
    centerNext: StructureElement.Location;
    first: boolean;
    last: boolean;
    initial: boolean;
    final: boolean;
    secStrucFirst: boolean;
    secStrucLast: boolean;
    secStrucType: SecondaryStructureType;
    moleculeType: MoleculeType;
    coarseBackboneFirst: boolean;
    coarseBackboneLast: boolean;
    p0: Vec3;
    p1: Vec3;
    p2: Vec3;
    p3: Vec3;
    p4: Vec3;
    d12: Vec3;
    d23: Vec3;
}
export declare class AtomicPolymerTraceIterator implements Iterator<PolymerTraceElement> {
    private unit;
    private value;
    private polymerIt;
    private residueIt;
    private polymerSegment;
    private cyclicPolymerMap;
    private residueSegmentMin;
    private residueSegmentMax;
    private prevSecStrucType;
    private currSecStrucType;
    private nextSecStrucType;
    private prevCoarseBackbone;
    private currCoarseBackbone;
    private nextCoarseBackbone;
    private state;
    private polymerRanges;
    private residueAtomSegments;
    private traceElementIndex;
    private directionFromElementIndex;
    private directionToElementIndex;
    private moleculeType;
    private atomicConformation;
    private secondaryStructure;
    private helixOrientationCenters;
    private p0;
    private p1;
    private p2;
    private p3;
    private p4;
    private p5;
    private p6;
    private d01;
    private d12;
    private d23;
    private d34;
    hasNext: boolean;
    private atomicPos;
    private pos;
    private updateResidueSegmentRange;
    private getResidueIndex;
    private getSecStruc;
    private setControlPoint;
    private setFromToVector;
    private setDirection;
    move(): PolymerTraceElement;
    constructor(unit: Unit.Atomic, structure: Structure, options?: PolymerTraceIteratorOptions);
}
export declare class CoarsePolymerTraceIterator implements Iterator<PolymerTraceElement> {
    private unit;
    private value;
    private polymerIt;
    private polymerSegment;
    private state;
    private conformation;
    private elementIndex;
    hasNext: boolean;
    private getElementIndex;
    private pos;
    move(): PolymerTraceElement;
    constructor(unit: Unit.Spheres | Unit.Gaussians, structure: Structure);
}
export {};
