UNPKG

@ankhzet/goo

Version:

Elegoo .goo file format reader/writer

134 lines (133 loc) 2.77 kB
export interface Vec2<T> { x: T; y: T; } export interface Vec3<T> { x: T; y: T; z: T; } export type GlobalConfig<T> = { bottom: T; common: T; }; export type LiftRetract<T> = { lift: T; retract: T; }; export type Motions<T> = { first: T; second: T; }; /** * Motion timings, in seconds */ export interface MotionTimes { before: { lift: number; }; after: { lift: number; retract: number; }; } export type LayerTimings = GlobalConfig<MotionTimes>; export type MotionConfig = { distance: number; speed: number; }; export type GlobalLiftRetract = LiftRetract<GlobalConfig<MotionConfig>>; export type GlobalLayerMotions = Motions<GlobalLiftRetract>; export type LayerMotions = LiftRetract<Motions<MotionConfig>>; export type PWM = GlobalConfig<number>; export type GooLayersConfig = { thickness: number; commonExposure: number; exposureDelay: boolean; turnOffTime: number; timings: LayerTimings; bottomExposure: number; bottomLayers: number; transitionLayers: number; advance: boolean; motions: GlobalLayerMotions; pwm: PWM; }; export type GooSummary = { time: number; volume: number; weight: number; price: number; currency: string; }; export type SliceTransform = { invert: boolean; translate: Vec2<number>; scale: Vec2<number>; rotate: { angle: number; origin: Vec2<number>; }; }; export type PrinterDefinition = { name: string; type: string; resolution: Vec2<number>; mirror: Vec2<boolean>; platform: Vec3<number>; resinProfile: string; grayscale: boolean; antialiasing: number; gray: number; blur: number; }; export type ImageChannels = 1 | 2 | 3 | 4; export type ImageDescriptor = string | { buffer: Buffer; channels: ImageChannels; }; export type GooPreview = { dimensions: Vec2<number>; input: ImageDescriptor; }; export type GooHeader = { date: Date; generator?: { description: string; version: string; }; printer: PrinterDefinition; previews: GooPreview[]; layers: number; layerConfig: GooLayersConfig; summary: GooSummary; next?: number; }; export type LayerDefinition = { pause: { mode: number; z: number; }; z: number; exposure: number; offTime: number; times: MotionTimes; motions: LayerMotions; pwm: number; }; export type ChunkData = { type: number; length: number; } | { type: number; diff: number; }; export type GooLayer = { definition: LayerDefinition; slice: ImageDescriptor; transform?: SliceTransform; }; export type Goo = { header: GooHeader; layers: GooLayer[]; };