GrpcPrint/PrintS/job/JobMetaData.h

75 lines
2.0 KiB
C++

#pragma once
#include <set>
#include "MetaData.h"
#include "JobContent.h"
#include "expat.h"
#define BIN_LIMIT_SIZE 524288000 //500m
class JobMetaData : public MetaData
{
public:
struct ParseAssist {
unsigned int depth;
string tempValue;
Property* tempProperty;
map<int, string> depthMap;
Part* lastPart;
ParameterSet* lastParameterSet;
BinaryFile* lastBinaryFile;
Layer* lastLayer;
DataBlock* lastDataBlock;
//double fixDis;
ScanField* lastScanField;
ParseAssist() {
depth = 0;
tempValue = "";
tempProperty = NULL;
lastPart = NULL;
lastParameterSet = NULL;
lastBinaryFile = NULL;
lastLayer = NULL;
lastDataBlock = NULL;
lastScanField = NULL;
// fixDis = 0.0;
}
};
public:
JobMetaData();
~JobMetaData();
bool LoadFile(string path, string filename, vector<BPBinary::BFileInfo>& bfileinfos, string binpath);
bool LoadLayerByIndex(unsigned int lindex);
bool GetLayerByIndex(unsigned int lindex, ::stream::ResponseAny** response);
bool LoadLayer(Layer* layer);
void SetJobContent(JobContent* job_content);
bool LoadPrevLayer(Layer* layer);
bool LoadPrevLayerByIndex(unsigned int lindex);
bool LoadRemoteLayerByIndex(unsigned int index);
bool LoadFirstLayer();
//float CalcEvaTime(float start_at = 0.0);
//void ReCalcEvaTime();
void AddPart(Part* part);
void DelPart(Part* part);
private:
static void XMLCALL StartElement(void* userData, const XML_Char* name, const XML_Char** attrs);
static void XMLCALL EndElement(void* userData, const XML_Char* name);
static void XMLCALL DataHandler(void* userData, const XML_Char* s, int len);
bool ReadBDataBlock(LayerSummary* summary, Dimensions* partLayerDimensions, BPBinary::BinDataBlock* datablock, ifstream* ifs);
//bool ReadBChains(LayerSummary* summary, BPBinary::ChainPoint* chainpoint, ifstream* ifs);
private:
map<int, BinaryFile*> binary_files;
JobContent* m_job_content;
ParseAssist parseAssist;
unsigned int m_ReadBytes;
unsigned int m_TotalBytes;
XML_Parser m_Parser;
};