415 lines
12 KiB
C++
415 lines
12 KiB
C++
#include "fileopenthread.h"
|
||
#include <QFile>
|
||
#include <QDir>
|
||
|
||
//#include "CallManage.h"
|
||
#include <QFuture>
|
||
#include <QtConcurrent/QtConcurrent>
|
||
|
||
extern QString g_prjname;
|
||
|
||
|
||
void FileOpenThread::Open(QString fileFull)
|
||
{
|
||
QString strPrjname = "";
|
||
QJsonArray wellsArray;
|
||
|
||
QJsonParseError jsonError;
|
||
// 文件
|
||
QFile file(fileFull);
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
// 解析JSON
|
||
QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &jsonError);
|
||
if (!document.isNull() && (jsonError.error == QJsonParseError::NoError))
|
||
{
|
||
if (document.isObject())
|
||
{
|
||
QJsonObject object = document.object();
|
||
//
|
||
if (object.contains("prjname"))
|
||
{
|
||
QJsonValue value = object.value("prjname");
|
||
if (value.isString()) {
|
||
strPrjname = value.toString();
|
||
qDebug() << "prjname:" << strPrjname;
|
||
|
||
if(strPrjname != g_prjname)
|
||
{
|
||
file.close();
|
||
qDebug() << "JSON 模板文件项目名称与当前项目不一致!";
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
if (object.contains("wells"))
|
||
{
|
||
QJsonValue value = object.value("wells");
|
||
if (value.isArray()) {
|
||
wellsArray = value.toArray();
|
||
qDebug() << "wellsArray number:" << QString::number(wellsArray.size());
|
||
//展示所有井
|
||
DisplayWells(wellsArray);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
file.close();
|
||
qDebug() << "JSON 模板文件读取成功!";
|
||
} else {
|
||
qWarning() << "JSON 模板文件打开失败:" << file.errorString();
|
||
}
|
||
}
|
||
|
||
void FileOpenThread::DisplayWells(QJsonArray wellsArray)
|
||
{
|
||
QMap<int, int> mapWells;
|
||
|
||
int id = 0;
|
||
int iCount = wellsArray.size();
|
||
for(int i=0; i<iCount; i++)
|
||
{
|
||
QJsonValue wellValue = wellsArray[i];
|
||
|
||
QJsonObject wellObj = wellValue.toObject();
|
||
//
|
||
if (wellObj.contains("id"))
|
||
{
|
||
QJsonValue value = wellObj.value("id");
|
||
if (value.isDouble()) {
|
||
id = value.toInt();
|
||
qDebug() << "id:" << QString::number(id);
|
||
//
|
||
mapWells.insert(id, i);
|
||
}
|
||
}
|
||
}
|
||
|
||
for(int id=0; id<iCount; id++)
|
||
{
|
||
if(mapWells.contains(id*2))
|
||
{
|
||
int iNum = mapWells.value(id*2);
|
||
//按照id顺序,展示井
|
||
QJsonValue wellValue = wellsArray[iNum];
|
||
QJsonObject wellObj = wellValue.toObject();
|
||
//
|
||
if (wellObj.contains("info"))
|
||
{
|
||
QJsonValue value = wellObj.value("info");
|
||
if (value.isObject()) {
|
||
QJsonObject wellObjInfo = value.toObject();
|
||
//展示其中一口井
|
||
DisplayWell_One(wellObjInfo);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//展示其中一口井
|
||
void FileOpenThread::DisplayWell_One(QJsonObject wellObjInfo)
|
||
{
|
||
QString strWellName = "";
|
||
QJsonArray tracksArray;
|
||
|
||
if (wellObjInfo.contains("WellName"))
|
||
{
|
||
QJsonValue value = wellObjInfo.value("WellName");
|
||
if (value.isString()) {
|
||
strWellName = value.toString();
|
||
qDebug() << "WellName:" << strWellName;
|
||
|
||
//新建井
|
||
//mainWindowCurve->s_NewWell(strWellName);
|
||
emit sig_NewWell(strWellName);
|
||
}
|
||
}
|
||
|
||
//
|
||
if (wellObjInfo.contains("formTracks"))
|
||
{
|
||
QJsonValue value = wellObjInfo.value("formTracks");
|
||
if (value.isArray()) {
|
||
tracksArray = value.toArray();
|
||
qDebug() << "tracksArray number:" << QString::number(tracksArray.size());
|
||
//展示所有道
|
||
DisplayTracks(tracksArray);
|
||
}
|
||
}
|
||
}
|
||
|
||
//展示所有道
|
||
void FileOpenThread::DisplayTracks(QJsonArray tracksArray)
|
||
{
|
||
QMap<int, int> mapTracks;
|
||
|
||
int id = 0;
|
||
int iCount = tracksArray.size();
|
||
for(int i=0; i<iCount; i++)
|
||
{
|
||
QJsonValue trackValue = tracksArray[i];
|
||
|
||
QJsonObject trackObj = trackValue.toObject();
|
||
//
|
||
if (trackObj.contains("id"))
|
||
{
|
||
QJsonValue value = trackObj.value("id");
|
||
if (value.isDouble()) {
|
||
id = value.toInt();
|
||
qDebug() << "id:" << QString::number(id);
|
||
//
|
||
mapTracks.insert(id, i);
|
||
}
|
||
}
|
||
}
|
||
|
||
for(int id=0; id<iCount; id++)
|
||
{
|
||
if(mapTracks.contains(id))
|
||
{
|
||
int iNum = mapTracks.value(id);
|
||
//按照id顺序,展示道
|
||
QJsonValue trackValue = tracksArray[iNum];
|
||
QJsonObject trackObj = trackValue.toObject();
|
||
//
|
||
if (trackObj.contains("info"))
|
||
{
|
||
QJsonValue value = trackObj.value("info");
|
||
if (value.isObject()) {
|
||
QJsonObject trackObjInfo = value.toObject();
|
||
//展示其中一道
|
||
DisplayTrack_One(trackObjInfo, id);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//展示其中一道
|
||
void FileOpenThread::DisplayTrack_One(QJsonObject trackObjInfo, int id)
|
||
{
|
||
QString strWellName = "";
|
||
QString strTrackName = "";
|
||
QJsonArray linesArray;
|
||
|
||
if (trackObjInfo.contains("WellName"))
|
||
{
|
||
QJsonValue value = trackObjInfo.value("WellName");
|
||
if (value.isString()) {
|
||
strWellName = value.toString();
|
||
qDebug() << "WellName:" << strWellName;
|
||
}
|
||
}
|
||
if (trackObjInfo.contains("TrackName"))
|
||
{
|
||
QJsonValue value = trackObjInfo.value("TrackName");
|
||
if (value.isString()) {
|
||
strTrackName = value.toString();
|
||
qDebug() << "TrackName:" << strTrackName;
|
||
}
|
||
}
|
||
|
||
//新建道+曲线
|
||
//emit mainWindow->getInstanceCallManage()->sig_NewTrack_No_Line(strWellName, strTrackName);//新建空白道,没有曲线
|
||
emit sig_NewTrack_No_Line(strWellName, strTrackName);//新建空白道,没有曲线
|
||
if(id>0)
|
||
{
|
||
//改变井宽
|
||
emit sig_NewTrackChangeWidth(strWellName);
|
||
//mainWindowCurve->s_NewTrackChangeWidth(strWellName);
|
||
}
|
||
|
||
//
|
||
if (trackObjInfo.contains("formInfos"))
|
||
{
|
||
QJsonValue value = trackObjInfo.value("formInfos");
|
||
if (value.isArray()) {
|
||
linesArray = value.toArray();
|
||
qDebug() << "linesArray number:" << QString::number(linesArray.size());
|
||
//展示所有曲线
|
||
DisplayLines(linesArray);
|
||
}
|
||
}
|
||
}
|
||
|
||
//展示所有曲线
|
||
void FileOpenThread::DisplayLines(QJsonArray linesArray)
|
||
{
|
||
QMap<int, int> mapLines;
|
||
|
||
int id = 0;
|
||
int iCount = linesArray.size();
|
||
for(int i=0; i<iCount; i++)
|
||
{
|
||
QJsonValue lineValue = linesArray[i];
|
||
|
||
QJsonObject lineObj = lineValue.toObject();
|
||
//
|
||
if (lineObj.contains("id"))
|
||
{
|
||
QJsonValue value = lineObj.value("id");
|
||
if (value.isDouble()) {
|
||
id = value.toInt();
|
||
qDebug() << "id:" << QString::number(id);
|
||
//
|
||
mapLines.insert(id, i);
|
||
}
|
||
}
|
||
}
|
||
|
||
for(int id=0; id<iCount; id++)
|
||
{
|
||
if(mapLines.contains(id))
|
||
{
|
||
int iNum = mapLines.value(id);
|
||
//按照id顺序,展示曲线
|
||
QJsonValue lineValue = linesArray[iNum];
|
||
QJsonObject lineObj = lineValue.toObject();
|
||
//
|
||
if (lineObj.contains("info"))
|
||
{
|
||
QJsonValue value = lineObj.value("info");
|
||
if (value.isObject()) {
|
||
QJsonObject lineObjInfo = value.toObject();
|
||
//展示其中一条曲线
|
||
DisplayLine_One(lineObjInfo);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//展示其中一条曲线
|
||
void FileOpenThread::DisplayLine_One(QJsonObject lineObjInfo)
|
||
{
|
||
QString strSlfName = "";
|
||
QString strWellName = "";
|
||
QString strTrackName = "";
|
||
QString strLineName = "";
|
||
double newLeftScale = 0;
|
||
double newRightScale = 500;
|
||
QColor lineColor = QColor(0,0,0);
|
||
double width = 3;
|
||
Qt::PenStyle lineStyle = Qt::SolidLine;
|
||
|
||
if (lineObjInfo.contains("SlfName"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("SlfName");
|
||
if (value.isString()) {
|
||
strSlfName = value.toString();
|
||
qDebug() << "SlfName:" << strSlfName;
|
||
}
|
||
}
|
||
if (lineObjInfo.contains("WellName"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("WellName");
|
||
if (value.isString()) {
|
||
strWellName = value.toString();
|
||
qDebug() << "WellName:" << strWellName;
|
||
}
|
||
}
|
||
if (lineObjInfo.contains("TrackName"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("TrackName");
|
||
if (value.isString()) {
|
||
strTrackName = value.toString();
|
||
qDebug() << "TrackName:" << strTrackName;
|
||
}
|
||
}
|
||
if (lineObjInfo.contains("LineName"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("LineName");
|
||
if (value.isString()) {
|
||
strLineName = value.toString();
|
||
qDebug() << "LineName:" << strLineName;
|
||
}
|
||
}
|
||
|
||
if (lineObjInfo.contains("vmin"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("vmin");
|
||
if (value.isDouble()) {
|
||
newLeftScale = value.toDouble();
|
||
qDebug() << "vmin:" << QString::number(newLeftScale);
|
||
}
|
||
}
|
||
if (lineObjInfo.contains("vmax"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("vmax");
|
||
if (value.isDouble()) {
|
||
newRightScale = value.toDouble();
|
||
qDebug() << "vmax:" << QString::number(newRightScale);
|
||
}
|
||
}
|
||
if (lineObjInfo.contains("Width"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("Width");
|
||
if (value.isDouble()) {
|
||
width = value.toDouble();
|
||
qDebug() << "Width:" << QString::number(width);
|
||
}
|
||
}
|
||
|
||
if (lineObjInfo.contains("lineStyle"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("lineStyle");
|
||
if (value.isDouble()) {
|
||
lineStyle = (Qt::PenStyle)value.toInt();
|
||
qDebug() << "lineStyle:" << QString::number(lineStyle);
|
||
}
|
||
}
|
||
//
|
||
if (lineObjInfo.contains("lineColorRed"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("lineColorRed");
|
||
if (value.isDouble()) {
|
||
lineColor.setRed(value.toInt());
|
||
qDebug() << "lineColorRed:" << QString::number(value.toInt());
|
||
}
|
||
}
|
||
//
|
||
if (lineObjInfo.contains("lineColorGreen"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("lineColorGreen");
|
||
if (value.isDouble()) {
|
||
lineColor.setGreen(value.toInt());
|
||
qDebug() << "lineColorGreen:" << QString::number(value.toInt());
|
||
}
|
||
}
|
||
//
|
||
if (lineObjInfo.contains("lineColorBlue"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("lineColorBlue");
|
||
if (value.isDouble()) {
|
||
lineColor.setBlue(value.toInt());
|
||
qDebug() << "lineColorBlue:" << QString::number(value.toInt());
|
||
}
|
||
}
|
||
//
|
||
if (lineObjInfo.contains("lineColorAlpha"))
|
||
{
|
||
QJsonValue value = lineObjInfo.value("lineColorAlpha");
|
||
if (value.isDouble()) {
|
||
lineColor.setAlpha(value.toInt());
|
||
qDebug() << "lineColorAlpha:" << QString::number(value.toInt());
|
||
}
|
||
}
|
||
|
||
if(strLineName!="")
|
||
{
|
||
//新建曲线
|
||
//emit CallManage::getInstance()->sig_AddLine(strSlfName, strWellName, strTrackName, strLineName);
|
||
// emit mainWindow->getInstanceCallManage()->sig_AddLine_Property(strSlfName, strWellName, strTrackName, strLineName,
|
||
// newLeftScale, newRightScale, lineColor, width, lineStyle);
|
||
|
||
emit sig_AddLine_Property(strSlfName, strWellName, strTrackName, strLineName,
|
||
newLeftScale, newRightScale, lineColor, width, lineStyle);
|
||
}
|
||
}
|