@ankhzet/goo
Version:
Elegoo .goo file format reader/writer
134 lines (133 loc) • 2.77 kB
TypeScript
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[];
};