1.追加井眼垮塌矢量图属性 2.支持json模板读取

This commit is contained in:
jiayulong 2026-04-22 18:13:03 +08:00
parent 9595301021
commit 008191977c
12 changed files with 560 additions and 201 deletions

View File

@ -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);

View File

@ -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<QColor>();
flag = true;
}
else if ("尾线颜色" == strProperty)
{
this->m_formInfo->m_crTail = varVal.value<QColor>();
flag = true;
}
else if ("圆填充色" == strProperty)
{
this->m_formInfo->m_crPointFill = varVal.value<QColor>();
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);
}
}

View File

@ -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);

View File

@ -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)
{
//初始化数据

View File

@ -148,9 +148,12 @@ public:
int getColorConfig(QVector <QString> &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;

View File

@ -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();

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);
}
//井斜方位图

View File

@ -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();
}

View File

@ -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:
};