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.
wheeldetect/src/RasterSDG20/Raster.cpp

218 lines
6.5 KiB
C++

#include "Raster.h"
#include "ThicknessVector.h"
#include <QDebug>
#include <QJsonObject>
#include <QJsonDocument>
#include "QFile"
#pragma execution_character_set("utf-8")
CRaster::CRaster(QString strPath)
: m_pThickness(NULL), m_pRasSt(NULL), m_strPath(strPath)
{
m_pThickness = new ThicknessVector();
m_pRasSt = new RasterST;
m_pRasCom = new RasterCom;
readRasterJson();
m_pThickness->setRasterST(m_pRasSt);
}
CRaster::~CRaster()
{
delete m_pRasSt;
delete m_pRasCom;
delete m_pThickness;
}
void CRaster::saveDefaultParam()
{
QJsonObject jsRaster = QJsonObject();
QJsonObject Rasterobj_dev;
Rasterobj_dev.insert("beilv", QJsonValue(m_pRasSt->m_beilv));
Rasterobj_dev.insert("basehight", QJsonValue(m_pRasSt->m_baseHight));
Rasterobj_dev.insert("mid_value", QJsonValue(m_pRasSt->mid_value));//中值
Rasterobj_dev.insert("maxsize", QJsonValue(m_pRasSt->m_maxsize));
Rasterobj_dev.insert("lowNum", QJsonValue(m_pRasSt->m_lowNum));
Rasterobj_dev.insert("beilv_bool", QJsonValue(m_pRasSt->m_bool_beilv));
Rasterobj_dev.insert("basehight_bool", QJsonValue(m_pRasSt->m_bool_baseHight));
Rasterobj_dev.insert("maxsize_bool", QJsonValue(m_pRasSt->m_bool_maxsize));
Rasterobj_dev.insert("lowNum_bool", QJsonValue(m_pRasSt->m_bool_lowNum));
Rasterobj_dev.insert("mid_value_bool", QJsonValue(m_pRasSt->m_bool_mid_value));
jsRaster.insert("Raster", Rasterobj_dev);
QJsonObject Rasterobj;
Rasterobj.insert("comName", QJsonValue(m_pRasCom->m_ComName));
Rasterobj.insert("baute", QJsonValue(m_pRasCom->m_Baute));
Rasterobj.insert("useRaster", QJsonValue(m_pRasCom->m_UseRaster));
jsRaster.insert("COM", Rasterobj);
QFile saveFile(m_strPath);
saveFile.open(QIODevice::WriteOnly);
QJsonDocument saveDoc(jsRaster);
saveFile.write(saveDoc.toJson());
saveFile.close();
}
RasterST * CRaster::getRasterSt() const
{
return m_pRasSt;
}
bool CRaster::readRasterJson()
{
//!>读取调试模式信息 是否保存good的图片 是否保存bad的图片 是否使用调试模式
QFile loadFile(m_strPath);
if (!loadFile.open(QIODevice::ReadOnly)) {
qWarning("Couldn't open save file.");
saveDefaultParam();
return false;
}
QByteArray readData = loadFile.readAll();
QJsonDocument readDoc = QJsonDocument::fromJson(readData);
QJsonObject jsRaster = readDoc.object();
QJsonObject Rsaterobj = jsRaster.value("Raster").toObject();
if (!Rsaterobj.isEmpty()) {
m_pRasSt->m_beilv = Rsaterobj.value("beilv").toDouble(5.07);
m_pRasSt->m_baseHight = Rsaterobj.value("basehight").toDouble(87);
m_pRasSt->mid_value = Rsaterobj.value("mid_value").toDouble(0.8);//中值
m_pRasSt->m_maxsize = Rsaterobj.value("maxsize").toInt(10);
m_pRasSt->m_lowNum = Rsaterobj.value("lowNum").toInt(0);
m_pRasSt->m_bool_beilv = Rsaterobj.value("beilv_bool").toBool(false);
m_pRasSt->m_bool_baseHight = Rsaterobj.value("basehight_bool").toBool(false);
m_pRasSt->m_bool_maxsize = Rsaterobj.value("maxsize_bool").toBool(false);
m_pRasSt->m_bool_lowNum = Rsaterobj.value("lowNum_bool").toBool(false);
m_pRasSt->m_bool_mid_value = Rsaterobj.value("mid_value_bool").toBool(false);
}
else {
saveRasterJson(EMTYPE_RASTER);
}
QJsonObject RasterComObj = jsRaster.value("COM").toObject();
if (!RasterComObj.isEmpty()) {
m_pRasCom->m_ComName = RasterComObj.value("comName").toString();
m_pRasCom->m_Baute = RasterComObj.value("baute").toString();
m_pRasCom->m_UseRaster = RasterComObj.value("useRaster").toBool();
}
else{
saveRasterJson(EMTYPE_COM);
}
return true;
}
bool CRaster::saveRasterJson(emTySaveJsonType emType)
{
QFile loadFile(m_strPath);
if (!loadFile.open(QIODevice::ReadOnly)) {
qWarning("Couldn't open save file.");
return false;
}
QByteArray readData = loadFile.readAll();
QJsonDocument readDoc = QJsonDocument::fromJson(readData);
QJsonObject jsRaster = readDoc.object();
if (jsRaster.isEmpty())
jsRaster = QJsonObject();
switch (emType)
{
case EMTYPE_RASTER:{
QJsonObject Rasterobj;
Rasterobj.insert("beilv", QJsonValue(m_pRasSt->m_beilv));
Rasterobj.insert("basehight", QJsonValue(m_pRasSt->m_baseHight));
Rasterobj.insert("mid_value", QJsonValue(m_pRasSt->mid_value));//中值
Rasterobj.insert("maxsize", QJsonValue(m_pRasSt->m_maxsize));
Rasterobj.insert("lowNum", QJsonValue(m_pRasSt->m_lowNum));
Rasterobj.insert("beilv_bool", QJsonValue(m_pRasSt->m_bool_beilv));
Rasterobj.insert("basehight_bool", QJsonValue(m_pRasSt->m_bool_baseHight));
Rasterobj.insert("maxsize_bool", QJsonValue(m_pRasSt->m_bool_maxsize));
Rasterobj.insert("lowNum_bool", QJsonValue(m_pRasSt->m_bool_lowNum));
Rasterobj.insert("mid_value_bool", QJsonValue(m_pRasSt->m_bool_mid_value));
jsRaster.insert("Raster", Rasterobj);
}
break;
case EMTYPE_COM:{
QJsonObject Rasterobj;
Rasterobj.insert("comName", QJsonValue(m_pRasCom->m_ComName));
Rasterobj.insert("baute", QJsonValue(m_pRasCom->m_Baute));
Rasterobj.insert("useRaster", QJsonValue(m_pRasCom->m_UseRaster));
jsRaster.insert("COM", Rasterobj);
}
break;
default:
break;
}
QFile saveFile(m_strPath);
saveFile.open(QIODevice::WriteOnly);
QJsonDocument saveDoc(jsRaster);
saveFile.write(saveDoc.toJson());
saveFile.close();
return true;
}
QString CRaster::getThicknessListStr()
{
QList<double> m = getThicknessList();/*显示滤波的数据*/
QString str = "thickness list: ";
for (int i = 0; i < m.size(); i++)
{
str += QString::number(m.at(i)) + " ";
}
str += "; value = " + QString::number(m_pThickness->getValue());
qDebug() << str;
return str;
}
double CRaster::getThicknessValue() const
{
//
// QList<double> m = getThicknessList();/*显示滤波的数据*/
// QString str = "thickness value list: ";
// for (int i = 0; i < m.size(); i++)
// {
// str += QString::number(m.at(i)) + " ";
// }
// str += "; value = " + QString::number(m_pThickness->getValue());
// qDebug() << str;
return m_pThickness->getValue();
}
void CRaster::addThicknessValue(double dValue)
{
double dThickness = (63 - dValue) * m_pRasSt->m_beilv*1.0;//获取光栅数据 乘以 倍率 得出遮挡的厚度
m_pThickness->addValue(dThickness + m_pRasSt->m_baseHight);
}
bool CRaster::showRasterDlg()
{
// QRasterDlg dlg;
// dlg.SetData2UI(m_pRasSt);
// dlg.setWindowTitle("光栅标定参数设置");
// dlg.setWindowIcon(QIcon(":/image/leaper"));
// if (dlg.exec() == QDialog::Accepted)
// {
// dlg.GetDataFromUI(m_pRasSt);
// saveRasterJson();
// }
return true;
}
QList<double> CRaster::getThicknessList() const
{
return m_pThickness->getList();
}
bool CRaster::setRasterSt(RasterST *m_pRaster)
{
if (m_pRasSt){
m_pRasSt = m_pRaster;
}
return true;
}
RasterCom * CRaster::getRasterCom() const
{
return m_pRasCom;
}