#include "formdraw.h" #include "ui_formdraw.h" #include "CallManage.h" #include #include "geometryutils.h" #include "ConsoleOutputWidget.h" #include "DraggablePixmap.h" #include "TransparentDraggableRect.h" #include "TransparentGroupResult.h" #include #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 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 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(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(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(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(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(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(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 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; iiMaxNum; 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 x, y; for(int i=0; ival[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; ival)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;jyAxis->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; xIndexdata()->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 colorList; bool inpolation = true; int iColorNum = getSystemColor(nIndex, colorList, inpolation); // QCPColorGradient gradient; for(int i=0; isetGradient(gradient); // 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内: colorMap->rescaleDataRange(); } // 搜索所有配色方案名 int FormDraw::getColorConfig(QVector &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;iOpen(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; ival)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; xIndexdata()->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 colorList; // bool inpolation = true; // int iColorNum = getSystemColor(nIndex, colorList, inpolation); // // // QCPColorGradient gradient; // for(int i=0; isetGradient(gradient); QVector 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; isetGradient(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; ifrac.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(lenGetTableRecordCount(iIndex); for(int i=0;iReadTable(iIndex,i+1,m_Result); // WelllogItem* item=AddItem(m_Result->StartDepth,m_Result->EndDepth); // if(!item) continue; // OGWordsResultItem* pResult = dynamic_cast(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(aaaddImageToPlot(-m_Result->EndDepth, -m_Result->StartDepth, filename, static_cast(m_Result->Left), static_cast(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;iReadTable(iIndex,i+1,m_Result); if(!i) zone=atoi(m_Result->Zone); } QString strGroupUuid = ""; for(int i=0;iStartDepth==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= 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(gradm_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 (dirmaxtopLeft->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(gradm_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=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;iItemNum=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(edepcsetPen(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(sdepcm_MoveSdep&&depm_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 vx; QVector 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 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;kFieldNames[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=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(k?m_childrenItems[i]:AddItem(top,bottom)); if(pResult) { pResult->Order=i; pResult->depth=pTdt[0].Depth; pResult->Number=*(float*)&LogTime; QVector CoreValues; CoreValues.resize(n); for(int j=0;jCoreValues.append(CoreValues); QVector ValueTypes; ValueTypes.resize(n); for(int j=0;jValueTypes.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;isetPen(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;isetPen(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;kCoreValues.size();k++) { int n=pResult->CoreValues[k].size(); if(n<1) continue; QVector vecx; QVector vecy; vecx.resize(n); vecy.resize(n); int jj=0; QVector valus; valus.resize(n+1); memcpy(&valus[1],&pResult->CoreValues[k][0],sizeof(float)*n); for(int j=0;jValueTypes[k][j]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 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;iGetTableFieldData(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(vmaxCoreValue)vmin=CoreValue; } else { // if(vmaxCoreValue)vmin=CoreValue; } // x.append(-CorrDepth); y.append(CoreValue); // 已经加载了slf文件内容 显示界面上 widget->addCorePhysicsWithParam(Order, static_cast(-depth), static_cast(-CorrDepth), static_cast(-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;kaxisRect(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;ipoint1->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_RightVal || flVal < m_LeftVal ) { k++; continue; } tempi = (int)( flVal /10.); tempf = 0.; for (j=0; jsetPen(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; depsetPen(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_RightVal || flVal < m_LeftVal ) { k++; continue; } tempi = (int)( flVal /10.); tempf = 0.; for (j=0; jsetPen(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;ipoint1->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 -m_iY1) // { // continue; // } // bDraw = false; // for (j=0; jsetPen(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 x, QVector 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); }