import { CellComplex, VecN } from '@holotope/core'; import { HyperplaneColliderN } from './hyperplane-collider.js'; import { type XpbdPointN, type XpbdScalarConstraintEvaluationN, type XpbdScalarConstraintN } from './xpbd-constraint.js'; import { XpbdParticleN, XpbdWorldN } from './xpbd-world.js'; export interface XpbdParticleHyperplaneConstraintNOptions { readonly id: string; readonly point: XpbdPointN; readonly plane: HyperplaneColliderN; /** Required signed distance from the plane. Default zero. */ readonly clearance?: number; /** Inverse contact stiffness. Default zero. */ readonly compliance?: number; } export interface XpbdParticleHyperplaneConstraintEvaluationN extends XpbdScalarConstraintEvaluationN { /** `normal dot position - offset`, before clearance. */ readonly signedDistance: number; readonly clearance: number; /** `signedDistance - clearance`; the allowed domain is non-negative. */ readonly gap: number; } /** Exact RN point contact with the positive side of an oriented hyperplane. */ export declare class XpbdParticleHyperplaneConstraintN implements XpbdScalarConstraintN { readonly id: string; readonly dimension: number; readonly points: readonly [XpbdPointN]; readonly relation: "greater-than-or-equal"; readonly compliance: number; readonly plane: HyperplaneColliderN; readonly clearance: number; constructor(options: XpbdParticleHyperplaneConstraintNOptions); evaluate(): XpbdParticleHyperplaneConstraintEvaluationN; } export interface XpbdParticleHyperplaneFamilyVertexContextN { readonly sourceVertexIndex: number; /** Copied source position; callback mutation cannot edit the complex. */ readonly sourcePosition: VecN; /** Compile-time `normal dot sourcePosition - offset`. */ readonly sourceSignedDistance: number; } export type XpbdParticleHyperplaneFamilyVertexScalarN = number | ((vertex: XpbdParticleHyperplaneFamilyVertexContextN) => number); export interface CompileXpbdParticleHyperplaneFamilyNOptions { readonly id: string; readonly source: CellComplex; /** One live particle per source vertex, in source-vertex order. */ readonly particles: readonly XpbdParticleN[]; readonly plane: HyperplaneColliderN; readonly clearance?: XpbdParticleHyperplaneFamilyVertexScalarN; readonly compliance?: XpbdParticleHyperplaneFamilyVertexScalarN; } export interface XpbdParticleHyperplaneFamilyContactN extends XpbdParticleHyperplaneFamilyVertexContextN { readonly particle: XpbdParticleN; readonly clearance: number; readonly sourceGap: number; readonly constraint: XpbdParticleHyperplaneConstraintN; } /** Source-vertex-indexed point contacts over an existing particle binding. */ export declare class XpbdParticleHyperplaneFamilyN { readonly id: string; readonly dimension: number; readonly source: CellComplex; readonly particles: readonly XpbdParticleN[]; readonly plane: HyperplaneColliderN; readonly contacts: readonly XpbdParticleHyperplaneFamilyContactN[]; readonly constraints: readonly XpbdParticleHyperplaneConstraintN[]; private attachedWorld; private constructor(); static compile(options: CompileXpbdParticleHyperplaneFamilyNOptions): XpbdParticleHyperplaneFamilyN; /** Adds only contact constraints; particles must already belong to the world. */ addToWorld(world: XpbdWorldN): XpbdWorldN; } export declare function compileXpbdParticleHyperplaneFamilyN(options: CompileXpbdParticleHyperplaneFamilyNOptions): XpbdParticleHyperplaneFamilyN; //# sourceMappingURL=xpbd-hyperplane-contact.d.ts.map