diff --git a/CallManage/CallManage.h b/CallManage/CallManage.h index b6dbc51..71c9567 100644 --- a/CallManage/CallManage.h +++ b/CallManage/CallManage.h @@ -182,8 +182,11 @@ signals: //改变深度属性 void sig_changeDepthProperty(QVariantList vlist); + //改变频率统计图属性 + void sig_changePlObjectProperty(QVariantMap variantMap); + //改变岩心分析 - void sig_changeCorePhysicsProperty(QVariantMap vlist); + void sig_changeCorePhysicsProperty(QVariantMap variantMap); //右键--添加分段线 void sig_AddShiftLine(QString strUuid, double left_Low, double right_Hight); diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index 83bbd05..6294b2d 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -4076,7 +4076,7 @@ void PropertyWidget::initPlObjectProperty(FormInfo *formInfo) _CreateVariantPropertyItem("控制曲线", "最大值", formInfo->m_pl_controlMaxValue, QVariant::Int); _CreateVariantPropertyItem("方位频率", "扇形", formInfo->m_pl_sectorCount, QVariant::Int); - _CreateVariantPropertyItem("方位频率", "圆半径", formInfo->m_pl_circleRadius, QVariant::Int); + _CreateVariantPropertyItem("方位频率", "圆半径(cm)", formInfo->m_pl_circleRadius, QVariant::Int); _CreateVariantPropertyItem("方位频率", "圆线颜色", formInfo->m_pl_circleColor, QVariant::Color); _CreateVariantPropertyItem("方位频率", "圆线宽度", formInfo->m_pl_circleLineWidth, QVariant::Int); _CreateVariantPropertyItem("方位频率", "是否填充", formInfo->m_pl_isFillEnabled, QVariant::Bool); @@ -4117,21 +4117,35 @@ void PropertyWidget::initPlObjectProperty(FormInfo *formInfo) void PropertyWidget::changedPlObjectProperty(QString strProperty, QVariant varVal) { + bool flag = false; if ("数据名称" == strProperty) { m_formInfo->m_strAliasName = varVal.toString(); this->m_formInfo->repaint(); } - if ("显示单位" == strProperty) + else if ("数据类型" == strProperty) + { + this->m_formInfo->m_pl_dataType = varVal.toInt(); + } + else if ("显示单位" == strProperty) { this->m_formInfo->m_strUnit = varVal.toString(); this->m_formInfo->repaint(); } + else if ("方位曲线" == strProperty) + { + this->m_formInfo->m_pl_azimuthCurve = varVal.toString(); + } + else if ("倾角曲线" == strProperty) + { + this->m_formInfo->m_pl_inclinationCurve = varVal.toString(); + } else if ("例区高度" == strProperty) { int temp = varVal.toInt(); this->m_formInfo->m_headHeight = temp; this->m_formInfo->setFixedHeight(temp); + this->m_formInfo->repaint(); } else if ("名称" == strProperty || "曲线名称" == strProperty) { @@ -4154,38 +4168,47 @@ void PropertyWidget::changedPlObjectProperty(QString strProperty, QVariant varVa else if ("曲线名" == strProperty) { this->m_formInfo->m_pl_controlCurveName = varVal.toString(); + flag = true; } else if ("最小值" == strProperty) { this->m_formInfo->m_pl_controlMinValue = varVal.toDouble(); + flag = true; } else if ("最大值" == strProperty) { this->m_formInfo->m_pl_controlMaxValue = varVal.toDouble(); + flag = true; } else if ("扇形" == strProperty) { this->m_formInfo->m_pl_sectorCount = varVal.toInt(); + flag = true; } else if ("圆半径(cm)" == strProperty) { this->m_formInfo->m_pl_circleRadius = varVal.toInt(); + flag = true; } else if ("圆线颜色" == strProperty) { this->m_formInfo->m_pl_circleColor = varVal.value(); + flag = true; } else if ("圆线宽度" == strProperty) { this->m_formInfo->m_pl_circleLineWidth = varVal.toInt(); + flag = true; } else if ("是否填充" == strProperty) { this->m_formInfo->m_pl_isFillEnabled = varVal.toBool(); + flag = true; } else if ("填充颜色" == strProperty) { this->m_formInfo->m_pl_fillColor = varVal.value(); + flag = true; } else if ("线数" == strProperty) { @@ -4291,6 +4314,28 @@ void PropertyWidget::changedPlObjectProperty(QString strProperty, QVariant varVa { this->m_formInfo->m_pl_custom2 = varVal.toBool(); } + + if(flag) + { + QVariantMap variantMap; + variantMap["m_pl_controlCurveName"] = this->m_formInfo->m_pl_controlCurveName; + variantMap["m_pl_controlMinValue"] = this->m_formInfo->m_pl_controlMinValue; + variantMap["m_pl_controlMaxValue"] = this->m_formInfo->m_pl_controlMaxValue; + variantMap["m_pl_sectorCount"] = this->m_formInfo->m_pl_sectorCount; + variantMap["m_pl_circleRadius"] = this->m_formInfo->m_pl_circleRadius; + variantMap["m_pl_circleColor"] = this->m_formInfo->m_pl_circleColor; + variantMap["m_pl_circleLineWidth"] = this->m_formInfo->m_pl_circleLineWidth; + variantMap["m_pl_isFillEnabled"] = this->m_formInfo->m_pl_isFillEnabled; + variantMap["m_pl_fillColor"] = this->m_formInfo->m_pl_fillColor; + + + + + + + + emit CallManage::getInstance()->sig_changePlObjectProperty(variantMap); + } } void PropertyWidget::changedDepthProperty(QString strProperty, QVariant varVal) diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index c9f47d4..99cf183 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -189,13 +189,12 @@ void FormDraw::setDrawData(QStringList listdt, QJsonObject objInfo) initDepth(curv); // 在s_addDepth方法设置单位无效 - // 读取json + // 读json后 重新设置样式 // 设置左侧显示属性 设置界面样式 if(pInfo->m_strUnit.isEmpty()){ pInfo->m_strUnit = "(米)"; pInfo->m_strUnitFont = QFont("微软雅黑", 8); } - // 读json后 重新设置样式 // 头部高度 pInfo->setFixedHeight(pInfo->m_headHeight); // 标尺颜色 @@ -310,14 +309,84 @@ void FormDraw::setDrawData(QStringList listdt, QJsonObject objInfo) curv->yAxis->setSubTickPen(tickPen); } } - else if("plObject" == strType) + else if("plObject" == strType) // 频率统计图 { + initFgrq(curv); + + // 读json后 重新设置样式 + // 设置左侧显示属性 设置界面样式 if(pInfo->m_strUnit.isEmpty()){ pInfo->m_strUnit = "(°)"; pInfo->m_strUnitFont = QFont("微软雅黑", 8); } + // 例区高度 + pInfo->setFixedHeight(pInfo->m_headHeight); - initFgrq(curv); + + +// // 数据 +// int m_pl_dataType = 0; // 数据类型 +// QString m_pl_azimuthCurve = "DDIR"; // 方位曲线 +// QString m_pl_inclinationCurve = "DANG"; // 倾角曲线 +// // 字体相关配置 +// QFont m_pl_fontScale = QFont("微软雅黑", 7); // 刻度字体大小 +// // 控制曲线参数 +// QString m_pl_controlCurveName = "GRAD"; // 控制曲线名 +// double m_pl_controlMinValue = 0; // 控制最小值 +// double m_pl_controlMaxValue = 100; // 控制最大值 +// // 方位频率绘图参数 +// int m_pl_sectorCount = 36; // 扇形数量 +// double m_pl_circleRadius = 1; // 圆半径(cm) +// QColor m_pl_circleColor = Qt::black; // 圆线颜色 +// int m_pl_circleLineWidth = 2; // 圆线宽度 +// bool m_pl_isFillEnabled = true; // 是否启用填充 +// QColor m_pl_fillColor = Qt::black; // 填充颜色 +// // 倾角频率绘图参数 +// int m_pl_lineNumber = 9; // 线数 +// double m_pl_lineHeight = 2; // 统计线高度 +// int m_pl_lineThickness = 2; // 线粗细 +// QColor m_pl_lineColor = Qt::black; // 线颜色 +// bool m_pl_drawAnnotation = true; // 是否绘制标注 +// bool m_pl_drawHistogram = true; // 是否绘制直方图 +// // 基线参数 +// int m_pl_baselineWidth = 2; // 基线宽度 +// QColor m_pl_baselineColor = Qt::black; // 基线颜色 +// // 统计参数 +// int m_pl_statInterval = 20; // 统计间隔 +// double m_pl_minInclination = 0; // 最小倾角 +// double m_pl_maxInclination = 90; // 最大倾角 +// // 地质要素分类开关 +// bool m_pl_highGap = false; // 高导缝 +// bool m_pl_highReservoir = false; // 高阻缝 +// bool m_pl_reticularFracture = false; // 网状缝 +// bool m_pl_inducedFracture = false; // 诱导缝 +// bool m_pl_bedLayer = false; // 层理 +// bool m_pl_erosionSurface = false; // 侵蚀面 +// bool m_pl_pore = false; // 孔洞 +// bool m_pl_vesicle = false; // 气孔 +// bool m_pl_gravel = false; // 砾石 +// bool m_pl_nodule = false; // 结核 +// bool m_pl_lumps = false; // 团块 +// bool m_pl_fault = false; // 断层 +// bool m_pl_verticalFracture = false; // 垂直缝 +// bool m_pl_custom1 = false; // 自定义1 +// bool m_pl_custom2 = false; // 自定义2 + + + double m_LeftVal3 = pInfo->m_pl_controlMinValue; + double m_RightVal3 = pInfo->m_pl_controlMaxValue; + + + QString csCurveGrad = "GRAD"; + double LeftVal3 = 0; + double RightVal3 = 100; + int nArc = 36; + double nR = 50; + QColor crArc = Qt::black; + int nArcLineWidth = 1; + bool bFill = true; + QColor crFill = Qt::black; + curv->fgrqDraw(csCurveGrad, LeftVal3, RightVal3, nArc, nR, crArc, nArcLineWidth, bFill, crFill); } else if("roseObject" == strType) { @@ -476,7 +545,7 @@ void FormDraw::DisplayLines(QJsonArray linesArray) } else if (strType == "plObject") { - // 斜井三图一表属性 + // 频率统计图 displayPlObject(lineObjInfo); } else @@ -491,7 +560,17 @@ void FormDraw::DisplayLines(QJsonArray linesArray) void FormDraw::displayPlObject(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); } // 深度 @@ -5929,255 +6008,251 @@ void FormDraw::initFgrq(QMyCustomPlot *widget) QCPAxis *xAxis = widget->xAxis; widget->xAxis = yAxis; widget->yAxis = xAxis; - - this->fgrqDraw(widget); } -void FormDraw::fgrqDraw(QMyCustomPlot *widget) +void FormDraw::fgrqDraw(QMyCustomPlot *widget, double m_LeftVal3, double m_RightVal3) { // widget->clearGraphs(); // widget->clearItems(); - // if(m_Value == NULL) - { - m_bTableData = false; // 表格 曲线 - m_csCurveDDIR = "DDIR"; // 方位 曲线名 - m_csCurveDANG = "DANG";//倾角 - m_csCurveGrad = "GRAD"; +// // 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"; +// m_qsTable="FRAC_HOLE.TABLE"; +// m_qsDIR=("DDIR"); // 方位 曲线名 +// m_qsDIP=("DANG");//倾角 +// m_qsDepth="DEPT"; +// m_qsID = "ID"; - Refurbish(); - } +// Refurbish(); +// } - double nR = 50; +// double nR = 50; - QPen wPen(Qt::black, 2); - double centerX = widget->m_iX2/2; +// 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 flVal = 0.0f; +// float x,y,x1,y1,x2,y2; +// float ifdir[360]; +// int m_nArc = 36; +// 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 deps; - float ftmpSdep = m_SDep; - float ftmpEdep = m_EDep; - if (m_bTableData) - { - ReadFracDef(); - for (int i = 0 ; i < iFracType ; i++) - { - m_bTypeDraw[i] = true; - } +// 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; - } +// 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; +// 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; +// 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; +// 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); +// 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 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; +// 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] ++; +// if ( deps >= flDep &&deps < (flDep+ nstep) ) +// { +// flVal = frac.DIR;//方位 +// int j = flVal/x1; +// if ( j >= 0 && j< m_nArc+1 ) +// ifdir[j] ++; - flVal = frac.DIPorS;//倾角 - //按倾角范围统计 - if(flVal> maxd || flVal < mind) - { - //i++; - continue; - } - // j = (flVal-mind)/y1;//j = flVal/y1+1; - // if ( j >= 0 && j< m_nLine+1 ) - // ifdir[j] ++; - } - } - } - else - { - while ( 1 ) - { - deps = flDep + i * m_Curve.DepLevel; +// 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; - } +// 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_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] ++; +// 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; - } +// tempf = (deps-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5; +// if(tempf<0 ) +// { +// i++; +// continue; +// } - //按倾角范围统计 - if(flVal> maxd || flVal < mind) - { - i++; - continue; - } - i ++; - } - } +// //按倾角范围统计 +// 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); +// x = centerY; +// y = centerX; +// for(int i=0;i<=m_nArc;i++) +// { +// if(ifdir[i] <= 0.0f) +// continue; +// QCPItemPolygon* pol = new QCPItemPolygon(widget); +// pol->topLeft->setCoords(x, y); +// pol->bottomRight->setCoords(x, y); - // pol->setPloyVal(i,flVal, ifdir[i]); +// // 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); +// 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); +// 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); +// // 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); - // } - } +// // if(m_bFill) +// // { +// // QPainterPath myPath; +// // myPath.addPolygon(myPolygon); +// // pDC->fillPath(myPath,textBrushFill); +// // } +// // if(m_nArcLineWidth>=1) +// // { +// // pDC->setPen(pPenArc); +// // // pDC->drawPolygon(myPolygon); +// // } +// } - flDep += nstep; - } +// flDep += nstep; +// } } diff --git a/logPlus/formdraw.h b/logPlus/formdraw.h index 02d0946..bed757e 100644 --- a/logPlus/formdraw.h +++ b/logPlus/formdraw.h @@ -238,7 +238,7 @@ public: //频率统计图 void initFgrq(QMyCustomPlot *widget); - void fgrqDraw(QMyCustomPlot *widget); + void fgrqDraw(QMyCustomPlot *widget, double m_LeftVal3, double m_RightVal3); //玫瑰图 void initRose(QMyCustomPlot *widget); void addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen); diff --git a/logPlus/forminfo.h b/logPlus/forminfo.h index 39b3f14..905e22f 100644 --- a/logPlus/forminfo.h +++ b/logPlus/forminfo.h @@ -254,7 +254,7 @@ public: double m_pl_controlMaxValue = 100; // 控制最大值 // 方位频率绘图参数 int m_pl_sectorCount = 36; // 扇形数量 - double m_pl_circleRadius = 1; // 圆半径(cm) + double m_pl_circleRadius = 50; // 圆半径(cm) QColor m_pl_circleColor = Qt::black; // 圆线颜色 int m_pl_circleLineWidth = 2; // 圆线宽度 bool m_pl_isFillEnabled = true; // 是否启用填充 diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index e759253..9e63c40 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -141,6 +141,9 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel connect(CallManage::getInstance(), SIGNAL(sig_ReloadPlot(QString, QString, QString)), this, SLOT(s_ReloadPlot(QString, QString, QString))); // 深度属性修改 connect(CallManage::getInstance(), SIGNAL(sig_changeDepthProperty(QVariantList)), this, SLOT(s_changeDepthProperty(QVariantList))); + + // 深度属性修改 + connect(CallManage::getInstance(), SIGNAL(sig_changePlObjectProperty(QVariantMap)), this, SLOT(s_changePlObjectProperty(QVariantMap))); connect(CallManage::getInstance(), SIGNAL(sig_changeDrawProperty(QVariantList)), this, SLOT(s_changeDrawProperty(QVariantList))); // 岩心分析 @@ -10019,3 +10022,454 @@ void QMyCustomPlot::resetPosition() //刷新 replot(); } + +void QMyCustomPlot::s_changePlObjectProperty(QVariantMap variantMap) +{ + QString csCurveGrad = variantMap["m_pl_controlCurveName"].toString(); + double LeftVal3 = variantMap["m_pl_controlMinValue"].toDouble(); + double RightVal3 = variantMap["m_pl_controlMaxValue"].toDouble(); + int nArc = variantMap["m_pl_sectorCount"].toInt(); + double nR = variantMap["m_pl_circleRadius"].toDouble(); + QColor crArc = variantMap["m_pl_circleColor"].value(); + int nArcLineWidth = variantMap["m_pl_circleLineWidth"].toInt(); + bool bFill = variantMap["m_pl_isFillEnabled"].toBool(); + QColor crFill = variantMap["m_pl_fillColor"].value(); + + + + this->fgrqDraw(csCurveGrad, LeftVal3, RightVal3, nArc, nR, crArc, nArcLineWidth, bFill, crFill); +} + + +void QMyCustomPlot::fgrqDraw(QString csCurveGrad, double LeftVal3, double RightVal3, int nArc, + double nR, QColor crArc, int nArcLineWidth, bool bFill, QColor crFill) +{ + this->clearGraphs(); + this->clearItems(); + + // if(m_Value == NULL) + { + m_bTableData = false; // 表格 曲线 + m_csCurveDDIR = "DDIR"; // 方位 曲线名 + m_csCurveDANG = "DANG";//倾角 + this->m_csCurveGrad = csCurveGrad; + + m_qsTable="FRAC_HOLE.TABLE"; + m_qsDIR=("DDIR"); // 方位 曲线名 + m_qsDIP=("DANG");//倾角 + m_qsDepth="DEPT"; + m_qsID = "ID"; + + Refurbish(); + } + +// double nR = 50; + QPen wPen(crArc, nArcLineWidth); + double centerX = this->m_iX2/2; + float flVal = 0.0f; + float x,y,x1,y1,x2,y2; + float ifdir[360]; + + float m_LeftVal = 0.0f; + float 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(this); + 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(this); + 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<=nArc;i++) ifdir[i]=0.; + x1 = 360./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< 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(gradRightVal3){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< 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./ nArc ; + dirmax=0; dipmax=0; + for(i=0;i<=nArc;i++) + if (dirmaxtopLeft->setCoords(x , y ); + pol->bottomRight->setCoords(x , y ); + pol->setBrushColor(crFill); + + // 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(this); +// prt->topLeft->setCoords(x, y); +// prt->bottomRight->setCoords(x, y); + } + + + + + flDep += nstep; + } + + this->drawDipAngle(0, 0); + this->replot(); +} + +void QMyCustomPlot::drawDipAngle(double centerX, double centerY) +{ + // 2. 开启 QCustomPlot 的绘制层 + this->setBackground(Qt::white); + this->axisRect()->setBackground(Qt::white); + + // 3. 获取绘制对象(关键!直接拿到 painter) + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + + // 4. 获取绘制区域 + QRect drawRect = this->axisRect()->rect(); + + // 5. 画测试线:左上角 → 右下角(红色粗线,看得清) + QPen pen(Qt::red); + pen.setWidth(2); + painter.setPen(pen); + painter.drawLine(drawRect.topLeft(), drawRect.bottomRight()); + + // 6. 标记文字 + painter.setPen(Qt::black); + painter.drawText(drawRect, Qt::AlignTop|Qt::AlignLeft, "左上角"); + painter.drawText(drawRect, Qt::AlignBottom|Qt::AlignRight, "右下角"); + + + + + + + + + + + + + + + + + + + +// // 拿到 QCustomPlot 的画布区域 +// QRect rect = this->axisRect()->rect(); // 绘制区域(和你原来的 rect 一致) + +//// rect.getRect(); + +// // 你原来的所有坐标逻辑 1:1 保留 +// int baseY = rect.top() + rect.height() * 2 / 3; +// int textH = rect.height() / 3; +// int lineY = baseY + textH - 7; +// int x1 = rect.left() + 20; +// int x2 = rect.right() - 30; + +// // 开始在 QCustomPlot 上绘制 +// QPainter painter(this); +// painter.setRenderHint(QPainter::Antialiasing); + +// // 1. 画底部刻度主线(完全不变) +// painter.drawLine(0, 0, 100, 100); + +// // 2. 字体 +//// QFont oldFont = painter.font(); +//// painter.setFont(m_cp_curveScale); + +// // 3. 你的参数(完全不变) +// int minVal = 0; +// int maxVal = 100; +//// if(m_cp_scaleDivisionsOrCustom <= 0) +//// m_cp_scaleDivisionsOrCustom = 1; +// int tickCount = 9 + 1; +// int tickHeight = 6; +// int textOffsetUp = 18; + +// // 4. 计算步长(完全不变) +// double step = (maxVal - minVal) * 1.0 / (tickCount - 1); + +// // 5. 循环画刻度 + 文字(完全不变) +// for (int i = 0; i < tickCount; ++i) { +// int val = minVal + qRound(step * i); +// qreal ratio = (val - minVal) * 1.0 / (maxVal - minVal); +// int tickX = x1 + ratio * (x2 - x1); + +// // 画小刻度 +// painter.drawLine(tickX, lineY, tickX, lineY - tickHeight); + +// // 画文字(位置完全一样) +// painter.drawText( +// tickX - 12, +// lineY - tickHeight - textOffsetUp, +// 24, 14, +// Qt::AlignCenter, +// QString::number(val) +// ); +// } + +// painter.setFont(oldFont); +} + +void QMyCustomPlot::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 QMyCustomPlot::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(); //关闭井文件 + } +} + diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index f58cf87..611c007 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -552,8 +552,11 @@ public slots: // 深度 void s_changeDepthProperty(QVariantList vlist); + // 频率统计图 + void s_changePlObjectProperty(QVariantMap variantMap); + // 岩心分析 - void s_changeCorePhysicsProperty(QVariantMap vlist); + void s_changeCorePhysicsProperty(QVariantMap variantMap); void onAddRect(); @@ -600,6 +603,49 @@ public: virtual void contextMenuEvent(QContextMenuEvent *event); + + + typedef struct FRACTABLE + { + float DEP; //深度 + float AorX; + float XETAorH; + float W; + float DIPorS; //倾角 + float DIR; //方位 + float ID; //裂缝代码/可信度 + float NUM; + float X[16],Y[16];//X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9; + }FRAC_TABLE; + //蝌蚪图 + typedef struct FRACDEF + { + int iCode; //代码 + QString csName; // 名称 + int iType; //形状代码(1:正弦曲线 2:连线 3:封闭区域) + QColor crColor; //颜色(红 绿 蓝) + int nLineWidth; //线宽度 + int bDraw; // 是否显示 + }FRAC_DEF; + QList m_FracTabList; // -- + QList m_FracDefList; + bool m_bTypeDraw[iFracType]; // -- + int m_bTableData = 0; + QString m_csCurveDDIR,m_csCurveDANG,m_csCurveGrad; + Slf_CURVE m_Curve,m_Curve2,m_Curve3; + QString m_qsWellName,m_qsTable; + QString m_qsDepth,m_qsDIP,m_qsDIR,m_qsID,m_qsProperty; // 控制曲线 + float m_SDep,m_EDep,m_Rlev; + // csCurveGrad曲线名 LeftVal3最小值 RightVal3最大值 nArc扇形 nR圆半径 crArc圆颜色 nArcLineWidth圆线宽度 bFill是否填充 + void fgrqDraw(QString csCurveGrad, double LeftVal3, double RightVal3, int nArc, double nR, QColor crArc, int nArcLineWidth, bool bFill, QColor crFill); + // 绘制倾角 + void drawDipAngle(double centerX, double centerY); + + void Refurbish(); + + int m_PointNum; + char *m_Value = NULL,*m_Value2 = NULL,*m_Value3 = NULL; + void ReadData(QString strSlfName, QString strLineName, int iCurve, Slf_CURVE *curve); private: };