mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-12 11:32:33 +02:00
a626cfdc72
- (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
219 lines
7.8 KiB
Plaintext
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;
|
|
}
|