Files
Tiago Conceição a626cfdc72 v3.12.0
- (Add) Allow to pause and resume operations (#654)
- (Add) `Layer.FirstTransitionLayer`
- (Add) `Layer.LastTransitionLayer`
- (Add) File format: Elegoo GOO
- (Add) PrusaSlicer Printer: Elegoo Mars 4
- (Improvement) Allocate maximum GPU memory for Skia up to 256 MB
- (Improvement) Set and sanitize transition layers exposure time from last bottom layer and first normal layer instead of global times (#659)
- (Change) CXDLP: Default version from 2 to 3
- (Fix) UI was not rendering with GPU (ANGLE)
- (Fix) `Layer.IsTransitionLayer` was returning the wrong value
- (Upgrade) .NET from 6.0.13 to 6.0.14
2023-02-27 03:22:40 +00:00

219 lines
7.8 KiB
Plaintext

//------------------------------------------------
//--- 010 Editor v8.0.1 Binary Template
//
// File: pws, pw0, pwm, pwma, pwmo, pwms, pwmx, pwmb, pmsq, dlp
// Authors: Tiago Conceição
//------------------------------------------------
LittleEndian();
enum <ubyte> BOOL { False, True };
struct FILEMARK {
char Mark[12] <fgcolor=cBlack, bgcolor=cRed>;
uint Version <fgcolor=cBlack, bgcolor=cRed>; // 1 or 515 or 516
uint NumberOfTables <fgcolor=cBlack, bgcolor=cRed>;
uint HeaderAddress <fgcolor=cBlack, bgcolor=cRed>;
uint SoftwareAddress <fgcolor=cBlack, bgcolor=cRed>; // 6357060 for 516
uint PreviewAddress <fgcolor=cBlack, bgcolor=cRed>;
uint LayerImageColorAddress <fgcolor=cBlack, bgcolor=cRed>; // Version 515 only
uint LayerDefinitionAddress <fgcolor=cBlack, bgcolor=cRed>;
uint ExtraAddress <fgcolor=cBlack, bgcolor=cRed>;
if(Version <= 515)
{
uint LayerImageAddress <fgcolor=cBlack, bgcolor=cRed>;
}
else{ // >= 516
uint MachineAddress <fgcolor=cBlack, bgcolor=cRed>;
uint LayerImageAddress <fgcolor=cBlack, bgcolor=cRed>;
}
if(Version >= 517)
{
uint ModelAddress <fgcolor=cBlack, bgcolor=cRed>;
}
} fileMark;
struct SECTION {
char Mark[12] <fgcolor=cBlack, bgcolor=cYellow>;
uint Length <fgcolor=cBlack, bgcolor=cYellow>;
};
struct HEADER {
SECTION section;
float PixelSizeUm <fgcolor=cBlack, bgcolor=cRed>;
float LayerHeight <fgcolor=cBlack, bgcolor=cRed>;
float LayerExposureTime <fgcolor=cBlack, bgcolor=cRed>;
float WaitTimeBeforeCure <fgcolor=cBlack, bgcolor=cRed>;
float BottomExposureSeconds <fgcolor=cBlack, bgcolor=cRed>;
float BottomLayersCount <fgcolor=cBlack, bgcolor=cRed>;
float LiftHeight <fgcolor=cBlack, bgcolor=cRed>;
float LiftSpeed <fgcolor=cBlack, bgcolor=cRed>;
float RetractSpeed <fgcolor=cBlack, bgcolor=cRed>;
float VolumeMl <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasing <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
float WeightG <fgcolor=cBlack, bgcolor=cRed>;
float Price <fgcolor=cBlack, bgcolor=cRed>;
wstring PriceCurrency <fgcolor=cBlack, bgcolor=cRed>;
uint PerLayerOverride <fgcolor=cBlack, bgcolor=cRed>;
uint PrintTime <fgcolor=cBlack, bgcolor=cRed>;
uint TransitionLayerCount <fgcolor=cBlack, bgcolor=cRed>;
uint TransitionLayerType <fgcolor=cBlack, bgcolor=cRed>;
if(fileMark.Version >= 516){
// 0 = Basic mode | 1 = Advanced mode which allows TSMC
uint AdvancedMode <fgcolor=cBlack, bgcolor=cRed>;
}
if(fileMark.Version >= 517){
ushort Gray <fgcolor=cBlack, bgcolor=cRed>;
ushort BlurLevel <fgcolor=cBlack, bgcolor=cRed>;
uint ResinCode <fgcolor=cBlack, bgcolor=cRed>; // 1579548560, somekind of hash?
}
};
if(fileMark.HeaderAddress > 0){
FSeek(fileMark.HeaderAddress);
HEADER header;
}
struct PREVIEW {
SECTION section;
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
wstring Mark <fgcolor=cBlack, bgcolor=cRed>; // x or *
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
ubyte Data[ResolutionX*ResolutionY*2] <fgcolor=cBlack, bgcolor=cGreen>;
};
if(fileMark.PreviewAddress > 0){
FSeek(fileMark.PreviewAddress);
PREVIEW preview;
}
if(fileMark.Version >= 515 && fileMark.LayerImageColorAddress > 0)
{
FSeek(fileMark.LayerImageColorAddress);
struct LAYER_IMAGE_COLOR {
uint UseFullGreyscale <fgcolor=cWhite, bgcolor=cBlack>;
uint GreyMaxCount <fgcolor=cWhite, bgcolor=cBlack>;
local uint i;
for(i = 0; i < GreyMaxCount; i++ ){
ubyte Grey <fgcolor=cWhite, bgcolor=cBlack>;
}
uint Unknown <fgcolor=cWhite, bgcolor=cBlack>;
} layerImageColor;
}
typedef struct(int size) {
ubyte layerDataBlock[size] <fgcolor=cBlack, bgcolor=cGreen>;
} LAYER_RLE;
struct LayerDefinition {
SECTION section;
uint LayerCount <fgcolor=cBlack, bgcolor=cRed>;
};
struct LAYER_DEF {
uint DataAddress <fgcolor=cWhite, bgcolor=cBlue>;
uint DataLength <fgcolor=cWhite, bgcolor=cBlue>;
float LiftHeight <fgcolor=cWhite, bgcolor=cBlue>;
float LiftSpeed <fgcolor=cWhite, bgcolor=cBlue>;
float ExposureTime <fgcolor=cWhite, bgcolor=cBlue>;
float LayerHeight <fgcolor=cWhite, bgcolor=cBlue>;
uint NonZeroPixelCount <fgcolor=cWhite, bgcolor=cBlue>;
uint ZeroPixelCount <fgcolor=cWhite, bgcolor=cBlue>;
local uint currentPos = FTell();
FSeek(DataAddress);
ubyte RLE[DataLength] <fgcolor=cWhite, bgcolor=cBlack>;
FSeek(currentPos);
};
if(fileMark.Version >= 516 && fileMark.ExtraAddress > 0){
FSeek(fileMark.ExtraAddress);
struct EXTRA {
SECTION section;
uint BottomStateNumber <fgcolor=cBlack, bgcolor=cRed>; // 2
float BottomLiftHeight0 <fgcolor=cBlack, bgcolor=cGreen>;
float BottomLiftSpeed0 <fgcolor=cBlack, bgcolor=cGreen>;
float BottomRetractSpeed0 <fgcolor=cBlack, bgcolor=cGreen>;
float BottomLiftHeight1 <fgcolor=cBlack, bgcolor=cGreen>;
float BottomLiftSpeed1 <fgcolor=cBlack, bgcolor=cGreen>;
float BottomRetractSpeed1 <fgcolor=cBlack, bgcolor=cGreen>;
uint StateNumber <fgcolor=cBlack, bgcolor=cGreen>; // 2
float LiftHeight0 <fgcolor=cBlack, bgcolor=cGreen>;
float LiftSpeed0 <fgcolor=cBlack, bgcolor=cGreen>;
float RetractSpeed0 <fgcolor=cBlack, bgcolor=cGreen>;
float LiftHeight1 <fgcolor=cBlack, bgcolor=cGreen>;
float LiftSpeed1 <fgcolor=cBlack, bgcolor=cGreen>;
float RetractSpeed1 <fgcolor=cBlack, bgcolor=cGreen>;
} extra;
}
if(fileMark.Version >= 516 && fileMark.MachineAddress > 0){
FSeek(fileMark.MachineAddress);
struct MACHINE {
SECTION section;
char MachineName[96] <fgcolor=cBlack, bgcolor=cRed>;
char ImageFormat[16] <fgcolor=cWhite, bgcolor=cRed>;
uint MaxAntialiasingLevel <fgcolor=cWhite, bgcolor=cRed>; // Machine maximum antialiasing level, 16
uint PropertyFields <fgcolor=cWhite, bgcolor=cRed>; // Machine property fields
float DisplayWidth <fgcolor=cBlack, bgcolor=cRed>;
float DisplayHeight <fgcolor=cBlack, bgcolor=cRed>;
float MachineZ <fgcolor=cBlack, bgcolor=cRed>;
uint MaxFileVersion <fgcolor=cBlack, bgcolor=cRed>; // Highest file version supported, 516?
char BackgroundColor[4] <fgcolor=cBlack, bgcolor=cRed>; // Machine background color
} machine;
}
if(fileMark.Version >= 517 && fileMark.SoftwareAddress > 0){
FSeek(fileMark.SoftwareAddress);
struct SOFTWARE {
char Name[32] <fgcolor=cWhite, bgcolor=cBlue>; // ANYCUBIC-PC
uint TableLength <fgcolor=cWhite, bgcolor=cBlue>; // 164
char Version[32] <fgcolor=cWhite, bgcolor=cBlue>; // 2.2.16
char OperativeSystem[64] <fgcolor=cWhite, bgcolor=cBlue>; // win-x64
char OpenGLVersion[32] <fgcolor=cWhite, bgcolor=cBlue>; // 3.3-CoreProfile
} software;
}
if(fileMark.Version >= 517 && fileMark.ModelAddress > 0){
FSeek(fileMark.ModelAddress);
struct MODEL {
SECTION section <fgcolor=cWhite, bgcolor=cRed>; // MODEL
float MinX <fgcolor=cWhite, bgcolor=cRed>;
float MinY <fgcolor=cWhite, bgcolor=cRed>;
float MinZ <fgcolor=cWhite, bgcolor=cRed>;
float MaxX <fgcolor=cWhite, bgcolor=cRed>;
float MaxY <fgcolor=cWhite, bgcolor=cRed>;
float MaxZ <fgcolor=cWhite, bgcolor=cRed>;
uint SupportsEnabled <fgcolor=cWhite, bgcolor=cRed>;
float SupportsDensity <fgcolor=cWhite, bgcolor=cRed>;
} model;
}
if(fileMark.LayerDefinitionAddress > 0){
FSeek(fileMark.LayerDefinitionAddress);
LayerDefinition layerDefinition;
struct LAYERS{
local uint i;
for(i = 0; i < layerDefinition.LayerCount; i++ ){
LAYER_DEF layerDef;
}
} layers;
}