From 008191977ca72736582fa544cf1bcb7cadae5ad1 Mon Sep 17 00:00:00 2001 From: jiayulong Date: Wed, 22 Apr 2026 18:13:03 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=BF=BD=E5=8A=A0=E4=BA=95=E7=9C=BC=E5=9E=AE?= =?UTF-8?q?=E5=A1=8C=E7=9F=A2=E9=87=8F=E5=9B=BE=E5=B1=9E=E6=80=A7=202.?= =?UTF-8?q?=E6=94=AF=E6=8C=81json=E6=A8=A1=E6=9D=BF=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CallManage/CallManage.h | 3 + logPlus/PropertyWidget.cpp | 134 ++++++++++++++++++++- logPlus/PropertyWidget.h | 7 +- logPlus/formdraw.cpp | 226 +++++++++++++----------------------- logPlus/formdraw.h | 6 +- logPlus/forminfo.cpp | 110 +++++++++++++++++- logPlus/forminfo.h | 12 +- logPlus/formtrack.cpp | 40 ++++++- logPlus/formtrack.h | 4 + logPlus/mainwindowcurve.cpp | 42 ++----- logPlus/qmycustomplot.cpp | 166 ++++++++++++++++++++++++-- logPlus/qmycustomplot.h | 11 ++ 12 files changed, 560 insertions(+), 201 deletions(-) diff --git a/CallManage/CallManage.h b/CallManage/CallManage.h index 4d2b71d..ca5c73e 100644 --- a/CallManage/CallManage.h +++ b/CallManage/CallManage.h @@ -269,6 +269,9 @@ signals: //改变杆状图属性 void sig_changeGanzhuangProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); + //改变井眼垮塌矢量图属性 + void sig_changeJyktProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); + // //void sig_addImageToPlot(QMyCustomPlot* customPlot, double left_Low, double right_Hight, QString imagePath); diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index d3dd1c5..a126f75 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -2378,7 +2378,13 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant // changedGanzhuangProperty(m_propertyData[pProperty], variant); } - + else if (m_strCurrentProperty == Jykt_Property)//井眼垮塌矢量图 + { + //先处理通用属性 + CommonPropertyChanged(pProperty, variant); + // + changedJyktProperty(m_propertyData[pProperty], variant); + } } void PropertyWidget::SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle) @@ -3209,6 +3215,11 @@ void PropertyWidget::initProperty(FormInfo *formInfo) //杆状图 this->initGanzhuangProperty(formInfo); } + else if (m_strLineName == "JINGYANKUATA.LINE") + { + //井眼垮塌矢量图 + this->initJyktProperty(formInfo); + } else { this->initTableProperty(formInfo); @@ -5210,7 +5221,6 @@ void PropertyWidget::changedRoseProperty(QString strProperty, QVariant varVal) void PropertyWidget::initKedouProperty(FormInfo *formInfo) { - _CreateVariantPropertyItem("曲线图名", "显示名称", formInfo->m_strAliasName, QVariant::String); _CreateVariantPropertyItem("字体", "名称", formInfo->m_curveNameFont, QVariant::Font); _CreateVariantPropertyItem("字体", "单位", formInfo->m_strUnitFont, QVariant::Font); @@ -5226,7 +5236,7 @@ void PropertyWidget::initKedouProperty(FormInfo *formInfo) _CreateVariantPropertyItem("曲线选择", "方位曲线", formInfo->m_pl_azimuthCurve, QVariant::String); _CreateVariantPropertyItem("曲线选择", "倾角曲线", formInfo->m_pl_inclinationCurve, QVariant::String); _CreateVariantPropertyItem("曲线选择", "可信度曲线", formInfo->m_pl_GradCurve, QVariant::String); - // + // _CreateVariantPropertyItem("蝌蚪符号", "圆半径", formInfo->m_nRadius, QVariant::Double); _CreateVariantPropertyItem("蝌蚪符号", "圆线宽度", formInfo->m_nCircleWidth, QVariant::Double); _CreateVariantPropertyItem("蝌蚪符号", "尾线长度", formInfo->m_nTailLen, QVariant::Double); @@ -5456,10 +5466,8 @@ void PropertyWidget::changedKedouProperty(QString strProperty, QVariant varVal) } } - void PropertyWidget::initGanzhuangProperty(FormInfo *formInfo) { - _CreateVariantPropertyItem("曲线图名", "显示名称", formInfo->m_strAliasName, QVariant::String); _CreateVariantPropertyItem("井文件名", "井文件名称", m_strSlfName, QVariant::String); @@ -5476,6 +5484,7 @@ void PropertyWidget::initGanzhuangProperty(FormInfo *formInfo) // _CreateVariantPropertyItem("曲线单位", "显示单位", formInfo->m_strUnit, QVariant::String); // + _CreateVariantPropertyItem("杆设置", "深度间隔", formInfo->m_flStep, QVariant::Double); _CreateVariantPropertyItem("杆设置", "线长度", formInfo->m_nTailLen, QVariant::Double); _CreateVariantPropertyItem("杆设置", "线宽度", formInfo->m_nTailWidth, QVariant::Double); _CreateVariantPropertyItem("杆设置", "线颜色", formInfo->m_crTail, QVariant::Color); @@ -5546,9 +5555,124 @@ void PropertyWidget::changedGanzhuangProperty(QString strProperty, QVariant varV this->m_formInfo->m_strUnit = varVal.toString(); this->m_formInfo->repaint(); } + else if ("深度间隔" == strProperty) + { + this->m_formInfo->m_flStep = varVal.toDouble(); + flag = true; + } if(flag) { emit CallManage::getInstance()->sig_changeGanzhuangProperty(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName); } } + +void PropertyWidget::initJyktProperty(FormInfo *formInfo) +{ + _CreateVariantPropertyItem("曲线图名", "显示名称", formInfo->m_strAliasName, QVariant::String); + _CreateVariantPropertyItem("井文件名", "井文件名称", m_strSlfName, QVariant::String); + // + _CreateVariantPropertyItem("曲线选择", "方位曲线", formInfo->m_pl_azimuthCurve, QVariant::String); + _CreateVariantPropertyItem("曲线选择", "井径差曲线", formInfo->m_pl_deltaCurve, QVariant::String); + // + _CreateVariantPropertyItem("崩落设置", "左刻度", formInfo->m_vmin, QVariant::Double); + _CreateVariantPropertyItem("崩落设置", "右刻度", formInfo->m_vmax, QVariant::Double); + _CreateVariantPropertyItem("崩落设置", "深度间隔", formInfo->m_flStep, QVariant::Double); + _CreateVariantPropertyItem("崩落设置", "角度偏移", formInfo->m_nOffset, QVariant::Double); + _CreateVariantPropertyItem("崩落设置", "显示单位", formInfo->m_strUnit, QVariant::String); + // + _CreateVariantPropertyItem("蝌蚪设置", "圆半径", formInfo->m_nRadius, QVariant::Double); + _CreateVariantPropertyItem("蝌蚪设置", "圆线宽度", formInfo->m_nCircleWidth, QVariant::Double); + _CreateVariantPropertyItem("蝌蚪设置", "尾线长度", formInfo->m_nTailLen, QVariant::Double); + _CreateVariantPropertyItem("蝌蚪设置", "尾线宽度", formInfo->m_nTailWidth, QVariant::Double); + _CreateVariantPropertyItem("蝌蚪设置", "圆线颜色", formInfo->m_crCircle, QVariant::Color); + _CreateVariantPropertyItem("蝌蚪设置", "尾线颜色", formInfo->m_crTail, QVariant::Color); + _CreateVariantPropertyItem("蝌蚪设置", "圆填充色", formInfo->m_crPointFill, QVariant::Color); + + m_strCurrentProperty = Jykt_Property; +} + +void PropertyWidget::changedJyktProperty(QString strProperty, QVariant varVal) +{ + bool flag = false; + // 字体 + if ("方位曲线" == strProperty) + { + this->m_formInfo->m_pl_azimuthCurve = varVal.toString(); + flag = true; + } + else if ("井径差曲线" == strProperty) + { + this->m_formInfo->m_pl_deltaCurve = varVal.toString(); + flag = true; + } + // 蝌蚪符号 + else if ("圆半径" == strProperty) + { + this->m_formInfo->m_nRadius = varVal.toDouble(); + flag = true; + } + else if ("圆线宽度" == strProperty) + { + this->m_formInfo->m_nCircleWidth = varVal.toDouble(); + flag = true; + } + else if ("尾线长度" == strProperty) + { + this->m_formInfo->m_nTailLen = varVal.toDouble(); + flag = true; + } + else if ("尾线宽度" == strProperty) + { + this->m_formInfo->m_nTailWidth = varVal.toDouble(); + flag = true; + } + else if ("圆线颜色" == strProperty) + { + this->m_formInfo->m_crCircle = varVal.value(); + flag = true; + } + else if ("尾线颜色" == strProperty) + { + this->m_formInfo->m_crTail = varVal.value(); + flag = true; + } + else if ("圆填充色" == strProperty) + { + this->m_formInfo->m_crPointFill = varVal.value(); + flag = true; + } + // + else if ("左刻度" == strProperty) + { + this->m_formInfo->m_vmin = varVal.toDouble(); + this->m_formInfo->repaint(); + flag = true; + } + else if ("右刻度" == strProperty) + { + this->m_formInfo->m_vmax = varVal.toDouble(); + this->m_formInfo->repaint(); + flag = true; + } + else if ("深度间隔" == strProperty) + { + this->m_formInfo->m_flStep = varVal.toDouble(); + flag = true; + } + else if ("角度偏移" == strProperty) + { + this->m_formInfo->m_nOffset = varVal.toDouble(); + flag = true; + } + else if ("显示单位" == strProperty) + { + this->m_formInfo->m_strUnit = varVal.toString(); + this->m_formInfo->repaint(); + } + + if(flag) + { + emit CallManage::getInstance()->sig_changeJyktProperty(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName); + } +} diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index 45a2b16..8e461c9 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -78,7 +78,8 @@ #define TubingItem_Property "TubingItem_Property" //套管组件item #define Kedou_Property "Kedou_Property" //蝌蚪图 -#define Ganzhuang_Property "Ganzhuang_Property" //杆状图 +#define Ganzhuang_Property "Ganzhuang_Property" //杆状图 +#define Jykt_Property "Jykt_Property" //井眼垮塌矢量图 #pragma execution_character_set("utf-8") @@ -267,6 +268,10 @@ public: void initGanzhuangProperty(FormInfo *formInfo); void changedGanzhuangProperty(QString strProName, QVariant val); + //井眼垮塌矢量图 + void initJyktProperty(FormInfo *formInfo); + void changedJyktProperty(QString strProName, QVariant val); + public slots: void SlotPropertyChanged(QtProperty *property, const QVariant &variant); void SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle); diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index b5212cd..9a79368 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -536,7 +536,7 @@ void FormDraw::DisplayLines(QJsonArray linesArray) // 岩心照片 displayImageData(lineObjInfo); } - else if (strLineName == "FRAC_HOLE.TABLE" || strLineName == "GANZHUANG.LINE") + else if (strLineName == "FRAC_HOLE.TABLE" || strLineName == "GANZHUANG.LINE" || strLineName == "JINGYANKUATA.LINE") { // 蝌蚪图、杆状图 DisplayKedou_One(lineObjInfo); @@ -1194,7 +1194,7 @@ void FormDraw::DisplayKedou_One(QJsonObject lineObjInfo) if (strLineName != "") { - //蝌蚪图、杆状 + //蝌蚪图、杆状、井眼垮塌矢量图 this->addKedou(m_strUuid, strSlfName, strWellName, m_strTrackName, strLineName, lineObjInfo); } } @@ -3020,8 +3020,8 @@ QMyCustomPlot* FormDraw::addTableLine(QString strUuid, QString strSlfName, QStri QMyCustomPlot* FormDraw::addKedou(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QJsonObject listOtherProperty) { - //蝌蚪、杆状 - if (strLineName == "FRAC_HOLE.TABLE" || strLineName == "GANZHUANG.LINE") + //蝌蚪、杆状、井眼垮塌矢量图 + if (strLineName == "FRAC_HOLE.TABLE" || strLineName == "GANZHUANG.LINE" || strLineName == "JINGYANKUATA.LINE") { } else @@ -3084,6 +3084,22 @@ QMyCustomPlot* FormDraw::addKedou(QString strUuid, QString strSlfName, QString s // initGanzhuang(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty); } + else if(strLineName == "JINGYANKUATA.LINE") + { + QString strAliasName = "井眼崩落矢量图"; + QColor newlineColor=QColor(0,0,0); + // 显示名称 + // 显示名称 + if (listOtherProperty.contains("AliasName")) + { + QJsonValue value = listOtherProperty.value("AliasName"); + if (value.isString()) { + strAliasName = value.toString(); + } + } + // + initJykt(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty); + } connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); // @@ -3767,25 +3783,12 @@ void FormDraw::s_addJykt(QString strUuid, QString strSlfName, QString strWellNam curv->m_formTrack = m_formTrack; curv->setDepthY(m_iY1, m_iY2); curv->initGeometry(m_strUuid, m_iScale, g_iOneWidth); - - //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"); - // + initJykt(curv, strSlfName, strLineName); + + + // connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); // @@ -5166,6 +5169,65 @@ void FormDraw::initGanzhuang(QMyCustomPlot *widget, QString strSlfName, QString widget->Draw_Ganzhuang(); } + +//井眼垮塌矢量图 +void FormDraw::initJykt(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QJsonObject listOtherProperty) +{ + //隐藏网格 + widget->xAxis->grid()->setVisible(false); + widget->yAxis->grid()->setVisible(false); + // + widget->m_bRowGridVisible = false; + widget->m_bColGridVisible = false; + + //------------------- + m_LeftVal = 0; + m_RightVal = 10; + if(!listOtherProperty.isEmpty()) + { + m_LeftVal = listOtherProperty["vmin"].toDouble(); + m_RightVal = listOtherProperty["vmax"].toDouble(); + } + + float vmax = m_RightVal; + float vmin = m_LeftVal; + widget->setScaleX(vmin, vmax); + 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); + widget->xAxis->setVisible(false); + widget->xAxis2->setVisible(false); + widget->yAxis->setVisible(false); + widget->yAxis2->setVisible(false); + + //----------------------------------- + QString strUnit = "(°)"; + double width=2; + QString strScaleType = ""; + if(!listOtherProperty.isEmpty()) + { + strUnit = listOtherProperty["Unit"].toString(); // 单位 + } + //道-对象 + FormInfo* pInfo = m_formTrack->AddJykt(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty); + + //杆状图 + widget->Draw_Jykt(); +} + void FormDraw::initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty) { int iMyWidth = widget->axisRect(0)->width(); @@ -6540,128 +6602,6 @@ void FormDraw::CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x } } - -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->setScaleX(vmin, vmax); - 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); - widget->xAxis->setVisible(false); - widget->xAxis2->setVisible(false); - widget->yAxis->setVisible(false); - widget->yAxis2->setVisible(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) { //初始化数据 diff --git a/logPlus/formdraw.h b/logPlus/formdraw.h index c04a2d6..43fc6c5 100644 --- a/logPlus/formdraw.h +++ b/logPlus/formdraw.h @@ -148,9 +148,12 @@ public: int getColorConfig(QVector &qFiles); void DrawImageNew_NoFilter(QMyCustomPlot *widget, QString strSlfName, QString &strWaveName, int &_nSamples); - //表格曲线 + //蝌蚪图 void initKedou(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "蝌蚪图", QColor newlineColor=QColor(0,0,0), QJsonObject listOtherProperty={}); + //杆状图 void initGanzhuang(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "杆状图", QColor newlineColor=QColor(0,0,0), QJsonObject listOtherProperty={}); + //井眼垮塌矢量图 + void initJykt(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "井眼崩落矢量图", QColor newlineColor=QColor(0,0,0), QJsonObject listOtherProperty={}); void ReadFracDef(); void ReadData(QString strSlfName, QString strLineName);//表格 @@ -158,7 +161,6 @@ public: void CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x2,float flHoriRatio); void Refurbish(); - void DrawJykt(QMyCustomPlot *widget, QString strSlfName); void DrawDenv(QMyCustomPlot *widget, QString strSlfName); int m_PointNum; diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index 71658ec..07fb488 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -234,6 +234,7 @@ void FormInfo::initProperty_Ganzhuang(QJsonObject obj) this->m_flGrad2 = 50; // 可信度2 // this->m_strUnit = "(°)"; + this->m_flStep = 0.5; // 深度间隔 } else { @@ -261,6 +262,70 @@ void FormInfo::initProperty_Ganzhuang(QJsonObject obj) this->m_flGrad2 = obj["m_flGrad2"].toDouble(); // 可信度2 // this->m_strUnit = obj["Unit"].toString(); // 单位 + this->m_flStep = obj["m_flStep"].toDouble(); // 深度间隔 + } + } +} + + +void FormInfo::initProperty_Jykt(QJsonObject obj) +{ + if(obj.isEmpty()) + { + // 字体 + + // 曲线选择 + this->m_pl_azimuthCurve = "STRDIR"; // 方位曲线 + this->m_pl_deltaCurve = "CALM"; // 井径差曲线 + + //蝌蚪符号 + this->m_nRadius = 6; // 圆半径 + this->m_nCircleWidth = 1; // 圆线宽度 + this->m_nTailLen = 10; // 尾线长度 + this->m_nTailWidth = 2; // 尾线宽度 + + // 显示控制 + this->m_vmin = 0; // 左刻度 + this->m_vmax = 10; // 右刻度 + this->m_flStep = 0.5; // 深度间隔 + this->m_nOffset = 90; // 角度偏移 + // + this->m_strUnit = "(°)"; + } + else + { + QString strType = obj.value("Type").toString(); + if ("tableObject" == strType) + { + // 字体 + // 名称 + this->m_curveNameFont.fromString(obj["curveNameFont"].toString()); + // 单位 + this->m_strUnitFont.fromString(obj["m_strUnitFont"].toString()); + // 刻度 + this->m_pl_fontScale.fromString(obj["m_pl_fontScale"].toString()); + + + // 曲线选择 + this->m_pl_azimuthCurve = obj["m_pl_azimuthCurve"].toString(); // 方位曲线 + this->m_pl_deltaCurve = obj["m_pl_deltaCurve"].toString(); // 井径差曲线 + + //蝌蚪符号 + this->m_nRadius = obj["m_nRadius"].toDouble(); // 圆半径 + this->m_nCircleWidth = obj["m_nCircleWidth"].toDouble();// 圆线宽度 + this->m_nTailLen = obj["m_nTailLen"].toDouble(); // 尾线长度 + this->m_nTailWidth = obj["m_nTailWidth"].toDouble(); // 尾线宽度 + this->m_crCircle.setNamedColor(obj["m_crCircle"].toString());// 圆线颜色 + this->m_crTail.setNamedColor(obj["m_crTail"].toString());// 尾线颜色 + this->m_crPointFill.setNamedColor(obj["m_crPointFill"].toString());// 圆填充色 + + // 刻度 + this->m_vmin = obj["vmin"].toDouble(); // 左刻度 + this->m_vmax = obj["vmax"].toDouble(); // 右刻度 + this->m_flStep = obj["m_flStep"].toDouble(); // 深度间隔 + this->m_nOffset = obj["m_nOffset"].toDouble(); // 角度偏移 + // + this->m_strUnit = obj["Unit"].toString(); // 单位 } } } @@ -603,6 +668,33 @@ QJsonObject FormInfo::makeJson() rootObj["m_flGrad2"] = this->m_flGrad2; // 可信度2 //单位 rootObj["Unit"] = m_strUnit; + rootObj["m_flStep"] = m_flStep;//深度间隔 + return rootObj; + } + else if (m_strLineName == "JINGYANKUATA.LINE") + { + //井眼垮塌矢量图 + // 字体 + rootObj["m_strUnitFont"] = this->m_strUnitFont.toString(); // 单位 + rootObj["m_pl_fontScale"] = this->m_pl_fontScale.toString(); // 刻度 + // 曲线选择 + rootObj["m_pl_azimuthCurve"] = this->m_pl_azimuthCurve; // 方位曲线 + rootObj["m_pl_deltaCurve"] = this->m_pl_deltaCurve; // 井径差曲线 + //蝌蚪符号 + rootObj["m_nRadius"] = this->m_nRadius; // 圆半径 + rootObj["m_nCircleWidth"] = this->m_nCircleWidth; // 圆线宽度 + rootObj["m_nTailLen"] = this->m_nTailLen; // 尾线长度 + rootObj["m_nTailWidth"] = this->m_nTailWidth; // 尾线宽度 + rootObj["m_crCircle"] = this->m_crCircle.name(); // 圆线颜色 + rootObj["m_crTail"] = this->m_crTail.name(); // 尾线颜色 + rootObj["m_crPointFill"] = this->m_crPointFill.name(); // 圆填充色 + // + rootObj["vmax"] = m_vmax;//右刻度 + rootObj["vmin"] = m_vmin;//左刻度 + rootObj["m_flStep"] = m_flStep;//深度间隔 + rootObj["m_nOffset"] = m_nOffset;//角度偏移 + //单位 + rootObj["Unit"] = m_strUnit; return rootObj; } } @@ -1297,8 +1389,7 @@ void FormInfo::paintEvent(QPaintEvent* event) } } - if(m_strLineName=="井眼垮塌矢量图" - || m_strLineName=="井斜方位图") + if(m_strLineName=="井斜方位图") { painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3, Qt::AlignCenter, m_strUnit); painter.drawText(rect.left(), rect.top()+rect.height()*2/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, QString::number(m_vmin)+" ~ "+QString::number(m_vmax)); @@ -1319,6 +1410,21 @@ void FormInfo::paintEvent(QPaintEvent* event) painter.drawText(rect.width()/2- tRect.width()/2, nbay - 6, m_strUnit); } + //井眼垮塌矢量图 + if(m_strLineName=="JINGYANKUATA.LINE") + { + int nbay = rect.height() - 5; + + // 显示刻度 + if (m_bShowScale) + { + drawScale(painter, rect); + } + QFontMetrics fm2(m_curveUnitFont); + QRect tRect = fm2.boundingRect(m_strUnit); + painter.drawText(rect.width()/2- tRect.width()/2, nbay - 6, m_strUnit); + } + if(m_strLineName == "深度") { QFont oldFont = painter.font(); diff --git a/logPlus/forminfo.h b/logPlus/forminfo.h index 795caef..b66a375 100644 --- a/logPlus/forminfo.h +++ b/logPlus/forminfo.h @@ -28,6 +28,7 @@ public: void initProperty(QJsonObject obj); void initProperty_Kedou(QJsonObject obj); void initProperty_Ganzhuang(QJsonObject obj); + void initProperty_Jykt(QJsonObject obj); void paintClassify(QPainter &painter, int compassCenterY); private: @@ -373,9 +374,14 @@ public: float m_nCircleWidth = 2; // 圆线宽度 float m_nTailWidth = 2; // 尾宽度 float m_nTailLen = 10; // 尾长 - QColor m_crCircle = qRgb(0,0,0); //颜色 - QColor m_crTail = qRgb(0,0,0); //颜色 - QColor m_crPointFill = qRgb(0,0,0); + QColor m_crCircle = qRgb(0,0,0); // 圆线颜色 + QColor m_crTail = qRgb(0,0,0); // 尾线颜色 + QColor m_crPointFill = qRgb(0,0,0); // 圆填充色 + + //井眼垮塌矢量图 + QString m_pl_deltaCurve = "CALM"; // 井径差曲线 + float m_flStep;// 增加深度间隔 + float m_nOffset; // 角度偏移=0,主应力方向,=90,长轴方向 public: void setLineWidth(double dWidth); diff --git a/logPlus/formtrack.cpp b/logPlus/formtrack.cpp index a16cd8b..10c1496 100644 --- a/logPlus/formtrack.cpp +++ b/logPlus/formtrack.cpp @@ -370,9 +370,47 @@ FormInfo* FormTrack::AddGanzhuang(QString strSlfName, QString strWellName, QStri //曲线信息栏 FormInfo *formInfo = new FormInfo(this, strSlfName, strWellName, strTrackName, strLineName, lineColor); formInfo->m_strUuid = m_strUuid; - //formInfo->m_strUnit = strUnit; formInfo->initProperty_Ganzhuang(listOtherProperty); formInfo->m_strAliasName = strAliasName; + formInfo->m_strUnit = strUnit; + formInfo->m_strScaleType = strScaleType; + formInfo->m_strType = "tableObject"; + formInfo->setLineWidth(dWidth); + formInfo->setVMax(vmax); + formInfo->setVMin(vmin); + formInfo->setFrontColor(QColor(0,0,0)); + formInfo->setBackColor(QColor(255,255,255)); + + //设置高度 + ui->tableWidget->setRowHeight(row, 100); + // + ui->tableWidget->setCellWidget(row, 0, formInfo); + return formInfo; +} + +FormInfo* FormTrack::AddJykt(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QString strType, QJsonObject listOtherProperty) +{ + if(strLineName == "JINGYANKUATA.LINE") + { + + } + else + { + return nullptr; + } + + qDebug() << "FormTrack AddJykt"; + + ui->tableWidget->m_strUuid = m_strUuid; + int row = ui->tableWidget->rowCount(); + ui->tableWidget->setRowCount(row + 1); + + //曲线信息栏 + FormInfo *formInfo = new FormInfo(this, strSlfName, strWellName, strTrackName, strLineName, lineColor); + formInfo->m_strUuid = m_strUuid; + formInfo->initProperty_Jykt(listOtherProperty); + formInfo->m_strAliasName = strAliasName; + formInfo->m_strUnit = strUnit; formInfo->m_strScaleType = strScaleType; formInfo->m_strType = "tableObject"; formInfo->setLineWidth(dWidth); diff --git a/logPlus/formtrack.h b/logPlus/formtrack.h index 2d248c3..94649ed 100644 --- a/logPlus/formtrack.h +++ b/logPlus/formtrack.h @@ -44,8 +44,12 @@ public: public: void Add(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QString strType, QStringList listOtherProperty={}); + //蝌蚪图 FormInfo* AddKedou(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QString strType, QJsonObject listOtherProperty={}); + //杆状图 FormInfo* AddGanzhuang(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QString strType, QJsonObject listOtherProperty={}); + //井眼垮塌矢量图 + FormInfo* AddJykt(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QString strType, QJsonObject listOtherProperty={}); FormInfo* setDrawDt(QStringList listdt, QJsonObject obj); diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 7457fe4..acb86eb 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -3709,44 +3709,16 @@ void MainWindowCurve::s_dcaAc() //井眼垮塌矢量图 void MainWindowCurve::s_Jykt() { - if(ui->tableWidget_2->columnCount()==0) - { - return; - } - - int column = ui->tableWidget_2->currentColumn();//列编号从0开始 - if(column<0) - { - //当前没有选中井 - QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); - return; - } - - if(column%2==0) - { - } - else - { - //空白列 - QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); - return; - } - - QStringList sret = this->getSelectWell_New(); - if (sret.length() <= 0) - return; - QString strWellName = sret.at(0); - //直接从选中的井获取,data记录slf路径 - QString strSlfName = sret.at(1); - - int iWidth = ui->tableWidget_2->columnWidth(column); - int nW = 4; - //设置列宽 - ui->tableWidget_2->setColumnWidth(column, iWidth+nW*g_dPixelPerCm+8); + QStringList sret = this->insertCol(nW); + if (sret.length() <= 0) + return; + QString strWellName = sret.at(0); + //直接从选中的井获取,data记录slf路径 + QString strSlfName = sret.at(1); //新建道 - emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "井眼垮塌矢量图", "JyktObject", nW); + emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "JINGYANKUATA.LINE", "JyktObject", nW); } //井斜方位图 diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index 18a7c58..246040c 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -217,6 +217,8 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel connect(CallManage::getInstance(), SIGNAL(sig_changeKedouProperty(QString, QString, QString, QString, QString)), this, SLOT(s_changeKedouProperty(QString, QString, QString, QString, QString))); //改变杆状图属性 connect(CallManage::getInstance(), SIGNAL(sig_changeGanzhuangProperty(QString, QString, QString, QString, QString)), this, SLOT(s_changeGanzhuangProperty(QString, QString, QString, QString, QString))); + //改变井眼垮塌矢量图属性 + connect(CallManage::getInstance(), SIGNAL(sig_changeJyktProperty(QString, QString, QString, QString, QString)), this, SLOT(s_changeJyktProperty(QString, QString, QString, QString, QString))); } void QMyCustomPlot::initGeometry(QString strUuid, int nscale, double fW) @@ -12021,7 +12023,7 @@ void QMyCustomPlot::DrawTabDip_Kedou() { float flDepthScale,tempf,flVal; int i,j,n,nPointNum=0,tempi; - QRectF rt,rtRect; + //QRectF rt,rtRect; float x,y; float dgtord,dr; float flWidth[50]; @@ -12210,7 +12212,7 @@ void QMyCustomPlot::DrawDip_Kedou() float flDepthScale,tempf,flVal; int nPointNum=0,tempi; - QRectF rt,rtRect; + //QRectF rt,rtRect; float dgtord,dr; for(int i=0;i<50;i++) flWidth[i]=0; if(m_Value==0 || m_Value2==0) @@ -12218,7 +12220,10 @@ void QMyCustomPlot::DrawDip_Kedou() Refurbish(); } if ( m_Value==0 || m_Value2==0 ) + { + this->replot(); return ; + } dgtord=3.14159265/180.; @@ -12358,6 +12363,7 @@ void QMyCustomPlot::s_changeGanzhuangProperty(QString strUuid, QString strSlfNam void QMyCustomPlot::Draw_Ganzhuang() { + //this->clearGraphs(); this->clearItems(); // @@ -12375,7 +12381,7 @@ void QMyCustomPlot::Draw_Ganzhuang() this->m_csCurveDDIR = pInfo->m_pl_azimuthCurve; // 方位 曲线名 this->m_csCurveDANG = pInfo->m_pl_inclinationCurve;//倾角 this->m_csCurveGrad = pInfo->m_pl_GradCurve; // 可信度曲线 - //蝌蚪符号 + //杆状 this->m_nTailLen = pInfo->m_nTailLen; // 尾线长度 this->m_nTailWidth = pInfo->m_nTailWidth; // 尾线宽度 this->m_crTail = pInfo->m_crTail; // 尾线颜色 @@ -12386,6 +12392,8 @@ void QMyCustomPlot::Draw_Ganzhuang() this->m_flGrad1 = pInfo->m_flGrad1; //可信度1 this->m_flGrad2 = pInfo->m_flGrad2; //可信度2 + this->m_flStep = pInfo->m_flStep; // 深度间隔--读数据的间隔 + //读数据 this->ReadData(m_strSlfName, m_csCurveDDIR, 0, &m_Curve); this->ReadData(m_strSlfName, m_csCurveDANG, 1, &m_Curve2); @@ -12413,15 +12421,18 @@ void QMyCustomPlot::Draw_Ganzhuang() float flDepthScale,tempf,flVal; int nPointNum=0,tempi; - QRectF rt,rtRect; + //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) +// { +// Refurbish();//曲线名不一样,不能用 +// } if ( m_Value==0 || m_Value2==0 ) + { + this->replot(); return ; + } dgtord=3.14159265/180.; @@ -12430,7 +12441,7 @@ void QMyCustomPlot::Draw_Ganzhuang() while ( 1) { - dep = m_SDep + k * m_Rlev; + dep = m_SDep + k * m_flStep;//此处使用配置的间隔读取 m_Rlev if ( dep >m_EDep ) break; @@ -12502,3 +12513,140 @@ void QMyCustomPlot::Draw_Ganzhuang() } this->replot(); } + +//改变井眼垮塌矢量图属性 +void QMyCustomPlot::s_changeJyktProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName) +{ + if(m_strUuid == strUuid && + m_strSlfName == strSlfName && + m_strWellName == strWellName && + m_strTrackName == strTrackName && + m_strLineName == strLineName) + { + + } + else + { + return; + } + //绘制井眼垮塌矢量图 + Draw_Jykt(); +} + +void QMyCustomPlot::Draw_Jykt() +{ + //this->clearGraphs(); + this->clearItems(); + + // + FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + if (pInfo == NULL) + { + return; + } + + //----------------------------------- + this->m_Value=NULL; + this->m_Value2=NULL; + this->m_Value3=NULL; + // 曲线选择 + this->m_csCurveDDIR = pInfo->m_pl_azimuthCurve; // 方位 曲线名 + this->m_csCurveCAL = pInfo->m_pl_deltaCurve;//井径差曲线 + //蝌蚪符号 + this->m_nRadius = pInfo->m_nRadius; // 圆半径 + this->m_nCircleWidth = pInfo->m_nCircleWidth; // 圆线宽度 + this->m_nTailLen = pInfo->m_nTailLen; // 尾线长度 + this->m_nTailWidth = pInfo->m_nTailWidth; // 尾线宽度 + this->m_crCircle = pInfo->m_crCircle; // 圆线颜色 + this->m_crTail = pInfo->m_crTail; // 尾线颜色 + this->m_crPointFill=pInfo->m_crPointFill; //圆填充色 + + //读数据 + this->ReadData(m_strSlfName, m_csCurveCAL, 0, &m_Curve); + this->ReadData(m_strSlfName, m_csCurveDDIR, 1, &m_Curve2); + if ( m_Value==0 || m_Value2==0 ) + { + this->replot(); + return ; + } + + // + m_flStep = pInfo->m_flStep; // 深度间隔--读数据的间隔 + m_nOffset = pInfo->m_nOffset; // 角度偏移=0,主应力方向,=90,长轴方向 + + // + float vmax = pInfo->m_vmax; + float vmin = pInfo->m_vmin; + //this->setScaleX(vmin, vmax); + this->yAxis->setRange(vmin, vmax); + + //------------- + float flVal; + float flDep; + int i,j,iPoint=0,tempi; + //QRectF rt,rtRect; + float x,y,x1,y1,x2,y2; + float dang,ddir; + float dg,dy; + float dgtord; + float deps; + + // + dgtord=3.14159265/180.; + QPen pPenTail = QPen(m_crTail, m_nTailWidth);// + QPen pPenCircle = QPen(m_crCircle, m_nCircleWidth);// 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(this); + 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(this); + 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; + } + this->replot(); +} diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index d544d27..9307111 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -680,6 +680,9 @@ public slots: //改变杆状图属性 void s_changeGanzhuangProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); + //改变井眼垮塌矢量图属性 + void s_changeJyktProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); + public: //蝌蚪图重绘网格线 bool mKedou = false; @@ -709,6 +712,11 @@ public: float m_SDep,m_EDep,m_Rlev; int m_nSamples = 0; + //井眼垮塌矢量图 + QString m_csCurveCAL; + float m_flStep;// 增加深度间隔 + float m_nOffset; // 角度偏移=0,主应力方向,=90,长轴方向 + // 频率统计图 csCurveGrad曲线名 LeftVal3最小值 RightVal3最大值 nArc扇形 nR圆半径 crArc圆颜色 nArcLineWidth圆线宽度 bFill是否填充 void drawFgrq(bool bTableData, QString csCurveDDIR, QString csCurveDANG, QString csCurveGrad, double LeftVal3, double RightVal3, int nArc, double nR, QColor crArc, int nArcLineWidth, bool bFill, QColor crFill, int lineNumber, double lineHeight, int lineThickness, QColor lineColor, bool drawAnnotation, bool drawHistogram, @@ -754,6 +762,9 @@ public: //杆状图 void Draw_Ganzhuang(); + // + void Draw_Jykt(); + private: };