You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cigarette/Cigarette/exportData.cpp

178 lines
4.8 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "exportData.h"
#include "QtCore\qfile.h"
#include "QtCore\qtextstream.h"
#include<string>
extern SyncQueue<_ExportDataInfo>* export_Data_Info_queue;
ExportDataThread::ExportDataThread(QObject* parent) : QThread(parent)
{
char xmlPath[256];
for (int index = 0; index < NumberOfSupportedCameras; index++)
{
XMLError error;
pDocument[index] = new XMLDocument();
memset(xmlPath, 0, 256);
sprintf(xmlPath, EXPORTDATA_FILE, index);
error = pDocument[index]->LoadFile(xmlPath);
if (error != XML_SUCCESS)
{
XMLDeclaration* declaration = pDocument[index]->NewDeclaration();
pDocument[index]->InsertFirstChild(declaration);
XMLElement* root = pDocument[0]->NewElement("Root");
pDocument[0]->InsertEndChild(root);
pDocument[index]->SaveFile(xmlPath);
}
/*
_ExportDataInfo data;
data.cameraId = index;
data.cameraTotal = 3;
data.timeCost = "3ms";
insertXMLNode(xmlPath, data);
*/
}
}
void ExportDataThread::init()
{
b_quit = false;
}
void ExportDataThread::start_work()
{
start(HighestPriority);
}
void ExportDataThread::stop()
{
b_quit = true;
_ExportDataInfo data;
export_Data_Info_queue->put(data);
}
bool _ExportDataInfo::getAverageData(map<string, float> &averageData, int index)
{
XMLDocument doc;
char xmlPath[256];
XMLError error;
map<string, float> data;
memset(xmlPath, 0, 256);
sprintf(xmlPath, EXPORTDATA_FILE, index);
error = doc.LoadFile(xmlPath);
if (error != XML_SUCCESS)
if (doc.LoadFile(xmlPath) != 0)
{
cout << "load xml file failed" << endl;
return false;
}
XMLElement* root = doc.RootElement();
XMLElement* userNode = root->FirstChildElement("Camera");
data["CameraId"] = index;
data["IsNG"] = 0;
data["IsJdExist"] = 0;
data["Total"] = 0;
while (userNode != NULL)
{
if (atoi(userNode->Attribute("Id")) == index) {
data["IsNG"]++;
data["IsJdExist"]++;
data["Total"]++;
XMLElement* IsNgNode = userNode->FirstChildElement("IsNG");
data["IsNg"] = strcmp(IsNgNode->GetText(), "TRUE");
XMLElement* IsJdExistNode = userNode->FirstChildElement("IsJdExist");
if (strcmp(IsJdExistNode->GetText(), "TRUE") == 0)
data["IsJdExist"]++;
XMLElement* TimeCostNode = userNode->FirstChildElement("TimeCost");
data["TimeCost"] += stof(TimeCostNode->GetText());
}
userNode = userNode->NextSiblingElement();//<2F><>һ<EFBFBD><D2BB><EFBFBD>ֵܽڵ<DCBD>
}
if (data["Total"] == 0)
return false;
data["TimeCost"] = data["TimeCost"] / data["Total"];
averageData = data;
return true;
}
int ExportDataThread::insertXMLNode(const char* xmlPath, _ExportDataInfo& data)
{
XMLElement* root = pDocument[data.cameraId]->RootElement();
if (root == NULL) {
root = pDocument[data.cameraId]->NewElement("Root");
pDocument[data.cameraId]->InsertEndChild(root);
pDocument[data.cameraId]->SaveFile(xmlPath);
}
XMLElement* CameraNode = pDocument[data.cameraId]->NewElement("Camera");
CameraNode->SetAttribute("Id", data.cameraId);
CameraNode->SetAttribute("Count ", data.cameraTotal);
root->InsertEndChild(CameraNode);
XMLElement* IsNG = pDocument[data.cameraId]->NewElement("IsNG");
XMLText* IsNGText = pDocument[data.cameraId]->NewText(data.isNg ? "TRUE" : "FALSE");
IsNG->InsertEndChild(IsNGText);
CameraNode->InsertEndChild(IsNG);
XMLElement* timeCost = pDocument[data.cameraId]->NewElement("TimeCost");
timeCost->InsertEndChild(pDocument[data.cameraId]->NewText(data.timeCost.c_str()));
CameraNode->InsertEndChild(timeCost);
XMLElement* isJdExist = pDocument[data.cameraId]->NewElement("IsJdExist");
isJdExist->InsertEndChild(pDocument[data.cameraId]->NewText(data.isJdExist[0] ? "TRUE" : "FALSE"));
CameraNode->InsertEndChild(isJdExist);
// XMLElement* jdInterval = pDocument[data.cameraId]->NewElement("JdInterval");
// jdInterval->InsertEndChild(pDocument[data.cameraId]->NewText((const char*)&data.jdInterval));
// CameraNode->InsertEndChild(jdInterval);
// XMLElement* jdInterval = pDocument[data.cameraId]->NewElement("jdPointsLocation");
// jdInterval->InsertEndChild(pDocument[data.cameraId]->NewText(data.getPoint(0).c_str()));
// CameraNode->InsertEndChild(jdInterval);
return pDocument[data.cameraId]->SaveFile(xmlPath);
}
void ExportDataThread::run()
{
while (!b_quit) {
_ExportDataInfo element;
export_Data_Info_queue->take(element);
if (element.cameraId != -1) {
char buf[256];
memset(buf, 0, 256);
sprintf(buf, EXPORTDATA_FILE, element.cameraId);
insertXMLNode(buf, element);
}
}
for (int index = 0; index < NumberOfSupportedCameras; index++) {
pDocument[index]->~XMLDocument();
}
}
void ExportDataThread::check_save_dir(std::string dir_path)
{
bool b_find = false;
for (int i = 0; i < vec_save_dirs.size(); i++)
{
if (dir_path == vec_save_dirs[i])
{
b_find = true;
}
}
if (!b_find)
{
QString dir_str = QString::fromStdString(dir_path);
QDir dir;
if (!dir.exists(dir_str))
{
dir.mkpath(dir_str);
}
vec_save_dirs.push_back(dir_path);
}
}