logplus/logPlus/formdraw.cpp

7881 lines
250 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "formdraw.h"
#include "ui_formdraw.h"
#include "CallManage.h"
#include <QDebug>
#include "geometryutils.h"
#include "ConsoleOutputWidget.h"
#include "DraggablePixmap.h"
#include "TransparentDraggableRect.h"
#include "TransparentGroupResult.h"
#include <QtMath>
#include "Gradient.h"
#include "PickFrac.h"
#include "DrawNrad.h"
#include "formline.h"
#include "PropertyWidget.h"
//以下参数从配置文件读取
extern int g_iIndex;
extern int g_iNum;
extern int g_iOneWidth; //道宽
extern int g_iHeadHigh; //道头高度
extern int g_iTitleHigh; //道对象高度
extern int g_iCurveHigh;//曲线高度
extern int g_iMove; //道头偏移
extern int g_iPointNum; // number of points in graph
extern int g_iLineNum; // number of Line
extern int g_iWidth; //道宽
extern int g_iShow; //显示刻度
//
extern int g_iX1;
extern int g_iX2;
//extern int m_iY1;
//extern int m_iY2;
extern int g_iCanZoom ;
//
extern double g_dPixelPerCm;//每厘米像素数
extern QString g_prjname;
extern int g_iSupport3D;
extern void AppendConsole(Priority priority, const QString &output);
//曲线绘制(多个)
FormDraw::FormDraw(QWidget *parent, QString strWellName, QString strTrackName) :
QWidget(parent),
ui(new Ui::FormDraw)
{
ui->setupUi(this);
setAcceptDrops(true);
m_strWellName = strWellName;
m_strTrackName = strTrackName;
m_nSltk=15.0;//杆状图长度
//曲线
connect(CallManage::getInstance(), SIGNAL(sig_AddLine(QString, QString, QString, QString, QString)), this, SLOT(s_addLine(QString, QString, QString, QString, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_AddLine_Property(QString, QString, QString, QString, QString, double, double, QString, QColor, double, Qt::PenStyle, QStringList)),
this, SLOT(s_AddLine_Property(QString, QString, QString, QString, QString, double, double, QString, QColor, double, Qt::PenStyle, QStringList)));
connect(CallManage::getInstance(), SIGNAL(sig_delLine(QString, QString, QString, QString)), this, SLOT(s_delLine(QString, QString, QString, QString)));
//改变曲线名
connect(CallManage::getInstance(), SIGNAL(sig_changeLineName(QString, QString, QString, QString, QString, QString)), this, SLOT(s_changeLineName(QString, QString, QString, QString, QString, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_MouseMove(QString, QString, QString, float)), this, SLOT(s_MouseMove(QString, QString, QString, float)));
//波列
connect(CallManage::getInstance(), SIGNAL(sig_AddWave(QString, QString, QString, QString, QString)), this, SLOT(s_addWave(QString, QString, QString, QString, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_delWave(QString, QString, QString, QString)), this, SLOT(s_delWave(QString, QString, QString, QString)));
//表格
connect(CallManage::getInstance(), SIGNAL(sig_AddTableLine(QString, QString, QString, QString, QString)), this, SLOT(s_addTableLine(QString, QString, QString, QString, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_delTableLine(QString, QString, QString, QString)), this, SLOT(s_delTableLine(QString, QString, QString, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_AddGanZhuangTu(QString, QString, QString, QString, QString, int)), this, SLOT(s_addGanZuangTu(QString, QString, QString, QString, QString,int)));
//井眼垮塌矢量图
connect(CallManage::getInstance(), SIGNAL(sig_AddJykt(QString, QString, QString, QString, QString, int)), this, SLOT(s_addJykt(QString, QString, QString, QString, QString,int)));
//井斜方位图
connect(CallManage::getInstance(), SIGNAL(sig_AddDenv(QString, QString, QString, QString, QString, int)), this, SLOT(s_addDenv(QString, QString, QString, QString, QString,int)));
//图像 成图
connect(CallManage::getInstance(), SIGNAL(sig_AddDrawImage(QString, QString, QString, QString, QString, int)), this, SLOT(s_addDrawImage(QString, QString, QString, QString, QString,int)));
//斜井三图一表
connect(CallManage::getInstance(), SIGNAL(sig_AddSantuyibiao(QString, QString, QString, QString, QString, int)), this, SLOT(s_addSantuyibiao(QString, QString, QString, QString, QString,int)));
//裂缝
connect(CallManage::getInstance(), SIGNAL(sig_AddCrack(QString, QString, QString, QString, QString, int)), this, SLOT(s_addCrack(QString, QString, QString, QString, QString,int)));
//气测/FMT/射孔/文本
connect(CallManage::getInstance(), SIGNAL(sig_AddJiegutext(QString, QString, QString, QString, QString, int, QStringList)), this, SLOT(s_addJiegutext(QString, QString, QString, QString, QString,int, QStringList)));
//沉积相
connect(CallManage::getInstance(), SIGNAL(sig_AddLogface(QString, QString, QString, QString, QString, int, QStringList)), this, SLOT(s_addLogface(QString, QString, QString, QString, QString,int, QStringList)));
//多臂井径
connect(CallManage::getInstance(), SIGNAL(sig_AddMCals(QString, QString, QString, QString, QString, int)), this, SLOT(s_addMCals(QString, QString, QString, QString, QString,int)));
//套管组件
connect(CallManage::getInstance(), SIGNAL(sig_AddTubingstring(QString, QString, QString, QString, QString, int, QStringList)), this, SLOT(s_addTubingstring(QString, QString, QString, QString, QString,int, QStringList)));
//改变固井曲线名
connect(CallManage::getInstance(), SIGNAL(sig_changeGujingLine(QString, QString, QString, QString, QString, QString)), this, SLOT(s_changeGujingLine(QString, QString, QString, QString, QString, QString)));
//改变曲线名 //气测/FMT/射孔/文本
connect(CallManage::getInstance(), SIGNAL(sig_changeJiegutextLine(QString, QString, QString, QString, QString, QString)), this, SLOT(s_changeJiegutextLine(QString, QString, QString, QString, QString, QString)));
}
FormDraw::~FormDraw()
{
delete ui;
}
void FormDraw::setDrawData(QStringList listdt, QJsonObject objInfo)
{
QString strWellName = listdt.at(1);
QString strSlfName = listdt.at(2);
QString strLineName = listdt.at(3);
QString strType = listdt.at(4);
int nW = listdt.at(5).toInt();
m_strSlfName = strSlfName;
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
if ("tableObject" == strType)
{
QMyCustomPlot* plot = this->addTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
if (plot == NULL)
return;
QTimer::singleShot(200, this, [=]() {
emit CallManage::getInstance()->sig_changeDepth(m_strUuid, m_strSlfName, m_strWellName, m_iY1, m_iY2);
});
return;
}
//道-对象
FormInfo* pInfo = m_formTrack->setDrawDt(listdt, objInfo);
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, m_strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
curv->initGeometry(m_strUuid, m_iScale, nW);
curv->show();
if ("waveObject" == strType)
{
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
curv->m_nMode = pInfo->getFillTypeIndex();
//curv->m_fmin = pInfo->getVMin();
//curv->m_fmax = pInfo->getVMax();
curv->m_nDrawType = pInfo->m_nDrawType;
curv->m_bDrawDepth = pInfo->m_bDrawDepth; // 绘制波深度
curv->m_bDrawBase = pInfo->m_bDrawBase; // 绘制波深度
curv->m_bOddEven = pInfo->m_bOddEven; // 绘制波深度
curv->m_MaxRange = pInfo->m_fMaxAmp; // 最大振幅
curv->m_Base = pInfo->m_fWaveBase; // 波列基值
curv->m_nWaveJg = pInfo->m_nWaveJg; // 波形间隔
curv->m_nWaveHei = pInfo->m_fWaveHei; // 波形高度
curv->m_nColorNum = pInfo->m_nColorNum;
curv->m_nSchemeIndex = pInfo->m_nSchemeIndex;
curv->m_fScaleV = pInfo->getVMax();
int _nSamples = 0;
if (g_iSupport3D)
{
initWave_3D(curv, m_strSlfName, strLineName, _nSamples);
}
else
{
//curv->initWave2(m_strSlfName, strLineName);
curv->changePropertyWaveUpdate();
}
}
// 深度
else if("depthObject" == strType)
{
// 在s_addDepth方法设置单位无效
// 读取json
// 设置左侧显示属性 设置界面样式
if(pInfo->m_strUnit.isEmpty()){
pInfo->m_strUnit = "(米)";
pInfo->m_strUnitFont = QFont("微软雅黑", 10);
}
initDepth(curv);
// 读json后 重新设置样式
// 头部高度
pInfo->setFixedHeight(pInfo->m_headHeight);
// 标尺颜色
curv->yAxis->setTickLabelColor(pInfo->m_sdRulerColor);
// 间隔
QSharedPointer<QCPAxisTickerFixed> fixedTicker(new QCPAxisTickerFixed);
fixedTicker->setTickStep(pInfo->m_sdInterval);
fixedTicker->setScaleStrategy(QCPAxisTickerFixed::ssNone);
curv->yAxis->setTicker(fixedTicker);
// 标注字体
curv->yAxis->setTickLabelFont(pInfo->m_sdLabelFont);
// 旋转(°)
curv->yAxis->setTickLabelRotation(pInfo->m_sdRotationAngle);
// 斜深
curv->yAxis->setTickLabels(pInfo->m_sdMeasuredDepth);
// 海拔垂深
{
bool temp = pInfo->m_sdElevationVerticalDepth;
if(!curv->m_yAxis2)
{
curv->m_yAxis2 = new QCPAxis(curv->axisRect(), QCPAxis::atLeft);
curv->axisRect()->addAxis(QCPAxis::atLeft, curv->m_yAxis2);
curv->m_yAxis2->setRange(0, 100);
curv->m_yAxis2->setOffset(40);
curv->m_yAxis2->setTickLabelPadding(10);
}
curv->m_yAxis2->setVisible(temp);
curv->m_yAxis2->setTickLabels(temp);
curv->m_yAxis2->setTickLabelSide(QCPAxis::lsInside);
}
// 垂深
bool temp2 = pInfo->m_sdVerticalDepth;
if(!curv->m_yAxis3)
{
curv->m_yAxis3 = new QCPAxis(curv->axisRect(), QCPAxis::atLeft);
curv->axisRect()->addAxis(QCPAxis::atLeft, curv->m_yAxis3);
curv->m_yAxis3->setRange(0, 100);
curv->m_yAxis3->setOffset(40);
curv->m_yAxis3->setTickLabelPadding(10);
}
curv->m_yAxis3->setVisible(temp2); // 显示第三个Y轴
curv->m_yAxis3->setTickLabels(temp2);
curv->m_yAxis3->setTickLabelSide(QCPAxis::lsInside);
// 斜深位置
switch(pInfo->m_sdMeasuredDepthPosition)
{
case 0:
// 偏左
curv->yAxis->setTickLabelPadding(5);
break;
case 1:
// 居中
curv->yAxis->setTickLabelPadding(30);
break;
case 2:
curv->yAxis->setTickLabelPadding(50);
break;
}
// 垂深位置
switch(pInfo->m_sdVerticalDepthPosition)
{
case 0:
// 偏左
curv->m_yAxis3->setTickLabelPadding(5);
break;
case 1:
// 居中
curv->m_yAxis3->setTickLabelPadding(30);
break;
case 2:
curv->m_yAxis3->setTickLabelPadding(50);
break;
}
// 海拔垂深位置
switch(pInfo->m_sdElevationVerticalDepthPosition)
{
case 0:
// 偏左
curv->m_yAxis2->setTickLabelPadding(5);
break;
case 1:
// 居中
curv->m_yAxis2->setTickLabelPadding(30);
break;
case 2:
curv->m_yAxis2->setTickLabelPadding(50);
break;
}
// 主刻度线长度
{
int temp = pInfo->m_sdMajorTickLineLength;
curv->yAxis->setTickLength(temp, 0);
}
// 主刻度线宽度
{
int temp = pInfo->m_sdMajorTickLineWidth;
QPen tickPen = curv->yAxis->tickPen();
tickPen.setWidth(temp);
curv->yAxis->setTickPen(tickPen);
}
// 次刻度线长度
{
int temp = pInfo->m_sdMinorTickLineLength;
curv->yAxis->setSubTickLength(temp, 0);
}
// 次刻度线宽度
{
int temp = pInfo->m_sdMinorTickLineWidth;
QPen tickPen = curv->yAxis->subTickPen();
tickPen.setWidth(temp);
curv->yAxis->setSubTickPen(tickPen);
}
}
else if("plObject" == strType)
{
initFgrq(curv);
}
else if("roseObject" == strType)
{
initRose(curv);
}
else if("dcaObject" == strType)
{
initDCA(curv);
}
else if("tdtObject" == strType)
{
initTDT(curv);
if(m_iY1 == 0.0)
{
QTimer::singleShot(200, this, [=]() {
m_iY2 = -2000;
m_iY1 = -2030;
emit CallManage::getInstance()->sig_changeDepth(m_strUuid, m_strSlfName, m_strWellName, m_iY1, m_iY2);
});
}
}
else if (strType == "tableObject")
{
//新建表格曲线
emit CallManage::getInstance()->sig_AddTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
curv->replot();
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
QTimer::singleShot(100, this, [=]() {
emit CallManage::getInstance()->sig_ReplotFinished(m_strUuid);
});
//
m_listLineName.push_back(strLineName);
}
void FormDraw::setDrawPropert(QJsonObject objInfo)
{
if (objInfo.contains("formInfos"))
{
QJsonValue value = objInfo.value("formInfos");
if (value.isArray()) {
QJsonArray linesArray = value.toArray();
qDebug() << "linesArray number:" << QString::number(linesArray.size());
//展示所有曲线
DisplayLines(linesArray);
}
}
}
void FormDraw::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();
QString strType = lineObjInfo.value("Type").toString();
//展示其中一条曲线
if (strType == "curveObject")
{
DisplayLine_One(lineObjInfo);
}
else if (strType == "tableObject")
{
QString strLineName = "";
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (strLineName == "GUJING1_RESULT" || strLineName == "GUJING2_RESULT" || strLineName == "GUJING3_RESULT"
|| strLineName == "WORDS_RELUST" || strLineName == "GEO_LITH" || strLineName == "SWALL_CORE"
|| strLineName == "LAYER_DATA")
{
//固井结论/井壁取心/录井剖面/文字结论/地质分层
DisplayTable_One(lineObjInfo);
}
}
else if (strType == "JiegutextObject")
{
//气测/FMT/射孔/文本
DisplayJiegutext_One(lineObjInfo);
}
else if (strType == "LogfaceObject")
{
//沉积相
DisplayFac_One(lineObjInfo);
}
else if (strType == "TubingstringObject")
{
//套管组件
DisplayTubing_One(lineObjInfo);
}
else if (strType == "depthObject")
{
// 深度
DisplayDepth_One(lineObjInfo);
}
else if (strType == "SantuyibiaoObject")
{
// 斜井三图一表属性
DisplayTvd_One(lineObjInfo);
}
else
{
DisplayType_One(lineObjInfo);
}
}
}
}
}
}
// 深度
void FormDraw::DisplayDepth_One(QJsonObject objInfo)
{
QString strType = objInfo.value("Type").toString();
QString strLineName = objInfo.value("LineName").toString();
QStringList dt;
dt << m_strUuid;
dt << m_strWellName;
dt << m_strSlfName;
dt << strLineName;
dt << strType;
dt << QString::number(m_nTrackW);
this->setDrawData(dt, objInfo);
}
//表格:固井结论等
void FormDraw::DisplayTable_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
QString strLineName = "";
QString strAliasName = "";//显示名称
QFont curveNameFont("微软雅黑", 10); // 名称字体
QColor lineColor = QColor(0, 0, 0);//颜色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
{
QJsonValue value = lineObjInfo.value("WellName");
if (value.isString()) {
strWellName = value.toString();
//qDebug() << "WellName:" << strWellName;
}
}
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (lineObjInfo.contains("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
//
if (lineObjInfo.contains("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
//垂向绘制
bool bVerticaDrawing = false;
if (lineObjInfo.contains("VerticaDrawing"))
{
QJsonValue value = lineObjInfo.value("VerticaDrawing");
if (value.isBool()) {
bVerticaDrawing = value.toBool();
}
}
// 旋转角度
int nRotationAngle = 0;
if (lineObjInfo.contains("RotationAngle"))
{
QJsonValue value = lineObjInfo.value("RotationAngle");
if (value.isDouble()) {
nRotationAngle = value.toInt();
}
}
//
double dOilZhan = 8; //含油占比
bool bLithColor = true; // 岩性配色显示
bool bLithOne = true; // 单岩性显示
bool bShowOil = true; // 显示含油性
bool bCenterOil = false; // 含油性居中
bool bShowColor = false; // 显示颜色
bool bShowColorNum = false; // 绘制颜色号
//
if (lineObjInfo.contains("OilZhan"))//含油占比
{
dOilZhan = lineObjInfo.value("OilZhan").toInt();
}
//
if (lineObjInfo.contains("LithColor"))
{
QJsonValue value = lineObjInfo.value("LithColor");
if (value.isBool()) {
bLithColor = value.toBool();
}
}
if (lineObjInfo.contains("LithOne"))
{
QJsonValue value = lineObjInfo.value("LithOne");
if (value.isBool()) {
bLithOne = value.toBool();
}
}
if (lineObjInfo.contains("ShowOil"))
{
QJsonValue value = lineObjInfo.value("ShowOil");
if (value.isBool()) {
bShowOil = value.toBool();
}
}
if (lineObjInfo.contains("CenterOil"))
{
QJsonValue value = lineObjInfo.value("CenterOil");
if (value.isBool()) {
bCenterOil = value.toBool();
}
}
if (lineObjInfo.contains("ShowColor"))
{
QJsonValue value = lineObjInfo.value("ShowColor");
if (value.isBool()) {
bShowColor = value.toBool();
}
}
if (lineObjInfo.contains("ShowColorNum"))
{
QJsonValue value = lineObjInfo.value("ShowColorNum");
if (value.isBool()) {
bShowColorNum = value.toBool();
}
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
QStringList listOtherProperty;
listOtherProperty.append(strAliasName);//别名
listOtherProperty.append(lineColor.name());//名称颜色
listOtherProperty.append(curveNameFont.toString());//名称字体
if(bVerticaDrawing)//垂向绘制
{
listOtherProperty.append("VerticaDrawing");
}
else{
listOtherProperty.append("0");
}
//
listOtherProperty.append(QString::number(nRotationAngle));//旋转角度
//
listOtherProperty.append(QString::number(dOilZhan));//含油占比
//
if(bLithColor)
{
listOtherProperty.append("LithColor");
}
else{
listOtherProperty.append("0");
}
//
if(bLithOne)
{
listOtherProperty.append("LithOne");
}
else{
listOtherProperty.append("0");
}
//
if(bShowOil)
{
listOtherProperty.append("ShowOil");
}
else{
listOtherProperty.append("0");
}
//
if(bCenterOil)
{
listOtherProperty.append("CenterOil");
}
else{
listOtherProperty.append("0");
}
//
if(bShowColor)
{
listOtherProperty.append("ShowColor");
}
else{
listOtherProperty.append("0");
}
//
if(bShowColorNum)
{
listOtherProperty.append("ShowColorNum");
}
else{
listOtherProperty.append("0");
}
//结论
this->addTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, listOtherProperty);
}
}
//气测/FMT/射孔/文本
void FormDraw::DisplayJiegutext_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
QString strLineName = "";
QString strAliasName = "";//显示名称
QFont curveNameFont("微软雅黑", 10); // 名称字体
QColor lineColor = QColor(0, 0, 0);//颜色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
{
QJsonValue value = lineObjInfo.value("WellName");
if (value.isString()) {
strWellName = value.toString();
//qDebug() << "WellName:" << strWellName;
}
}
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (lineObjInfo.contains("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
//
if (lineObjInfo.contains("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
QStringList listOtherProperty;
listOtherProperty.append(strAliasName);//别名
listOtherProperty.append(lineColor.name());//名称颜色
listOtherProperty.append(curveNameFont.toString());//名称字体
//气测/FMT/射孔/文本
this->s_addJiegutext(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, 0, listOtherProperty); //
}
}
//沉积相
void FormDraw::DisplayFac_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
QString strLineName = "";
QString strAliasName = "";//显示名称
QFont curveNameFont("微软雅黑", 10); // 名称字体
QColor lineColor = QColor(0, 0, 0);//颜色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
{
QJsonValue value = lineObjInfo.value("WellName");
if (value.isString()) {
strWellName = value.toString();
//qDebug() << "WellName:" << strWellName;
}
}
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (lineObjInfo.contains("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
//
if (lineObjInfo.contains("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
//沉积相
bool bDrawFac = true; // 绘制相
bool bDrawPhase = true; // 绘制亚相
bool bDrawMFacName = true; // 微相名称
if (lineObjInfo.contains("DrawFac"))
{
QJsonValue value = lineObjInfo.value("DrawFac");
if (value.isBool()) {
bDrawFac = value.toBool();
}
}
if (lineObjInfo.contains("DrawPhase"))
{
QJsonValue value = lineObjInfo.value("DrawPhase");
if (value.isBool()) {
bDrawPhase = value.toBool();
}
}
if (lineObjInfo.contains("DrawMFacName"))
{
QJsonValue value = lineObjInfo.value("DrawMFacName");
if (value.isBool()) {
bDrawMFacName = value.toBool();
}
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
QStringList listOtherProperty;
listOtherProperty.append(strAliasName);//别名
listOtherProperty.append(lineColor.name());//名称颜色
listOtherProperty.append(curveNameFont.toString());//名称字体
//沉积相
if(bDrawFac)
{
listOtherProperty.append("DrawFac");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawPhase)
{
listOtherProperty.append("DrawPhase");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawMFacName)
{
listOtherProperty.append("DrawMFacName");
}
else{
listOtherProperty.append("0");
}
//沉积相
this->s_addLogface(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, 0, listOtherProperty); //
}
}
//套管組件
void FormDraw::DisplayTubing_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
QString strLineName = "";
QString strUnit = "";//单位
QString strAliasName = "";//显示名称
QFont curveNameFont("微软雅黑", 10); // 名称字体
QColor lineColor = QColor(0, 0, 0);//颜色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
{
QJsonValue value = lineObjInfo.value("WellName");
if (value.isString()) {
strWellName = value.toString();
//qDebug() << "WellName:" << strWellName;
}
}
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (lineObjInfo.contains("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
if (lineObjInfo.contains("Unit"))
{
QJsonValue value = lineObjInfo.value("Unit");
if (value.isString()) {
strUnit = value.toString();
//qDebug() << "strUnit:" << strUnit;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
//
if (lineObjInfo.contains("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
//垂向绘制
bool bVerticaDrawing = false;
if (lineObjInfo.contains("VerticaDrawing"))
{
QJsonValue value = lineObjInfo.value("VerticaDrawing");
if (value.isBool()) {
bVerticaDrawing = value.toBool();
}
}
// 旋转角度
int nRotationAngle = 0;
if (lineObjInfo.contains("RotationAngle"))
{
QJsonValue value = lineObjInfo.value("RotationAngle");
if (value.isDouble()) {
nRotationAngle = value.toInt();
}
}
//套管組件
bool bDrawStruct_Tubing = true; //绘制结构
bool bDrawTubing_Tubing = true; //绘制管柱
bool bDrawTools_Tubing = true; //绘制工具
bool bDrawSPTool_Tubing = true; //标注工具
bool bDrawCCL_Tubing = false; //绘制接箍
float Oguan_Tubing = 63.5; //油管外径
float inD_Tubing = 121.36; //套管内径
float OutD_Tubing = 139.7; //套管外径
if (lineObjInfo.contains("DrawStruct"))
{
QJsonValue value = lineObjInfo.value("DrawStruct");
if (value.isBool()) {
bDrawStruct_Tubing = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawTubing"))
{
QJsonValue value = lineObjInfo.value("DrawTubing");
if (value.isBool()) {
bDrawTubing_Tubing = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawTools"))
{
QJsonValue value = lineObjInfo.value("DrawTools");
if (value.isBool()) {
bDrawTools_Tubing = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawSPTool"))
{
QJsonValue value = lineObjInfo.value("DrawSPTool");
if (value.isBool()) {
bDrawSPTool_Tubing = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawCCL"))
{
QJsonValue value = lineObjInfo.value("DrawCCL");
if (value.isBool()) {
bDrawCCL_Tubing = value.toBool();
}
}
//----
if (lineObjInfo.contains("Oguan"))
{
QJsonValue value = lineObjInfo.value("Oguan");
if (value.isDouble()) {
Oguan_Tubing = value.toDouble();
}
}
//
if (lineObjInfo.contains("inD"))
{
QJsonValue value = lineObjInfo.value("inD");
if (value.isDouble()) {
inD_Tubing = value.toDouble();
}
}
//
if (lineObjInfo.contains("OutD"))
{
QJsonValue value = lineObjInfo.value("OutD");
if (value.isDouble()) {
OutD_Tubing = value.toDouble();
}
}
//左刻度,右刻度
double newLeftScale = 0;//左刻度
double newRightScale = 500;//右刻度
//
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);
}
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
QStringList listOtherProperty;
listOtherProperty.append(strAliasName);//别名
listOtherProperty.append(lineColor.name());//名称颜色
listOtherProperty.append(curveNameFont.toString());//名称字体
listOtherProperty.append(strUnit);//单位
if(bVerticaDrawing)//垂向绘制
{
listOtherProperty.append("VerticaDrawing");
}
else{
listOtherProperty.append("0");
}
//
listOtherProperty.append(QString::number(nRotationAngle));//旋转角度
//
if(bDrawStruct_Tubing)
{
listOtherProperty.append("DrawStruct");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawTubing_Tubing)
{
listOtherProperty.append("DrawTubing");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawTools_Tubing)
{
listOtherProperty.append("DrawTools");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawSPTool_Tubing)
{
listOtherProperty.append("DrawSPTool");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawCCL_Tubing)
{
listOtherProperty.append("DrawCCL");
}
else{
listOtherProperty.append("0");
}
//
listOtherProperty.append(QString::number(Oguan_Tubing));//油管外径
listOtherProperty.append(QString::number(inD_Tubing));//套管内径
listOtherProperty.append(QString::number(OutD_Tubing));//套管外径
//
listOtherProperty.append(QString::number(newLeftScale));//左刻度
listOtherProperty.append(QString::number(newRightScale));//右刻度
//套管組件
this->s_addTubingstring(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, 0, listOtherProperty); //
}
}
//斜井三图一表
void FormDraw::DisplayTvd_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
QString strLineName = "";
QString strAliasName = "";//显示名称
QFont curveNameFont("微软雅黑", 10); // 名称字体
QColor lineColor = QColor(0, 0, 0);//颜色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
{
QJsonValue value = lineObjInfo.value("WellName");
if (value.isString()) {
strWellName = value.toString();
//qDebug() << "WellName:" << strWellName;
}
}
if (lineObjInfo.contains("LineName"))
{
QJsonValue value = lineObjInfo.value("LineName");
if (value.isString()) {
strLineName = value.toString();
//qDebug() << "LineName:" << strLineName;
}
}
if (lineObjInfo.contains("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
//
if (lineObjInfo.contains("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
FormLine* pFormL = this->s_addSantuyibiao(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, 0);
if (pFormL && pFormL->m_drawTvd)
{
GetTvdProperty(pFormL->m_drawTvd, lineObjInfo);
emit CallManage::getInstance()->sig_ChangeTvdProperty(m_strUuid, m_strSlfName, m_strWellName, m_strTrackName, "Santuyibiao",
(QObject *)(pFormL->m_drawTvd));
}
}
}
void FormDraw::GetTvdProperty(CDrawTvd *drawTvd, QJsonObject lineObjInfo)
{
if (lineObjInfo.contains("AliasWellName")) // 通常-显示井名
{
QJsonValue value = lineObjInfo.value("AliasWellName");
if (value.isString()) {
drawTvd->m_AliasWellName = value.toString();
}
}
// 绘制图形对象
if (lineObjInfo.contains("IsDrawBX")) // 绘制图形对象-靶心
{
QJsonValue value = lineObjInfo.value("IsDrawBX");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawBX = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawBxcs")) // 绘制图形对象-靶心参数表
{
QJsonValue value = lineObjInfo.value("IsDrawBxcs");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawBxcs = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawTable")) // 绘制图形对象-井斜数据表
{
QJsonValue value = lineObjInfo.value("IsDrawTable");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawTable = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawFst")) // 绘制图形对象-俯视图
{
QJsonValue value = lineObjInfo.value("IsDrawFst");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawFst = value.toBool();
}
}
if (lineObjInfo.contains("DepthLeft")) // 绘制图形对象-侧视图深度在左边
{
QJsonValue value = lineObjInfo.value("DepthLeft");
if (value.isBool()) {
drawTvd->objViewInfo->m_DepthLeft = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawCst1")) // 绘制图形对象-侧视图(水平位移)
{
QJsonValue value = lineObjInfo.value("IsDrawCst1");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawCst1 = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawCst2")) // 绘制图形对象-侧视图(向东)
{
QJsonValue value = lineObjInfo.value("IsDrawCst2");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawCst2 = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawCst3")) // 绘制图形对象-侧视图(向北)
{
QJsonValue value = lineObjInfo.value("IsDrawCst3");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawCst3 = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawCst")) // 绘制图形对象-侧视图(侧视角)
{
QJsonValue value = lineObjInfo.value("IsDrawCst");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawCst = value.toBool();
}
}
if (lineObjInfo.contains("IsDrawLtgjt")) // 绘制图形对象-立体轨迹图
{
QJsonValue value = lineObjInfo.value("IsDrawLtgjt");
if (value.isBool()) {
drawTvd->objViewInfo->m_IsDrawLtgjt = value.toBool();
}
}
if (lineObjInfo.contains("isDrawNote")) // 绘制图形对象-绘制标注信息
{
QJsonValue value = lineObjInfo.value("isDrawNote");
if (value.isBool()) {
drawTvd->objViewInfo->m_isDrawNote = value.toBool();
}
}
// 边框线型
if (lineObjInfo.contains("FrameWidth")) // 边框线型-线宽
{
QJsonValue value = lineObjInfo.value("FrameWidth");
if (value.isDouble()) {
drawTvd->m_FrameWidth = value.toInt();
}
}
if (lineObjInfo.contains("FrameColor")) // 边框线型-颜色
{
QJsonValue value = lineObjInfo.value("FrameColor");
if (value.isString()) {
drawTvd->m_FrameColor.setNamedColor(value.toString());
}
}
// 格线线型
if (lineObjInfo.contains("GridWidth")) // 格线线型-线宽
{
QJsonValue value = lineObjInfo.value("GridWidth");
if (value.isDouble()) {
drawTvd->m_GridWidth = value.toInt();
}
}
if (lineObjInfo.contains("GridColor")) // 格线线型-颜色
{
QJsonValue value = lineObjInfo.value("GridColor");
if (value.isString()) {
drawTvd->m_GridColor.setNamedColor(value.toString());
}
}
// 轨迹线型
if (lineObjInfo.contains("GuijiWidth")) // 轨迹线型-线宽
{
QJsonValue value = lineObjInfo.value("GuijiWidth");
if (value.isDouble()) {
drawTvd->m_GuijiWidth = value.toInt();
}
}
if (lineObjInfo.contains("GuijiColor")) // 轨迹线型-颜色
{
QJsonValue value = lineObjInfo.value("GuijiColor");
if (value.isString()) {
drawTvd->m_GuijiColor.setNamedColor(value.toString());
}
}
// 靶心半径线型
if (lineObjInfo.contains("BxbjWidth")) // 靶心半径线型-线宽
{
QJsonValue value = lineObjInfo.value("BxbjWidth");
if (value.isDouble()) {
drawTvd->m_BxbjWidth = value.toInt();
}
}
if (lineObjInfo.contains("BxbjColor")) // 靶心半径线型-颜色
{
QJsonValue value = lineObjInfo.value("BxbjColor");
if (value.isString()) {
drawTvd->m_BxbjColor.setNamedColor(value.toString());
}
}
// 靶心连线线型
if (lineObjInfo.contains("BxlxWidth")) // 靶心连线线型-线宽
{
QJsonValue value = lineObjInfo.value("BxlxWidth");
if (value.isDouble()) {
drawTvd->m_BxlxWidth = value.toInt();
}
}
if (lineObjInfo.contains("BxlxColor")) // 靶心连线线型-颜色
{
QJsonValue value = lineObjInfo.value("BxlxColor");
if (value.isString()) {
drawTvd->m_BxlxColor.setNamedColor(value.toString());
}
}
// 字体
if (lineObjInfo.contains("HeadFont")) // 字体-道头字体
{
QJsonValue value = lineObjInfo.value("HeadFont");
if (value.isString()) {
drawTvd->objViewInfo->m_HeadFont.fromString(value.toString());
}
}
if (lineObjInfo.contains("HeadColor")) // 字体-道头颜色
{
QJsonValue value = lineObjInfo.value("HeadColor");
if (value.isString()) {
drawTvd->objViewInfo->m_HeadColor.setNamedColor(value.toString());
}
}
if (lineObjInfo.contains("TitleFont")) // 字体-标题字体
{
QJsonValue value = lineObjInfo.value("TitleFont");
if (value.isString()) {
drawTvd->objViewInfo->m_TitleFont.fromString(value.toString());
}
}
if (lineObjInfo.contains("TitleColor")) // 字体-标题颜色
{
QJsonValue value = lineObjInfo.value("TitleColor");
if (value.isString()) {
drawTvd->objViewInfo->m_TitleColor.setNamedColor(value.toString());
}
}
if (lineObjInfo.contains("TableFont")) // 字体-数据表字体
{
QJsonValue value = lineObjInfo.value("TableFont");
if (value.isString()) {
drawTvd->objViewInfo->m_TableFont.fromString(value.toString());
}
}
if (lineObjInfo.contains("TableColor")) // 字体-数据表颜色
{
QJsonValue value = lineObjInfo.value("TableColor");
if (value.isString()) {
drawTvd->objViewInfo->m_TableColor.setNamedColor(value.toString());
}
}
if (lineObjInfo.contains("ScaleFont")) // 字体-刻度字体
{
QJsonValue value = lineObjInfo.value("ScaleFont");
if (value.isString()) {
drawTvd->objViewInfo->m_ScaleFont.fromString(value.toString());
}
}
if (lineObjInfo.contains("ScaleColor")) // 字体-刻度颜色
{
QJsonValue value = lineObjInfo.value("ScaleColor");
if (value.isString()) {
drawTvd->objViewInfo->m_ScaleColor.setNamedColor(value.toString());
}
}
if (lineObjInfo.contains("NoteFont")) // 字体-注释字体
{
QJsonValue value = lineObjInfo.value("NoteFont");
if (value.isString()) {
drawTvd->objViewInfo->m_NoteFont.fromString(value.toString());
}
}
if (lineObjInfo.contains("NoteColor")) // 字体-注释颜色
{
QJsonValue value = lineObjInfo.value("NoteColor");
if (value.isString()) {
drawTvd->objViewInfo->m_NoteColor.setNamedColor(value.toString());
}
}
// 井斜数据表参数
if (lineObjInfo.contains("Title_table")) // 井斜数据表参数-标题名
{
QJsonValue value = lineObjInfo.value("Title_table");
if (value.isString()) {
drawTvd->m_Title_table = value.toString();
}
}
if (lineObjInfo.contains("Head_Height")) // 井斜数据表参数-头记录高度(cm)
{
QJsonValue value = lineObjInfo.value("Head_Height");
if (value.isDouble()) {
drawTvd->objViewInfo->m_Head_Height = value.toDouble();
}
}
if (lineObjInfo.contains("Rec_Height")) // 井斜数据表参数-数据记录高度(cm)
{
QJsonValue value = lineObjInfo.value("Rec_Height");
if (value.isDouble()) {
drawTvd->objViewInfo->m_Rec_Height = value.toDouble();
}
}
// 俯视图参数
if (lineObjInfo.contains("Title_fst")) // 俯视图参数-标题名
{
QJsonValue value = lineObjInfo.value("Title_fst");
if (value.isString()) {
drawTvd->objViewInfo->m_Title_fst = value.toString();
}
}
if (lineObjInfo.contains("MinXe")) // 俯视图参数-东西位移最小刻度
{
QJsonValue value = lineObjInfo.value("MinXe");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinXe = value.toDouble();
}
}
if (lineObjInfo.contains("MaxXe")) // 俯视图参数-东西位移最大刻度
{
QJsonValue value = lineObjInfo.value("MaxXe");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxXe = value.toDouble();
}
}
if (lineObjInfo.contains("MinYn")) // 俯视图参数-南北位移最小刻度
{
QJsonValue value = lineObjInfo.value("MinYn");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinYn = value.toDouble();
}
}
if (lineObjInfo.contains("MaxYn")) // 俯视图参数-南北位移最大刻度
{
QJsonValue value = lineObjInfo.value("MaxYn");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxYn = value.toDouble();
}
}
if (lineObjInfo.contains("bPlotBhx")) // 俯视图参数-是否绘制闭合线
{
QJsonValue value = lineObjInfo.value("bPlotBhx");
if (value.isBool()) {
drawTvd->objViewInfo->m_bPlotBhx = value.toBool();
}
}
// 侧视图参数
if (lineObjInfo.contains("Title_cst")) // 侧视图参数-标题名
{
QJsonValue value = lineObjInfo.value("Title_cst");
if (value.isString()) {
drawTvd->objViewInfo->m_Title_cst = value.toString();
}
}
if (lineObjInfo.contains("heqw")) // 侧视图参数-高宽相同
{
QJsonValue value = lineObjInfo.value("heqw");
if (value.isBool()) {
drawTvd->objViewInfo->m_heqw = value.toBool();
}
}
// 侧视图(水平位移)
if (lineObjInfo.contains("MaxWy_HOFF")) // 侧视图(水平位移)-最大侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MaxWy_HOFF");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxWy_HOFF = value.toDouble();
}
}
if (lineObjInfo.contains("MinWy_HOFF")) // 侧视图(水平位移)-最小侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MinWy_HOFF");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinWy_HOFF = value.toDouble();
}
}
if (lineObjInfo.contains("MaxTVD_HOFF")) // 侧视图(水平位移)-最大垂深(m)
{
QJsonValue value = lineObjInfo.value("MaxTVD_HOFF");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxTVD_HOFF = value.toDouble();
}
}
if (lineObjInfo.contains("MinTVD_HOFF")) // 侧视图(水平位移)-最小垂深(m)
{
QJsonValue value = lineObjInfo.value("MinTVD_HOFF");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinTVD_HOFF = value.toDouble();
}
}
// 侧视图(向东)
if (lineObjInfo.contains("MaxWy_XE")) // 侧视图(向东)-最大侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MaxWy_XE");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxWy_XE = value.toDouble();
}
}
if (lineObjInfo.contains("MinWy_XE")) // 侧视图(向东)-最小侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MinWy_XE");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinWy_XE = value.toDouble();
}
}
if (lineObjInfo.contains("MaxTVD_XE")) // 侧视图(向东)-最大垂深(m)
{
QJsonValue value = lineObjInfo.value("MaxTVD_XE");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxTVD_XE = value.toDouble();
}
}
if (lineObjInfo.contains("MinTVD_XE")) // 侧视图(向东)-最小垂深(m)
{
QJsonValue value = lineObjInfo.value("MinTVD_XE");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinTVD_XE = value.toDouble();
}
}
// 侧视图(向北)
if (lineObjInfo.contains("MaxWy_YN")) // 侧视图(向北)-最大侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MaxWy_YN");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxWy_YN = value.toDouble();
}
}
if (lineObjInfo.contains("MinWy_YN")) // 侧视图(向北)-最小侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MinWy_YN");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinWy_YN = value.toDouble();
}
}
if (lineObjInfo.contains("MaxTVD_YN")) // 侧视图(向北)-最大垂深(m)
{
QJsonValue value = lineObjInfo.value("MaxTVD_YN");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxTVD_YN = value.toDouble();
}
}
if (lineObjInfo.contains("MinTVD_YN")) // 侧视图(向北)-最小垂深(m)
{
QJsonValue value = lineObjInfo.value("MinTVD_YN");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinTVD_YN = value.toDouble();
}
}
// 侧视图(侧视角)
if (lineObjInfo.contains("MaxWy")) // 侧视图(侧视角)-最大侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MaxWy");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxWy = value.toDouble();
}
}
if (lineObjInfo.contains("MinWy")) // 侧视图(侧视角)-最小侧视位移(m)
{
QJsonValue value = lineObjInfo.value("MinWy");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinWy = value.toDouble();
}
}
if (lineObjInfo.contains("MaxTVD")) // 侧视图(侧视角)-最大垂深(m)
{
QJsonValue value = lineObjInfo.value("MaxTVD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxTVD = value.toDouble();
}
}
if (lineObjInfo.contains("MinTVD")) // 侧视图(侧视角)-最小垂深(m)
{
QJsonValue value = lineObjInfo.value("MinTVD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MinTVD = value.toDouble();
}
}
if (lineObjInfo.contains("DepSpace")) // 侧视图(侧视角)-深度间隔(m)
{
QJsonValue value = lineObjInfo.value("DepSpace");
if (value.isDouble()) {
drawTvd->objViewInfo->m_DepSpace = value.toDouble();
}
}
if (lineObjInfo.contains("DepSpaceN")) // 侧视图(侧视角)-等分个数(=0按深度间隔)
{
QJsonValue value = lineObjInfo.value("DepSpaceN");
if (value.isDouble()) {
drawTvd->objViewInfo->m_DepSpaceN = value.toDouble();
}
}
if (lineObjInfo.contains("CsAngle")) // 侧视图(侧视角)-侧视角(度)
{
QJsonValue value = lineObjInfo.value("CsAngle");
if (value.isDouble()) {
drawTvd->objViewInfo->m_CsAngle = value.toDouble();
}
}
// 立体轨迹图参数
if (lineObjInfo.contains("Title_ltgj")) // 立体轨迹图参数-标题名
{
QJsonValue value = lineObjInfo.value("Title_ltgj");
if (value.isString()) {
drawTvd->m_Title_ltgj = value.toString();
}
}
if (lineObjInfo.contains("MaxWy1")) // 立体轨迹图参数-最大位移(m)
{
QJsonValue value = lineObjInfo.value("MaxWy1");
if (value.isDouble()) {
drawTvd->objViewInfo->m_MaxWy1 = value.toDouble();
}
}
if (lineObjInfo.contains("LTTTVD")) // 立体轨迹图参数-起始垂深(m)
{
QJsonValue value = lineObjInfo.value("LTTTVD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_LTTTVD = value.toDouble();
}
}
if (lineObjInfo.contains("DepSpace1")) // 立体轨迹图参数-垂深间隔(m)
{
QJsonValue value = lineObjInfo.value("DepSpace1");
if (value.isDouble()) {
drawTvd->objViewInfo->m_DepSpace1 = value.toDouble();
}
}
if (lineObjInfo.contains("is3DFrame")) // 立体轨迹图参数-是否绘制立体框
{
QJsonValue value = lineObjInfo.value("is3DFrame");
if (value.isBool()) {
drawTvd->objViewInfo->m_is3DFrame = value.toBool();
}
}
if (lineObjInfo.contains("LttAngle_X")) // 立体轨迹图参数-俯视角(度)
{
QJsonValue value = lineObjInfo.value("LttAngle_X");
if (value.isDouble()) {
drawTvd->objViewInfo->m_LttAngle_X = value.toDouble();
}
}
if (lineObjInfo.contains("LttAngle")) // 立体轨迹图参数-侧视角(度)
{
QJsonValue value = lineObjInfo.value("LttAngle");
if (value.isDouble()) {
drawTvd->objViewInfo->m_LttAngle = value.toDouble();
}
}
if (lineObjInfo.contains("LttAngle_Z")) // 立体轨迹图参数-倾斜角(度)
{
QJsonValue value = lineObjInfo.value("LttAngle_Z");
if (value.isDouble()) {
drawTvd->objViewInfo->m_LttAngle_Z = value.toDouble();
}
}
if (lineObjInfo.contains("LTTTVD")) // 立体轨迹图参数-竖线间隔
{
QJsonValue value = lineObjInfo.value("LTTTVD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_LTTTVD = value.toDouble();
}
}
if (lineObjInfo.contains("YD")) // 立体轨迹图参数-俯视南北间隔数
{
QJsonValue value = lineObjInfo.value("YD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_YD = value.toDouble();
}
}
if (lineObjInfo.contains("XD")) // 立体轨迹图参数-俯视东西间隔数
{
QJsonValue value = lineObjInfo.value("XD");
if (value.isDouble()) {
drawTvd->objViewInfo->m_XD = value.toDouble();
}
}
if (lineObjInfo.contains("IsDrawProperty")) // 立体轨迹图参数-附加属性类型
{
QJsonValue value = lineObjInfo.value("IsDrawProperty");
if (value.isDouble()) {
drawTvd->objViewInfo->m_IsDrawProperty = value.toInt();
}
}
if (lineObjInfo.contains("CurveName1")) // 立体轨迹图参数-选择井曲线1
{
QJsonValue value = lineObjInfo.value("CurveName1");
if (value.isString()) {
drawTvd->objViewInfo->m_CurveName1 = value.toString();
}
}
if (lineObjInfo.contains("CurveName2")) // 立体轨迹图参数-选择井曲线2
{
QJsonValue value = lineObjInfo.value("CurveName2");
if (value.isString()) {
drawTvd->objViewInfo->m_CurveName2 = value.toString();
}
}
if (lineObjInfo.contains("ColorTableIndex")) // 立体轨迹图参数-调色板参数设置
{
QJsonValue value = lineObjInfo.value("ColorTableIndex");
if (value.isDouble()) {
drawTvd->objViewInfo->m_ColorTableIndex = value.toInt();
}
}
if (lineObjInfo.contains("calscale")) // 立体轨迹图参数-直径放大系数
{
QJsonValue value = lineObjInfo.value("calscale");
if (value.isDouble()) {
drawTvd->objViewInfo->m_calscale = value.toDouble();
}
}
if (lineObjInfo.contains("baseval")) // 立体轨迹图参数-波形基值
{
QJsonValue value = lineObjInfo.value("baseval");
if (value.isDouble()) {
drawTvd->objViewInfo->m_baseval = value.toDouble();
}
}
if (lineObjInfo.contains("maxval")) // 立体轨迹图参数-波形最大值
{
QJsonValue value = lineObjInfo.value("maxval");
if (value.isDouble()) {
drawTvd->objViewInfo->m_maxval = value.toDouble();
}
}
if (lineObjInfo.contains("isBlock")) // 立体轨迹图参数-连续填充
{
QJsonValue value = lineObjInfo.value("isBlock");
if (value.isBool()) {
drawTvd->objViewInfo->m_isBlock = value.toBool();
}
}
// 立体闭合方位线型
// rootObj["linewidth"] = m_pTvd->objViewInfo->m_linewidth; // 立体闭合方位线型-线宽
// rootObj["linecolor"] = m_pTvd->objViewInfo->m_linecolor; // 立体闭合方位线型-颜色
// 立体轨迹图参数
if (lineObjInfo.contains("Rlev")) // 侧视图(侧视角)-最小深度间隔(m)
{
QJsonValue value = lineObjInfo.value("Rlev");
if (value.isDouble()) {
drawTvd->objViewInfo->m_Rlev = value.toDouble();
}
}
// 立体井径线型
// rootObj["linewidth"] = m_pTvd->objViewInfo->m_linewidth; // 立体井径线型-线宽
// rootObj["linecolor"] = m_pTvd->objViewInfo->m_linecolor; // 立体井径线型-颜色
}
void FormDraw::DisplayLine_One(QJsonObject lineObjInfo)
{
QString strSlfName = "";
QString strWellName = "";
// QString strTrackName = "";
QString strLineName = "";
QString strAliasName = "";//显示名称
QString strUnit = "";//单位
QFont curveNameFont("微软雅黑", 10); // 曲线名称字体
//
double newLeftScale = 0;//左刻度
double newRightScale = 500;//右刻度
QString strScaleType;//刻度类型(线性,对数)
//
double width = 3;//线宽
QColor lineColor = QColor(0, 0, 0);//颜色
Qt::PenStyle lineStyle = Qt::SolidLine;//线形
//岩性填充
QString newHeadFill;//头部图例
QString newTargetLine;//目标曲线
QString newFillType;//填充类型
QString newFillMode;//填充模式
QColor newColor;//填充颜色
QString newLithosImage = "";//岩性图片
float new_vMin;//其他目标曲线
float new_vMax;//其他目标曲线
QString strOtherScaleType;//其他目标曲线,刻度类型(线性,对数)
QColor frontColor(0, 0, 0);//岩性前景色
QColor backColor(255, 255, 255);//岩性背景色
if (lineObjInfo.contains("SlfName"))
{
QJsonValue value = lineObjInfo.value("SlfName");
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename = QString("");
int ind = strSlfName.lastIndexOf('\\');
int ind2 = strSlfName.lastIndexOf('/');
if (ind2 > ind) ind = ind2;
if (ind > -1) {
slffilename = strSlfName.mid(ind + 1);
strSlfName = slffilename;
}
}
}
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("AliasName"))
{
QJsonValue value = lineObjInfo.value("AliasName");
if (value.isString()) {
strAliasName = value.toString();
//qDebug() << "strAliasName:" << strAliasName;
}
}
if (lineObjInfo.contains("Unit"))
{
QJsonValue value = lineObjInfo.value("Unit");
if (value.isString()) {
strUnit = value.toString();
//qDebug() << "strUnit:" << strUnit;
}
}
//字体
if (lineObjInfo.contains("curveNameFont"))
{
QJsonValue value = lineObjInfo.value("curveNameFont");
if (value.isString()) {
curveNameFont.fromString(value.toString());
//qDebug() << "strUnit:" << strUnit;
}
}
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("ScaleType"))
{
QJsonValue value = lineObjInfo.value("ScaleType");
if (value.isString()) {
strScaleType = value.toString();
//qDebug() << "ScaleType:" << strScaleType;
}
}
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("lineColor"))
{
lineColor.setNamedColor(lineObjInfo.value("lineColor").toString());
}
//
bool bDrawLine = true; // 曲线
bool bDrawGan = false; // 杆状
bool bDrawPoint = false; // 点状
bool bDrawSymmetry = false; // 绘制对称曲线
//
if (lineObjInfo.contains("DrawLine"))
{
QJsonValue value = lineObjInfo.value("DrawLine");
if (value.isBool()) {
bDrawLine = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawGan"))
{
QJsonValue value = lineObjInfo.value("DrawGan");
if (value.isBool()) {
bDrawGan = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawPoint"))
{
QJsonValue value = lineObjInfo.value("DrawPoint");
if (value.isBool()) {
bDrawPoint = value.toBool();
}
}
//
if (lineObjInfo.contains("DrawSymmetry"))
{
QJsonValue value = lineObjInfo.value("DrawSymmetry");
if (value.isBool()) {
bDrawSymmetry = value.toBool();
}
}
//
QCPScatterStyle::ScatterShape pointStyle=QCPScatterStyle::ssCircle;//数据点,符号类型,圆,三角等
if (lineObjInfo.contains("pointStyle"))
{
QJsonValue value = lineObjInfo.value("pointStyle");
if (value.isDouble()) {
pointStyle = (QCPScatterStyle::ScatterShape)value.toInt();
}
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if (strLineName != "")
{
//此处属性注意顺序,后续使用按照顺序
QStringList listOtherProperty;
listOtherProperty.append(strAliasName);
listOtherProperty.append(strUnit);
listOtherProperty.append(curveNameFont.toString());//曲线名称字体
if(bDrawLine)
{
listOtherProperty.append("DrawLine");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawGan)
{
listOtherProperty.append("DrawGan");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawPoint)
{
listOtherProperty.append("DrawPoint");
}
else{
listOtherProperty.append("0");
}
//
if(bDrawSymmetry)
{
listOtherProperty.append("DrawSymmetry");
}
else{
listOtherProperty.append("0");
}
//
listOtherProperty.append(QString::number(pointStyle));
//新建曲线
s_AddLine_Property(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName,
newLeftScale, newRightScale, strScaleType, lineColor, width, lineStyle, listOtherProperty);
}
//---------------
if (lineObjInfo.contains("newHeadFill"))
{
QJsonValue value = lineObjInfo.value("newHeadFill");
if (value.isString()) {
newHeadFill = value.toString();
//qDebug() << "newHeadFill:" << newHeadFill;
}
}
if (lineObjInfo.contains("newTargetLine"))
{
QJsonValue value = lineObjInfo.value("newTargetLine");
if (value.isString()) {
newTargetLine = value.toString();
//qDebug() << "newTargetLine:" << newTargetLine;
}
}
if (lineObjInfo.contains("newFillType"))
{
QJsonValue value = lineObjInfo.value("newFillType");
if (value.isString()) {
newFillType = value.toString();
//qDebug() << "newFillType:" << newFillType;
}
}
if (lineObjInfo.contains("newFillMode"))
{
QJsonValue value = lineObjInfo.value("newFillMode");
if (value.isString()) {
newFillMode = value.toString();
//qDebug() << "newFillMode:" << newFillMode;
}
}
//
if (lineObjInfo.contains("newColor"))
{
newColor.setNamedColor(lineObjInfo.value("newColor").toString());
}
if (lineObjInfo.contains("newLithosImage"))
{
QJsonValue value = lineObjInfo.value("newLithosImage");
if (value.isString()) {
newLithosImage = value.toString();
//qDebug() << "newLithosImage:" << newLithosImage;
}
}
if (lineObjInfo.contains("new_vMin"))
{
QJsonValue value = lineObjInfo.value("new_vMin");
if (value.isDouble()) {
new_vMin = value.toDouble();
//qDebug() << "new_vMin:" << QString::number(new_vMin);
}
}
if (lineObjInfo.contains("new_vMax"))
{
QJsonValue value = lineObjInfo.value("new_vMax");
if (value.isDouble()) {
new_vMax = value.toDouble();
//qDebug() << "new_vMax:" << QString::number(new_vMax);
}
}
//
if (lineObjInfo.contains("frontColor"))
{
frontColor.setNamedColor(lineObjInfo.value("frontColor").toString());
}
//
if (lineObjInfo.contains("backColor"))
{
backColor.setNamedColor(lineObjInfo.value("backColor").toString());
}
//
if (newFillMode == "无填充")
{
//emit CallManage::getInstance()->sig_ClearFillMode(m_strUuid, strSlfName, strWellName, strTrackName, strLineName);
}
else //if(newFillMode=="填充")
{
//模板不立刻填充bFillNow=false
emit CallManage::getInstance()->sig_ChangeFillMode(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName,
newFillType, newTargetLine, newColor, newLithosImage, newHeadFill,
new_vMin, new_vMax, strOtherScaleType, frontColor, backColor, newFillMode, false);
}
}
void FormDraw::DisplayType_One(QJsonObject objInfo)
{
QString strType = objInfo.value("Type").toString();
QString strLineName = objInfo.value("LineName").toString();
//if (strType == "waveObject")
//{
// //新建波列
// //emit CallManage::getInstance()->sig_AddWave(m_strUuid, m_strSlfName, m_strWellName, m_strTrackName, strLineName);
//}
//else
{
QStringList dt;
dt << m_strUuid;
dt << m_strWellName;
dt << m_strSlfName;
dt << strLineName;
dt << strType;
dt << QString::number(m_nTrackW);
this->setDrawData(dt, objInfo);
}
}
void FormDraw::crossTrackSetting()
{
if (m_formTrack == NULL || m_vecCurv.size() <= 0)
return;
int nleft = 0; // 最大左跨道
int nright = 0; // 最大右跨道
int nSingleW = m_formTrack->width();
QRect rt = m_formTrack->geometry();
for (int i = 0; i < m_vecCurv.size(); i++)
{
QMyCustomPlot *pCurvPlot = m_vecCurv.at(i);
if (!pCurvPlot)
continue;
FormInfo* pInfo = m_formTrack->getFormInfoByParameters(pCurvPlot->m_strUuid, pCurvPlot->m_strWellName,
pCurvPlot->m_strTrackName, pCurvPlot->m_strLineName);
if (pInfo == NULL)
continue;
if (pInfo->m_nLeftCross > nleft)
nleft = pInfo->m_nLeftCross;
if (pInfo->m_nRightCross > nright)
nright = pInfo->m_nRightCross;
}
for (int i = 0; i < m_vecCurv.size(); i++)
{
QMyCustomPlot *pCurvPlot = m_vecCurv.at(i);
if (!pCurvPlot)
continue;
FormInfo* pInfo = m_formTrack->getFormInfoByParameters(pCurvPlot->m_strUuid, pCurvPlot->m_strWellName,
pCurvPlot->m_strTrackName, pCurvPlot->m_strLineName);
if (pInfo == NULL)
continue;
pCurvPlot->m_iX1 = pInfo->m_vmin;
pCurvPlot->m_iX2 = pInfo->m_vmax;
pCurvPlot->m_nLeftCross = pInfo->m_nLeftCross;
pCurvPlot->m_nRightCross = pInfo->m_nRightCross;
QCPRange yRange;// = pCurvPlot->yAxis->range();
double rg = pCurvPlot->m_iX2 - pCurvPlot->m_iX1;
yRange.lower = pCurvPlot->m_iX1 - rg * nleft;
yRange.upper = pCurvPlot->m_iX2 + rg * nright;
pCurvPlot->yAxis->setRange(yRange);
int nnw = (nleft + nright + 1) * nSingleW;
QRect plotRt = pCurvPlot->geometry();
plotRt.setWidth(nnw);
pCurvPlot->setGeometry(plotRt);
pCurvPlot->replot();
}
QRect selfRt = this->geometry();
selfRt.setX(rt.x() - (nleft * nSingleW));
selfRt.setWidth((nleft + nright + 1)*nSingleW);
this->setGeometry(selfRt);
}
void FormDraw::paintEvent(QPaintEvent*)
{
//if (m_listLineName.size() > 0 && m_listLineName.at(0) == "AC")
//{
// QPainter painter(this);
// QRect rect = this->rect();
// //背景透明
// painter.fillRect(rect.left(), rect.top(), rect.width(), rect.height(), QColor(200, 0, 0)); //QColor(67, 67, 67, 100)
//}
}
QMyCustomPlot* FormDraw::addTableLine(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QStringList listOtherProperty)
{
if (strLineName == "FRAC_HOLE.TABLE" || strLineName == "WORDS_RELUST" || strLineName == "RESULT"
|| strLineName == "GEO_LITH" || strLineName == "SWALL_CORE"
|| strLineName == "GUJING1_RESULT" || strLineName == "GUJING2_RESULT" || strLineName == "GUJING3_RESULT"
|| strLineName == "CORE_PHYSICS" || strLineName == "IMAGE_DATA"
|| strLineName == "LAYER_DATA" )
{
}
else
{
return NULL;
}
//井名&道名不一致
if (strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return NULL;
}
if (m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return NULL;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
curv->initGeometry(m_strUuid, m_iScale, m_nTrackW);
curv->show();
if (strLineName == "FRAC_HOLE.TABLE")
{
//蝌蚪图
curv->mKedou = true;
//隐藏网格
curv->xAxis->grid()->setVisible(false);
curv->yAxis->grid()->setVisible(false);
initTableLine(curv, strSlfName, strLineName);
}
else if (strLineName == "WORDS_RELUST")
{
//文字结论
if(listOtherProperty.size()>=3)
{
QString strAliasName = listOtherProperty[0];
QColor newlineColor=QColor(0,0,0);
newlineColor.setNamedColor(listOtherProperty[1]);
initWords(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty);
}
else
{
initWords(curv, strSlfName, strLineName);
}
}
else if (strLineName == "LAYER_DATA")
{
//地质层位
if(listOtherProperty.size()>=3)
{
QString strAliasName = listOtherProperty[0];
QColor newlineColor=QColor(0,0,0);
newlineColor.setNamedColor(listOtherProperty[1]);
initLayer(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty);
}
else
{
initLayer(curv, strSlfName, strLineName);
}
}
else if (strLineName == "RESULT")
{
//解释结论
initResult(curv, strSlfName, strLineName);
}
else if (strLineName == "GEO_LITH")
{
//录井剖面
if(listOtherProperty.size()>=3)
{
QString strAliasName = listOtherProperty[0];
QColor newlineColor=QColor(0,0,0);
newlineColor.setNamedColor(listOtherProperty[1]);
initGeoLith(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty);
}
else
{
initGeoLith(curv, strSlfName, strLineName);
}
}
else if (strLineName == "SWALL_CORE")
{
//井壁取心
if(listOtherProperty.size()>=3)
{
QString strAliasName = listOtherProperty[0];
QColor newlineColor=QColor(0,0,0);
newlineColor.setNamedColor(listOtherProperty[1]);
initSwallCore(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty);
}
else
{
initSwallCore(curv, strSlfName, strLineName);
}
}
else if (strLineName == "GUJING1_RESULT" || strLineName == "GUJING2_RESULT" || strLineName == "GUJING3_RESULT")
{
//固井结论
if(listOtherProperty.size()>=3)
{
QString strAliasName = listOtherProperty[0];
QColor newlineColor=QColor(0,0,0);
newlineColor.setNamedColor(listOtherProperty[1]);
initGujing(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty);
}
else
{
initGujing(curv, strSlfName, strLineName);
}
}
else if (strLineName == "CORE_PHYSICS")
{
//岩心实验数据
initCorePhysics(curv, strSlfName, strLineName);
}
else if (strLineName == "IMAGE_DATA")
{
//岩心图片
initIMAGE_DATA(curv, strSlfName, strLineName);
}
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
return curv;
}
void FormDraw::s_addLine(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
m_curv = curv;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
initForm(curv, strSlfName, strLineName);
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
QTimer::singleShot(100, this, [=]() {
emit CallManage::getInstance()->sig_ReplotFinished(m_strUuid);
});
//
m_listLineName.push_back(strLineName);
}
void FormDraw::s_AddLine_Property(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
double newLeftScale, double newRightScale, QString strScaleType, QColor lineColor, double width, Qt::PenStyle lineStyle, QStringList listOtherProperty)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
//qDebug() << "FormDraw s_AddLine_Property";
AppendConsole(PAI_INFO, "FormDraw s_AddLine_Property");
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
initForm(curv, strSlfName, strLineName,
newLeftScale, newRightScale, strScaleType, lineColor, width, lineStyle, listOtherProperty);
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
QTimer::singleShot(100, this, [=]() {
emit CallManage::getInstance()->sig_ReplotFinished(m_strUuid);
});
//
m_listLineName.push_back(strLineName);
AppendConsole(PAI_INFO, "FormDraw s_AddLine_Property end");
}
void FormDraw::s_addWave(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strWaveName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listWaveName.contains(strWaveName))
{
qDebug() << "FormDraw strLineName already exist! " << strWaveName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strWaveName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
double nW = m_nTrackW;
if (nW < 0)
nW = g_iOneWidth;
curv->setGeometry(0, 0, nW, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
int _nSamples = 0;
if(g_iSupport3D)
{
initWave_3D(curv, strSlfName, strWaveName, _nSamples);
}
else
{
curv->initWave(strSlfName, strWaveName);
_nSamples = curv->getScaleV();
}
curv->replot();
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
QTimer::singleShot(100, this, [=]() {
emit CallManage::getInstance()->sig_ReplotFinished(m_strUuid);
});
//
m_listWaveName.push_back(strWaveName);
QString strAliasName = "";
QString strUnit = "mv";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "waveObject");
}
void FormDraw::s_addTableLine(QString strUuid, QString strSlfName, QString strWellName,
QString strTrackName, QString strLineName)
{
this->addTableLine(strUuid, strSlfName, strWellName, strTrackName, strLineName);
}
void FormDraw::s_mouseWheel(QWheelEvent *event)
{
emit CallManage::getInstance()->sig_mouseWheel(event);
}
void FormDraw::setColWidth(int iNewWidth)
{
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
//判断为空
int columnCount = children.size();
if(columnCount==0)
{
return;
}
int i=0;
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
//
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
if(form)
{
int dHight = form->geometry().height();
form->setGeometry(0, 0, iNewWidth, (int)dHight);//7500-3184
if (form->m_strLineName == "RESULT")
{
form->setConclusionProportion(0);
}
form->replot();//屏蔽,缩减时间
}
}
}
i++;
}
}
void FormDraw::setRowHeight(double dHight, QProgressBar *progressBar, int iSplit)
{
int iBeginValue = progressBar->value();
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
//判断为空
int columnCount = children.size();
if(columnCount==0)
{
return;
}
int iSplitCurv = iSplit / columnCount;
int i=0;
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
//progressBar->setValue(iBeginValue+ i*iSplitCurv); // 更新进度条的值
//
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
if(form)
{
form->m_iY1 = m_iY1;
form->m_iY2 = m_iY2;
int nw = form->geometry().width();
form->setGeometry(0, 0, nw, (int)dHight);//7500-3184
//深度改变
if(form->m_bX2Y == true)
{
//默认调换
form->xAxis->setRange(m_iY1, m_iY2);
}
else
{
//针对裂缝的横向波形图X,Y轴不调换
form->yAxis->setRange(m_iY1, m_iY2);
}
//emit CallManage::getInstance()->sig_ChangeLeftScale(m_strUuid, form->m_strSlfName, m_strWellName, m_strTrackName, form->m_strLineName, form->m_iX1);
form->replot();//屏蔽,缩减时间
}
}
}
i++;
}
}
void FormDraw::s_delLine(QString strUuid, QString strWellName, QString strTrackName, QString strLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
qDebug() << "FormDraw s_delLine";
if(m_listLineName.contains(strLineName))
{
}
else
{
qDebug() << "FormDraw strLineName not exist! " << strLineName;
return;
}
//
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
m_vecCurv.removeAll(form);
if(form->m_strLineName == strLineName)
{
childWidget->deleteLater(); // 安排控件的删除,稍后执行
m_listLineName.removeOne(strLineName);
//属性清空
PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//break;
}
}
}
}
}
void FormDraw::s_delWave(QString strUuid, QString strWellName, QString strTrackName, QString strLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
qDebug() << "FormDraw s_delWave";
if(m_listWaveName.contains(strLineName))
{
}
else
{
qDebug() << "FormDraw strLineName not exist! " << strLineName;
return;
}
//
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
if(form->m_strLineName == strLineName)
{
childWidget->deleteLater(); // 安排控件的删除,稍后执行
m_listWaveName.removeOne(strLineName);
//属性清空
PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//break;
}
}
}
}
}
void FormDraw::s_delTableLine(QString strUuid, QString strWellName, QString strTrackName, QString strLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
qDebug() << "FormDraw s_delTableLine";
if(m_listTableName.contains(strLineName))
{
}
else
{
qDebug() << "FormDraw strLineName not exist! " << strLineName;
return;
}
//
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
if(form->m_strLineName == strLineName)
{
childWidget->deleteLater(); // 安排控件的删除,稍后执行
m_listTableName.removeOne(strLineName);
//属性清空
PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//break;
}
}
}
}
}
void FormDraw::s_MouseMove(QString strUuid, QString strWellName, QString strTrackName, float dep)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
//qDebug() << "FormDraw s_MouseMove";
//
QString sss=" depth:"+QString::number(dep);
float fValue=-9999;
// 获取当前widget的所有子控件
const QObjectList &children = this->children();
// 遍历子控件列表
for (QObject *child : children) {
// 判断子控件是否为QWidget类型
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
// 打印子控件的信息,使用缩进表示层级关系
//qDebug() << QString("%1").arg(childWidget->objectName());
QString strObjName = childWidget->objectName();
if(strObjName=="QMyCustomPlot")
{
QMyCustomPlot *form = (QMyCustomPlot*)childWidget;
//
CLogIO *logio=new CLogIO();
logio->Open(form->m_strSlfName.toStdString().c_str(),CSlfIO::modeRead);
int index=logio->OpenCurve(form->m_strLineName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
logio->ReadCurve(index, dep, 1, &fValue);
logio->CloseCurve(index);
delete logio;
sss+=" " + form->m_strLineName + ":"+QString::number(fValue);
}
}
}
QStatusBar *pStatusbar = ::GetStatusBar();
if(pStatusbar)
{
pStatusbar->showMessage(sss);
}
}
void FormDraw::s_handleRectRangeChange(QCPRange newRange)
{
}
void FormDraw::setupLineStyleDemo(QMyCustomPlot *customPlot)
{
// customPlot->legend->setVisible(true);
// customPlot->legend->setFont(QFont("Helvetica", 9));
// QPen pen;
// QStringList lineNames;
// lineNames << "lsNone" << "lsLine" << "lsStepLeft" << "lsStepRight" << "lsStepCenter" << "lsImpulse";
// for (int i = QCPGraph::lsNone; i <= QCPGraph::lsImpulse; ++i)
// {
// customPlot->addGraph();
// pen.setColor(QColor(qSin(i*1+1.2)*80+80, qSin(i*0.3+0)*80+80, qSin(i*0.3+1.5)*80+80));
// customPlot->graph()->setPen(pen); // 设置图表的画笔
// customPlot->graph()->setName(lineNames.at(i-QCPGraph::lsNone));
// customPlot->graph()->setLineStyle((QCPGraph::LineStyle)i); // 设置图表线段的风格
// customPlot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 5)); // 设置图表散点图的样式
// QVector<double> x(15), y(15);
// for (int j=0; j<15; ++j)
// {
// x[j] = j/15.0 * 5*3.14 + 0.01;
// y[j] = 7*qSin(x[j])/x[j] - (i-QCPGraph::lsNone)*5 + (QCPGraph::lsImpulse)*5 + 2;
// }
// customPlot->graph()->setData(x, y);
// customPlot->graph()->rescaleAxes(true);
// }
// // 放大一点
// customPlot->yAxis->scaleRange(1.1, customPlot->yAxis->range().center());
// customPlot->xAxis->scaleRange(1.1, customPlot->xAxis->range().center());
// customPlot->xAxis->setTicks(true);
// customPlot->yAxis->setTicks(true);
// customPlot->xAxis->setTickLabels(true);
// customPlot->yAxis->setTickLabels(true);
// customPlot->axisRect()->setupFullAxesBox();
}
void FormDraw::setupSelectionDemo(QMyCustomPlot *customPlot)
{
//setupLineStyleDemo(customPlot);
customPlot->setInteractions(QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables | QCP::iMultiSelect); // 轴、图例、图表可以被选择,并且是多选的方式
customPlot->setSelectionRectMode(QCP::srmCustom); // 鼠标框选
//customPlot->setSelectionRectMode(QCP::srmSelect); // 鼠标框选
// customPlot->setMultiSelectModifier(Qt::ControlModifier); // 使用ctrl键来多选
// customPlot->xAxis->setSelectableParts(QCPAxis::spAxis | QCPAxis::spAxisLabel | QCPAxis::spTickLabels); // 轴的三个部分都可以被选择
// customPlot->yAxis->setSelectableParts(QCPAxis::spAxis | QCPAxis::spAxisLabel | QCPAxis::spTickLabels);
// customPlot->xAxis->setLabel("xAxis");
// customPlot->yAxis->setLabel("yAxis");
// customPlot->legend->setSelectableParts(QCPLegend::spItems); // 图例本身不能被选择,只有里面的项可以被选择
// customPlot->legend->setSelectedIconBorderPen(Qt::NoPen); // 设置图例里的项被选择时不显示Icon的边框
//选框黑色虚线
//customPlot->selectionRect()->setPen(QPen(Qt::black,1,Qt::DashLine));
//customPlot->selectionRect()->setBrush(QBrush(QColor(0,0,100,50)));
//
// QPen pen(Qt::NoPen); // 使用无画笔,这样就不会有边框了
// QBrush brush(Qt::transparent); // 使用透明刷子,这样就不会有填充颜色了
// customPlot->selectionRect()->setPen(pen); // 设置选择区域的画笔为无画笔
// customPlot->selectionRect()->setBrush(brush); // 设置选择区域的刷子为透明刷子
for (int i=0; i < customPlot->graphCount(); ++i) {
QCPGraph *graph = customPlot->graph(i);
graph->setSelectable(QCP::stDataRange);
}
//connect(customPlot->selectionRect(), SIGNAL(accepted(QRect, QMouseEvent*)), this, SLOT(s_selectionRectAccepted(QRect, QMouseEvent*)));
connect(customPlot->selectionRect(), &QCPSelectionRect::accepted, [customPlot](){
if(customPlot->m_bDrawRect == false)
{
customPlot->m_bDrawRect = true;
return;
}
// 当选择完成时,获取矩形范围并放大
QRectF rect = customPlot->selectionRect()->rect(); // 获取选择的矩形区域(像素坐标)
// 转换为坐标轴范围
double top = rect.top();
double bottom = rect.bottom();
double right_Hight = customPlot->xAxis->pixelToCoord(top);
double left_Low = customPlot->xAxis->pixelToCoord(bottom);
if(right_Hight-left_Low>5)
{
//添加图形
//emit CallManage::getInstance()->sig_addImageToPlot(customPlot, left_Low, right_Hight, ":/image/file.png");
customPlot->addImageToPlot(left_Low, right_Hight, ":/image/file.png");
}
});
// 连接QCustomPlot的信号selectionChangedByUser表明是由鼠标点击进行的选择
// 这里主要就是同步图表和图例的显示
connect(customPlot, &QMyCustomPlot::selectionChangedByUser, [customPlot](){
for (int i=0; i < customPlot->graphCount(); ++i) {
QCPGraph *graph = customPlot->graph(i);
QCPPlottableLegendItem *item = customPlot->legend->itemWithPlottable(graph);
if (item->selected() && !graph->selected())
{
graph->setSelection(QCPDataSelection(graph->data()->dataRange())); // 当图例项被选择时,选择图表全部的数据
}
else if (graph->selected())
{
item->setSelected(true);
QCPDataSelection selection = customPlot->graph(i)->selection();
// 遍历选中的数据范围
for (int j = 0; j < selection.dataRangeCount(); ++j)
{
QCPDataRange dataRange = selection.dataRange(j);
double left_Low = customPlot->graph(i)->data()->at(dataRange.begin())->key;
double right_Hight = customPlot->graph(i)->data()->at(dataRange.end())->key;
if(right_Hight-left_Low>1)
{
//添加图形
//emit CallManage::getInstance()->sig_addImageToPlot(customPlot, left_Low, right_Hight, ":/image/file.png");
customPlot->addImageToPlot(left_Low, right_Hight, ":/image/file.png");
}
}
/*QCPDataSelection selection = customPlot->graph(i)->selection();
// 遍历选中的数据范围
for (int j = 0; j < selection.dataRangeCount(); ++j)
{
QCPDataRange dataRange = selection.dataRange(j);
// 遍历选中范围内的数据点
for (int k = dataRange.begin(); k < dataRange.end(); ++k)
{
double key = customPlot->graph(i)->data()->at(k)->key;
double value = customPlot->graph(i)->data()->at(k)->value;
AppendConsole(PAI_INFO, QString("曲线 %1: (%2, %3)").arg(i).arg(key).arg(value));
}
}*/
}
}
});
}
void FormDraw::s_selectionRectAccepted(const QRect &rect, QMouseEvent *event)
{
// 转换为坐标轴范围
// double x1 = widget->xAxis->pixelToCoord(rect.left());
// double x2 = widget->xAxis->pixelToCoord(rect.right());
// double y1 = widget->yAxis->pixelToCoord(rect.top());
// double y2 = widget->yAxis->pixelToCoord(rect.bottom());
}
void FormDraw::s_addGanZuangTu(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
////////////////////////////////////////
m_Value=NULL;
m_Value2=NULL;
m_Value3=NULL;
//m_csUnit = "(°)";
m_bTableData=0;//表格或曲线
m_LeftVal2=0;
m_RightVal2=360;
//m_csCurveDDIR="DDIR";
//m_csCurveDANG="DANG";
//m_csCurveGrad="GRAD";
m_nTailWidth=2;
m_crTail=qRgb(0,0,0);
m_crPointFill=qRgb(0,0,0);
m_crGridSmall=qRgb(100,100,100);
m_nRadius = 6;
m_nTailLen = 10;
m_nCircleWidth=1;
m_flGrad1 = 10;
m_flGrad2 = 50;
//Table dip
m_qsTable="FRAC_HOLE.TABLE";
m_qsDIR=("DIR"); // 方位 曲线名
m_qsDIP=("DIPorS");//倾角
m_qsDepth="DEP";
m_qsID = "ID";
m_qsProperty=("ID");
m_iPrecision = 3;
//读数据
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
this->ReadData(strSlfName, m_csCurveDDIR, 0, &m_Curve);
this->ReadData(strSlfName, m_csCurveDANG, 1, &m_Curve2);
this->ReadData(strSlfName, m_csCurveGrad, 2, &m_Curve3);
curv->yAxis->setTickLabels(true);
curv->yAxis->setTickLabelSide(QCPAxis::lsInside);
QFont font1("微软雅黑", 16); //fontSize 10
curv->yAxis->setTickLabelFont(font1);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
// curv->xAxis->ticker()->setTickCount(10);//x个主刻度
// curv->yAxis->ticker()->setTickCount(60);//y个主刻度
int iMyWidth = curv->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
curv->m_iX1 = vmin;
curv->m_iX2 = iMyWidth;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis;
curv->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
curv->xAxis->setTicks(false);
curv->yAxis->setTicks(false);
curv->xAxis2->setTicks(false);
curv->yAxis2->setTicks(false);
//蝌蚪图
// curv->mKedou = true;
//隐藏网格
// curv->xAxis->grid()->setVisible(false);
// curv->yAxis->grid()->setVisible(false);
DrawStck(curv);
//道-对象
QString strAliasName = "杆状图";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "ganzhuangtuObject");
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
m_listLineName.push_back(strLineName);
}
void FormDraw::s_addJykt(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
//井眼垮塌矢量图
DrawJykt(curv, strSlfName);
//道-对象
QString strAliasName = "井眼垮塌矢量图";
QString strUnit = "(°)";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "JyktObject");
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listLineName.push_back(strLineName);
}
void FormDraw::s_addDenv(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
//井斜方位图
DrawDenv(curv, strSlfName);
//道-对象
QString strAliasName = "井斜方位图";
QString strUnit = "(°)";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "DenvObject");
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listLineName.push_back(strLineName);
}
void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
//QRect rect = this->rect();
//curv->setGeometry(rect.left(),rect.top(), rect.width(), rect.height());
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
//curv->setMaximumHeight((int)dHight);
//curv->setViewport(QRect(0, 0, g_iOneWidth, (int)dHight));//7500-3184
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
//curv->resize(INT_MAX, INT_MAX); // 使用 INT_MAX 来避免16位整数的限制
// QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// curv->setSizePolicy(policy);
curv->show();
//图像 成像
QString strWaveName = "";
int _nSamples = 0;
DrawImageNew_NoFilter(curv, strSlfName, strWaveName, _nSamples);
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listLineName.push_back(strLineName);
QString strAliasName = "成图";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "DrawImageObject");
}
//斜井三图一表
FormLine* FormDraw::s_addSantuyibiao(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return NULL;
}
if(m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return NULL;
}
//
FormLine *curv = new FormLine(this, strSlfName, strWellName, strTrackName, strLineName);
curv->m_strUuid = m_strUuid;
//背景设置成透明色
// curv->setBackground(Qt::transparent);
// curv->setStyleSheet("background: transparent;");
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth*4, (int)dHight);
curv->show();
//斜井三图一表
QString strWaveName = "";
int _nSamples = 0;
curv->DrawTvd();
// //
// connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
QString strAliasName = "斜井三图一表";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "SantuyibiaoObject");
emit CallManage::getInstance()->sig_ChangeTvdProperty(m_strUuid, m_strSlfName, m_strWellName, m_strTrackName, "Santuyibiao",
(QObject *)(curv->m_drawTvd));
return curv;
}
//裂痕
void FormDraw::s_addCrack(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
//-------------------
m_LeftVal = 0;
m_RightVal = 360;
int iMyWidth = curv->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
curv->m_iX1 = vmin;
curv->m_iX2 = vmax;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
// //对调XY轴在最前面设置
// QCPAxis *yAxis = curv->yAxis;
// QCPAxis *xAxis = curv->xAxis;
// curv->xAxis = yAxis;
// curv->yAxis = xAxis;
//裂缝
QString strWaveName = "FRAC_HOLE.TABLE";
//注意不对调XY轴
curv->m_bX2Y = false;
CPickFrac *pickFrac = new CPickFrac(curv, strSlfName, strWaveName, iMyWidth);
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
QString strAliasName = "裂缝描述";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "CrackObject");
}
//气测/FMT/射孔/文本
void FormDraw::s_addJiegutext(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW, QStringList listOtherProperty)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
//-------------------
int iMyWidth = curv->axisRect(0)->width();
m_LeftVal = 0;
m_RightVal = iMyWidth;
float vmax = iMyWidth;
float vmin = 0;
curv->m_iX1 = vmin;
curv->m_iX2 = vmax;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis;
curv->yAxis = xAxis;
//隐藏刻度
curv->xAxis->setTicks(false);
curv->yAxis->setTicks(false);
curv->xAxis2->setTicks(false);
curv->yAxis2->setTicks(false);
QColor newlineColor=QColor(0,0,0);
QString strAliasName = "气测-FMT-射孔-文本";
//QString strAliasName = "SDEP/EDEP";
// if(objTextResult->iMaxNum > 0)
// {
// strAliasName = "";
// for(int i=0; i<objTextResult->iMaxNum; i++)
// {
// if(i>0)
// {
// strAliasName += "/";
// }
// strAliasName += objTextResult->m_FieldNameList[i];
// }
// }
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
//气测/FMT/射孔/文本
//strLineName = "WELL_XSCGB";
//QString strWaveName = "GASLOG";
curv->LoadFromSLF_Jiegutext(strSlfName, strLineName, strAliasName);
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "JiegutextObject", listOtherProperty);
//设置所有title供用户选择
FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, strWellName, strTrackName, strLineName);
if (pInfo == NULL)
{
return;
}
pInfo->m_FieldNameList.clear();
pInfo->m_FieldNameList.append(curv->m_FieldNameList);
}
//沉积相
void FormDraw::s_addLogface(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW, QStringList listOtherProperty)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
//-------------------
int iMyWidth = curv->axisRect(0)->width();
m_LeftVal = 0;
m_RightVal = iMyWidth;
float vmax = iMyWidth;
float vmin = 0;
curv->m_iX1 = vmin;
curv->m_iX2 = vmax;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis;
curv->yAxis = xAxis;
if(listOtherProperty.size()>=6)
{
//
if(listOtherProperty[3]=="DrawFac")
{
curv->m_bDrawFac = true;
}
else
{
curv->m_bDrawFac = false;
}
//
if(listOtherProperty[4]=="DrawPhase")
{
curv->m_bDrawPhase = true;
}
else
{
curv->m_bDrawPhase = false;
}
//
if(listOtherProperty[5]=="DrawMFacName")
{
curv->m_bDrawMFacName = true;
}
else
{
curv->m_bDrawMFacName = false;
}
}
//沉积相
//QString strWaveName = "LITHA";
curv->LoadFromSLF_Fac(strSlfName, strLineName);
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
QString strAliasName = "沉积相";
QColor newlineColor=QColor(0,0,0);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "LogfaceObject", listOtherProperty);
}
//多臂井径
void FormDraw::s_addMCals(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
//-------------------
int iMyWidth = curv->axisRect(0)->width();
m_LeftVal = 0;
m_RightVal = iMyWidth;
float vmax = iMyWidth;
float vmin = 0;
curv->m_iX1 = vmin;
curv->m_iX2 = vmax;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis;
curv->yAxis = xAxis;
//多臂井径
QString strWaveName = "FCA2";
CDrawNrad *drawNrad = new CDrawNrad(curv, strSlfName, strWaveName);
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listLineName.push_back(strLineName);
QString strAliasName = "多臂井径";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "MCalsObject");
}
//套管组件
void FormDraw::s_addTubingstring(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW, QStringList listOtherProperty)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listTableName.contains(strLineName))
{
qDebug() << "FormDraw strLineName already exist! " << strLineName;
return;
}
//
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
//绑定m_formTrack方便关联formInfo
curv->m_formTrack = m_formTrack;
curv->m_strUuid = m_strUuid;
//背景设置成透明色
curv->setBackground(Qt::transparent);
curv->setStyleSheet("background: transparent;");
//
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
if(g_iShow==1)
{
//显示刻度
dHight = dHight+30;
}
qDebug() << "FormDraw dHight=" << QString::number((int)dHight);
if(dHight>32767)
{
dHight = 32767;
}
curv->setGeometry(0, 0, g_iOneWidth, (int)dHight);//7500-3184
curv->show();
//-------------------
int iMyWidth = curv->m_OutD_Tubing; //暂时按照套管外径 //curv->axisRect(0)->width();
//
if(listOtherProperty.size()>=16)
{
//
if(listOtherProperty[6]=="DrawStruct")
{
curv->m_bDrawStruct_Tubing = true;
}
else
{
curv->m_bDrawStruct_Tubing = false;
}
//
if(listOtherProperty[7]=="DrawTubing")
{
curv->m_bDrawTubing_Tubing = true;
}
else
{
curv->m_bDrawTubing_Tubing = false;
}
//
if(listOtherProperty[8]=="DrawTools")
{
curv->m_bDrawTools_Tubing = true;
}
else
{
curv->m_bDrawTools_Tubing = false;
}
//
if(listOtherProperty[9]=="DrawSPTool")
{
curv->m_bDrawSPTool_Tubing = true;
}
else
{
curv->m_bDrawSPTool_Tubing = false;
}
//
if(listOtherProperty[10]=="DrawCCL")
{
curv->m_bDrawCCL_Tubing = true;
}
else
{
curv->m_bDrawCCL_Tubing = false;
}
//
curv->m_Oguan_Tubing = listOtherProperty[11].toDouble();
curv->m_inD_Tubing = listOtherProperty[12].toDouble();
curv->m_OutD_Tubing = listOtherProperty[13].toDouble();
//
iMyWidth = listOtherProperty[13].toDouble();
// m_LeftVal = listOtherProperty[14].toDouble();
// m_RightVal = listOtherProperty[15].toDouble();
//
// vmin = m_LeftVal;
// vmax = m_RightVal;
}
//
float vmin = 0;
float vmax = iMyWidth;
//
m_LeftVal = 0;
m_RightVal = iMyWidth;
//
curv->m_iX1 = vmin;
curv->m_iX2 = vmax;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(vmin, vmax);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
//
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis;
curv->yAxis = xAxis;
//隐藏刻度
curv->xAxis->setTicks(false);
curv->yAxis->setTicks(false);
curv->xAxis2->setTicks(false);
curv->yAxis2->setTicks(false);
//套管组件
//QString strWaveName = "TUBTOOLS";
curv->LoadFromSLF_Tubing(strSlfName, strLineName);
// //先画图,再改变左右刻度
// curv->m_iX1 = m_LeftVal;
// curv->m_iX2 = m_RightVal;
// curv->yAxis->setRange(curv->m_iX1, curv->m_iX2);
// curv->replot();
//
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
//
m_listTableName.push_back(strLineName);
QString strAliasName = "套管组件";
QColor newlineColor=QColor(0,0,0);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "mm";
if(listOtherProperty.size()>=14)
{
strUnit = listOtherProperty[3];
}
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "TubingstringObject", listOtherProperty);
}
void FormDraw::initForm(QMyCustomPlot *widget, QString strSlfName, QString strLineName,
double newLeftScale, double newRightScale, QString strScaleType, QColor lineColor, double width, Qt::PenStyle lineStyle, QStringList listOtherProperty)
{
//AppendConsole(PAI_INFO, "FormDraw initForm");
CLogIO *logio=new CLogIO();
logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead);
//
int index=logio->OpenCurve(strLineName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
Slf_CURVE curveinfo;
float *val;
DWORD count;
float sdep,edep,rlev;
float vmax,vmin;
//
logio->GetCurveInfo(index,&curveinfo);
sdep=curveinfo.StartDepth;
edep=curveinfo.EndDepth;
rlev=curveinfo.DepLevel;
//
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;
QString strAliasName="";
QString strUnit="";
if(listOtherProperty.size()>=2)
{
strAliasName=listOtherProperty[0];
strUnit=listOtherProperty[1];
}
else
{
bool bFind = getAliasNameFromIni(strLineName, strAliasName, strUnit);//曲线别名
if(!bFind)
{
strAliasName=strLineName;
}
}
bool bDrawLine = true; // 曲线
bool bDrawGan = false; // 杆状
bool bDrawPoint = false; // 点状
bool bDrawSymmetry = false; // 绘制对称曲线
QCPScatterStyle::ScatterShape pointStyle=QCPScatterStyle::ssCircle;//数据点,符号类型,圆,三角等
if(listOtherProperty.size()>=8)
{
if(listOtherProperty[3]=="DrawLine")
{
bDrawLine = true;
}
else
{
bDrawLine = false;
}
//
if(listOtherProperty[4]=="DrawGan")
{
bDrawGan = true;
}
else
{
bDrawGan = false;
}
//
if(listOtherProperty[5]=="DrawPoint")
{
bDrawPoint = true;
}
else
{
bDrawPoint = false;
}
//
if(listOtherProperty[6]=="DrawSymmetry")
{
bDrawSymmetry = true;
}
else
{
bDrawSymmetry = false;
}
//
pointStyle = (QCPScatterStyle::ScatterShape)listOtherProperty[7].toInt();
}
//最大值,最小值
bool bFistValue=false;
vmax = -9999;//(float)_nSamples;
vmin = -9999;
//slf文件读取曲线
QVector<double> x, y;
for(int i=0; i<count; i++)
{
if(newLeftScale==-9999)
{
if(val[i]==-9999)
{
continue;
}
if(bFistValue==false)
{
//最大值,最小值默认采用第一个有效值
bFistValue=true;
vmax = vmin = val[i];
}
if(vmax<val[i])vmax=val[i];
if(vmin>val[i])vmin=val[i];
}
//
x.append(-(sdep+ rlev*i));
y.append(val[i]);
}
if(newLeftScale!=-9999)
{
vmax = newRightScale;
vmin = newLeftScale;
}
//赋值
m_vmax = vmax;
m_vmin = vmin;
//AppendConsole(PAI_INFO, "FormDraw initForm ReadCurve end");
widget->setInteractions(QCP::iSelectLegend | QCP::iSelectPlottables);
//框选-----
// widget->setInteraction(QCP::iRangeDrag, false); // 关闭拖动
// widget->setSelectionRectMode(QCP::SelectionRectMode::srmSelect); // 启用框选放大
// //
// widget->selectionRect()->setPen(QPen(Qt::black, 1, Qt::DashLine)); // 虚线边框
// widget->selectionRect()->setBrush(QBrush(QColor(0,0,100,50))); // 半透明蓝色填充
// //
// QCPSelectionRect *selectionRect = new QCPSelectionRect(widget);
// connect(selectionRect, &QCPSelectionRect::accepted, [=]() {
// // 当选择完成时,获取矩形范围并放大
// QRectF rect = selectionRect->rect(); // 获取选择的矩形区域(像素坐标)
// // 转换为坐标轴范围
// double x1 = widget->xAxis->pixelToCoord(rect.left());
// double x2 = widget->xAxis->pixelToCoord(rect.right());
// double y1 = widget->yAxis->pixelToCoord(rect.top());
// double y2 = widget->yAxis->pixelToCoord(rect.bottom());
// });
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
//
if(strScaleType=="对数")
{
widget->yAxis->setScaleType(QCPAxis::stLogarithmic);
}
else //if(m_strScaleType=="线性")
{
widget->yAxis->setScaleType(QCPAxis::stLinear);
}
// 加入曲线列表
m_vecCurv << widget;
if (m_formTrack == NULL)
return;
if(newLeftScale!=-9999)
{
widget->m_bDrawLine = bDrawLine;
widget->m_bDrawGan = bDrawGan;
widget->m_bDrawPoint = bDrawPoint;
widget->m_bDrawSymmetry = bDrawSymmetry;
widget->m_pointStyle = pointStyle;
addRandomGraph(widget, x, y, strSlfName, strLineName, strAliasName, strUnit,
newLeftScale, newRightScale, strScaleType, lineColor, width, lineStyle, listOtherProperty);
}
else {
addRandomGraph(widget, x, y, strSlfName, strLineName, strAliasName, strUnit);
}
//支持框选
//setupSelectionDemo(widget);
//AppendConsole(PAI_INFO, "FormDraw setupSelectionDemo end");
//widget->rescaleAxes();
//widget->replot();//屏蔽,缩减时间
//AppendConsole(PAI_INFO, "FormDraw initForm end");
}
void FormDraw::initWave_3D(QMyCustomPlot *widget, QString strSlfName, QString strWaveName, int &_nSamples)
{
CLogIO *logio=new CLogIO();
logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeRead);
//
int index=logio->OpenWave(strWaveName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
Slf_WAVE _wave;
logio->GetWaveInfo(index, &_wave);
float _SDep,_EDep,_Rlev;
_SDep = _wave.StartDepth;
_EDep = _wave.EndDepth;
// _SDep = 0.0 - m_iY2;
// _EDep = 0.0 - m_iY1;
_Rlev = _wave.DepLevel;
int m_Record=(float)(fabs((_EDep-_SDep)/_Rlev+0.5));
_nSamples = _wave.TimeSamples;
char *value=new char[(_nSamples+1)*m_Record*_wave.CodeLen+1];
logio->ReadWave(index,_SDep,m_Record,(void *)value);
logio->CloseWave(index);
delete logio;
bool bFistValue=false;
float vmax = -9999;//(float)_nSamples;
float vmin = -9999;
//
double** wavedata;
wavedata = new double*[_nSamples];
for(int kk = 0;kk<_nSamples;kk++){
wavedata[kk] = new double[m_Record];
}
for (int i=0; i<m_Record; i++)
{
for(int kk = 0;kk<_nSamples;kk++)
{
double val = GetData(_wave.RepCode,(char *)&value[(kk)*_wave.CodeLen+i*_nSamples*_wave.CodeLen]);
wavedata[kk][i] = val;
if(val==-9999)
{
continue;
}
if(bFistValue==false)
{
//最大值,最小值默认采用第一个有效值
bFistValue=true;
vmax = vmin = val;
}
//
if(vmax<val)vmax=val;
if(vmin>val)vmin=val;
}
}
delete[] value;
// vmax = (float)_nSamples;
// vmin = 0;
// m_iY1 = 0.0 -_EDep;
// m_iY2 = 0.0 -_SDep;
//------------------------
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
//
// 横向点数,全部绘制
int nPoint = _nSamples;
nPoint = nPoint / 2;
// 初始化
float *flSin,*flCos;
QPointF *pt;
flSin = new float[_nSamples+1];
flCos = new float[_nSamples+1];
pt = new QPointF[_nSamples+1];
//
float m_flWjMaxFactor=0.6; //外径最大位置占道的比例
int iMyWidth = widget->axisRect(0)->width();
// 最大外径宽度
float r = m_flWjMaxFactor*(iMyWidth-0)/2;
//
float centerX = (iMyWidth+0)/2.0;
float angle = 3.0*3.1415926/2.0;
float xspeed = (3.1415926/(nPoint-1)); // 半圆
float x=-r;
float m_flVFactor = 0.5;
float centerY = 0;
float y;
for (int j=0;j<nPoint; j++)
{
// 第一种方法:按角度平均分配,图像中间部分有些不真实
//x = sin(angle) * r;
//y = cos(angle) * r*m_flVFactor;
//方法2 :按横向等间距分配,图像边缘部分不太好
// flCos[j] = cos(angle);
// flSin[j] = sin(angle);
y = cos(angle)*r*m_flVFactor;
pt[j].setX(centerX + x);
pt[j].setY(centerY + y);
angle += xspeed;
x += (float)(r*2./(nPoint-1.));
}
//
// 最大外径宽度
float *fl_x_Coord = new float[_nSamples+1];
float r_Coord = m_flWjMaxFactor*(_nSamples-0)/2;
float centerX_Coord = (_nSamples+0)/2.0;
float x_Coord=-r_Coord;
for (int j=0;j<nPoint; j++)
{
fl_x_Coord[j] = (centerX + x_Coord);
x_Coord += (float)(r_Coord*2./(nPoint-1.));
}
//---------------------------------
//转换新值
double** wavedataNew;
wavedataNew = new double*[_nSamples];
for(int kk = 0;kk<_nSamples;kk++){
wavedataNew[kk] = new double[m_Record];
}
//初始化
for (int i=0; i<m_Record; i++)
{
for(int kk = 0;kk<_nSamples;kk++)
{
wavedataNew[kk][i] = vmin;
}
}
for (int i = 0; i < m_Record ; i++)
{
int d=1;
for (int j=0; j<nPoint-d; j+=d)
{
float tempValue = -(_SDep + _Rlev*i);
double lY1 = fl_x_Coord[j]; //
double lY2 = fl_x_Coord[j+d]; //
//double lY1 = widget->yAxis->pixelToCoord(pt[j].x()); //+10 fl_x_Coord[j]; //
//double lY2 = widget->yAxis->pixelToCoord(pt[j+d].x()); //fl_x_Coord[j+d]; //
double left_Low = widget->xAxis->pixelToCoord( widget->xAxis->coordToPixel(tempValue)+pt[j].y());// + widget->xAxis->pixelToCoord(pt[j].y());
double right_Hight = widget->xAxis->pixelToCoord( widget->xAxis->coordToPixel(tempValue + _Rlev)+pt[j+1].y());// + widget->xAxis->pixelToCoord(pt[j+1].y());
int kkPos = (lY1+lY2)/2;
int iPos = fabs(left_Low + right_Hight + 2*_SDep)/(2*_Rlev);
if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
{
}
else
{
wavedataNew[kkPos][iPos] = wavedata[j][i];
}
//--------------
kkPos = lY1;
iPos = fabs(left_Low + _SDep)/_Rlev;
if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
{
qDebug() << "kkPos=" << QString::number(kkPos) << ",iPos=" << QString::number(iPos) << "j=" << QString::number(j) << ",i=" << QString::number(i);
}
else
{
wavedataNew[kkPos][iPos] = wavedata[j][i];
//qDebug() << "kkPos=" << QString::number(kkPos) << ",iPos=" << QString::number(iPos) << "j=" << QString::number(j) << ",i=" << QString::number(i) << ",wavedata[j][i]=" << QString::number(wavedata[j][i]);
}
//--------
kkPos = lY2;
iPos = fabs(right_Hight + _SDep)/_Rlev;
if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
{
qDebug() << "kkPos=" << QString::number(kkPos) << ",iPos=" << QString::number(iPos) << "j=" << QString::number(j) << ",i=" << QString::number(i);
}
else
{
wavedataNew[kkPos][iPos] = wavedata[j][i];
//qDebug() << "kkPos=" << QString::number(kkPos) << ",iPos=" << QString::number(iPos) << "j=" << QString::number(j) << ",i=" << QString::number(i) << ",wavedata[j][i]=" << QString::number(wavedata[j][i]);
}
// //----
// kkPos = pt[j].x()+0.5;
// iPos = i+pt[j].y();
// if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
// {
// }
// else
// {
// wavedataNew[kkPos][iPos] = wavedata[j][i];
// }
// //----
// kkPos = pt[j].x()-0.5;
// iPos = i+pt[j].y();
// if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
// {
// }
// else
// {
// wavedataNew[kkPos][iPos] = wavedata[j][i];
// }
// //----
// kkPos = pt[j].x();
// iPos = i+pt[j].y()+0.5;
// if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
// {
// }
// else
// {
// wavedataNew[kkPos][iPos] = wavedata[j][i];
// }
// //----
// kkPos = pt[j].x();
// iPos = i+pt[j].y()-0.5;
// if(kkPos>=_nSamples || kkPos<0 || iPos>=m_Record || iPos<0)
// {
// }
// else
// {
// wavedataNew[kkPos][iPos] = wavedata[j][i];
// }
}
}
//-------------------
// set up the QCPColorMap:
QCPColorMap *colorMap = new QCPColorMap(widget->xAxis, widget->yAxis);
int nx = m_Record;
int ny = _nSamples;
colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点
//colorMap->data()->setRange(QCPRange(m_iY1, m_iY2), QCPRange(vmin, vmax)); // 并在键x和值y维上跨越坐标范围-4..4
colorMap->data()->setRange(QCPRange(0-_EDep, 0-_SDep), QCPRange(vmin, vmax));
// 现在我们通过访问颜色贴图的QCPColorMapData实例来分配一些数据
//double x, y, z;
for (int xIndex=0; xIndex<nx; ++xIndex)
{
for (int yIndex=0; yIndex<ny; ++yIndex)
{
if(wavedataNew[yIndex][xIndex]==-9999)
{
colorMap->data()->setCell(nx-xIndex-1, yIndex, vmin);
continue;
}
//colorMap->data()->setCell(xIndex, yIndex, wavedata[yIndex][xIndex]);
colorMap->data()->setCell(nx-xIndex-1, yIndex, wavedataNew[yIndex][xIndex]);
}
}
// 添加色标:
QCPColorScale *colorScale = new QCPColorScale(widget);
colorMap->setColorScale(colorScale); // 将颜色图与色标关联
// 将颜色贴图的“颜色渐变”设置为其中一个预设
//colorMap->setGradient(QCPColorGradient::gpPolar);//gpJet);
// 我们还可以创建一个QCPColorGradient实例并向其中添加自己的颜色
// 渐变请参阅QCPColorGradient的文档以获取可能的效果.
int nIndex=11;
QVector<MyColorItem> colorList;
bool inpolation = true;
int iColorNum = getSystemColor(nIndex, colorList, inpolation);
//
QCPColorGradient gradient;
for(int i=0; i<iColorNum; i++)
{
double dbTmpIndex=(double)(i+1)/iColorNum;
gradient.setColorStopAt(dbTmpIndex, colorList[i].color); // x% 位置的颜色
}
colorMap->setGradient(gradient);
// 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内:
colorMap->rescaleDataRange();
}
// 搜索所有配色方案名
int FormDraw::getColorConfig(QVector <QString> &qFiles)
{
char str[256],*buffer;
int i,nRet=0;
QString qstr;
QByteArray ba;
//GetBinDir(str);
qstr = QCoreApplication::applicationDirPath();//QString(QLatin1String(str)); //char*=>QString
qstr+="\\color\\colorConfig.list";
qFiles.clear();
QFile f(qstr);
if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
//cout << "Open failed." << endl;
return 0;
}
QTextStream txtInput(&f);
qstr = txtInput.readLine();
//QString==>char *
ba = qstr.toLatin1(); // must
buffer=ba.data();
sscanf(buffer,"%d",&nRet);
for (i=0;i<nRet;i++)
{
qstr = txtInput.readLine();
qFiles.append(qstr);
}
f.close();
return nRet;
}
void FormDraw::DrawImageNew_NoFilter(QMyCustomPlot *widget, QString strSlfName, QString &strWaveName, int &_nSamples)
{
if(strSlfName.isEmpty()) return;
if(strWaveName=="" || strWaveName=="AC") strWaveName="DYNIMAGE";
//
CLogIO *logio=new CLogIO();
logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeRead);
//
int index=logio->OpenWave(strWaveName.toStdString().c_str());
if(index<0) {
delete logio;
return;
}
Slf_WAVE _wave;
logio->GetWaveInfo(index, &_wave);
float _SDep,_EDep,_Rlev;
_SDep = _wave.StartDepth;
_EDep = _wave.EndDepth;
// _SDep = 0.0 - m_iY2;
// _EDep = 0.0 - m_iY1;
_Rlev = _wave.DepLevel;
int m_Record=(float)(fabs((_EDep-_SDep)/_Rlev+0.5));
_nSamples = _wave.TimeSamples;
char *value=new char[(_nSamples+1)*m_Record*_wave.CodeLen+1];
logio->ReadWave(index,_SDep,m_Record,(void *)value);
logio->CloseWave(index);
delete logio;
bool bFistValue=false;
float vmax = -9999;//(float)_nSamples;
float vmin = -9999;
//
double** wavedata;
wavedata = new double*[_nSamples];
for(int kk = 0;kk<_nSamples;kk++){
wavedata[kk] = new double[m_Record];
}
for (int i=0; i<m_Record; i++)
{
for(int kk = 0;kk<_nSamples;kk++)
{
double val = GetData(_wave.RepCode,(char *)&value[(kk)*_wave.CodeLen+i*_nSamples*_wave.CodeLen]);
wavedata[kk][i] = val;
if(val==-9999)
{
continue;
}
if(bFistValue==false)
{
//最大值,最小值默认采用第一个有效值
bFistValue=true;
vmax = vmin = val;
}
//
if(vmax<val)vmax=val;
if(vmin>val)vmin=val;
}
}
delete[] value;
// m_iY1 = 0.0 -_EDep;
// m_iY2 = 0.0 -_SDep;
//------------------------
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
//-------------------
// set up the QCPColorMap:
QCPColorMap *colorMap = new QCPColorMap(widget->xAxis, widget->yAxis);
int nx = m_Record;
int ny = _nSamples;
colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点
//colorMap->data()->setRange(QCPRange(m_iY1, m_iY2), QCPRange(vmin, vmax)); // 并在键x和值y维上跨越坐标范围-4..4
colorMap->data()->setRange(QCPRange(0-_EDep, 0-_SDep), QCPRange(vmin, vmax));
// 现在我们通过访问颜色贴图的QCPColorMapData实例来分配一些数据
double x, y, z;
for (int xIndex=0; xIndex<nx; ++xIndex)
{
for (int yIndex=0; yIndex<ny; ++yIndex)
{
if(wavedata[yIndex][xIndex]==-9999)
{
colorMap->data()->setCell(nx-xIndex-1, yIndex, vmin);
continue;
}
//colorMap->data()->setCell(xIndex, yIndex, wavedata[yIndex][xIndex]);
colorMap->data()->setCell(nx-xIndex-1, yIndex, wavedata[yIndex][xIndex]);
}
}
// 添加色标:
QCPColorScale *colorScale = new QCPColorScale(widget);
colorMap->setColorScale(colorScale); // 将颜色图与色标关联
// 将颜色贴图的“颜色渐变”设置为其中一个预设
//colorMap->setGradient(QCPColorGradient::gpPolar);//gpJet);
// 我们还可以创建一个QCPColorGradient实例并向其中添加自己的颜色
// 渐变请参阅QCPColorGradient的文档以获取可能的效果.
// int nIndex=11;
// QVector<MyColorItem> colorList;
// bool inpolation = true;
// int iColorNum = getSystemColor(nIndex, colorList, inpolation);
// //
// QCPColorGradient gradient;
// for(int i=0; i<iColorNum; i++)
// {
// double dbTmpIndex=(double)(i+1)/iColorNum;
// gradient.setColorStopAt(dbTmpIndex, colorList[i].color); // x% 位置的颜色
// }
// colorMap->setGradient(gradient);
QVector <QString> m_qvFiles;
int n=getColorConfig(m_qvFiles);
if(n<=0)return;
//获取配色方案
int nIndex=0;
CGradient m_GraInfo;
m_GraInfo.Serialize(m_qvFiles[nIndex]);
//获取颜色数组
int iColorNum = 256;
COLORREF pColorArr[256];
m_GraInfo.GetColorArray(pColorArr);
//
QCPColorGradient gradient;
for(int i=0; i<iColorNum; i++)
{
double dbTmpIndex=(double)(i+1)/iColorNum;
QColor color(pColorArr[i]);
gradient.setColorStopAt(dbTmpIndex, color); // x% 位置的颜色
}
colorMap->setGradient(gradient);
// 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内:
colorMap->rescaleDataRange();
//----调色板--------
// widget->plotLayout()->addElement(0, 1, colorScale); // 将其添加到主轴矩形的右侧
// colorScale->setType(QCPAxis::atRight); // 刻度应为垂直条,刻度线/坐标轴标签右侧(实际上,右侧已经是默认值)
// colorScale->axis()->setLabel("Magnetic Field Strength");
// //确保轴rect和色标同步其底边距和顶边距以便它们对齐:
// QCPMarginGroup *marginGroup = new QCPMarginGroup(widget);
// widget->axisRect()->setMarginGroup(QCP::msBottom|QCP::msTop, marginGroup);
// colorScale->setMarginGroup(QCP::msBottom|QCP::msTop, marginGroup);
// 重新缩放键x和值y以便可以看到整个颜色图
//widget->rescaleAxes();
}
//表格曲线
void FormDraw::initTableLine(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
m_Value=NULL;
m_Value2=NULL;
m_Value3=NULL;
//m_csUnit = "(°)";
m_bTableData=0;//表格或曲线
m_LeftVal2=0;
m_RightVal2=360;
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
m_nTailWidth=2;
m_crTail=qRgb(0,0,0);
m_crPointFill=qRgb(0,0,0);
m_crGridSmall=qRgb(100,100,100);
m_nRadius = 6;
m_nTailLen = 10;
m_nCircleWidth=1;
m_flGrad1 = 10;
m_flGrad2 = 50;
//Table dip
m_qsTable="FRAC_HOLE.TABLE";
m_qsDIR=("DIR"); // 方位 曲线名
m_qsDIP=("DIPorS");//倾角
m_qsDepth="DEP";
m_qsID = "ID";
m_qsProperty=("ID");
m_iPrecision = 3;
//
// ReadFracDef();
// for (int i = 0 ; i < iFracType ; i++)
// {
// m_bTypeDraw[i] = true;
// }
if (m_bTableData)
{
//
m_qsDIR=("DDIR"); // 方位 曲线名
m_qsDIP=("DANG");//倾角
m_qsDepth="DEPT";
m_qsID = "ID";
ReadData(strSlfName, strLineName);
//------------------------
// int nPointNum = m_FracTabList.count();
// if ( nPointNum < 1 )return ;
// FRAC_TABLE frac = m_FracTabList.at(0);
}
else
{
//
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
this->ReadData(strSlfName, m_csCurveDDIR, 0, &m_Curve);
this->ReadData(strSlfName, m_csCurveDANG, 1, &m_Curve2);
this->ReadData(strSlfName, m_csCurveGrad, 2, &m_Curve3);
}
// bool bFistValue=false;
// float vmax = -9999;
// float vmin = -9999;
// //最大值,最小值
// vmax=vmin=frac.DIR;
// //slf文件读取曲线
// for(int i=0; i<nPointNum; i++)
// {
// frac = m_FracTabList.at(i);
// if(frac.DIR==-9999)
// {
// continue;
// }
// if(bFistValue==false)
// {
// //最大值,最小值默认采用第一个有效值
// bFistValue=true;
// vmax = vmin = frac.DIR;
// }
// if(vmax<frac.DIR)vmax=frac.DIR;
// if(vmin>frac.DIR)vmin=frac.DIR;
// }
// widget->m_iX1 = vmin;
// widget->m_iX2 = vmax;
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
if (m_bTableData)
{
DrawTabDip(widget);
}
else
{
DrawDip(widget);
}
QString strAliasName = "";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject");
}
void FormDraw::initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
widget->LoadFromSLF_Text(strSlfName, strLineName);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty);
}
void FormDraw::initLayer(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//地质层位道
widget->LoadFromSLF_Layer(strSlfName, strLineName);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty);
}
void FormDraw::initIMAGE_DATA(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
LoadFromIMAGE_SLF(widget, strSlfName, strLineName);
//显示文本
QString strAliasName = "岩心图片";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject");//yanxinImageObject
}
bool FormDraw::LoadFromIMAGE_SLF(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
{
QString ss=strSlfName;
CMemRdWt *logio=new CMemRdWt();
if(ss==""||!logio->Open(ss.toStdString().c_str(),CSlfIO::modeRead))
{
delete logio;
// QMessageBox::information(NULL,"提示","SLF文件打开失败请检查",QMessageBox::Yes);
return false;
}
int iIndex=logio->OpenTable(strLineName.toStdString().c_str());
if(iIndex>-1) {
int len=logio->GetTableRecordLength(iIndex);
if(len<sizeof(IMAGE_DATA)) len=sizeof(IMAGE_DATA);
char*buf=new char[len+1];
IMAGE_DATA *m_Result=(IMAGE_DATA *)buf;
int count=logio->GetTableRecordCount(iIndex);
for(int i=0;i<count;i++) {
memset(m_Result,0,sizeof(IMAGE_DATA));
logio->ReadTable(iIndex,i+1,m_Result);
// WelllogItem* item=AddItem(m_Result->StartDepth,m_Result->EndDepth);
// if(!item) continue;
// OGWordsResultItem* pResult = dynamic_cast<OGWordsResultItem*>(item);
//logio->GetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),m_Result->Image,i+1);
// SetCharacters(m_Result->Words);
// fontColor=QColor(0,0,0,255);
// backgroundColor=QColor(255,255,255,255);
// wordfont.setFamily("黑体");
// wordfont.setPointSize(10);
//显示图片Image
QString filename=QString::fromLocal8Bit(m_Result->Image);
int pos=filename.lastIndexOf("\\");
int pos1=filename.lastIndexOf("/");
if(pos1>pos) pos=pos1;
if(filename.lastIndexOf(".")>-1) {
int aa=filename.lastIndexOf(".");
if(aa<pos) {
filename="";
}
}
widget->addImageToPlot(-m_Result->EndDepth, -m_Result->StartDepth, filename, static_cast<double>(m_Result->Left), static_cast<double>(m_Result->Width));
}
logio->CloseTable(iIndex);
delete buf;
}
delete logio;
}
return true;
}
//解释结论
void FormDraw::initResult(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(true);
widget->yAxis->setTicks(true);
widget->xAxis2->setTicks(true);
widget->yAxis2->setTicks(true);
widget->xAxis->setTickLabels(true);
widget->yAxis->setTickLabels(true);
widget->xAxis2->setTickLabels(true);
widget->xAxis2->setTickLabels(true);
//
LoadFromSLF_Result(widget, strSlfName, strLineName);
QString strAliasName = "";
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject");
}
bool FormDraw::LoadFromSLF_Result(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
static bool isrun=false;
CMemRdWt *logio=new CMemRdWt();
if(!logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeRead))
{
delete logio;
isrun=false;
return false;
}
int iIndex=logio->OpenTable(strLineName.toStdString().c_str());
if(iIndex>-1) {
int len = logio->GetTableRecordLength(iIndex);
int sl = sizeof(LAYER_DATA);
if(sl>len) len=sl;
LAYER_DATA *m_Result,*m_Result1;
int count=logio->GetTableRecordCount(iIndex);
char *pstr=new char[len*count+1];
memset(pstr,0,len*count);
int zone=1;
for(int i=0;i<count;i++) {
m_Result=(LAYER_DATA *)(pstr+i*len);
logio->ReadTable(iIndex,i+1,m_Result);
if(!i) zone=atoi(m_Result->Zone);
}
QString strGroupUuid = "";
for(int i=0;i<count;i++)
{
m_Result=(LAYER_DATA *)(pstr+i*len);
if(m_Result->StartDepth==m_Result->EndDepth) continue;
QString strZone = QString::number(atoi(m_Result->Zone));
// 设置解释结论终止深度
TransparentGroupResult* pGroup = widget->addResultGroup(-m_Result->EndDepth, -m_Result->StartDepth, strGroupUuid, strZone);
pGroup->addAllResultToPlot(m_Result);
}
logio->CloseTable(iIndex);
delete pstr;
}
delete logio;
isrun=false;
return true;
}
//录井剖面
void FormDraw::initGeoLith(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//含油占比
if(listOtherProperty.size()>=12)
{
widget->m_dOilZhan = listOtherProperty[5].toDouble();
//
if(listOtherProperty[6]=="LithColor")
{
widget->m_bLithColor = true;
}
else
{
widget->m_bLithColor = false;
}
//
if(listOtherProperty[7]=="LithOne")
{
widget->m_bLithOne = true;
}
else
{
widget->m_bLithOne = false;
}
//
if(listOtherProperty[8]=="ShowOil")
{
widget->m_bShowOil = true;
}
else
{
widget->m_bShowOil = false;
}
//
if(listOtherProperty[9]=="CenterOil")
{
widget->m_bCenterOil = true;
}
else
{
widget->m_bCenterOil = false;
}
//
if(listOtherProperty[10]=="ShowColor")
{
widget->m_bShowColor = true;
}
else
{
widget->m_bShowColor = false;
}
//
if(listOtherProperty[11]=="ShowColorNum")
{
widget->m_bShowColorNum = true;
}
else
{
widget->m_bShowColorNum = false;
}
}
//加载
widget->LoadFromSLF_GeoLith(strSlfName, strLineName);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty);
}
//井壁取心
void FormDraw::initSwallCore(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
widget->LoadFromSLF_SwallCore(strSlfName, strLineName);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty);
}
//固井结论
void FormDraw::initGujing(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
widget->m_iX1 = vmin;
widget->m_iX2 = iMyWidth;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
m_LeftVal = 0;
m_RightVal = 90;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
widget->LoadFromSLF_Gujing(strSlfName, strLineName);
if(listOtherProperty.size()>=3)
{
strAliasName = listOtherProperty[0];
newlineColor.setNamedColor(listOtherProperty[1]);
}
QString strUnit = "";
double width=2;
QString strScaleType = "";
//道-对象
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty);
}
void FormDraw::initDepth(QMyCustomPlot *curv)
{
// x轴隐藏
curv->xAxis->setTicks(false);
curv->xAxis->setSubTicks(false);
curv->xAxis->setTickLabels(false);
curv->yAxis->setTickLabels(true);
curv->yAxis->setTickLabelSide(QCPAxis::lsInside);
QFont font1("微软雅黑", 8);
curv->yAxis->setTickLabelFont(font1);
curv->yAxis->setRange(m_iY1, m_iY2);
curv->axisRect()->setupFullAxesBox();
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
curv->m_bX2Y = false;
}
void FormDraw::initFgrq(QMyCustomPlot *widget)
{
widget->m_iX1 = 0;
widget->m_iX2 = 1024;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(widget->m_iX1, widget->m_iX2);
widget->yAxis->setRange(m_iY1, m_iY2);
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
// if(m_Value == NULL)
{
m_bTableData = false; // 表格 曲线
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
m_qsTable="FRAC_HOLE.TABLE";
m_qsDIR=("DDIR"); // 方位 曲线名
m_qsDIP=("DANG");//倾角
m_qsDepth="DEPT";
m_qsID = "ID";
Refurbish();
}
double nR = 50;
QPen wPen(Qt::black, 2);
double centerX = widget->m_iX2/2;
float flVal = 0.0f;
float x,y,x1,y1,x2,y2;
float ifdir[360];
int m_nArc = 36;
float m_LeftVal3 = 0;
float m_RightVal3 = 100.0;
m_LeftVal = 0.0f;
m_RightVal = 90.0f;
float mind=min(m_RightVal , m_LeftVal);
float maxd=max(m_RightVal , m_LeftVal);
float dirmax,dipmax,dr;
float deps;
float ftmpSdep = m_SDep;
float ftmpEdep = m_EDep;
if (m_bTableData)
{
ReadFracDef();
for (int i = 0 ; i < iFracType ; i++)
{
m_bTypeDraw[i] = true;
}
ftmpSdep = -m_iY2;
ftmpEdep = -m_iY1;
}
int nPointNum = m_FracTabList.count();
int n = m_FracDefList.count();
int nstep = 5;
int tmp = ftmpSdep / nstep;
float flDep = tmp * nstep;
m_Curve.DepLevel = 0.5;
while ( 1)
{
if((flDep>=ftmpEdep+nstep)||flDep>=ftmpEdep)break;
double tempf = flDep+(float)(nstep)/2.;
double centerY = tempf * -1.0;
QCPItemEllipse* pEse = new QCPItemEllipse(widget);
pEse->setPen(wPen);
pEse->m_bCustom = true;
pEse->m_nRadius = nR;
pEse->topLeft->setCoords(centerY, centerX);
pEse->bottomRight->setCoords(centerY, centerX);
for(int k = 0; k < 4; k++)
{
QCPItemLine* pLine1 = new QCPItemLine(widget);
pLine1->m_bCustom = true;
pLine1->m_dr = qDegreesToRadians(k*90.0);
pLine1->m_nRadius = 0;
pLine1->m_nTailLen=nR;
pLine1->setPen(wPen);
pLine1->start->setCoords(centerY,centerX);
pLine1->end->setCoords(centerY,centerX);
}
for(int i=0;i<=m_nArc;i++) ifdir[i]=0.;
x1 = 360./m_nArc;
int i = 0;
if (m_bTableData)
{
int m_nLine = 9;
y1 = (maxd-mind)/m_nLine;//线数
for (i=0; i<nPointNum; i++)
{
const FRAC_TABLE& frac = m_FracTabList.at(i);
if ( frac.DEP < 0 ) continue;
bool bDraw = false;
for (int j=0; j<n; j++)
{
const FRAC_DEF& fd = m_FracDefList.at(j);
if ( (int)(frac.ID) == fd.iCode )
{
bDraw = m_bTypeDraw[j];//fd.bDraw;
break;
}
}
if ( !bDraw ) continue;
deps =frac.DEP;
if ( deps >= flDep &&deps < (flDep+ nstep) )
{
flVal = frac.DIR;//方位
int j = flVal/x1;
if ( j >= 0 && j< m_nArc+1 )
ifdir[j] ++;
flVal = frac.DIPorS;//倾角
//按倾角范围统计
if(flVal> maxd || flVal < mind)
{
//i++;
continue;
}
// j = (flVal-mind)/y1;//j = flVal/y1+1;
// if ( j >= 0 && j< m_nLine+1 )
// ifdir[j] ++;
}
}
}
else
{
while ( 1 )
{
deps = flDep + i * m_Curve.DepLevel;
tempf = (deps-m_Curve.StartDepth)/m_Curve.DepLevel+0.5;
if (deps >= ftmpEdep||
deps > m_Curve.EndDepth||
deps >=( flDep + nstep))
break;
if(tempf<0)
{
i++;
continue;
}
if (m_Value3 !=NULL )// for 控制曲线
{
float tempf3 = (deps-m_Curve3.StartDepth)/m_Curve3.DepLevel+0.5;
if(tempf3<0)
{
i++;
continue;
}
double grad = GetData(m_Curve3.RepCode,(char *)&m_Value3[(int)(tempf3)*m_Curve3.CodeLen]);
if(grad<m_LeftVal3||grad>m_RightVal3){i++;continue;}
}
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[(int)(tempf)*m_Curve.CodeLen]);
flVal=fmod(flVal,360.f);
int j = flVal/x1;
if ( j >= 0 && j< m_nArc+1 )
ifdir[j] ++;
tempf = (deps-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(tempf<0 )
{
i++;
continue;
}
//按倾角范围统计
if(flVal> maxd || flVal < mind)
{
i++;
continue;
}
i ++;
}
}
flVal = 3.1415926535 *2./ m_nArc ;
dirmax=0; dipmax=0;
for(i=0;i<=m_nArc;i++)
if (dirmax<ifdir[i]) dirmax=ifdir[i];
if (dirmax == 0 )
dirmax=1;
for(i=0;i<=m_nArc;i++)
ifdir[i]=ifdir[i]*(nR)/dirmax;//-m_nArcLineWidth/2.whp add 2016.10.21 for线粗时扇叶超界
// ifdir[i]=ifdir[i]*(nRadius-GetLineWidth(pDC,m_nArcLineWidth/2.))/dirmax;//-m_nArcLineWidth/2.whp add 2016.10.21 for线粗时扇叶超界
ifdir[m_nArc+1]=ifdir[1];
//方位频率
float x0,y0;
x = centerY;
y = centerX;
for(int i=0;i<=m_nArc;i++)
{
if(ifdir[i] <= 0.0f)
continue;
QCPItemPolygon* pol = new QCPItemPolygon(widget);
pol->topLeft->setCoords(x, y);
pol->bottomRight->setCoords(x, y);
// pol->setPloyVal(i,flVal, ifdir[i]);
float dr=i*flVal;
float x1 = ifdir[i]*sin(dr);
float y1 = ifdir[i]*cos(dr);
dr=(i+1)*flVal;
float x2 = ifdir[i]*sin(dr);
float y2 = ifdir[i]*cos(dr);
QPolygonF myPolygon;
myPolygon << QPointF(0, 0);
myPolygon << QPointF(x1, y1);
myPolygon << QPointF(x2, y2);
myPolygon << QPointF(0, 0);
pol->setPoints(myPolygon);
// QCPItemRect* prt = new QCPItemRect(widget);
// prt->topLeft->setCoords(x, y);
// prt->bottomRight->setCoords(x, y);
// if(m_bFill)
// {
// QPainterPath myPath;
// myPath.addPolygon(myPolygon);
// pDC->fillPath(myPath,textBrushFill);
// }
// if(m_nArcLineWidth>=1)
// {
// pDC->setPen(pPenArc);
// // pDC->drawPolygon(myPolygon);
// }
}
flDep += nstep;
}
}
void FormDraw::initRose(QMyCustomPlot *widget)
{
widget->m_iX1 = 0;
widget->m_iX2 = 1024;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(widget->m_iX1, widget->m_iX2);
widget->yAxis->setRange(m_iY1, m_iY2);
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
// if(m_Value == NULL)
{
m_bTableData = false; // 表格 曲线
m_csCurveDDIR = "STRDIR"; // 方位 曲线名
m_csCurveDANG = "CALM";//倾角
m_csCurveGrad = "GRAD";
m_qsTable="FRAC_HOLE.TABLE";
m_qsDIR=("DDIR"); // 方位 曲线名
m_qsDIP=("DANG");//倾角
m_qsDepth="DEPT";
m_qsID = "ID";
Refurbish();
}
double nR = 40;
QPen wPen(Qt::black, 2);
double centerX = widget->m_iX2/2;
float flVal = 0.0f;
float x,y,x1,y1,x2,y2;
float ifdir[360];
int m_nArc = 36;
float m_LeftVal3 = 0;
float m_RightVal3 = 100.0;
m_LeftVal = 0.0f;
m_RightVal = 90.0f;
float mind=min(m_RightVal , m_LeftVal);
float maxd=max(m_RightVal , m_LeftVal);
float dirmax,dipmax,dr;
float deps;
float ftmpSdep = 2890;//m_SDep;
float ftmpEdep = m_EDep;
if (m_bTableData)
{
ReadFracDef();
for (int i = 0 ; i < iFracType ; i++)
{
m_bTypeDraw[i] = true;
}
ftmpSdep = -m_iY2;
ftmpEdep = -m_iY1;
}
int nPointNum = m_FracTabList.count();
int n = m_FracDefList.count();
int nstep = 5;
int tmp = ftmpSdep / nstep;
float flDep = tmp * nstep;
double pi = 3.1415926535;
// 射线
bool m_bGrid = true;
// 井眼垮塌
bool m_bJykt = true;
// 标注
bool m_bHint = true;
int m_nAzimStep = 3;
m_Curve.DepLevel = 0.5;
while ( 1)
{
if((flDep>=ftmpEdep+nstep)||flDep>=ftmpEdep)break;
double tempf = flDep+(float)(nstep)/2.;
double centerY = tempf * -1.0;
wPen.setWidth(2);
wPen.setColor(Qt::black);
QCPItemEllipse* pEse = new QCPItemEllipse(widget);
pEse->setPen(wPen);
pEse->m_bCustom = true;
pEse->m_nRadius = nR;
pEse->topLeft->setCoords(centerY, centerX);
pEse->bottomRight->setCoords(centerY, centerX);
for(int k = 0; k < 4; k++)
{
QCPItemLine* pLine1 = new QCPItemLine(widget);
pLine1->m_bCustom = true;
pLine1->m_dr = qDegreesToRadians(k*90.0);
pLine1->m_nRadius = 0;
pLine1->m_nTailLen=nR;
pLine1->setPen(wPen);
pLine1->start->setCoords(centerY,centerX);
pLine1->end->setCoords(centerY,centerX);
}
// 写标注
if ( m_bHint )
{
int psize = 10;
flVal = m_nAzimStep*360./m_nArc;
for (int i=0 ;i<360; i+=(int)(flVal))
{
QCPItemText* mItemTitle = new QCPItemText(widget);
mItemTitle->position->setCoords(centerY,centerX);
mItemTitle->setText(QString::number(i));
//mItemTitle->setBrush(QBrush(Qt::red));
mItemTitle->setFont(QFont("Arial", 10));
mItemTitle->setColor(Qt::black);
dr = i*2* 3.1415926535/ 360.;
mItemTitle->m_fx = (nR+psize*0.85)*sin(dr);
mItemTitle->m_fy = (nR+psize*0.85)*cos(dr);
mItemTitle->m_bCustom = true;
}
}
if(m_bGrid)
{
wPen.setWidth(1);
double st = 360/m_nArc;
for(int i = 0; i < m_nArc; i++)
{
int ntmp = i % 9;
if(ntmp != 0)
{
QCPItemLine* pLine = new QCPItemLine(widget);
pLine->m_bCustom = true;
pLine->m_dr = qDegreesToRadians(i * st);
pLine->m_nRadius = 0;
pLine->m_nTailLen=nR;
pLine->setPen(wPen);
pLine->start->setCoords(centerY,centerX);
pLine->end->setCoords(centerY,centerX);
}
}
}
for(int i=0;i<=m_nArc;i++) ifdir[i]=0.;
x1 = 360./m_nArc;
int i = 0;
while ( 1 )
{
deps = flDep + i * m_Curve.DepLevel;
tempf = (deps-m_Curve.StartDepth)/m_Curve.DepLevel+0.5;
if (deps >= ftmpEdep||
deps > m_Curve.EndDepth||
deps >=( flDep + nstep))
break;
if(tempf<0)
{
i++;
continue;
}
if (m_Value3 !=NULL )// for 控制曲线
{
float tempf3 = (deps-m_Curve3.StartDepth)/m_Curve3.DepLevel+0.5;
if(tempf3<0)
{
i++;
continue;
}
double grad = GetData(m_Curve3.RepCode,(char *)&m_Value3[(int)(tempf3)*m_Curve3.CodeLen]);
if(grad<m_LeftVal3||grad>m_RightVal3){i++;continue;}
}
if (m_Value2 !=NULL ) // 倾角控制
{
tempf = (deps-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[(int)(tempf)*m_Curve2.CodeLen]);
//按倾角范围统计
if(flVal > maxd || flVal < mind)
{
i++;
continue;
}
}
tempf = (deps-m_Curve.StartDepth)/m_Curve.DepLevel+0.5;
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[(int)(tempf)*m_Curve.CodeLen]);
if(flVal<0)
{
i++;
continue;
}
flVal=fmod(flVal,360.f);
int j = flVal/x1;
if ( j >= 0 && j< m_nArc+1 )
ifdir[j] ++;
i ++;
}
dirmax=0;
int iIndex = -1;
for(i=0;i<=m_nArc;i++)
{
if (dirmax<ifdir[i])
{
iIndex = i;
dirmax=ifdir[i];
}
}
ifdir[m_nArc+1]=ifdir[1];
//没有统计点,不绘制
if (dirmax == 0 ) dirmax=1;
flVal = pi *2./ m_nArc ;
QPolygonF myPolygon;
float oldx, oldy;
for (i=0 ;i<=m_nArc; i++)
{
dr=i*flVal;
float x1 = ifdir[i]*nR*sin(dr)/dirmax;
float y1 = ifdir[i]*nR*cos(dr)/dirmax;
if(oldx != x1 || oldy != y1)
{
myPolygon << QPointF(x1, y1);
oldx = x1;
oldy = y1;
}
if ( i >=m_nArc )
dr=0.;
else
dr=(i+1)*flVal;
dr=(i+1)*flVal;
float x2 = ifdir[i]*nR*sin(dr)/dirmax;
float y2 = ifdir[i]*nR*cos(dr)/dirmax;
if(oldx != x2 || oldy != y2)
{
myPolygon << QPointF(x2, y2);
oldx = x2;
oldy = y2;
}
}
// pt[2*m_nArc+2] = pt[0];
if (iIndex >=0/*&&m_bFill*/ )
{
x = centerY;
y = centerX;
QCPItemPolygon* pol = new QCPItemPolygon(widget);
pol->topLeft->setCoords(x, y);
pol->bottomRight->setCoords(x, y);
pol->setPoints(myPolygon);
pol->setBrushColor(QColor(255,170,0));
}
myPolygon.clear();
tempf = m_nArc/2.;
for (i=0 ;i<=m_nArc; i++)
{
dr=i*flVal;
dr = dr-tempf*flVal;
float x1 = ifdir[i]*nR*sin(dr)/dirmax;
float y1 = ifdir[i]*nR*cos(dr)/dirmax;
if(oldx != x1 || oldy != y1)
{
myPolygon << QPointF(x1, y1);
oldx = x1;
oldy = y1;
}
if ( i >=m_nArc )
dr=0.;
else
dr=(i+1)*flVal;
dr = dr-tempf*flVal;
float x2 = ifdir[i]*nR*sin(dr)/dirmax;
float y2 = ifdir[i]*nR*cos(dr)/dirmax;
if(oldx != x2 || oldy != y2)
{
myPolygon << QPointF(x2, y2);
oldx = x2;
oldy = y2;
}
}
if (iIndex >=0/*&&m_bFill*/ )
{
x = centerY;
y = centerX;
QCPItemPolygon* pol = new QCPItemPolygon(widget);
pol->topLeft->setCoords(x, y);
pol->bottomRight->setCoords(x, y);
pol->setPoints(myPolygon);
pol->setBrushColor(QColor(255,170,0));
}
if ( m_bJykt && iIndex >=0 )
{
// 绘制垮塌方向
dr=iIndex*flVal;
dr = dr-pi/2;//9*flVal;
x1 = ifdir[iIndex]*nR*sin(dr)/dirmax;
y1 = ifdir[iIndex]*nR*cos(dr)/dirmax;
dr=iIndex*flVal;
dr = dr+pi/2;
x2 = ifdir[iIndex]*nR*sin(dr)/dirmax;
y2 = ifdir[iIndex]*nR*cos(dr)/dirmax;
wPen.setWidth(2);
wPen.setColor(QColor(0,85,255));
this->addQCPItemLine(widget, centerY,centerX, QPointF(x1, y1), QPointF(x2, y2), wPen);
dr=iIndex*flVal;
float x3 = 0.1*ifdir[iIndex]*nR*sin(dr)/dirmax;
float y3 = 0.1*ifdir[iIndex]*nR*cos(dr)/dirmax;
this->addQCPItemLine(widget, centerY,centerX, QPointF(x1, y1), QPointF(x3, y3), wPen);
this->addQCPItemLine(widget, centerY,centerX, QPointF(x3, y3), QPointF(x2, y2), wPen);
dr=iIndex*flVal;
dr = dr-pi;//18*flVal;//m1_nArc*flVal/2;
x3 = 0.1*ifdir[iIndex]*nR*sin(dr)/dirmax;
y3 = 0.1*ifdir[iIndex]*nR*cos(dr)/dirmax;
this->addQCPItemLine(widget, centerY,centerX, QPointF(x1, y1), QPointF(x3, y3), wPen);
this->addQCPItemLine(widget, centerY,centerX, QPointF(x3, y3), QPointF(x2, y2), wPen);
}
flDep += nstep;
}
}
void FormDraw::addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen)
{
QPolygonF myPolygon;
myPolygon << p1;
myPolygon << p2;
QCPItemLine* pLine = new QCPItemLine(widget);
pLine->setPen(wPen);
pLine->start->setCoords(cx,cy);
pLine->end->setCoords(cx,cy);
pLine->setPoints(myPolygon);
}
void FormDraw::initDCA(QMyCustomPlot *widget)
{
widget->m_iX1 = 0;
widget->m_iX2 = 360;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(widget->m_iX1, widget->m_iX2);
widget->yAxis->setRange(m_iY1, m_iY2);
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
CMemRdWt mrw;
m_PointNum = 0 ;
float *DCA,*AZIX_DCA;
DWORD m_nSamples = 0;
float m_flRlev2 = 0.0f;
if ( mrw.Open(m_strSlfName.toStdString().c_str()) ) // 打开井文件
{
QString m_csCurveFd=("DCA"); // 方位/倾角 曲线名
int iIndex = mrw.OpenWave(m_csCurveFd.toStdString().c_str());
if (iIndex >= 0)
{
Slf_WAVE WaveInfo;
mrw.GetWaveInfo(iIndex,&WaveInfo);
m_SDep = WaveInfo.StartDepth;
m_EDep = WaveInfo.EndDepth;
m_Rlev = WaveInfo.DepLevel;
m_nSamples = WaveInfo.TimeSamples;
m_flRlev2 = WaveInfo.TimeLevel;
if(m_flRlev2<=0) m_flRlev2=0.1;
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5));
DCA=new float[(m_PointNum+1)*m_nSamples];
mrw.ReadWave(iIndex,m_SDep,m_PointNum,DCA);
float DCA_MAX=0;
for(DWORD i=0;i<m_PointNum*m_nSamples;i++)if(DCA_MAX<DCA[i])DCA_MAX=DCA[i];
mrw.CloseWave(iIndex);
// DCA_Mes.Format(("%s曲线信息\r\n\r\n顶深%f\r\n底深%f\r\n深度间隔%f\r\n样本点数%d\r\n元素个数%d\r\n最大异常值%f"),m_csCurveFw,m_SDep,m_EDep,m_Rlev,m_PointNum,m_nSamples,DCA_MAX);
//mFillMes->ItemNum=m_nSamples;
//----------------------------
}
QString m_csCurveFw=("AZIX_DCA"); // 方位/倾角 曲线名
//AZIX_DCA
iIndex = mrw.OpenWave(m_csCurveFw.toStdString().c_str());
if (iIndex >= 0)
{
Slf_WAVE WaveInfo;
mrw.GetWaveInfo(iIndex,&WaveInfo);
m_SDep = WaveInfo.StartDepth;
m_EDep = WaveInfo.EndDepth;
m_Rlev = WaveInfo.DepLevel;
m_nSamples = WaveInfo.TimeSamples;
m_flRlev2 = WaveInfo.TimeLevel;
if(m_flRlev2<=0) m_flRlev2=0.1;
m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5));
AZIX_DCA=new float[(m_PointNum+1)*m_nSamples];
mrw.ReadWave(iIndex,m_SDep,m_PointNum,AZIX_DCA);
mrw.CloseWave(iIndex);
// AZIX_DCA_Mes.Format(("%s曲线信息\r\n\r\n顶深%f\r\n底深%f\r\n深度间隔%f\r\n样本点数%d\r\n元素个数%d"),m_csCurveFd,m_SDep,m_EDep,m_Rlev,m_PointNum,m_nSamples);
//----------------------------
}
mrw.Close(); //关闭井文件
}
// 计算显示深度
float sdepc,edepc;
sdepc = -m_iY2;
edepc = -m_iY1;
if ( sdepc > m_EDep ) sdepc=m_EDep;
if ( edepc > m_EDep ) edepc = m_EDep;
if(edepc<sdepc) edepc=sdepc;
float m_PlotSdep=sdepc;
float m_PlotEdep=edepc;
m_LeftVal = 0;
m_RightVal = 360;
float m_Amp = 5000;
QColor m_crFill[4];
m_crFill[0] = QColor(qRgb(255,0,0));
m_crFill[1] = QColor(qRgb(0,255,0));
m_crFill[2]= QColor(qRgb(0,0,255));
m_crFill[3]= QColor(qRgb(0,0,0));
// float mOffset =m_MoveDep/m_Rlev;
// 绘制
// QRectF wrt;
int dep=0;
// float detp=m_PlotSdep;
// 分配内存
int nPointNum=(edepc+-sdepc)/m_Rlev+0.5;
if(nPointNum<1) return;
QPointF *points,*points1;
points = new QPointF[2*nPointNum+1];
points1 = new QPointF[nPointNum+10];
QPen pPen,pPen_PAD;
// pPen = QPen(m_crCurve,m_nCurveLineWidth);
// //pPen.setColor();
// pDC->setPen(pPen);
// pDC->setRenderHint(QPainter::Antialiasing, true);
// float scale = (m_RightVal-m_LeftVal)/ rt.width();
float scale1 = m_Amp/ widget->m_iX2;
//计算坐标
float x,x1,y=9999999.0;
int e0=(sdepc-m_SDep)/m_Rlev+0.5;
if(sdepc<m_SDep)e0=(sdepc-m_SDep)/m_Rlev-0.5;
for(int npad=0;npad<m_nSamples;npad++)
{
int e=0;
int npoint=0;
float dep=sdepc;
// edepc+=fabs(m_MoveDep);
while(dep<=edepc-m_Rlev)
{
e=(dep-m_SDep)/m_Rlev+0.5;
y = dep * -1.0f;//mrt.top() + (dep-m_PlotSdep)*flDepthScale;
// if(y<mrt.top()) y=mrt.top();
dep=(e+1)*m_Rlev+m_SDep;
if(e<0) continue;
/*if(m_MoveDep&&dep>m_MoveSdep&&dep<m_MoveEdep)
{
e+=mOffset;
if(e<0) e=0;
if(e*m_Rlev+m_SDep>m_EDep) e=(m_EDep-m_SDep)/m_Rlev;
}*/
//方位
float val=AZIX_DCA[e*m_nSamples+npad];
if(val<0)val+=360.;
else if(val>360.)val-=360;
// if(val<=m_LeftVal)x=rt.left();
// else if(val>=m_RightVal)x=rt.right();
// else x = ComputeCurvePos(val,m_LeftVal,0,rt.left(),0,0,scale);
x = val;
points[npoint].setX(x);
points[npoint].setY(y+0.5);
//异常幅度
val=DCA[e*m_nSamples+npad];
if(val<=0)x1=0;
else if(val>=m_Amp)x1=widget->m_iX2;
else
{
x1 = ComputeCurvePos(val,0,m_Amp, 0, 0,0,scale1);
}
float ix=x1+x;
if(ix>widget->m_iX2)ix=widget->m_iX2;
points1[npoint].setX(ix);
points1[npoint].setY(y+0.5);
//if(!m_IsFill)//连线
{
if(val>0)
{
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->setPen(QPen(m_crFill[npad],1));
qcpItemLine->start->setCoords(points[npoint].y(), points[npoint].x());//圆心位置
qcpItemLine->end->setCoords(points1[npoint].y(),points1[npoint].x());//圆心位置
}
}
npoint++;
}
QCPGraph * pgra = widget->graph(npad);
if(pgra == NULL)
{
pgra = widget->addGraph();
pgra->setPen(QPen(Qt::black,1));
}
QVector<double> vx;
QVector<double> vy;
for (int k = 0 ; k < npoint-1 ; k++)
{
vx << points[k].y();
vy << points[k].x();
}
pgra->setData(vx, vy);
for(int i=0;i<npoint;i++)
{
points[npoint+i]=points1[npoint-1-i];
}
}
}
float FormDraw::ComputeCurvePos(float flVal, float lsc, float rsc, float lps, float rps, int iType, float scale, float flMin, float flMax)
{
float x;
{
x = lps+(flVal-lsc)/scale;
}
if (x < flMin) {
x = flMin;
}
if (x > flMax) {
x = flMax;
}
return x;
}
TDTResultItem* FormDraw::LoadTDTResult_SLF(QString strSlfName)
{
CMemRdWt *logio=new CMemRdWt();
if(!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead))
{
delete logio;
return false;
}
QStringList slist;
slist<<"U1_DOT"<<"U2_DOT"<<"U3_DOT"<<"U4_DOT"<<"U5_DOT"<<"U6_DOT"<<"U7_DOT"
<< "D1_DOT"<<"D2_DOT"<<"D3_DOT"<<"D4_DOT"<<"D5_DOT"<<"D6_DOT";
TDTResultItem* pResult = new TDTResultItem();
pResult->FieldNames.resize(slist.size());
for(int k=0;k<slist.size();k++)
{
pResult->FieldNames[k] = slist.at(k);
int iIndex=logio->OpenTDT(slist.at(k).toStdString().c_str());
if(iIndex>-1) {
Slf_TDT Info;
logio->GetTDTInfo(iIndex,&Info);
logio->IsChange=true;
TDT_DATA* pTdt=new TDT_DATA[Info.MaxLogSamples];
unsigned int LogTime;
int n=0;
for(int i=0;i<Info.TotalLogNumber;i++)
{
// if(k&&i>=m_childrenItems.size()) continue;
if(i > 0) continue;
n=logio->ReadTDT(iIndex,i+1, &LogTime,pTdt);
if(pResult->m_topDepth <= 0.0)
{
// double top=*(float*)&LogTime;
// double bottom=*(float*)&LogTime;
pResult->m_topDepth =*(float*)&LogTime;
pResult->m_bottomDepth = pResult->m_topDepth;
}
// TDTResultItem* pResult=dynamic_cast<TDTResultItem*>(k?m_childrenItems[i]:AddItem(top,bottom));
if(pResult) {
pResult->Order=i;
pResult->depth=pTdt[0].Depth;
pResult->Number=*(float*)&LogTime;
QVector<float> CoreValues;
CoreValues.resize(n);
for(int j=0;j<n;j++) CoreValues[j]=pTdt[j].Value;
pResult->CoreValues.append(CoreValues);
QVector<float > ValueTypes;
ValueTypes.resize(n);
for(int j=0;j<n;j++) ValueTypes[j]=pTdt[j].Time;
pResult->ValueTypes.append(ValueTypes);
}
}
logio->CloseTDT(iIndex);
delete pTdt;
}
}
return pResult;
}
void FormDraw::initTDT(QMyCustomPlot *curv)
{
TDTResultItem* pResult = this->LoadTDTResult_SLF(curv->m_strSlfName);
if(pResult == NULL)
return;
// curv->yAxis->setTickLabels(true);
// curv->yAxis->setTickLabelSide(QCPAxis::lsInside);
// QFont font1("微软雅黑", 16); //fontSize 10
// curv->yAxis->setTickLabelFont(font1);
curv->yAxis->setTicks(false);
curv->m_iX1 = 0;
curv->m_iX2 = 400;
curv->m_iY1 = m_iY1;
curv->m_iY2 = m_iY2;
//
curv->xAxis->setRange(curv->m_iX1, curv->m_iX2);
curv->yAxis->setRange(m_iY1, m_iY2);
//
// curv->xAxis->ticker()->setTickCount(10);//x个主刻度
// curv->yAxis->ticker()->setTickCount(60);//y个主刻度
curv->m_bX2Y = false;
//对调XY轴在最前面设置
// QCPAxis *yAxis = curv->yAxis;
// QCPAxis *xAxis = curv->xAxis;
// curv->xAxis = yAxis;
// curv->yAxis = xAxis;
QStringList listColor;
listColor << "#0102FB" << "#017F01" << "#F60100" << "#04007F";
listColor << "#573370" << "#EF9D12" << "#FC05F9" << "#000000";
listColor << "#04FD06" << "#810000" << "#c046ed" << "#028181";
listColor << "#bf0707" << "#7D0380" << "#2024db" << "#5eac60";
float h=8;//m_pViewInfoTDT->GetrHeight();
// h *= g_dPixelPerCm;
float m_LeftVal = 0.0f;
float m_RightVal = 139.7f;
float timemin= 0.0f;
float timemax= 0.0f;
float fdepth = (pResult->m_topDepth+h)*-1;
float fstartX = 40;
float fendX = curv->m_iX2 -20;
bool bDrawLegend = true;
if(true/*m_pViewInfoTDT->GetautoTime()*/)
{
int n=pResult->CoreValues[0].size();
timemin=pResult->ValueTypes[0][0];
timemax=pResult->ValueTypes[0][n-1];
}
float dtime=timemax-timemin;
QPen pen(Qt::gray);
int fnum = 5;
for(int i=0;i<fnum+1;i++)//时间方向/水平方向 // 垂直线
{
float fx = fstartX+(fendX-fstartX)/fnum*i;
QCPItemLine *line = new QCPItemLine(curv);
line->setPen(pen);
line->start->setCoords(fx, fdepth+h);//
line->end->setCoords(fx, fdepth-0.01);//
QCPItemText* text = new QCPItemText(curv);
// text->setPen(pen);
text->position->setCoords(fx, fdepth-0.5);
fx = timemin+(timemax-timemin)/fnum*i;
text->setText(toString(fx));
}
for(int i=0;i<fnum+1;i++) // 水平线
{
float fy = h / 5 * i;
QCPItemLine *line = new QCPItemLine(curv);
line->setPen(pen);
line->start->setCoords(fstartX, fdepth + fy);//
line->end->setCoords(fendX, fdepth + fy);//
QString cs=toString((m_RightVal-m_LeftVal)/fnum*i);
QCPItemText* text = new QCPItemText(curv);
// text->setPen(pen);
text->position->setCoords(22, fdepth+fy);
text->setText(cs);
}
int nField = pResult->FieldNames.size();
float fcenterX = fstartX+(fendX-fstartX)/2;
for(int k=0;k<pResult->CoreValues.size();k++)
{
int n=pResult->CoreValues[k].size();
if(n<1) continue;
QVector<double> vecx;
QVector<double> vecy;
vecx.resize(n);
vecy.resize(n);
int jj=0;
QVector<float> valus;
valus.resize(n+1);
memcpy(&valus[1],&pResult->CoreValues[k][0],sizeof(float)*n);
for(int j=0;j<n;j++)
{
if(pResult->ValueTypes[k][j]<timemin) continue;
if(pResult->ValueTypes[k][j]>timemax) continue;
float yval=(valus[j]-m_LeftVal)/(m_RightVal-m_LeftVal)*h;
vecx[jj]=fstartX + pResult->ValueTypes[k][j]* (fendX-fstartX)/timemax;//((pResult->ValueTypes[k][j]-timemin)/dtime);
if(yval<0) yval=0;
if(yval>h) yval=h;
vecy[jj++]=(fdepth+yval);// + h-yval);
}
QColor clor(QColor(listColor.at(k%listColor.size())));
QCPGraph * graph = curv->graph(k);
if(graph == NULL)
{
graph = curv->addGraph();
graph->setPen(QPen(clor));
}
graph->setData(vecx,vecy);
if(bDrawLegend)
{
int c = k / 3;
int r = k % 3;
QCPItemText* text = new QCPItemText(curv);
text->setColor(clor);
text->position->setCoords(fcenterX + r*60+10, (fdepth+h-0.5)-c*0.7);
text->setText(""+pResult->FieldNames.at(k));
}
}
QString cs = "时间(μs)";
QCPItemText* text = new QCPItemText(curv);
text->position->setCoords(fcenterX, fdepth-1.2);
text->setText(cs);
QString unit1 = "";
cs="Depth,"+toString(pResult->depth,'f',1)+unit1;
text = new QCPItemText(curv);
text->position->setCoords(fcenterX, fdepth-2);
text->setText(cs);
// curv->replot();
}
//岩心实验数据
void FormDraw::initCorePhysics(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
{
float vmax = 100;
float vmin = 0;
// QTimer::singleShot(0, widget, [=]() {
// widget->addCorePhysicsWithParam(0,-2,-2,20);
// });
//赋值
m_vmax = vmax;
m_vmin = vmin;
//----------------------------------
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
// //隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
QVector<double> x, y;
Slf_CORE_PHYSICS *m_pResult=NULL;
CMemRdWt *logio=new CMemRdWt();
if(strSlfName==""||!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead))
{
delete logio;
// QMessageBox::information(NULL,"提示","SLF文件打开失败请检查",QMessageBox::Yes);
return;
}
int iIndex=logio->OpenTable(strLineName.toStdString().c_str());
if(iIndex>-1) {
int FieldNo=0;
int count=logio->GetTableRecordCount(iIndex);
QString FieldName = "AC";
if(!FieldName.isEmpty()) {
static int err=0;
FieldNo=logio->GetTableFieldNo(iIndex,(char *)FieldName.toStdString().c_str());
if(FieldNo<0) {
if(!err)QMessageBox::information(nullptr, "提示", "岩心试验数据模块初始加载数据不成功,因为隐含"+FieldName+"字段在实际数据表中不存在,稍后请您重新选择有效字段!");
err++;
delete logio;
return;
}
else err=0;
}
else {
delete logio;
return;
}
int len=logio->GetTableRecordLength(iIndex);
m_pResult=(Slf_CORE_PHYSICS *)new char[len+1];
char buf[100];
for(int i=0;i<count;i++) {
logio->GetTableFieldData(iIndex,1,buf,i+1);
sscanf(buf,"%f",&m_pResult->Depth);
logio->GetTableFieldData(iIndex,2,buf,i+1);
sscanf(buf,"%f",&m_pResult->CorrDepth);
// logio->ReadTable(iIndex,i+1,m_pResult);
int Order = m_pResult->Order;
float depth = m_pResult->Depth;
float CorrDepth = m_pResult->CorrDepth;
float CoreValue = m_pResult->CoreValue;
logio->GetTableFieldData(iIndex,FieldNo,buf,i+1);
CoreValue=0;
sscanf(buf,"%f",&CoreValue);
//
if(i==0)
{
//最大值,最小值默认采用第一个有效值
//vmax = vmin = CoreValue;
//默认采用0-100范围
if(vmax<CoreValue)vmax=CoreValue;
if(vmin>CoreValue)vmin=CoreValue;
}
else
{
//
if(vmax<CoreValue)vmax=CoreValue;
if(vmin>CoreValue)vmin=CoreValue;
}
//
x.append(-CorrDepth);
y.append(CoreValue);
// 已经加载了slf文件内容 显示界面上
widget->addCorePhysicsWithParam(Order, static_cast<double>(-depth), static_cast<double>(-CorrDepth), static_cast<double>(-CoreValue));
}
logio->CloseTable(iIndex);
delete m_pResult;
}
delete logio;
QString strAliasName = "岩心实验数据";
QString strUnit = "";
// widget->m_bDrawCore_PHYSICS = true;
addRandomGraph(widget, x, y, strSlfName, strLineName, strAliasName, strUnit);
//支持框选------------------
// widget->setSelectionRectMode(QCP::SelectionRectMode::srmSelect);
widget->graph(0)->setSelectable(QCP::SelectionType::stMultipleDataRanges);// stSingleData
widget->setInteractions(QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables | QCP::iMultiSelect); // 轴、图例、图表可以被选择,并且是多选的方式
// widget->setSelectionRectMode(QCP::srmCustom); // 鼠标框选
}
void FormDraw::CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x2,float flHoriRatio)
{
float scale ;
int k;
scale = flWidth[0]=1.;
for(k=1;k<nColumn;k++)
{
flWidth[k] = flWidth[k-1] / factor;
scale += flWidth[k];
}
scale = /*100. **/flHoriRatio*(x2 - x1) / scale;
for(k=0;k<nColumn;k++)
{
flWidth[k] = flWidth[k] * scale;
}
}
void FormDraw::DrawDip(QMyCustomPlot *widget)
{
float flWidth[50];
int l;
float dep;
int m_nScaleThinGrid=10;
// 计算位置
int iMyWidth = widget->axisRect(0)->width();
float x1 = 0;
float x2 = iMyWidth;
float x=0,y=0;
int j=0,i=0,k=0;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
qcpItemLine->point1->setCoords(-m_SDep, dtick);//位置
qcpItemLine->point2->setCoords(-m_EDep, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
QPen pPen(m_crTail,m_nTailWidth);
QBrush cBrushFill(m_crPointFill);
float flDepthScale,tempf,flVal;
int nPointNum=0,tempi;
QRectF rt,rtRect;
float dgtord,dr;
for(int i=0;i<50;i++) flWidth[i]=0;
if(m_Value==0 || m_Value2==0)
{
Refurbish();
}
if ( m_Value==0 || m_Value2==0 )
return ;
dgtord=3.14159265/180.;
CalcDipWidth(9, flWidth, 1.2, 0, iMyWidth, 1);
while ( 1)
{
dep = m_SDep + k * m_Rlev;
if ( dep >m_EDep )
break;
if(dep<m_SDep)
{
k++;
continue;
}
i=(dep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(i<0)
{
k++;
continue;
}
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[i*m_Curve2.CodeLen]);//DANG
if ( flVal > m_RightVal || flVal < m_LeftVal )
{
k++;
continue;
}
tempi = (int)( flVal /10.);
tempf = 0.;
for (j=0; j<tempi; j++)
{
tempf += flWidth[j];
}
x = tempf + (flVal-tempi*10.)*(flWidth[j+1]/10.);
y = -dep;//起始深度
// pDC->setPen(pPen);// [5/22/2019 9:43 hxb]
// rtRect.setLeft(x - GetLineWidth(pDC,m_nRadius));
// rtRect.setRight(x + GetLineWidth(pDC,m_nRadius));
// rtRect.setBottom(y +GetLineWidth(pDC,m_nRadius));
// rtRect.setTop(y -GetLineWidth(pDC,m_nRadius));
// pDC->setPen(PenCircle);
// pDC->drawEllipse(rtRect.center(),m_nRadius,m_nRadius);
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrushFill);//填充圆的颜色
//方位
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[i*m_Curve.CodeLen]);//DDIR
dr=flVal*dgtord;
// // 注意映射方式
// x +=GetLineWidth(pDC,m_nRadius)*sin(dr);
// y -=GetLineWidth(pDC,m_nRadius)*cos(dr);
// float x1=x +GetLineWidth(pDC,m_nTailLen)*sin(dr);
// float y1=y -GetLineWidth(pDC,m_nTailLen)*cos(dr);
// pDC->setPen(pPen);
// pDC->drawLine(QPointF(x,y),QPointF(x1,y1));
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPen);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
//移动对象
// widget->mSizeHandleManager->addItem(qcpItemEllipse, true);
// widget->mSizeHandleManager->addItem(qcpItemLine, true);
k++;
}
}
void FormDraw::DrawJykt(QMyCustomPlot *widget, QString strSlfName)
{
//初始化数据
m_nRadius=4;
m_nTailLen = 8;
m_nCircleLineWidth = 2 ;
m_nTailWidth = 2;
m_flStep = 0.5;
m_nOffset = 90;
m_crTailLine = qRgb(0,0,0);
m_crLine = qRgb(0,0,0);
m_crPointFill = qRgb(0,0,0);
//读取曲线数据
m_csCurveDDIR="STRDIR"; //"DDIR";
m_csCurveCAL="CALM";
this->ReadData(strSlfName, m_csCurveCAL, 0, &m_Curve);
this->ReadData(strSlfName, m_csCurveDDIR, 1, &m_Curve2);
//-------------------
m_LeftVal = 0;
m_RightVal = 10;
float vmax = m_RightVal;
float vmin = m_LeftVal;
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//-------------
float tempf,flVal;
float flDep;
int i,j,iPoint=0,nPointNum=0,tempi;
QRectF rt,rtRect;
float x,y,x1,y1,x2,y2;
float dang,ddir;
float dg,dy;
float dgtord;
float deps;
tempf = (m_EDep - m_SDep)/m_Rlev;
nPointNum = tempf+1;
//
dgtord=3.14159265/180.;
QPen pPenTail = QPen(m_crTailLine, m_nTailWidth);//
QPen pPenCircle = QPen(m_crLine, m_nCircleLineWidth);// add for圆线宽度单独使用
QBrush brush2(m_crPointFill);
// 注意映射方式
float flVal1=0;
if (m_flStep <=0) m_flStep = 0.5;//add for:用户要输入0.5当输入到0时系统已经刷新除0异常 [5/23/2019 16:35 hxb]
for (flDep = m_SDep; flDep < m_EDep; flDep += m_flStep)
{
y = -flDep;//起始深度
// 绘制圆
i=(flDep-m_Curve.StartDepth)/m_Curve.DepLevel+0.5;
if(i<0) continue;
//
j=(flDep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(j<0) continue;
flVal1 = GetData(m_Curve2.RepCode, (char *)&m_Value2[j*m_Curve2.CodeLen]);
//角度小于0不绘制
if ( flVal1 <0)
{
continue;
}
//
flVal = GetData(m_Curve.RepCode, (char *)&m_Value[i*m_Curve.CodeLen]);
x = flVal;
//圆
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPenCircle);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(brush2);//填充圆的颜色
//尾巴
flVal=flVal1;
flVal+=m_nOffset;
if ( flVal >=180.)flVal -= 180;
float dr=flVal*dgtord;
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPenTail);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
//break;
}
}
void FormDraw::DrawDenv(QMyCustomPlot *widget, QString strSlfName)
{
//初始化数据
m_LeftVal2=0;
m_RightVal2=90;
m_csCurveAZIM=("AZIM");
m_csCurveDEVI=("DEVI");
m_nCircleLineWidth = 2 ;
m_nTailWidth=2;
m_TailColor=qRgb(255,0,0);
m_crPointFillDenv=qRgb(0,0,0);
m_crCirCleColor = qRgb(0,0,255);
m_nRadius = 4;
m_nTailLen=8;
m_flStep=1;
//读取曲线数据
this->ReadData(strSlfName, m_csCurveAZIM, 0, &m_Curve);
this->ReadData(strSlfName, m_csCurveDEVI, 1, &m_Curve2);
//-------------------
m_LeftVal = 0;
m_RightVal = 90;
float vmax = m_RightVal;
float vmin = m_LeftVal;
widget->m_iX1 = vmin;
widget->m_iX2 = vmax;
widget->m_iY1 = m_iY1;
widget->m_iY2 = m_iY2;
//
widget->xAxis->setRange(vmin, vmax);
widget->yAxis->setRange(m_iY1, m_iY2);
widget->axisRect()->setupFullAxesBox();
//
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置
QCPAxis *yAxis = widget->yAxis;
QCPAxis *xAxis = widget->xAxis;
widget->xAxis = yAxis;
widget->yAxis = xAxis;
//隐藏刻度
widget->xAxis->setTicks(false);
widget->yAxis->setTicks(false);
widget->xAxis2->setTicks(false);
widget->yAxis2->setTicks(false);
//
QPen pPen(m_TailColor,m_nTailWidth);
QPen pPen2(m_crCirCleColor,m_nCircleLineWidth);
QBrush cBrush(m_crPointFillDenv);
float tempf,flVal;
int i,j,nPointNum=0,tempi;
QRectF rt,rtRect;
float x,y;
float dgtord,dr;
if ( m_Value==0 || m_Value2==0 )
return ;
// 计算显示深度
tempf = (m_EDep - m_SDep)/m_Rlev + 0.5;
nPointNum = tempf+1;
if ( nPointNum <= 1 ) return ;
dgtord=3.14159265/180.;
QBrush brush2(QColor(qRgb(0,0,0)));
{
for (float dep=m_SDep; dep<m_EDep; dep+=m_flStep)
{
i=(dep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(i<0) continue;
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[i*m_Curve2.CodeLen]);
x = flVal;
y = -dep;//起始深度
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPen2);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrush);//填充圆的颜色
//
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[i*m_Curve.CodeLen]);
dr=flVal*dgtord;
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPen);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
}
}
}
void FormDraw::DrawStck(QMyCustomPlot *widget)
{
float flWidth[50];
int l;
float dep;
int m_nScaleThinGrid=10;
float lstk=2;
float dang,ddir;
float dg,dy,dx;
// 计算位置
int iMyWidth = widget->axisRect(0)->width();
float x1 = 0;
float x2 = iMyWidth;
float x=0,y=0;
int j=0,i=0,k=0;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
QPen pPen(m_crTail,m_nTailWidth);
QBrush cBrushFill(m_crPointFill);
float flDepthScale,tempf,flVal;
int nPointNum=0,tempi;
QRectF rt,rtRect;
float dgtord,dr;
for(int i=0;i<50;i++) flWidth[i]=0;
if(m_Value==0 || m_Value2==0)
{
Refurbish();
}
if ( m_Value==0 || m_Value2==0 )
return ;
dgtord=3.14159265/180.;
CalcDipWidth(9, flWidth, 1.2, 0, iMyWidth, 1);
while ( 1)
{
dep = m_SDep + k * m_Rlev;
if ( dep >m_EDep )
break;
if(dep<m_SDep)
{
k++;
continue;
}
i=(dep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(i<0)
{
k++;
continue;
}
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[i*m_Curve2.CodeLen]);//DANG
if ( flVal > m_RightVal || flVal < m_LeftVal )
{
k++;
continue;
}
tempi = (int)( flVal /10.);
tempf = 0.;
for (j=0; j<tempi; j++)
{
tempf += flWidth[j];
}
x =160;//= tempf + (flVal-tempi*10.)*(flWidth[j+1]/10.);
y = -dep;//起始深度
// pDC->setPen(pPen);// [5/22/2019 9:43 hxb]
// rtRect.setLeft(x - GetLineWidth(pDC,m_nRadius));
// rtRect.setRight(x + GetLineWidth(pDC,m_nRadius));
// rtRect.setBottom(y +GetLineWidth(pDC,m_nRadius));
// rtRect.setTop(y -GetLineWidth(pDC,m_nRadius));
// pDC->setPen(PenCircle);
// pDC->drawEllipse(rtRect.center(),m_nRadius,m_nRadius);
// QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
// qcpItemEllipse->setPen(pPen);
// qcpItemEllipse->m_bCustom = true;
// qcpItemEllipse->m_nRadius = m_nRadius;
// qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
// qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
// qcpItemEllipse->setBrush(cBrushFill);//填充圆的颜色
//方位
dang = GetData(m_Curve.RepCode,(char *)&m_Value[i*m_Curve.CodeLen]);//DDIR
dr=dang*dgtord;
//dx=abs(lstk*cos(dr));
// dy=sqrt(lstk*lstk*(1-cos(dr)*cos(dr)));
// // 注意映射方式
// x +=GetLineWidth(pDC,m_nRadius)*sin(dr);
// y -=GetLineWidth(pDC,m_nRadius)*cos(dr);
// float x1=x +GetLineWidth(pDC,m_nTailLen)*sin(dr);
// float y1=y -GetLineWidth(pDC,m_nTailLen)*cos(dr);
// pDC->setPen(pPen);
// pDC->drawLine(QPointF(x,y),QPointF(x1,y1));
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPen);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nSltk; //杆长
qcpItemLine->m_nRadius = 0; //半径
qcpItemLine->m_dr = dr;
QCPItemLine *qcpItemLine1 = new QCPItemLine(widget);
qcpItemLine1->start->setCoords(y, x);//圆心位置
qcpItemLine1->end->setCoords(y, x);//圆心位置
qcpItemLine1->setPen(pPen);
qcpItemLine1->m_bCustom = true;
qcpItemLine1->m_nTailLen = m_nSltk; //杆长
qcpItemLine1->m_nRadius = 0; //半径
qcpItemLine1->m_dr = dr+PI;
//移动对象
// widget->mSizeHandleManager->addItem(qcpItemEllipse, true);
// widget->mSizeHandleManager->addItem(qcpItemLine, true);
k++;
}
}
void FormDraw::DrawTabDip(QMyCustomPlot *widget)
{
float flDepthScale,tempf,flVal;
int i,j,n,nPointNum=0,tempi;
QRectF rt,rtRect;
float x,y;
float dgtord,dr;
float flWidth[50];
FRAC_TABLE frac;
bool bDraw;
FRAC_DEF fd;
//CString cs;
if(m_iPrecision<0) m_iPrecision=0;
nPointNum = m_FracTabList.count();
if ( nPointNum < 1 )return ;
dgtord=3.14159265/180.;
//
m_nCircleWidth = 1;
m_nRadius = 6;
m_crCircle = QColor(0,0,0);
//
m_nTailWidth = 2;
m_nTailLen = 10;
m_crTail = QColor(0,0,0);
int iMyWidth = widget->axisRect(0)->width(); //setSizeConstraintRect()
int iMyHeight = widget->axisRect(0)->height(); //setSizeConstraintRect()
qDebug() << "iMyWidth=" << QString::number(iMyWidth) << ", iMyHeight=" << QString::number(iMyHeight);
//-----------
int l;
float x1 = 0;
float x2 = iMyWidth;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
int m_nScaleThinGrid=10;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
qcpItemLine->point1->setCoords(-m_iY2, dtick);//位置
qcpItemLine->point2->setCoords(-m_iY1, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
CalcDipWidth(9,flWidth, 1.2, 0, iMyWidth, 1.);
n = m_FracDefList.count();
for (i=0; i<nPointNum; i++)
{
frac = m_FracTabList.at(i);
// if ( frac.DEP < -m_iY2 || frac.DEP > -m_iY1)
// {
// continue;
// }
// bDraw = false;
// for (j=0; j<n; j++)
// {
// fd = m_FracDefList.at(j);
// // 裂缝描述表中未保存裂缝名称:
// //比较裂缝名称比较准确,代码更改,如果比较代码会引起不一致性
// if ( (int)(frac.ID) == fd.iCode )
// {
// bDraw = m_bTypeDraw[j];//fd.bDraw;
// break;
// }
// }
//if ( bDraw )
{
QBrush cBrush(fd.crColor);
//圆圈
QPen pPen(m_crCircle);
pPen.setWidth(m_nCircleWidth);
//尾巴
QPen pPenTail(m_crTail);
pPenTail.setWidth(m_nTailWidth);
// 角度
flVal = frac.DIPorS;
tempf = flVal /10.;
tempi = tempf;
x = fmod(flVal,(float)(10.));
if ( x == 0 )
{
tempi=0;//tempi --;
}
tempf = 0.;
for (j=0; j<tempi; j++)
tempf += flWidth[j];
x = tempf+(flVal-tempi*10.)*(flWidth[tempi]/10.);
//x = frac.DIPorS;
y = -frac.DEP;
// int LineWidth = m_nRadius;
// rtRect.setLeft(x - LineWidth);
// rtRect.setRight( x + LineWidth);
// rtRect.setBottom( y + LineWidth);
// rtRect.setTop(y - LineWidth);
// pDC->setPen(pPen);
// pDC->drawEllipse(rtRect.left(),rtRect.top(),rtRect.width(),rtRect.height());
// QPainterPath myPath;
// myPath.addEllipse(rtRect);
// pDC->fillPath(myPath,cBrush);
//CustomEllipse *qcpitemellipse = new CustomEllipse(widget);
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrush);//填充圆的颜色
//方位
dr=frac.DIR *dgtord;
// QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
// qcpItemLine->point1->setCoords(y, x);//圆心位置
// qcpItemLine->point2->setCoords(y, x);//圆心位置
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPenTail);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
//break;
// x += m_nRadius*sin(dr);
// // 注意映射方式
// y -=m_nRadius*cos(dr);
// //pDC->moveto(x,y);
// float x1=x +m_nTailLen*sin(dr);
// // 注意映射方式
// float y1= y-m_nTailLen*cos(dr);
// pDC->setPen(pPenTail);
// pDC->drawLine(x,y,x1,y1);
// if ( m_bDrawValue ) //显示倾角、方位
// {
// rtRect.setTop(rtRect.top()-GetLineWidth(pDC,objViewInfo->GetLogUnitFont().pointSize()));
// rtRect.setBottom(rtRect.bottom()+GetLineWidth(pDC,objViewInfo->GetLogUnitFont().pointSize()));
// QString cs1 = QString::number(frac.DIPorS,'f',m_iPrecision);
// QString cs2 = QString::number(frac.DIR,'f',m_iPrecision);
// cs=cs1+"//"+cs2;
// cs.Replace((" "),"");
// if ( frac.DIPorS >= 30 )
// {
// x = 2.*(float)(GetLineWidth(pDC,m_nRadius));
// rtRect.setRight(rtRect.center().x() - x);
// rtRect.setLeft(mrt.left());
// pDC->drawText(rtRect,Qt::AlignVCenter|Qt::AlignHCenter,cs.GetString());
// }
// else
// {
// x = 2.*(float)(GetLineWidth(pDC,m_nRadius));
// rtRect.setLeft(rtRect.center().x() + x);
// rtRect.setRight(mrt.right());
// pDC->drawText(rtRect,Qt::AlignVCenter,cs.GetString());
// }
// }
}
}
}
//read config file: FRAC.CFG,save info into m_FracDef
void FormDraw::ReadFracDef()
{
m_FracDefList.clear();
FRAC_DEF fd;
//char path[MAX_PATH+1];
char str[512],name[512];
int r,g,b,id;
FILE *fp;
QString qs;
//sprintf(str,"%sconf\\FRAC.CFG",path);
// QString fracFilePath = GetConfPath() + "FRAC_New.CFG";
QString fracFilePath = GetConfPath() + "FRAC.CFG";
fp = fopen(fracFilePath.toStdString().c_str(),"r");
if ( fp !=NULL )
{
fgets(str,256,fp); // 跳过第一行
while (!feof(fp))
{
fgets(str,256,fp);
qs = str; qs.trimmed();
if (qs.length() < 8) break ;
//代码 名称 形状代码(1:正弦曲线 2:连线 3:封闭区域) 颜色(红 绿 蓝) 线宽度
sscanf(str,"%d %s %d %d %d %d %d",&fd.iCode, name, &fd.iType, &r, &g, &b, &fd.nLineWidth);
fd.crColor = QColor(r,g,b);//RGB(r,g,b);
fd.csName = name;
fd.csName = fd.csName.trimmed();//.Trim();
fd.bDraw = 0;
m_FracDefList.append(fd);
if ( feof(fp))
break;
}
fclose(fp);
}
else
{
sprintf(name,"打开裂缝参数配置文件错误:%s!",str);
QMessageBox::information(nullptr, "读取文件失败", name);
}
}
void FormDraw::Refurbish()
{
if (m_bTableData)
{
ReadData(m_strSlfName, "");
}
else
{
this->ReadData(m_strSlfName, m_csCurveDDIR, 0, &m_Curve);
this->ReadData(m_strSlfName, m_csCurveDANG, 1, &m_Curve2);
this->ReadData(m_strSlfName, m_csCurveGrad, 2, &m_Curve3);
}
}
//曲线
//read curve
void FormDraw::ReadData(QString strSlfName, QString strLineName, int iCurve, Slf_CURVE *curve)
{
//
if(strSlfName.isEmpty())
{
return;
}
// 读曲线数值
CMemRdWt mrw;
m_PointNum = 0 ;
if ( iCurve== 0 )
{
if(m_Value) delete []m_Value;
m_Value = 0;
}
if ( iCurve== 1 )
{
if(m_Value2) delete []m_Value2;
m_Value2 = 0;
}
if ( iCurve== 2 )
{
if(m_Value3) delete []m_Value3;
m_Value3 = 0;
}
DWORD byte;
//CString wellname(sFilePath);
if ( mrw.Open(strSlfName.toStdString().c_str()) ) // 打开井文件
{
int iIndex=mrw.OpenCurve(strLineName.toStdString().c_str());
if (iIndex >= 0)
{
mrw.GetCurveInfo(iIndex,curve);
if(curve->DepLevel==0) return;
m_PointNum = (float)(fabs((curve->EndDepth - curve->StartDepth)/curve->DepLevel+0.5));
m_SDep=curve->StartDepth;
m_EDep=curve->EndDepth;
m_Rlev=curve->DepLevel;
if ( iCurve== 0 )
{
m_Value=new char[m_PointNum*curve->CodeLen+4];
if(m_Value)
{
byte = mrw.ReadCurve(iIndex,m_SDep,m_PointNum,(void *)m_Value);
}
}
else
{
if ( iCurve == 1 )
{
m_Value2=new char[m_PointNum*curve->CodeLen+4];
if(m_Value2){
byte = mrw.ReadCurve(iIndex,m_SDep,m_PointNum,(void *)m_Value2);
}
}
else
{
m_Value3=new char[m_PointNum*curve->CodeLen+4];
if(m_Value3){
byte = mrw.ReadCurve(iIndex,m_SDep,m_PointNum,(void *)m_Value3);
}
}
}
mrw.CloseCurve(iIndex);
}
mrw.Close(); //关闭井文件
}
}
//表格
//for table dip ,read FRAC_HOLE.TABLE
void FormDraw::ReadData(QString strSlfName, QString strLineName)
{
QString cs;
int nField,len;
FRAC_TABLE frac;
CMemRdWt mrw;
m_PointNum = 0 ;
char strFracTable[256];
int i,j,iIndex,nCount,iType=1;
char wellname2[512];
char *buffer;
Slf_TABLE_FIELD *Table_Field;
char bufField[1024];
float val;
//
m_FracTabList.clear();
if(m_qsTable=="AC"|| m_qsTable=="")
{
m_qsTable="FRAC_HOLE.TABLE";
}
//
if(strSlfName.isEmpty())
{
return;
}
//CString wellname(strSlfName);
if ( mrw.Open(strSlfName.toStdString().c_str()) ) // 打开井文件
{
//CString strFracTable(m_qsTable);
iIndex = mrw.OpenTable(m_qsTable.toStdString().c_str());
if (iIndex >= 0)
{
nField = mrw.GetTableFieldCount(iIndex);
Table_Field = new Slf_TABLE_FIELD[nField+1];
// 读取字段信息
mrw.GetTableFieldInfo(iIndex, Table_Field);
// 读取数据记录
nCount = mrw.GetTableRecordCount(iIndex);
i = mrw.GetTableRecordLength(iIndex);
buffer = new char[i+2];
m_PointNum = nCount;
for(i=0; i<nCount; i++)
{
memset(&frac, 0x00, sizeof(FRAC_TABLE));
mrw.ReadTable(iIndex, i+1, buffer);
frac.DEP = -9999;
len = 0;
for(j=0; j<nField; j++)
{
val = GetData(Table_Field[j].RepCode, &buffer[len]);
cs = Table_Field[j].Name;
if ( m_qsDepth.compare(cs)==0)
frac.DEP = val;
if ( m_qsDIP.compare(cs)==0)
frac.DIPorS = val;
if ( m_qsDIR.compare(cs)==0)
frac.DIR = val;
if ( m_qsID.compare(cs)==0)
{
// frac.ID = (int)(val);
if(Table_Field[j].RepCode == 6)
{
char buf[513];
memset(buf,0,513);
strncpy(buf,&buffer[len],Table_Field[j].Length);
buf[Table_Field[j].Length]='\0';
frac.ID = atoi(buf);
}
}
len += Table_Field[j].Length;
}
m_FracTabList.append(frac);
}
delete [] Table_Field;
delete [] buffer;
mrw.CloseTable(iIndex);
}
mrw.Close(); //关闭井文件
}
}
void FormDraw::addRandomGraph(QMyCustomPlot *widget, QVector<double> x, QVector<double> y, QString strSlfName, QString strLineName, QString strAliasName, QString strUnit,
double newLeftScale, double newRightScale, QString strScaleType, QColor newlineColor, double width, Qt::PenStyle lineStyle, QStringList listOtherProperty)
{
widget->addRandomGraph(x, y, strSlfName, strLineName, strAliasName, strUnit,
newLeftScale, newRightScale, strScaleType, newlineColor, width, lineStyle);
//道-对象
if(widget->m_bDrawCore_PHYSICS)
{
//岩心分析特殊处理
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_vmax, m_vmin, strScaleType, "tableObject");
}
else {
m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_vmax, m_vmin, strScaleType, "curveObject", listOtherProperty);
}
//AppendConsole(PAI_INFO, "FormDraw addRandomGraph");
// widget->addGraph();
// if(strLineName=="")
// {
// strLineName = QString("曲线 %1").arg(widget->graphCount());
// }
// widget->graph()->setName(strLineName);
// //禁用自动重绘:在大量数据更新前禁用自动重绘
// //widget->setNotAntialiasedElements(QCP::aeAll);
// widget->graph()->setData(x, y);
// if(newLeftScale!=-9999)
// {
// widget->graph()->setLineStyle((QCPGraph::LineStyle)(lineStyle));//曲线
// widget->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(1)));
// QPen graphPen;
// graphPen.setColor(newlineColor);
// graphPen.setWidthF(width);
// graphPen.setStyle(lineStyle);//实线
// widget->graph()->setPen(graphPen);
// }
// else
// {
// widget->graph()->setLineStyle((QCPGraph::LineStyle)(1));//曲线
// widget->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(1)));
// // widget->graph()->setScatterStyle(QCPScatterStyle(QPixmap(":/image/file.png")));
// //widget->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));
// QPen graphPen;
// newlineColor = QColor(std::rand()%245+10, std::rand()%245+10, std::rand()%245+10);
// graphPen.setColor(newlineColor);
// width = 2;
// graphPen.setWidthF(width);
// graphPen.setStyle(Qt::SolidLine);//实线
// widget->graph()->setPen(graphPen);
// //widget->replot();
// }
// //道-对象
// m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_vmax, m_vmin, strScaleType);
//AppendConsole(PAI_INFO, "FormDraw addRandomGraph end");
}
void FormDraw::dragEnterEvent(QDragEnterEvent* event)
{
qDebug() << "FormDraw dragEnterEvent";
const QMimeData* mimeData = event->mimeData();
// 检查拖拽的数据类型,确定是否接受拖拽
if (event->mimeData()->hasFormat("text/plain")) {
event->acceptProposedAction();
//QApplication::setOverrideCursor(Qt::PointingHandCursor); // 设置鼠标为可添加状态
}
else
{
event->ignore();
//QApplication::setOverrideCursor(Qt::ForbiddenCursor); // 设置鼠标为不可添加状态
}
}
void FormDraw::dragMoveEvent(QDragMoveEvent* event)
{
//qDebug() << "FormDraw dragMoveEvent";
// 可以在这里更新鼠标的位置,根据位置判断是否可以放置
// ...
//dragEnterEvent(event); // 可以使用相同的逻辑
//event->accept();
}
void FormDraw::dropEvent(QDropEvent* event)
{
qDebug() << "FormDraw dropEvent";
// 处理放置动作更新UI或数据
if (event->mimeData()->hasFormat("text/plain")) {
// 获取拖拽的数据
QString strExtern = event->mimeData()->text();
qDebug() << strExtern;
//
QStringList list = strExtern.split("#@@#");//QString字符串分割函数
if (list.size() > 3)
{
QString strSlfName = list[0];
QString strWellName = list[1];
QString strLineName = list[2];
QString strType = list[3];
qDebug() << "strSlfName:" << strSlfName<< " strWellName:" << strWellName << " strLineName:" << strLineName << " strType:" << strType;
if(m_strWellName == strWellName)
{
if(strType=="curveObject")
{
//新建曲线
emit CallManage::getInstance()->sig_AddLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="waveObject")
{
//新建波列
emit CallManage::getInstance()->sig_AddWave(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
else if(strType=="tableObject")
{
//新建表格曲线
emit CallManage::getInstance()->sig_AddTableLine(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName);
}
// 接受拖拽事件
event->setDropAction(Qt::MoveAction);
event->accept();
}
else
{
// 如果井名不正确,不接受拖拽事件
event->ignore();
}
}
else
{
// 如果数据格式不正确,不接受拖拽事件
event->ignore();
}
}
else
{
// 如果数据格式不正确,不接受拖拽事件
event->ignore();
}
// 恢复鼠标光标
//QApplication::restoreOverrideCursor();
}
void FormDraw::s_changeGujingLine(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strNewLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
m_listLineName.removeOne(strLineName);
//属性清空
//PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//qDebug() << "FormDraw strLineName already exist! " << strLineName;
//return;
}
m_listLineName.push_back(strNewLineName);
}
void FormDraw::s_changeJiegutextLine(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strNewLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
m_listLineName.removeOne(strLineName);
//属性清空
//PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//qDebug() << "FormDraw strLineName already exist! " << strLineName;
//return;
}
m_listLineName.push_back(strNewLineName);
}
void FormDraw::s_changeLineName(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strNewLineName)
{
//井名&道名不一致
if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName)
{
}
else
{
return;
}
if(m_listLineName.contains(strLineName))
{
m_listLineName.removeOne(strLineName);
//属性清空
//PropertyService()->InitCurrentViewInfo();
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 0, "");
//qDebug() << "FormDraw strLineName already exist! " << strLineName;
//return;
}
m_listLineName.push_back(strNewLineName);
}