裂缝DCA分析

This commit is contained in:
crqiqi77 2026-04-24 15:49:17 +08:00
parent 763a628b64
commit 89ecd78b26
9 changed files with 264 additions and 16 deletions

View File

@ -200,6 +200,9 @@ signals:
void sig_changePlObjectProperty(QVariantMap variantMap);
// 改变玫瑰图属性
void sig_changeRoseProperty(QVariantMap variantMap);
// 改变裂缝DCA分析属性
void sig_changeDcaProperty(QVariantMap variantMap);
//改变岩心分析
void sig_changeCorePhysicsProperty(QVariantMap variantMap);

View File

@ -2392,6 +2392,14 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
//
changedDenvProperty(m_propertyData[pProperty], variant);
}
else if (m_strCurrentProperty == DCA_PROPERTY)//井斜方位图
{
// 先处理通用属性
CommonPropertyChanged(pProperty, variant);
changedDcaProperty(m_propertyData[pProperty], variant);
}
// changedDcaProperty
}
void PropertyWidget::SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle)
@ -3278,7 +3286,11 @@ void PropertyWidget::initProperty(FormInfo *formInfo)
// 裂缝
this->initCrackProperty(formInfo);
}
else if (formInfo->m_strType == "dcaObject")
{
//
this->initDcaProperty(formInfo);
}
}
void PropertyWidget::initWaveProperty(FormInfo *formInfo, int nType)
@ -5800,3 +5812,100 @@ void PropertyWidget::changedDenvProperty(QString strProperty, QVariant varVal)
emit CallManage::getInstance()->sig_changeDenvProperty(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName);
}
}
void PropertyWidget::initDcaProperty(FormInfo *formInfo)
{
// 数据
_CreateVariantPropertyItem("数据", "井文件名称", m_strSlfName, QVariant::String);
_CreateVariantPropertyItem("数据", "名称", formInfo->m_strAliasName, QVariant::String);
_CreateVariantPropertyItem("数据", "异常方位曲线", formInfo->m_dca_azimuth_curve, QVariant::String);
_CreateVariantPropertyItem("数据", "异常幅度曲线", formInfo->m_dca_amplitude_curve, QVariant::String);
// 通常
_CreateVariantPropertyItem("通常", "例区高度(cm)", formInfo->m_headHeight, QVariant::Int);
// 控制曲线
_CreateVariantPropertyItem("控制曲线", "方位曲线左刻度", formInfo->m_dca_left_azimuth_curve, QVariant::Int);
_CreateVariantPropertyItem("控制曲线", "方位曲线右刻度", formInfo->m_dca_right_azimuth_curve, QVariant::Int);
_CreateVariantPropertyItem("控制曲线", "最大异常幅度", formInfo->m_dca_maximum_amplitude, QVariant::Int);
// 字体
_CreateVariantPropertyItem("字体", "曲线字体", formInfo->m_strAliasNameFont, QVariant::Font);
_CreateVariantPropertyItem("字体", "单位字体", formInfo->m_strUnitFont, QVariant::Font);
m_strCurrentProperty = DCA_PROPERTY;
}
void PropertyWidget::changedDcaProperty(QString strProperty, QVariant varVal)
{
bool flag = false;
// 数据
if("名称" == strProperty)
{
QString newAliasName = varVal.value<QString>();
m_formInfo->m_strAliasName = newAliasName;
m_formInfo->update();
}
if ("异常方位曲线" == strProperty)
{
this->m_formInfo->m_dca_azimuth_curve = varVal.toString();
flag = true;
}
else if ("异常幅度曲线" == strProperty)
{
this->m_formInfo->m_dca_amplitude_curve = varVal.toString();
flag = true;
}
// 通常
else if ("例区高度(cm)" == strProperty)
{
int temp = varVal.toInt();
this->m_formInfo->m_headHeight = temp;
this->m_formInfo->setFixedHeight(temp);
this->m_formInfo->repaint();
}
// 控制曲线
else if ("方位曲线左刻度" == strProperty)
{
this->m_formInfo->m_dca_left_azimuth_curve = varVal.toInt();
flag = true;
}
else if ("方位曲线右刻度" == strProperty)
{
this->m_formInfo->m_dca_right_azimuth_curve = varVal.toInt();
flag = true;
}
else if ("最大异常幅度" == strProperty)
{
this->m_formInfo->m_dca_maximum_amplitude = varVal.toInt();
flag = true;
}
// 字体
else if ("曲线字体" == strProperty)
{
QFont newFont = varVal.value<QFont>();
this->m_formInfo->m_strAliasNameFont = newFont;
this->m_formInfo->repaint();
}
else if ("单位字体" == strProperty)
{
QFont temp = varVal.value<QFont>();
this->m_formInfo->m_strUnitFont = temp;
this->m_formInfo->repaint();
}
if(flag)
{
QVariantMap variantMap;
// 必须用来判断当前道
variantMap["m_strTrackName"] = this->m_formInfo->m_strTrackName;
// 数据
variantMap["m_dca_azimuth_curve"] = this->m_formInfo->m_dca_azimuth_curve;
variantMap["m_dca_amplitude_curve"] = this->m_formInfo->m_dca_amplitude_curve;
// 控制曲线
variantMap["m_dca_left_azimuth_curve"] = this->m_formInfo->m_dca_left_azimuth_curve;
variantMap["m_dca_right_azimuth_curve"] = this->m_formInfo->m_dca_right_azimuth_curve;
variantMap["m_dca_maximum_amplitude"] = this->m_formInfo->m_dca_maximum_amplitude;
emit CallManage::getInstance()->sig_changeDcaProperty(variantMap);
}
}

View File

@ -54,6 +54,7 @@
#define CRACK_PROPERTY "CRACK_PROPERTY" // 裂缝
#define PL_OBJECT_PROPERTY "PL_OBJECT_PROPERTY" // 频率统计图
#define ROSE_OBJECT_PROPERTY "ROSE_OBJECT_PROPERTY" // 玫瑰图
#define DCA_PROPERTY "DCA_PROPERTY" // 裂缝DCA分析
#define SwallCore_Property "SwallCore_Property" //井壁取心
#define SwallCoreItem_Property "SwallCoreItem_Property" //井壁取心item
@ -261,6 +262,10 @@ public:
void initRoseProperty(FormInfo *formInfo);
void changedRoseProperty(QString strProName, QVariant val);
// 裂缝DCA分析
void initDcaProperty(FormInfo *formInfo);
void changedDcaProperty(QString strProperty, QVariant varVal);
//蝌蚪图
void initKedouProperty(FormInfo *formInfo);
void changedKedouProperty(QString strProName, QVariant val);

View File

@ -407,13 +407,14 @@ void FormDraw::setDrawData(QStringList listdt, QJsonObject objInfo)
}
else if("CrackObject" == strType) // 裂缝
{
qDebug() << "==================== number:" << pInfo;
pInfo;
curv;
// qDebug() << "==================== number:" << pInfo;
// pInfo;
// curv;
}
else if("dcaObject" == strType)
{
initDCA(curv);
// m_dca_azimuth_curve异常方位曲线 m_dca_amplitude_curve异常幅度曲线 m_dca_left_azimuth_curve方位曲线左刻度 m_dca_right_azimuth_curve方位曲线右刻度 m_dca_maximum_amplitude最大异常幅度
initDCA(curv, pInfo->m_dca_azimuth_curve, pInfo->m_dca_amplitude_curve, pInfo->m_dca_left_azimuth_curve, pInfo->m_dca_right_azimuth_curve, pInfo->m_dca_maximum_amplitude);
}
else if("tdtObject" == strType)
{
@ -563,7 +564,7 @@ void FormDraw::DisplayLines(QJsonArray linesArray)
DisplayTvd_One(lineObjInfo);
}
// 深度 频率统计图 玫瑰图
else if (strType == "depthObject" || strType == "plObject" || strType == "roseObject" || strType == "CrackObject")
else if (strType == "depthObject" || strType == "plObject" || strType == "roseObject" || strType == "CrackObject" || strType == "dcaObject")
{
// 频率统计图
DisplayType_One(lineObjInfo);
@ -3949,7 +3950,7 @@ FormLine* FormDraw::s_addSantuyibiao(QString strUuid, QString strSlfName, QStrin
return curv;
}
//裂痕
// 裂缝
void FormDraw::s_addCrack(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW)
{
//井名&道名不一致
@ -6182,8 +6183,11 @@ void FormDraw::addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const Q
pLine->setPoints(myPolygon);
}
void FormDraw::initDCA(QMyCustomPlot *widget)
void FormDraw::initDCA(QMyCustomPlot *widget, QString m_csCurveFd, QString m_csCurveFw, int m_dca_left_azimuth_curve, int m_dca_right_azimuth_curve, int m_dca_maximum_amplitude)
{
widget->clearGraphs();
widget->clearItems();
widget->setScaleX(0, 360);
widget->setDepthY(m_iY1, m_iY2);
@ -6201,7 +6205,6 @@ void FormDraw::initDCA(QMyCustomPlot *widget)
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)
{
@ -6223,7 +6226,6 @@ void FormDraw::initDCA(QMyCustomPlot *widget)
//mFillMes->ItemNum=m_nSamples;
//----------------------------
}
QString m_csCurveFw=("AZIX_DCA"); // 方位/倾角 曲线名
//AZIX_DCA
iIndex = mrw.OpenWave(m_csCurveFw.toStdString().c_str());
if (iIndex >= 0)
@ -6258,9 +6260,9 @@ void FormDraw::initDCA(QMyCustomPlot *widget)
float m_PlotSdep=sdepc;
float m_PlotEdep=edepc;
m_LeftVal = 0;
m_RightVal = 360;
float m_Amp = 5000;
m_LeftVal = m_dca_left_azimuth_curve;
m_RightVal = m_dca_right_azimuth_curve;
float m_Amp = m_dca_maximum_amplitude;
QColor m_crFill[4];
m_crFill[0] = QColor(qRgb(255,0,0));

View File

@ -240,7 +240,7 @@ public:
void addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen);
// DCA检测
void initDCA(QMyCustomPlot *widget);
void initDCA(QMyCustomPlot *widget, QString m_dca_azimuth_curve, QString m_dca_amplitude_curve, int m_dca_left_azimuth_curve, int m_dca_right_azimuth_curve, int m_dca_maximum_amplitude);
float ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin=-99999,float flMax=99999);
TDTResultItem* LoadTDTResult_SLF(QString strSlfName);
@ -269,7 +269,7 @@ public slots:
void s_addDrawImage(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW);
//斜井三图一表
FormLine* s_addSantuyibiao(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW);
//裂缝
// 裂缝
void s_addCrack(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW);
//气测/FMT/射孔/文本

View File

@ -537,8 +537,36 @@ void FormInfo::initProperty(QJsonObject obj)
// 显示控制
this->m_crack_decimal_digits = obj["m_crack_decimal_digits"].toInt(); // 小数位数
}
else if ("dcaObject" == strType)
{
this->m_dca_azimuth_curve = obj["m_dca_azimuth_curve"].toString();
this->m_dca_amplitude_curve = obj["m_dca_amplitude_curve"].toString();
// 通常
this->m_headHeight = obj["m_headHeight"].toInt(); // 例区高度
// 控制曲线
this->m_dca_left_azimuth_curve = obj["m_dca_left_azimuth_curve"].toInt(); // 方位曲线左刻度
this->m_dca_right_azimuth_curve = obj["m_dca_right_azimuth_curve"].toInt();
this->m_dca_maximum_amplitude = obj["m_dca_maximum_amplitude"].toInt();
// 字体
{
// 名称
QStringList fontParts = obj["m_strAliasNameFont"].toString().split(","); // 按逗号拆分
if (fontParts.size() >= 2) {
this->m_strAliasNameFont.setFamily(fontParts[0]); // 设置字体名称
this->m_strAliasNameFont.setPointSize(fontParts[1].toInt()); // 设置字号
}
}
{
// 单位
QStringList fontParts = obj["m_strUnitFont"].toString().split(","); // 按逗号拆分
if (fontParts.size() >= 2) {
this->m_strUnitFont.setFamily(fontParts[0]); // 设置字体名称
this->m_strUnitFont.setPointSize(fontParts[1].toInt()); // 设置字号
}
}
}
if ("plObject" == strType || ("roseObject" == strType) || "CrackObject" == strType)
if ("plObject" == strType || "roseObject" == strType || "CrackObject" == strType)
{
// 通常
this->m_headHeight = obj["m_headHeight"].toInt(); // 例区高度
@ -994,6 +1022,27 @@ QJsonObject FormInfo::makeJson()
// 显示控制
rootObj["m_crack_decimal_digits"] = this->m_crack_decimal_digits; // 小数位数
}
else if (m_strType == "CrackObject")
{
}
else if (m_strType == "dcaObject")
{
// 数据
// 井文件名称
// 名称
rootObj["m_dca_azimuth_curve"] = this->m_dca_azimuth_curve;
rootObj["m_dca_amplitude_curve"] = this->m_dca_amplitude_curve;
// 通常
rootObj["m_headHeight"] = this->m_headHeight; // 例区高度
// 控制曲线
rootObj["m_dca_left_azimuth_curve"] = this->m_dca_left_azimuth_curve; // 方位曲线左刻度
rootObj["m_dca_right_azimuth_curve"] = this->m_dca_right_azimuth_curve;
rootObj["m_dca_maximum_amplitude"] = this->m_dca_maximum_amplitude;
// 字体
rootObj["m_strAliasNameFont"] = this->m_strAliasNameFont.toString(); // 名称
rootObj["m_strUnitFont"] = this->m_strUnitFont.toString(); // 单位
}
if(m_strType == "CrackObject" || m_strType == "plObject" || m_strType == "roseObject")
{
@ -1429,6 +1478,10 @@ void FormInfo::paintEvent(QPaintEvent* event)
{
QFont oldFont = painter.font();
painter.setFont(this->m_curveNameFont);
if(this->m_strType == "dcaObject")
{
rt.setY(rt.y() - 60);
}
painter.drawText(rt, Qt::AlignCenter, text);
painter.setFont(oldFont);
}
@ -1782,6 +1835,36 @@ void FormInfo::paintEvent(QPaintEvent* event)
this->paintClassify(painter, compassCenterY);
}
if(this->m_strType == "dcaObject")
{
int w = rect.width() / 4;
QRect rt = rect;
rt.setX(rect.left());
rt.setY(rect.top() + rect.height() / 3);
rt.setWidth(w);
rt.setHeight(rect.height() / 3);
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern));
painter.setPen(QPen(Qt::red, 1));
painter.drawRect(rt);
rt.setX(rt.x() + w);
rt.setWidth(w);
painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
painter.setPen(QPen(Qt::green, 1));
painter.drawRect(rt);
rt.setX(rt.x() + w);
rt.setWidth(w);
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
painter.setPen(QPen(Qt::blue, 1));
painter.drawRect(rt);
rt.setX(rt.x() + w);
rt.setWidth(w);
painter.setBrush(QBrush(Qt::black, Qt::SolidPattern));
painter.setPen(QPen(Qt::black, 1));
painter.drawRect(rt);
}
QWidget::paintEvent(event);
}

View File

@ -387,6 +387,25 @@ public:
//井斜方位图
QString m_pl_deviCurve = "DEVI"; // 井斜曲线
// 裂缝DCA分析
// 数据
// 井文件名称
// 名称
QString m_dca_azimuth_curve = "AZIX_DCA"; // 异常方位曲线
QString m_dca_amplitude_curve = "DCA"; // 异常幅度曲线
// 通常
// 例区高度(cm)
// 控制曲线
int m_dca_left_azimuth_curve = 0; // 方位曲线左刻度
int m_dca_right_azimuth_curve = 360; // 方位曲线右刻度
int m_dca_maximum_amplitude = 5000; // 最大异常幅度
public:
void setLineWidth(double dWidth);
double getLineWidth();

View File

@ -192,6 +192,11 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel
// 玫瑰图属性修改
connect(CallManage::getInstance(), SIGNAL(sig_changeRoseProperty(QVariantMap)), this, SLOT(s_changeRoseProperty(QVariantMap)));
// 裂缝DCA分析属性修改
connect(CallManage::getInstance(), SIGNAL(sig_changeDcaProperty(QVariantMap)), this, SLOT(s_changeDcaProperty(QVariantMap)));
connect(CallManage::getInstance(), SIGNAL(sig_changeDrawProperty(QVariantList)), this, SLOT(s_changeDrawProperty(QVariantList)));
// 岩心分析
@ -11765,6 +11770,25 @@ void QMyCustomPlot::drawRose(bool bTableData, QString csCurveDDIR, QString csCur
this->replot();
}
void QMyCustomPlot::s_changeDcaProperty(QVariantMap variantMap)
{
QString strTrackName = variantMap["m_strTrackName"].toString();
if(this->m_strTrackName != strTrackName)
{
return;
}
// 数据
QString m_dca_azimuth_curve = variantMap["m_dca_azimuth_curve"].toString();
QString m_dca_amplitude_curve = variantMap["m_dca_amplitude_curve"].toString();
// 控制曲线
int m_dca_left_azimuth_curve = variantMap["m_dca_left_azimuth_curve"].toInt();
int m_dca_right_azimuth_curve = variantMap["m_dca_right_azimuth_curve"].toInt();
int m_dca_maximum_amplitude = variantMap["m_dca_maximum_amplitude"].toInt();
m_formDraw->initDCA(this, m_dca_azimuth_curve, m_dca_amplitude_curve, m_dca_left_azimuth_curve, m_dca_right_azimuth_curve, m_dca_maximum_amplitude);
}
void QMyCustomPlot::addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen)
{
QPolygonF myPolygon;

View File

@ -646,6 +646,9 @@ public slots:
// 玫瑰图
void s_changeRoseProperty(QVariantMap variantMap);
// 裂缝DCA分析
void s_changeDcaProperty(QVariantMap variantMap);
// 岩心分析
void s_changeCorePhysicsProperty(QVariantMap variantMap);