岩性填充,支持前景色、背景色,左填充。

This commit is contained in:
jiayulong 2025-10-31 17:56:50 +08:00
parent 95308877f0
commit aa88e2dd1d
15 changed files with 814 additions and 458 deletions

View File

@ -61,7 +61,7 @@ signals:
//岩性填充-填充 //岩性填充-填充
void sig_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, void sig_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax); float vMin, float vMax, QColor frontColor, QColor backColor);
//置顶层 //置顶层
void sig_Raise(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); void sig_Raise(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName);

View File

@ -225,6 +225,24 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
ChangFillProperty(); ChangFillProperty();
} }
} }
else if("岩性前景色" == m_propertyData[pProperty])
{
qDebug() << "岩性前景色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
ChangFillProperty();
}
}
else if("岩性背景色" == m_propertyData[pProperty])
{
qDebug() << "岩性背景色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
ChangFillProperty();
}
}
else if("头部图例" == m_propertyData[pProperty]) else if("头部图例" == m_propertyData[pProperty])
{ {
qDebug() << "头部图例->改变"; qDebug() << "头部图例->改变";
@ -246,6 +264,8 @@ void PropertyWidget::ChangFillProperty()
QString newHeadFill = "不绘制"; QString newHeadFill = "不绘制";
float vMax = 0.0; float vMax = 0.0;
float vMin = 0.0; float vMin = 0.0;
QColor frontColor;//岩性前景色
QColor backColor;//岩性背景色
for (auto it = m_propertyData.constBegin(); it != m_propertyData.constEnd(); ++it) for (auto it = m_propertyData.constBegin(); it != m_propertyData.constEnd(); ++it)
{ {
@ -311,6 +331,24 @@ void PropertyWidget::ChangFillProperty()
} }
qDebug() << "填充岩性->" << newLithosImage; qDebug() << "填充岩性->" << newLithosImage;
} }
else if(it.value()=="岩性前景色")
{
QtVariantProperty *pProperty = (QtVariantProperty*)it.key();
if(pProperty->hasValue())
{
frontColor = pProperty->value().value<QColor>();
}
qDebug() << "岩性前景色->";
}
else if(it.value()=="岩性背景色")
{
QtVariantProperty *pProperty = (QtVariantProperty*)it.key();
if(pProperty->hasValue())
{
backColor = pProperty->value().value<QColor>();
}
qDebug() << "岩性背景色->";
}
else if(it.value()=="头部图例") else if(it.value()=="头部图例")
{ {
QtVariantProperty *pProperty = (QtVariantProperty*)it.key(); QtVariantProperty *pProperty = (QtVariantProperty*)it.key();
@ -331,7 +369,7 @@ void PropertyWidget::ChangFillProperty()
{ {
emit CallManage::getInstance()->sig_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName, emit CallManage::getInstance()->sig_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName,
newFillType, newTargetLine, newColor, newLithosImage, newHeadFill, newFillType, newTargetLine, newColor, newLithosImage, newHeadFill,
vMin, vMax); vMin, vMax, frontColor, backColor);
} }
} }
@ -442,6 +480,8 @@ void PropertyWidget::initCurveProperty(FormInfo *formInfo, QStringList strListOt
double dWidth = formInfo->m_dWidth; double dWidth = formInfo->m_dWidth;
float vmax = formInfo->m_vmax; float vmax = formInfo->m_vmax;
float vmin = formInfo->m_vmin; float vmin = formInfo->m_vmin;
QColor frontColor = formInfo->m_frontColor;
QColor backColor = formInfo->m_backColor;
// //
m_strSlfName = strSlfName; m_strSlfName = strSlfName;
@ -507,4 +547,6 @@ void PropertyWidget::initCurveProperty(FormInfo *formInfo, QStringList strListOt
_CreateVariantPropertyItem("岩性填充", "填充颜色", lineColor, QVariant::Color); _CreateVariantPropertyItem("岩性填充", "填充颜色", lineColor, QVariant::Color);
_CreateVariantPropertyItem("岩性填充", "填充岩性", "./image/胜利符号库/岩性符号/砂岩.png", VariantManager::filePathTypeId()); _CreateVariantPropertyItem("岩性填充", "填充岩性", "./image/胜利符号库/岩性符号/砂岩.png", VariantManager::filePathTypeId());
_CreateVariantPropertyItem("岩性填充", "岩性前景色", frontColor, QVariant::Color);
_CreateVariantPropertyItem("岩性填充", "岩性背景色", backColor, QVariant::Color);
} }

View File

@ -43,9 +43,11 @@ CustomTabWidget::~CustomTabWidget()
void CustomTabWidget::addTab(QWidget *widget, const QString &strTab) void CustomTabWidget::addTab(QWidget *widget, const QString &strTab)
{ {
m_pTabBar->addTab(strTab); int iIndex = m_pTabBar->addTab(strTab);
m_pStackedWidget->addWidget(widget); m_pStackedWidget->addWidget(widget);
widget->setAcceptDrops(true); widget->setAcceptDrops(true);
//
m_pTabBar->setCurrentIndex(iIndex);
} }
void CustomTabWidget::addTab(QWidget *page, const QIcon &icon, const QString &label) void CustomTabWidget::addTab(QWidget *page, const QIcon &icon, const QString &label)

414
logPlus/fileopenthread.cpp Normal file
View File

@ -0,0 +1,414 @@
#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);
}
}

45
logPlus/fileopenthread.h Normal file
View File

@ -0,0 +1,45 @@
#ifndef FILEOPENTHREAD_H
#define FILEOPENTHREAD_H
#include <QThread>
#include <QColor>
class FileOpenThread : public QThread {
Q_OBJECT
public:
explicit FileOpenThread(const QString &targetFileName)
: targetFileName(targetFileName) {}
signals:
void sig_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽
void sig_NewWell(QString strWellName);
void sig_NewTrack_No_Line(QString strWellName, QString strTrackName);//新建空白道,没有曲线
void sig_AddLine_Property(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
double newLeftScale, double newRightScale, QColor lineColor, double width, Qt::PenStyle lineStyle);//新建曲线,带属性
protected:
void run() override {
Open(targetFileName);
}
private:
QString targetFileName;
public:
//展示所有井
void DisplayWells(QJsonArray wellsArray);
//展示其中一口井
void DisplayWell_One(QJsonObject wellObjInfo);
//展示所有道
void DisplayTracks(QJsonArray tracksArray);
//展示其中一道
void DisplayTrack_One(QJsonObject trackObjInfo, int id);
//展示所有曲线
void DisplayLines(QJsonArray linesArray);
//展示其中一条曲线
void DisplayLine_One(QJsonObject lineObjInfo);
void Open(QString fileFull);//打开
};
#endif // FILEOPENTHREAD_H

View File

@ -49,8 +49,8 @@ FormInfo::FormInfo(QWidget *parent, QString strSlfName, QString strWellName, QSt
//岩性填充-不填充 //岩性填充-不填充
connect(CallManage::getInstance(), SIGNAL(sig_ClearFillMode(QString, QString, QString, QString)), this, SLOT(s_ClearFillMode(QString, QString, QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_ClearFillMode(QString, QString, QString, QString)), this, SLOT(s_ClearFillMode(QString, QString, QString, QString)));
//岩性填充-填充 //岩性填充-填充
connect(CallManage::getInstance(), SIGNAL(sig_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float)), connect(CallManage::getInstance(), SIGNAL(sig_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QColor, QColor)),
this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float))); this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QColor, QColor)));
} }
@ -105,7 +105,25 @@ void FormInfo::paintEvent(QPaintEvent* event)
{ {
if(m_newFillType == "岩性模式") if(m_newFillType == "岩性模式")
{ {
painter.setBrush(QBrush(QPixmap(m_newLithosImage))); QColor oldFrontColor(0, 0, 0); // 原始颜色
QColor oldBackColor(255, 255, 255); // 原始颜色
//
QImage image(m_newLithosImage);
for (int y = 0; y < image.height(); ++y) {
for (int x = 0; x < image.width(); ++x) {
QColor pixelColor = QColor(image.pixel(x, y));
if (pixelColor == oldFrontColor) {
image.setPixelColor(x, y, m_frontColor); // 使用 setPixelColor 来设置新颜色
}
if (pixelColor == oldBackColor) {
image.setPixelColor(x, y, m_backColor); // 使用 setPixelColor 来设置新颜色
}
}
}
//
painter.setBrush(QBrush(QPixmap::fromImage(image)));
//painter.setBrush(QBrush(QPixmap(m_newLithosImage)));
//graph(0)->setBrush(QBrush(QPixmap(":/image/file.png"))); //graph(0)->setBrush(QBrush(QPixmap(":/image/file.png")));
} }
else if(m_newFillType == "颜色模式") else if(m_newFillType == "颜色模式")
@ -255,6 +273,27 @@ float FormInfo::getVMin()
{ {
return m_vmin; return m_vmin;
} }
void FormInfo::setFrontColor(QColor frontColor)
{
m_frontColor = frontColor;
}
QColor FormInfo::getFrontColor()
{
return m_frontColor;
}
void FormInfo::setBackColor(QColor backColor)
{
m_backColor = backColor;
}
QColor FormInfo::getBackColor()
{
return m_backColor;
}
//属性-左刻度 //属性-左刻度
void FormInfo::s_ChangeLeftScale(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale) void FormInfo::s_ChangeLeftScale(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale)
{ {
@ -336,7 +375,7 @@ void FormInfo::s_ClearFillMode(QString strSlfName, QString strWellName, QString
//岩性填充-填充 //岩性填充-填充
void FormInfo::s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, void FormInfo::s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax) float vMin, float vMax, QColor frontColor, QColor backColor)
{ {
if(m_strSlfName == strSlfName && if(m_strSlfName == strSlfName &&
m_strWellName == strWellName && m_strWellName == strWellName &&
@ -349,6 +388,9 @@ void FormInfo::s_ChangeFillMode(QString strSlfName, QString strWellName, QString
m_newColor = newColor; m_newColor = newColor;
m_newLithosImage = newLithosImage; m_newLithosImage = newLithosImage;
m_frontColor = frontColor;
m_backColor = backColor;
update(); update();
} }

View File

@ -49,7 +49,7 @@ public slots:
//岩性填充-填充 //岩性填充-填充
void s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, void s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax); float vMin, float vMax, QColor frontColor, QColor backColor);
public: public:
QString m_strUuid; QString m_strUuid;
@ -71,6 +71,8 @@ public:
QString m_newFillType; QString m_newFillType;
QColor m_newColor;//填充颜色 QColor m_newColor;//填充颜色
QString m_newLithosImage = "";//岩性图片 QString m_newLithosImage = "";//岩性图片
QColor m_frontColor;//岩性前景色
QColor m_backColor;//岩性背景色
public: public:
void setLineWidth(double dWidth); void setLineWidth(double dWidth);
@ -85,6 +87,12 @@ public:
void setVMin(float vmin); void setVMin(float vmin);
float getVMin(); float getVMin();
void setFrontColor(QColor frontColor);
QColor getFrontColor();
void setBackColor(QColor backColor);
QColor getBackColor();
QJsonObject makeJson(); QJsonObject makeJson();
//public: //public:

View File

@ -58,6 +58,8 @@ void FormTrack::s_addLine(QString strSlfName, QString strWellName, QString strTr
formInfo->setLineWidth(dWidth); formInfo->setLineWidth(dWidth);
formInfo->setVMax(vmax); formInfo->setVMax(vmax);
formInfo->setVMin(vmin); formInfo->setVMin(vmin);
formInfo->setFrontColor(QColor(0,0,0));
formInfo->setBackColor(QColor(255,255,255));
//设置高度 //设置高度
ui->tableWidget->setRowHeight(row, 100); ui->tableWidget->setRowHeight(row, 100);
// //

View File

@ -37,6 +37,7 @@ SOURCES += \
customtabbar.cpp \ customtabbar.cpp \
customtabwidget.cpp \ customtabwidget.cpp \
fileedit.cpp \ fileedit.cpp \
fileopenthread.cpp \
formdraw.cpp \ formdraw.cpp \
formhead.cpp \ formhead.cpp \
forminfo.cpp \ forminfo.cpp \
@ -73,6 +74,7 @@ HEADERS += \
customtabbar.h \ customtabbar.h \
customtabwidget.h \ customtabwidget.h \
fileedit.h \ fileedit.h \
fileopenthread.h \
formdraw.h \ formdraw.h \
formhead.h \ formhead.h \
forminfo.h \ forminfo.h \
@ -169,5 +171,6 @@ CONFIG(debug, debug|release){
LIBS += -L../Bin -lOSGDataModel LIBS += -L../Bin -lOSGDataModel
LIBS += -L../Bin -lDataOutput LIBS += -L../Bin -lDataOutput
LIBS += -L../Bin/ -lCallPlugin -lHPluginManage LIBS += -L../Bin/ -lCallPlugin -lHPluginManage
LIBS += -L../Bin/ -lDataMgr
#-lCallManage #-lCallManage
} }

View File

@ -17,6 +17,9 @@
#include "PluginName.h" #include "PluginName.h"
#include "CallManage.h" #include "CallManage.h"
#include "CallPlugin.h" #include "CallPlugin.h"
#include <QFuture>
#include <QtConcurrent/QtConcurrent>
#include "fileopenthread.h"
//以下参数从配置文件读取 //以下参数从配置文件读取
int g_iIndex = 0; int g_iIndex = 0;
@ -56,6 +59,8 @@ MainWindow::MainWindow(QWidget *parent) :
//loadStyle(":/qrc/qss/blacksoft.css"); //loadStyle(":/qrc/qss/blacksoft.css");
loadStyle(":/qrc/qss/flatgray.css"); loadStyle(":/qrc/qss/flatgray.css");
ReadConfig();
initTitleBar(); //菜单栏 initTitleBar(); //菜单栏
initToolBar(); //工具栏 initToolBar(); //工具栏
initProjectView(); //左侧-项目区 初始化在前 initProjectView(); //左侧-项目区 初始化在前
@ -114,7 +119,10 @@ void MainWindow::ReadConfig()
// //
qtCommon->readXyRange(configPath, g_iX1, g_iX2, g_iY1, g_iY2); qtCommon->readXyRange(configPath, g_iX1, g_iX2, g_iY1, g_iY2);
} }
CallManage* MainWindow::getInstanceCallManage()
{
return CallManage::getInstance();
}
void MainWindow::loadStyle(const QString &qssFile) void MainWindow::loadStyle(const QString &qssFile)
{ {
//加载样式表 //加载样式表
@ -356,10 +364,29 @@ void MainWindow::s_showView()
return; return;
} }
QFileInfo fileInfo(fileFull);
QString fileName = fileInfo.fileName(); // 获取文件名
//---- //----
MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区
m_centerWidgets->addTab(mainWindowCurve, "解释视图"); m_centerWidgets->addTab(mainWindowCurve, fileName);
mainWindowCurve->s_Open(fileFull);
//mainWindowCurve->s_Open(fileFull);
//QFuture<void> future = QtConcurrent::run(std::bind(&MainWindowCurve::s_Open, mainWindowCurve, fileFull));
//mainWindowCurve->Open(fileFull);
// 创建 FileSearchThread 实例
FileOpenThread *searchThread = new FileOpenThread(fileFull);
connect(searchThread, &FileOpenThread::sig_NewWell, mainWindowCurve, &MainWindowCurve::s_NewWell, Qt::BlockingQueuedConnection);
connect(searchThread, &FileOpenThread::sig_NewTrackChangeWidth, mainWindowCurve, &MainWindowCurve::s_NewTrackChangeWidth, Qt::BlockingQueuedConnection);
connect(searchThread, &FileOpenThread::sig_NewTrack_No_Line, mainWindowCurve, &MainWindowCurve::s_NewTrack_No_Line, Qt::BlockingQueuedConnection);
connect(searchThread, &FileOpenThread::sig_AddLine_Property, mainWindowCurve, &MainWindowCurve::s_AddLine_Property, Qt::BlockingQueuedConnection);
//connect(searchThread, SIGNAL(sig_NewTrackChangeWidth(QString)), mainWindowCurve, SLOT(s_NewTrackChangeWidth(QString)), Qt::BlockingQueuedConnection);
//connect(searchThread, SIGNAL(sig_NewWell(QString)), mainWindowCurve, SLOT(s_NewWell(QString)), Qt::BlockingQueuedConnection);
// 启动搜索线程
searchThread->start();
} }
void MainWindow::s_Risize() void MainWindow::s_Risize()

View File

@ -15,6 +15,7 @@
#include "customtabwidget.h" #include "customtabwidget.h"
#include "ConsoleOutputWidget.h" #include "ConsoleOutputWidget.h"
#include "PropertyWidget.h" #include "PropertyWidget.h"
#include "CallManage.h"
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
@ -70,6 +71,8 @@ public:
void ReadConfig(); void ReadConfig();
CallManage *getInstanceCallManage();
public slots: public slots:
void s_New(); void s_New();
void s_Open(); void s_Open();

View File

@ -5,6 +5,8 @@
#include "CallManage.h" #include "CallManage.h"
#include <QAbstractItemView> #include <QAbstractItemView>
#include "qtcommonclass.h" #include "qtcommonclass.h"
#include <QFuture>
#include <QtConcurrent/QtConcurrent>
extern int g_iOneWidth; //道宽 extern int g_iOneWidth; //道宽
extern QString g_prjname; extern QString g_prjname;
@ -70,6 +72,7 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) :
connect(this, SIGNAL(sig_NewTrackChangeWidth(QString)), this, SLOT(s_NewTrackChangeWidth(QString))); connect(this, SIGNAL(sig_NewTrackChangeWidth(QString)), this, SLOT(s_NewTrackChangeWidth(QString)));
connect(this, SIGNAL(sig_NewWell(QString)), this, SLOT(s_NewWell(QString)));
} }
@ -240,407 +243,9 @@ void MainWindowCurve::s_Save()
void MainWindowCurve::s_Open(QString fileFull) void MainWindowCurve::s_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 MainWindowCurve::DisplayWells(QJsonArray wellsArray)
{
//清空
m_listWell.clear();
ui->tableWidget_2->clear();
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 MainWindowCurve::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;
//新建井
s_NewWell(strWellName);
m_listWell.push_back(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 MainWindowCurve::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 MainWindowCurve::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 CallManage::getInstance()->sig_NewTrack_No_Line(strWellName, strTrackName);//新建空白道,没有曲线
if(id>0)
{
//改变井宽
emit sig_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 MainWindowCurve::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 MainWindowCurve::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 CallManage::getInstance()->sig_AddLine_Property(strSlfName, strWellName, strTrackName, strLineName,
newLeftScale, newRightScale, lineColor, width, lineStyle);
}
}
QJsonObject MainWindowCurve::makeJson() QJsonObject MainWindowCurve::makeJson()
{ {
// 创建根对象 // 创建根对象
@ -740,6 +345,9 @@ void MainWindowCurve::s_NewWell(QString strWellName)
FormWell *widgetWell = new FormWell(this, strWellName); FormWell *widgetWell = new FormWell(this, strWellName);
widgetWell->m_strUuid = m_strUuid; widgetWell->m_strUuid = m_strUuid;
ui->tableWidget_2->setCellWidget(i, columnCount, widgetWell); ui->tableWidget_2->setCellWidget(i, columnCount, widgetWell);
//
m_listWell.push_back(strWellName);
} }
} }
//ui->tableWidget_2->resizeColumnsToContents(); // 调整列宽以适应内容 //ui->tableWidget_2->resizeColumnsToContents(); // 调整列宽以适应内容
@ -807,6 +415,20 @@ void MainWindowCurve::s_NewTrackChangeWidth(QString strWellName)
} }
} }
//新建空白道,没有曲线
void MainWindowCurve::s_NewTrack_No_Line(QString strWellName, QString strTrackName)
{
emit CallManage::getInstance()->sig_NewTrack_No_Line(strWellName, strTrackName);
}
//新建曲线,带属性
void MainWindowCurve::s_AddLine_Property(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
double newLeftScale, double newRightScale, QColor lineColor, double width, Qt::PenStyle lineStyle)
{
emit CallManage::getInstance()->sig_AddLine_Property(strSlfName, strWellName, strTrackName, strLineName,
newLeftScale, newRightScale, lineColor, width, lineStyle);
}
//新建井+道+曲线(首条) //新建井+道+曲线(首条)
void MainWindowCurve::NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName) void MainWindowCurve::NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName)
{ {

View File

@ -46,25 +46,18 @@ public:
void NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName); void NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName);
QJsonObject makeJson(); QJsonObject makeJson();
//展示所有井
void DisplayWells(QJsonArray wellsArray);
//展示其中一口井
void DisplayWell_One(QJsonObject wellObjInfo);
//展示所有道
void DisplayTracks(QJsonArray tracksArray);
//展示其中一道
void DisplayTrack_One(QJsonObject trackObjInfo, int id);
//展示所有曲线
void DisplayLines(QJsonArray linesArray);
//展示其中一条曲线
void DisplayLine_One(QJsonObject lineObjInfo);
signals: signals:
void sig_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽 void sig_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽
void sig_NewWell(QString strWellName);
public slots: public slots:
void s_NewWell(QString strWellName);//新建井 void s_NewWell(QString strWellName);//新建井
void s_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽 void s_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽
void s_NewTrack_No_Line(QString strWellName, QString strTrackName);//新建空白道,没有曲线
void s_AddLine_Property(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
double newLeftScale, double newRightScale, QColor lineColor, double width, Qt::PenStyle lineStyle);//新建曲线,带属性
void s_NewTrack();//新建道 void s_NewTrack();//新建道
// //
void s_Save();//保存 void s_Save();//保存

View File

@ -41,8 +41,8 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel
//岩性填充-不填充 //岩性填充-不填充
connect(CallManage::getInstance(), SIGNAL(sig_ClearFillMode(QString, QString, QString, QString)), this, SLOT(s_ClearFillMode(QString, QString, QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_ClearFillMode(QString, QString, QString, QString)), this, SLOT(s_ClearFillMode(QString, QString, QString, QString)));
//岩性填充-填充 //岩性填充-填充
connect(CallManage::getInstance(), SIGNAL(sig_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float)), connect(CallManage::getInstance(), SIGNAL(sig_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QColor, QColor)),
this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float))); this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QColor, QColor)));
} }
@ -192,7 +192,7 @@ void QMyCustomPlot::s_ChangeLeftScale(QString strSlfName, QString strWellName, Q
//其他曲线 //其他曲线
s_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName, s_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName,
m_newFillType, m_newTargetLine, m_newColor, m_newLithosImage, m_newHeadFill, m_newFillType, m_newTargetLine, m_newColor, m_newLithosImage, m_newHeadFill,
newLeftScale, m_vMax); newLeftScale, m_vMax, m_frontColor, m_backColor);
} }
} }
@ -217,7 +217,7 @@ void QMyCustomPlot::s_ChangeRightScale(QString strSlfName, QString strWellName,
//其他曲线 //其他曲线
s_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName, s_ChangeFillMode(m_strSlfName, m_strWellName, m_strTrackName, m_strLineName,
m_newFillType, m_newTargetLine, m_newColor, m_newLithosImage, m_newHeadFill, m_newFillType, m_newTargetLine, m_newColor, m_newLithosImage, m_newHeadFill,
m_vMin, newRightScale); m_vMin, newRightScale, m_frontColor, m_backColor);
} }
} }
@ -291,7 +291,7 @@ void QMyCustomPlot::s_ClearFillMode(QString strSlfName, QString strWellName, QSt
//岩性填充-填充 //岩性填充-填充
void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax) float vMin, float vMax, QColor frontColor, QColor backColor)
{ {
if(m_strSlfName == strSlfName && if(m_strSlfName == strSlfName &&
@ -307,6 +307,8 @@ void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QS
m_newHeadFill = newHeadFill; m_newHeadFill = newHeadFill;
m_vMin = vMin; m_vMin = vMin;
m_vMax = vMax; m_vMax = vMax;
m_frontColor = frontColor;
m_backColor = backColor;
//填充 //填充
if(this->graphCount() > 1) if(this->graphCount() > 1)
@ -374,14 +376,23 @@ void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QS
} }
else else
{ {
//其他曲线 //其他曲线(左填充)
CLogIO *logio=new CLogIO(); CLogIO *logio=new CLogIO();
logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead); logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead);
//读取基线信息
int indexBaseCurv = logio->OpenCurve(strLineName.toStdString().c_str());
if(indexBaseCurv < 0) {
this->addGraph();//空曲线
delete logio;
}
else
{
//其他曲线
int index=logio->OpenCurve(newTargetLine.toStdString().c_str()); int index=logio->OpenCurve(newTargetLine.toStdString().c_str());
if(index<0) if(index<0)
{ {
this->addGraph(); this->addGraph();//空曲线
delete logio; delete logio;
} }
else else
@ -399,21 +410,144 @@ void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QS
val=new float[count]; val=new float[count];
logio->ReadCurve(index,curveinfo.StartDepth,count,&val[0]); logio->ReadCurve(index,curveinfo.StartDepth,count,&val[0]);
logio->CloseCurve(index); logio->CloseCurve(index);
delete logio; //读完基线再关闭
// delete logio;
float newVal = 0.0; float newVal = 0.0;
for(int i=0; i<count; i++) for(int i=0; i<count; i++)
{ {
x.append(-(sdep+ rlev*i)); float x0=-(sdep+ rlev*i);
//newVal = (m_iX2-m_iX1)*(val[i]-vMin)/(vMax-vMin) + m_iX1; float y0_old=val[i];
newVal = val[i]; float y0 = (m_iX2-m_iX1)*(val[i]-vMin)/(vMax-vMin) + m_iX1;
y.append(newVal);
//读取基线
float BaseY0=0;
logio->ReadCurve(indexBaseCurv, 0-x0, 1, &BaseY0);
//
if(i+1<count)
{
float x1=-(sdep+ rlev*(i+1));
//float y1=val[i+1];
float y1 = (m_iX2-m_iX1)*(val[i+1]-vMin)/(vMax-vMin) + m_iX1;
//读取基线
float BaseY1=0;
logio->ReadCurve(indexBaseCurv, 0-x1, 1, &BaseY1);
if(BaseY0<=y0 && BaseY1<=y1)
{
//基线在左,采用基线值
//y0=BaseY0;
y0_old = (BaseY0-m_iX1)/(m_iX2-m_iX1)*(vMax-vMin) + vMin;
//
x.append(x0);
y.append(y0_old);
} }
else if(BaseY0>=y0 && BaseY1>=y1)
{
//基线在右,直接赋值
x.append(x0);
y.append(y0_old);
}
else if(BaseY0<=y0 && BaseY1>=y1)
{
//基线起点在左,采用基线值
//y0=BaseY0;
y0_old = (BaseY0-m_iX1)/(m_iX2-m_iX1)*(vMax-vMin) + vMin;
//
x.append(x0);
y.append(y0_old);
//插值
float xNew=x0-rlev*(y0-BaseY0)/(BaseY1-y1);
float yNew=(y0-y1)/(x0-x1)*(xNew-x1) + y1;
float yNew_Old=(yNew-m_iX1)/(m_iX2-m_iX1)*(vMax-vMin) + vMin;
//
x.append(xNew);
y.append(yNew_Old);
}
else if(BaseY0>=y0 && BaseY1<=y1)
{
//基线在右,直接赋值
x.append(x0);
y.append(y0_old);
//插值
float xNew=x0-rlev*(y0-BaseY0)/(BaseY1-y1);
float yNew=(BaseY0-BaseY1)/(x0-x1)*(xNew-x1) + BaseY1;
float yNew_Old=(yNew-m_iX1)/(m_iX2-m_iX1)*(vMax-vMin) + vMin;
//
x.append(xNew);
y.append(yNew_Old);
}
}
else
{
//最后一个点
if(BaseY0<y0)
{
//基线在左,采用基线值
//y0=BaseY0;
y0_old = (BaseY0-m_iX1)/(m_iX2-m_iX1)*(vMax-vMin) + vMin;
}
x.append(x0);
y.append(y0_old);
}
//newVal = (m_iX2-m_iX1)*(val[i]-vMin)/(vMax-vMin) + m_iX1;
//newVal = val[i];
//y.append(newVal);
}
logio->CloseCurve(indexBaseCurv);
delete logio;
//
this->yAxis2->setRange(m_iY1, m_iY2); this->yAxis2->setRange(m_iY1, m_iY2);
this->xAxis2->setRange(vMin, vMax); this->xAxis2->setRange(vMin, vMax);
this->addGraph(yAxis2, xAxis2); this->addGraph(yAxis2, xAxis2);
} }
} }
}
// else
// {
// //其他曲线
// CLogIO *logio=new CLogIO();
// logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead);
// int index=logio->OpenCurve(newTargetLine.toStdString().c_str());
// if(index<0)
// {
// this->addGraph();
// delete logio;
// }
// else
// {
// Slf_CURVE curveinfo;
// float *val;
// float sdep,edep,rlev;
// //
// logio->GetCurveInfo(index,&curveinfo);
// sdep=curveinfo.StartDepth;
// edep=curveinfo.EndDepth;
// rlev=curveinfo.DepLevel;
// //
// int count=(curveinfo.EndDepth-curveinfo.StartDepth)/curveinfo.DepLevel+1.5;
// val=new float[count];
// logio->ReadCurve(index,curveinfo.StartDepth,count,&val[0]);
// logio->CloseCurve(index);
// delete logio;
// float newVal = 0.0;
// for(int i=0; i<count; i++)
// {
// x.append(-(sdep+ rlev*i));
// //newVal = (m_iX2-m_iX1)*(val[i]-vMin)/(vMax-vMin) + m_iX1;
// newVal = val[i];
// y.append(newVal);
// }
// this->yAxis2->setRange(m_iY1, m_iY2);
// this->xAxis2->setRange(vMin, vMax);
// this->addGraph(yAxis2, xAxis2);
// }
// }
this->graph(1)->setData(x, y); this->graph(1)->setData(x, y);
graph(1)->setLineStyle(graph(0)->lineStyle());//曲线 graph(1)->setLineStyle(graph(0)->lineStyle());//曲线
@ -423,8 +557,25 @@ void QMyCustomPlot::s_ChangeFillMode(QString strSlfName, QString strWellName, QS
// //
if(newFillType == "岩性模式") if(newFillType == "岩性模式")
{ {
graph(0)->setBrush(QBrush(QPixmap(newLithosImage))); QColor oldFrontColor(0, 0, 0); // 原始颜色
//graph(0)->setBrush(QBrush(QPixmap(":/image/file.png"))); QColor oldBackColor(255, 255, 255); // 原始颜色
//
QImage image(newLithosImage);
for (int y = 0; y < image.height(); ++y) {
for (int x = 0; x < image.width(); ++x) {
QColor pixelColor = QColor(image.pixel(x, y));
if (pixelColor == oldFrontColor) {
image.setPixelColor(x, y, m_frontColor); // 使用 setPixelColor 来设置新颜色
}
if (pixelColor == oldBackColor) {
image.setPixelColor(x, y, m_backColor); // 使用 setPixelColor 来设置新颜色
}
}
}
//
graph(0)->setBrush(QBrush(QPixmap::fromImage(image)));
//graph(0)->setBrush(QBrush(QPixmap(newLithosImage)));
} }
else if(newFillType == "颜色模式") else if(newFillType == "颜色模式")
{ {

View File

@ -38,6 +38,8 @@ public:
QString m_newHeadFill; QString m_newHeadFill;
float m_vMin; float m_vMin;
float m_vMax; float m_vMax;
QColor m_frontColor;//岩性前景色
QColor m_backColor;//岩性背景色
QContextMenuEvent *m_event; QContextMenuEvent *m_event;
@ -70,7 +72,7 @@ public slots:
//岩性填充-填充 //岩性填充-填充
void s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, void s_ChangeFillMode(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax); float vMin, float vMax, QColor frontColor, QColor backColor);
void onAddRect(); void onAddRect();