731 lines
24 KiB
C++
731 lines
24 KiB
C++
#include "MetaData.h"
|
|
#include <regex>
|
|
#include "../utils/CryptHelper.h"
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include <openssl/evp.h>
|
|
#include "../external/minizip/zlib.h"
|
|
#include "../LanguageManager.h"
|
|
|
|
MetaData::MetaData()
|
|
:evaTime(0)
|
|
, m_RemainTime(0)
|
|
, m_RemoteLayer(nullptr)
|
|
, m_IsScanOrderForPlatform(false)
|
|
, m_IsScanOrderSeqV2(false)
|
|
, m_HasOrder(false)
|
|
{
|
|
file_info = new FileInfo();
|
|
general_info = new GeneralInfo();
|
|
layers = new Layers();
|
|
machine_type = new MachineType();
|
|
|
|
m_CoverCfg = ConfigManager::GetInstance()->GetCoverCfg();
|
|
m_ArmCfg = ConfigManager::GetInstance()->GetArmCfg();
|
|
m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg();
|
|
m_RunCfg = ConfigManager::GetInstance()->GetRunCfg();
|
|
m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg();
|
|
m_Machine = ConfigManager::GetInstance()->GetMachine();
|
|
//m_ProgressInfo = _(u8"ÕýÔÚ½âÎöÈÎÎñÊý¾Ý").c_str();
|
|
InitializeCriticalSection(&m_DBCS);
|
|
//InitializeCriticalSection(&m_MsgCs);
|
|
InitializeCriticalSection(&partCs);
|
|
}
|
|
|
|
MetaData::~MetaData()
|
|
{
|
|
if (file_info)delete file_info;
|
|
if (general_info)delete general_info;
|
|
for (map<int, Part*>::iterator it = partsMap.begin(); it != partsMap.end(); it++)
|
|
{
|
|
Part* part = it->second;
|
|
if (part)delete part;
|
|
}
|
|
partsMap.clear();
|
|
partsVec.clear();
|
|
for (map<int, ParameterSet*>::iterator it = parameterMap.begin(); it != parameterMap.end();it++) {
|
|
delete it->second;
|
|
}
|
|
parameterMap.clear();
|
|
|
|
ClearBFileMap();
|
|
ClearBlockMap();
|
|
ClearPrevBlockMap();
|
|
ClearRemoteBlockMap();
|
|
|
|
if (layers)delete layers;
|
|
if (machine_type)delete machine_type;
|
|
//DeleteCriticalSection(&m_MsgCs);
|
|
DeleteCriticalSection(&partCs);
|
|
DeleteCriticalSection(&m_DBCS);
|
|
}
|
|
|
|
void MetaData::CalcRealPower(void)
|
|
{
|
|
for (size_t partIndex = 0; partIndex < partsVec.size(); partIndex++) {
|
|
Part* part = partsVec[partIndex];
|
|
for (set<ParameterSet*>::iterator it = part->paramSet.begin(); it != part->paramSet.end(); it++) {
|
|
ParameterSet* ps = (*it);
|
|
if (m_FieldRefScanLaser.find(ps->scan_field) != m_FieldRefScanLaser.end()) {
|
|
ScannerControlCfg* cfg = m_FieldRefScanLaser[ps->scan_field];
|
|
if (cfg) {
|
|
ps->laser_set->laser_real_power = cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.CalcPowerCompensate(ps->laser_set->laser_power);
|
|
}
|
|
}
|
|
else {
|
|
|
|
ps->laser_set->laser_real_power = ps->laser_set->laser_power;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void MetaData::GetPartId(int layerIndex, set<int>& partIds)
|
|
{
|
|
int layersize=layers->vector_layers.size();
|
|
if (layerIndex >= layersize)return;
|
|
Layer* layer = layers->vector_layers[layerIndex];
|
|
for (size_t i = 0; i < layer->data_blocks.size();++i) {
|
|
Part* part=partsMap[layer->data_blocks[i]->references->part];
|
|
if (part)partIds.insert(part->id);
|
|
}
|
|
}
|
|
|
|
BPBinary::BinDataBlock* MetaData::GetDataBlock(DataBlock *db)
|
|
{
|
|
if (m_block_map.find(db) != m_block_map.end()) {
|
|
return m_block_map[db];
|
|
}
|
|
else return NULL;
|
|
}
|
|
|
|
BPBinary::BinDataBlock* MetaData::GetPreviewData(MetaData::DataBlockList *dblist, unsigned int index)
|
|
{
|
|
if (!dblist)
|
|
return nullptr;
|
|
|
|
return m_prev_block_map[(*dblist)[index]];
|
|
}
|
|
|
|
BPBinary::BinDataBlock* MetaData::GetRemoteDataBlock(DataBlock *db)
|
|
{
|
|
return m_remote_block_map[db];
|
|
}
|
|
|
|
BPBinary::BinDataBlock* MetaData::GetPreviewDataBlock(DataBlock *db)
|
|
{
|
|
return m_prev_block_map[db];
|
|
}
|
|
|
|
float MetaData::PowderRequiretment(void)
|
|
{
|
|
float powder = 0.0;
|
|
for (unsigned int i = GetCurrentLayer()->index; i < layers->vector_layers.size(); i++)
|
|
{
|
|
bool hasPrintPart = false;
|
|
MetaData::Layer* layer = layers->vector_layers[i];
|
|
for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) {
|
|
MetaData::DataBlock* datablock = layer->data_blocks[blockIndex];
|
|
if (!datablock)continue;
|
|
MetaData::Part* part = GetPart(datablock->references->part);
|
|
if (part) {
|
|
if (part->print_enable) {
|
|
hasPrintPart = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (hasPrintPart)
|
|
powder += layer->powder;
|
|
else
|
|
break;
|
|
}
|
|
|
|
return powder;
|
|
}
|
|
|
|
MetaData::Layer* MetaData::GetLayer(unsigned int id)
|
|
{
|
|
if (id >= layers->vector_layers.size())
|
|
return nullptr;
|
|
|
|
return layers->vector_layers[id];
|
|
}
|
|
|
|
|
|
unsigned int MetaData::CalcRemainTime(unsigned int index)
|
|
{
|
|
m_RemainTime = 0;
|
|
double tTime = 0.0;
|
|
if (index >= layers->vector_layers.size())return m_RemainTime;
|
|
for (size_t layerindex = index; layerindex < layers->vector_layers.size(); layerindex++) {
|
|
tTime += layers->vector_layers[layerindex]->layer_estimate_time;
|
|
}
|
|
|
|
if (m_RunCfg->m_PrintRestEnable && m_RunCfg->m_PrintContinueMinute > 0) {
|
|
double continueFlag = m_RunCfg->m_PrintContinueMinute * 60 * 1000;
|
|
int pauseCount = tTime / continueFlag;
|
|
tTime = tTime + pauseCount*m_RunCfg->m_PrintRestMinutes * 60 * 1000;
|
|
}
|
|
m_RemainTime = tTime;
|
|
return m_RemainTime;
|
|
}
|
|
|
|
bool ParamCmp(const MetaData::ParameterSet* lhs, const MetaData::ParameterSet* rhs)
|
|
{
|
|
if (lhs->id != rhs->id) return lhs->id < rhs->id;
|
|
else return lhs->id > rhs->id;
|
|
}
|
|
|
|
void MetaData::GetErrorInfo(vector<string>& infos)
|
|
{
|
|
for (unsigned int i = 0; i < m_Errors.size(); i++) {
|
|
infos.push_back(m_Errors[i]);
|
|
}
|
|
}
|
|
|
|
void MetaData::AddErrorInfo(string str)
|
|
{
|
|
m_Errors.push_back(str);
|
|
}
|
|
|
|
|
|
MetaData::ParameterSet* MetaData::GetParameterSet(int id)
|
|
{
|
|
if (parameterMap.find(id) == parameterMap.end())
|
|
{
|
|
return NULL;
|
|
}
|
|
else return parameterMap[id];
|
|
}
|
|
|
|
|
|
void MetaData::ReCalcEvaTime()
|
|
{
|
|
double perLayerpowderTime = 0.0;
|
|
double coverMil = 0.0, shiftMil = 0.0;
|
|
m_CoverCfg->Lock();
|
|
if (m_CoverCfg->m_CoverDirection == CoverCfg::TWO_WAY1 || m_CoverCfg->m_CoverDirection == CoverCfg::TWO_WAY2) {
|
|
double coverDis = (double)m_CoverCfg->m_cover_distance;
|
|
if (m_CoverCfg->m_cover_speed != 0.0) {
|
|
coverMil = coverDis / m_CoverCfg->m_cover_speed;
|
|
}
|
|
}
|
|
else if (m_CoverCfg->m_CoverDirection == CoverCfg::ONE_WAY || m_CoverCfg->m_CoverDirection == CoverCfg::ONE_WAY2) {
|
|
if (m_CoverCfg->m_cover_speed != 0.0) {
|
|
coverMil = (double)m_CoverCfg->m_cover_distance / m_CoverCfg->m_cover_speed;
|
|
}
|
|
if (m_CoverCfg->m_cover_shift_speed != 0.0)
|
|
{
|
|
shiftMil = (double)m_CoverCfg->m_cover_distance / m_CoverCfg->m_cover_shift_speed;
|
|
}
|
|
}
|
|
m_CoverCfg->UnLock();
|
|
perLayerpowderTime = coverMil + shiftMil + 600.0;
|
|
if (m_ExtCfg->m_AutoCoverSlowWind) {
|
|
perLayerpowderTime += m_RunCfg->m_CoverWindSimulateTimeOffset;
|
|
}
|
|
if (m_RunCfg->m_PrintLayerDelay != 0) {
|
|
perLayerpowderTime = perLayerpowderTime + m_RunCfg->m_PrintLayerDelay * 1000;
|
|
}
|
|
if (m_RunCfg->m_CoverLayerDelay != 0) {
|
|
perLayerpowderTime = perLayerpowderTime + m_RunCfg->m_CoverLayerDelay * 1000;
|
|
}
|
|
double milsec = 0.0;
|
|
m_RemainTime = 0;
|
|
if (m_HasOrder && m_MachineCfg->m_MachineType == MachineTypeCfg::HBD_1000) {
|
|
map<int, ScannerControlCfg*>* laserCfgsMap = ConfigManager::GetInstance()->GetScannerControlCfg();
|
|
for (size_t layerindex = 0; layerindex < layers->vector_layers.size(); ++layerindex) {
|
|
map<int, double> areaTime;
|
|
map<int, double> borderTime;
|
|
for (int i = 0; i < 33; i++) {
|
|
areaTime[i] = 0.0;
|
|
}
|
|
MetaData::Layer* layer = layers->vector_layers[layerindex];
|
|
for (map<int, double>::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) {
|
|
it->second = 0.0;
|
|
}
|
|
layer->layer_estimate_time = 0;
|
|
for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) {
|
|
MetaData::DataBlock* datablock = layer->data_blocks[blockIndex];
|
|
if (!datablock)continue;
|
|
MetaData::Part* part = GetPart(datablock->references->part);
|
|
if (part) {
|
|
if (!part->print_enable) {
|
|
continue;
|
|
}
|
|
}
|
|
if (m_DBRefScanLaser.find(datablock) == m_DBRefScanLaser.end())continue;
|
|
MetaData::ParameterSet* param = GetParameterSet(datablock->references->process);
|
|
|
|
int sno = m_DBRefScanLaser[datablock];
|
|
if (laserCfgsMap->find(sno) == laserCfgsMap->end())continue;
|
|
ScannerControlCfg* laserCfg = (*laserCfgsMap)[sno];
|
|
if (!laserCfg)continue;
|
|
ScanParamCfg* scanParamCfg = laserCfg->GetScanParamCfg(param->set_type);
|
|
if (scanParamCfg == NULL)scanParamCfg = &laserCfg->m_ScanCfgWrapper.m_ScanParamCfg;
|
|
SkyWritingCfg* skyWritingCfg = &laserCfg->m_ScanCfgWrapper.m_SkyWritingCfg;
|
|
double markMil = 0, jumpMil = 0, hatching = 0, jumpdelay = 0, markdelay = 0, sum = 0, flag = 0;
|
|
if (scanParamCfg->m_jump_speed != 0) {
|
|
jumpMil = datablock->data_block_summary->jump_distance / scanParamCfg->m_jump_speed * 1000;
|
|
jumpMil *= 1.03;
|
|
}
|
|
if (param->laser_speed != 0) {
|
|
markMil = datablock->data_block_summary->mark_distance / param->laser_speed * 1000;
|
|
markMil *= 1.03;
|
|
}
|
|
|
|
int datatype = BIN_VECTOR;
|
|
if (m_DataTypeMap.find(param->set_type) != m_DataTypeMap.end()) {
|
|
datatype = m_DataTypeMap[param->set_type];
|
|
}
|
|
if (skyWritingCfg->m_Mode == 0)
|
|
{
|
|
if (datatype == BIN_CHAIN) {
|
|
markdelay = (double)scanParamCfg->m_polygon_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else if (datatype == BIN_VECTOR) {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
}
|
|
else {
|
|
if (param->laser_set->laser_diameter < 100.0f) {
|
|
double mseg = (double)datablock->data_block_summary->num_mark_segments;
|
|
hatching = (mseg*(skyWritingCfg->m_Nprev + skyWritingCfg->m_Npost) / 1000.0);
|
|
|
|
}
|
|
else {
|
|
if (datatype == BIN_CHAIN) {
|
|
markdelay = (double)scanParamCfg->m_polygon_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else if (datatype == BIN_VECTOR) {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
}
|
|
}
|
|
if (datablock->data_block_summary->num_jump_segments > 0) {
|
|
float avgL = (float)datablock->data_block_summary->jump_distance / datablock->data_block_summary->num_jump_segments;
|
|
float judgL = 0.0f;
|
|
float jump_delay = 0.0f;
|
|
float min_jump_delay = 0.0f;
|
|
judgL = (float)scanParamCfg->m_jump_length_limit;
|
|
jump_delay = (float)scanParamCfg->m_jump_delay;
|
|
min_jump_delay = (float)scanParamCfg->m_min_jump_delay;
|
|
|
|
//float judgL =(float) scanParamCfg->m_jump_length_limit;
|
|
if ((avgL < judgL) && (judgL != 0.0f)) {
|
|
if (jump_delay > min_jump_delay) {
|
|
float k = (float)(jump_delay - min_jump_delay) / judgL;
|
|
float avgdl = k*avgL + min_jump_delay;
|
|
if (avgdl > jump_delay)avgdl = jump_delay;
|
|
jumpdelay = avgdl*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
else {
|
|
jumpdelay = (double)min_jump_delay*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
}
|
|
else {
|
|
jumpdelay = (double)jump_delay*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
}
|
|
|
|
sum = markMil + jumpMil + hatching + jumpdelay + markdelay + 20.0 + flag;
|
|
datablock->scanTime = sum;
|
|
if (datablock->order == 0)
|
|
{
|
|
borderTime[sno] += sum;
|
|
}
|
|
areaTime[datablock->order] += sum;
|
|
}
|
|
|
|
double topLeftSum = 0.0, topRightSum = 0.0, topSum = 0.0;
|
|
double btnLeftSum = 0.0, btnRightSum = 0.0, btnSum = 0.0;
|
|
|
|
for (int i = 1; i < 9; i++)
|
|
{
|
|
topLeftSum += areaTime[i];
|
|
}
|
|
for (int i = 9; i < 17; i++)
|
|
{
|
|
topRightSum += areaTime[i];
|
|
}
|
|
for (int i = 17; i < 25; i++)
|
|
{
|
|
btnLeftSum += areaTime[i];
|
|
}
|
|
for (int i = 25; i < 33; i++)
|
|
{
|
|
btnRightSum += areaTime[i];
|
|
}
|
|
|
|
topSum = topLeftSum > topRightSum ? (topLeftSum + topRightSum / 1.3) : (topRightSum + topLeftSum / 1.3);
|
|
btnSum = btnLeftSum > btnRightSum ? (btnLeftSum + btnRightSum / 1.3) : (btnRightSum + btnLeftSum / 1.3);
|
|
|
|
double borderSum = 0.0;
|
|
for (map<int, double>::iterator it = borderTime.begin(); it != borderTime.end(); it++) {
|
|
if (it->second > borderSum)borderSum = it->second;
|
|
}
|
|
double ss = topSum > btnSum ? topSum : btnSum;
|
|
layer->layer_estimate_time += (ss + perLayerpowderTime);
|
|
layer->layer_estimate_time += borderSum;
|
|
milsec += layer->layer_estimate_time;
|
|
}
|
|
m_RemainTime = milsec;
|
|
evaTime = milsec;
|
|
}
|
|
else {
|
|
map<int, ScannerControlCfg*>* laserCfgsMap = ConfigManager::GetInstance()->GetScannerControlCfg();
|
|
for (size_t layerindex = 0; layerindex < layers->vector_layers.size(); ++layerindex) {
|
|
MetaData::Layer* layer = layers->vector_layers[layerindex];
|
|
for (map<int, double>::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) {
|
|
it->second = 0.0;
|
|
}
|
|
layer->layer_estimate_time = 0;
|
|
for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) {
|
|
//double milsec = 0;
|
|
MetaData::DataBlock* datablock = layer->data_blocks[blockIndex];
|
|
MetaData::ParameterSet* param = parameterMap[datablock->references->process];
|
|
if (!param)continue;
|
|
if (m_DBRefScanLaser.find(datablock) == m_DBRefScanLaser.end())continue;
|
|
int sno = m_DBRefScanLaser[datablock];
|
|
if (laserCfgsMap->find(sno) == laserCfgsMap->end())continue;
|
|
ScannerControlCfg* laserCfg = (*laserCfgsMap)[sno];
|
|
if (!laserCfg)continue;
|
|
ScanParamCfg* scanParamCfg = laserCfg->GetScanParamCfg(param->set_type);
|
|
if(scanParamCfg ==NULL)scanParamCfg = &laserCfg->m_ScanCfgWrapper.m_ScanParamCfg;
|
|
SkyWritingCfg* skyWritingCfg = &laserCfg->m_ScanCfgWrapper.m_SkyWritingCfg;
|
|
double markMil = 0, jumpMil = 0, hatching = 0, jumpdelay = 0, markdelay = 0, sum = 0, flag = 0;
|
|
if (scanParamCfg->m_jump_speed != 0) {
|
|
jumpMil = datablock->data_block_summary->jump_distance / scanParamCfg->m_jump_speed * 1000;
|
|
jumpMil *= 1.03;
|
|
}
|
|
if (param->laser_speed != 0) {
|
|
markMil = datablock->data_block_summary->mark_distance / param->laser_speed * 1000;
|
|
markMil *= 1.03;
|
|
}
|
|
int datatype = BIN_VECTOR;
|
|
if (m_DataTypeMap.find(param->set_type) != m_DataTypeMap.end()) {
|
|
datatype = m_DataTypeMap[param->set_type];
|
|
}
|
|
if (skyWritingCfg->m_Mode == 0)
|
|
{
|
|
|
|
if (datatype == BIN_CHAIN) {
|
|
markdelay = (double)scanParamCfg->m_polygon_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else if (datatype == BIN_VECTOR) {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
}
|
|
else {
|
|
if (param->laser_set->laser_diameter < 100.0f) {
|
|
double mseg = (double)datablock->data_block_summary->num_mark_segments;
|
|
hatching = (mseg*(skyWritingCfg->m_Nprev + skyWritingCfg->m_Npost) / 1000.0);
|
|
|
|
}
|
|
else {
|
|
|
|
if (datatype == BIN_CHAIN) {
|
|
markdelay = (double)scanParamCfg->m_polygon_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else if (datatype == BIN_VECTOR) {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
else {
|
|
markdelay = (double)scanParamCfg->m_scan_delay*datablock->data_block_summary->num_mark_segments / 1000.0;
|
|
}
|
|
}
|
|
}
|
|
if (datablock->data_block_summary->num_jump_segments > 0) {
|
|
float avgL = (float)datablock->data_block_summary->jump_distance / datablock->data_block_summary->num_jump_segments;
|
|
float judgL = 0.0f;
|
|
float jump_delay = 0.0f;
|
|
float min_jump_delay = 0.0f;
|
|
judgL = (float)scanParamCfg->m_jump_length_limit;
|
|
jump_delay = (float)scanParamCfg->m_jump_delay;
|
|
min_jump_delay = (float)scanParamCfg->m_min_jump_delay;
|
|
|
|
//float judgL =(float) scanParamCfg->m_jump_length_limit;
|
|
if ((avgL < judgL) && (judgL != 0.0f)) {
|
|
if (jump_delay > min_jump_delay) {
|
|
float k = (float)(jump_delay - min_jump_delay) / judgL;
|
|
float avgdl = k*avgL + min_jump_delay;
|
|
if (avgdl > jump_delay)avgdl = jump_delay;
|
|
jumpdelay = avgdl*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
else {
|
|
jumpdelay = (double)min_jump_delay*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
}
|
|
else {
|
|
jumpdelay = (double)jump_delay*datablock->data_block_summary->num_jump_segments / 1000.0;
|
|
}
|
|
}
|
|
sum = markMil + jumpMil + hatching + jumpdelay + markdelay + 20.0 + flag;
|
|
datablock->scanTime = sum;
|
|
// milsec += sum;
|
|
layer->estimateTimeMap[laserCfg->m_SeqNo] += sum;
|
|
}
|
|
double max = 0.0;
|
|
for (map<int, double>::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) {
|
|
double eve = it->second;
|
|
if (eve > max)max = eve;
|
|
}
|
|
double ttemp = 0.0;
|
|
if (max < (m_RunCfg->m_CoverSimulateTimeOffset + m_CoverCfg->m_SupplyTime)) {
|
|
ttemp = (m_RunCfg->m_CoverSimulateTimeOffset - max) + m_CoverCfg->m_SupplyTime;
|
|
max = 0.0;
|
|
}
|
|
layer->layer_estimate_time += (max + perLayerpowderTime + ttemp);
|
|
milsec += layer->layer_estimate_time;
|
|
}
|
|
|
|
m_RemainTime = milsec;
|
|
if (m_RunCfg->m_PrintRestEnable && m_RunCfg->m_PrintContinueMinute > 0) {
|
|
double continueFlag = m_RunCfg->m_PrintContinueMinute * 60 * 1000;
|
|
int pauseCount = milsec / continueFlag;
|
|
milsec = milsec + pauseCount*m_RunCfg->m_PrintRestMinutes * 60 * 1000;
|
|
m_RemainTime = m_RemainTime + pauseCount*m_RunCfg->m_PrintRestMinutes * 60 * 1000;
|
|
}
|
|
evaTime = milsec;
|
|
}
|
|
}
|
|
|
|
void MetaData::InitTypeMap()
|
|
{
|
|
m_DataTypeMap["BlockSupport"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownBorderAd"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownBorderAdJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownFBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownFBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownHatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["DownHatching2"] = BIN_VECTOR;
|
|
m_DataTypeMap["DownHatching3"] = BIN_VECTOR;
|
|
m_DataTypeMap["DownHatching4"] = BIN_VECTOR;
|
|
m_DataTypeMap["DownHatching5"] = BIN_VECTOR;
|
|
m_DataTypeMap["DownThin"] = BIN_CHAIN;
|
|
m_DataTypeMap["DownThinJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["Dummy"] = BIN_VECTOR;
|
|
m_DataTypeMap["InBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["InBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["InBorderAd"] = BIN_CHAIN;
|
|
m_DataTypeMap["InBorderAdJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["InFBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["InFBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["InHatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["InThin"] = BIN_CHAIN;
|
|
m_DataTypeMap["InThinJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["Other"] = BIN_VECTOR;
|
|
m_DataTypeMap["SupportBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["SupportBorderAd"] = BIN_CHAIN;
|
|
m_DataTypeMap["SupportHatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpBorderAd"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpBorderAdJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpFBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpFBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpHatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpHatching2"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpHatching3"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpHatching4"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpHatching5"] = BIN_VECTOR;
|
|
m_DataTypeMap["UpThin"] = BIN_CHAIN;
|
|
m_DataTypeMap["UpThinJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["LatticeHatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["LatticeBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["LatticeBorderJ"] = BIN_CHAIN;
|
|
m_DataTypeMap["LatticeFBorder"] = BIN_CHAIN;
|
|
m_DataTypeMap["LatticeFBorderJ"] = BIN_CHAIN;
|
|
|
|
m_DataTypeMap["BorderDown"] = BIN_CHAIN;
|
|
m_DataTypeMap["FillContourDown"] = BIN_CHAIN;
|
|
m_DataTypeMap["HatchingDown"] = BIN_VECTOR;
|
|
m_DataTypeMap["BorderAdditionalDown"] = BIN_CHAIN;
|
|
m_DataTypeMap["BorderBlockedDown"] = BIN_CHAIN;
|
|
m_DataTypeMap["Border"] = BIN_CHAIN;
|
|
m_DataTypeMap["FillContour"] = BIN_CHAIN;
|
|
m_DataTypeMap["Hatching"] = BIN_VECTOR;
|
|
m_DataTypeMap["BorderAdditional"] = BIN_CHAIN;
|
|
m_DataTypeMap["BorderBlocked"] = BIN_CHAIN;
|
|
m_DataTypeMap["BorderUp"] = BIN_CHAIN;
|
|
m_DataTypeMap["FillContourUp"] = BIN_CHAIN;
|
|
m_DataTypeMap["HatchingUp"] = BIN_VECTOR;
|
|
m_DataTypeMap["BorderAdditionalUp"] = BIN_CHAIN;
|
|
m_DataTypeMap["BorderBlockedUp"] = BIN_CHAIN;
|
|
m_DataTypeMap["BorderSupport"] = BIN_CHAIN;
|
|
m_DataTypeMap["HatchingBorder"] = BIN_VECTOR;
|
|
m_DataTypeMap["BorderAdditionalSupport"] = BIN_CHAIN;
|
|
m_DataTypeMap["WallSupport"] = BIN_VECTOR;
|
|
}
|
|
|
|
void MetaData::ClearBlockMap()
|
|
{
|
|
for (map<DataBlock*, BPBinary::BinDataBlock*>::iterator it = m_block_map.begin(); it != m_block_map.end(); ++it) {
|
|
delete it->second;
|
|
}
|
|
m_block_map.clear();
|
|
}
|
|
|
|
void MetaData::ClearPrevBlockMap()
|
|
{
|
|
for (map<DataBlock*, BPBinary::BinDataBlock*>::iterator it = m_prev_block_map.begin(); it != m_prev_block_map.end(); ++it) {
|
|
delete it->second;
|
|
}
|
|
m_prev_block_map.clear();
|
|
}
|
|
|
|
void MetaData::ClearRemoteBlockMap()
|
|
{
|
|
for (map<DataBlock*, BPBinary::BinDataBlock*>::iterator it = m_remote_block_map.begin(); it != m_remote_block_map.end(); ++it) {
|
|
delete it->second;
|
|
}
|
|
m_remote_block_map.clear();
|
|
}
|
|
|
|
void MetaData::ClearBFileMap()
|
|
{
|
|
for (map<string, ifstream*>::iterator it = m_binary_file_map.begin(); it != m_binary_file_map.end(); ++it)
|
|
{
|
|
ifstream* pbfile = it->second;
|
|
if (pbfile) {
|
|
if (pbfile->is_open())pbfile->close();
|
|
delete pbfile;
|
|
}
|
|
}
|
|
m_binary_file_map.clear();
|
|
|
|
for (map<string, ifstream*>::iterator it = m_pre_file_map.begin(); it != m_pre_file_map.end(); ++it)
|
|
{
|
|
ifstream* pbfile = it->second;
|
|
if (pbfile) {
|
|
pbfile->close();
|
|
delete pbfile;
|
|
}
|
|
}
|
|
m_pre_file_map.clear();
|
|
|
|
}
|
|
|
|
|
|
void MetaData::AddPart(Part* part)
|
|
{
|
|
if (!part)return;
|
|
LockPart();
|
|
partsVec.push_back(part);
|
|
partsMap[part->id] = part;
|
|
for (size_t i = 0; i < layers->vector_layers.size(); ++i) {
|
|
MetaData::Layer* layer = layers->vector_layers[i];
|
|
|
|
if (layer->data_blocks_map.find(part->sourceId) == layer->data_blocks_map.end())continue;
|
|
vector<DataBlock*>* dbs = layer->data_blocks_map[part->sourceId];
|
|
//layers->vector_layers[i]->data_blocks_map[part->id] = layers->vector_layers[i]->data_blocks_map[part->sourceId];
|
|
for (size_t dbIndex = 0; dbIndex < dbs->size(); ++dbIndex) {
|
|
DataBlock* db = new DataBlock();
|
|
db->references->part = part->id;
|
|
db->references->process = (*dbs)[dbIndex]->references->process;
|
|
memcpy_s(db->data_block_summary, sizeof(DataBlockSummary), (*dbs)[dbIndex]->data_block_summary, sizeof(DataBlockSummary));
|
|
memcpy_s(db->bin, sizeof(Bin), (*dbs)[dbIndex]->bin, sizeof(Bin));
|
|
layers->vector_layers[i]->data_blocks.push_back(db);
|
|
|
|
vector<DataBlock*>* blocks = layers->vector_layers[i]->data_blocks_map[part->id];
|
|
if (blocks == NULL)
|
|
{
|
|
blocks = new vector<DataBlock*>();
|
|
blocks->push_back(db);
|
|
layers->vector_layers[i]->data_blocks_map[part->id] = blocks;
|
|
}
|
|
else {
|
|
blocks->push_back(db);
|
|
}
|
|
ScannerControlCfg* laserCfg = NULL;
|
|
ParameterSet* ps = parameterMap[db->references->process];
|
|
if (ps) {
|
|
if (m_MachineCfg->m_PrintStrategy == MachineCfg::DATA) {
|
|
laserCfg = m_FieldRefScanLaser[ps->scan_field];
|
|
}
|
|
|
|
|
|
if (laserCfg) {
|
|
//db->cno = laserCfg->m_SeqNo;
|
|
m_DBRefScanLaser[db] = laserCfg->m_SeqNo;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
UnLockPart();
|
|
if (m_previewLayer) {
|
|
LoadPrevLayer(m_previewLayer);
|
|
}
|
|
}
|
|
|
|
void MetaData::DelPart(Part* part)
|
|
{
|
|
if (!part)return;
|
|
LockPart();
|
|
|
|
|
|
for (size_t i = 0; i < layers->vector_layers.size(); ++i) {
|
|
vector<DataBlock*> dbs = layers->vector_layers[i]->data_blocks;
|
|
for (vector<DataBlock*>::iterator it = layers->vector_layers[i]->data_blocks.begin(); it != layers->vector_layers[i]->data_blocks.end();) {
|
|
DataBlock* db = (*it);
|
|
if (db && db->references->part == part->id) {
|
|
//if (m_DBRefScanLaser.find(db) != m_DBRefScanLaser.end()) {
|
|
// m_DBRefScanLaser.erase(db);
|
|
//}
|
|
delete db;
|
|
it = layers->vector_layers[i]->data_blocks.erase(it);
|
|
}
|
|
else {
|
|
it++;
|
|
}
|
|
}
|
|
map<int, vector<DataBlock*>*>::iterator dbmapit;
|
|
if ((dbmapit = layers->vector_layers[i]->data_blocks_map.find(part->id)) != layers->vector_layers[i]->data_blocks_map.end()) {
|
|
vector<DataBlock*>* pdbs = layers->vector_layers[i]->data_blocks_map[part->id];
|
|
delete pdbs;
|
|
layers->vector_layers[i]->data_blocks_map.erase(dbmapit);
|
|
}
|
|
}
|
|
|
|
|
|
map<int, Part*>::iterator partit;
|
|
if ((partit = partsMap.find(part->id)) != partsMap.end()) {
|
|
partsMap.erase(partit);
|
|
}
|
|
|
|
for (vector<Part*>::iterator it = partsVec.begin(); it != partsVec.end();) {
|
|
Part* temp = (*it);
|
|
if (temp && temp == part) {
|
|
|
|
delete temp;
|
|
temp = nullptr;
|
|
it = partsVec.erase(it);
|
|
}
|
|
else {
|
|
it++;
|
|
}
|
|
}
|
|
|
|
UnLockPart();
|
|
if (m_previewLayer) {
|
|
LoadPrevLayer(m_previewLayer);
|
|
}
|
|
}
|
|
|
|
|
|
map<string, int> MetaData::m_DataTypeMap = map<string, int>(); |