diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index 72160ce..fa556d6 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -25,6 +25,8 @@ #include "TransparentDraggableGeoLith.h" #include "TransparentDraggableRect.h" +#include "TransparentGroupResult.h" + //当前曲线类型 #define Widget_Property "Widget_Property" #define Well_Property "Well_Property" //井 @@ -32,6 +34,8 @@ #define Curve_Property "Curve_Property" //曲线 #define Wave_Property "Wave_Property" //波列 #define Table_Property "Table_Property" //解释结论 +#define JieshiItem_Property "JieshiItem_Property" //解释结论Item + #define Head_Property "Head_Property" //图头,单元格 #define Gujing_Property "Gujing_Property" //固井结论 @@ -110,6 +114,7 @@ public: bool m_bSelfChange=false; + TransparentGroupResult* m_tdJieshi; // TransparentDraggableGujing* m_tdGujing; TransparentDraggableSwallCore* m_tdSwallCore; @@ -146,6 +151,9 @@ public: // 波列属性 void initWaveProperty(FormInfo *formInfo, int nType = 3); + // 解释结论Item属性 + void initJieshiItemProperty(TransparentGroupResult* tdJieshi, double lower, double upper, QString strResult); + // 固井结论属性 void initGujingProperty(FormInfo *formInfo); void initGujingItemProperty(TransparentDraggableGujing* tdGujing, double lower, double upper, QString strResult); diff --git a/logPlus/TransparentGroupResult.cpp b/logPlus/TransparentGroupResult.cpp index 7f6411f..6cf036f 100644 --- a/logPlus/TransparentGroupResult.cpp +++ b/logPlus/TransparentGroupResult.cpp @@ -1,5 +1,7 @@ #include "TransparentGroupResult.h" #include "TransparentDraggableResult.h" +#include "PropertyWidget.h" + extern double g_dPixelPerCm;//每厘米像素数 TransparentGroupResult::TransparentGroupResult(QMyCustomPlot *parentPlot, TransparentGroupResult *upDraggableResult, QString strUuid, double minWidth, QString strTitle) @@ -62,6 +64,11 @@ void TransparentGroupResult::setTitle(QString strTitle) //mPlot->replot(); } +QString TransparentGroupResult::getTitle() +{ + return mstrTitle; +} + //设置解释结论 void TransparentGroupResult::setResult(QString filePath) { @@ -138,6 +145,7 @@ void TransparentGroupResult::setGroupShowPos(int nSPos) void TransparentGroupResult::setFloorVisible(bool bs) { + mItemTitle->setRotation(90); mItemTitle->setVisible(bs); mPlot->replot(); } @@ -148,6 +156,122 @@ void TransparentGroupResult::setFloorFont(QFont f) mPlot->replot(); } +void TransparentGroupResult::setFloorRot(double dr) +{ + mItemTitle->setRotation(dr); + mPlot->replot(); +} + +void TransparentGroupResult::setDragRect(int dMode, double dragVal) +{ + QCPRange mDragStartRange = getRange(); + QCPRange newRange = mDragStartRange; + + switch (dMode) { + case DragLeft: { + //double proposedLeft = mDragStartRange.lower + dx; + double proposedLeft = dragVal; + // 确保不超出轴范围且不使宽度小于最小值 + newRange.lower = qBound( + //mPlot->xAxis->range().lower, + getMyLower(), + proposedLeft, + mDragStartRange.upper - mMinWidth); + break; + } + case DragRight: { + //double proposedRight = mDragStartRange.upper + dx; + double proposedRight = dragVal; + // 确保不超出轴范围且不使宽度小于最小值 + newRange.upper = qBound( + mDragStartRange.lower + mMinWidth, + proposedRight, + getMyUpper()); + //mPlot->xAxis->range().upper); + break; + } + case DragRect: { + double width = mDragStartRange.size(); + //double center = mDragStartRange.center() + dx; + double center = mDragStartRange.center() + dragVal; + newRange.lower = center - width / 2; + newRange.upper = center + width / 2; + + // 检查是否超出轴范围 + if (newRange.lower < getMyLower()) { + newRange.lower = getMyLower(); + newRange.upper = newRange.lower + width; + } + else if (newRange.upper > getMyUpper()) { + newRange.upper = getMyUpper(); + newRange.lower = newRange.upper - width; + } + break; + } + default: + break; + } + // 最终确保宽度不小于最小值(针对整体拖动的情况) + if (newRange.size() < mMinWidth) { + if (mDragMode == DragRect) { + // 如果是整体拖动,保持中心点不变 + double center = newRange.center(); + newRange.lower = center - mMinWidth / 2; + newRange.upper = center + mMinWidth / 2; + } + else { + // 如果是边界拖动,强制设置最小宽度 + if (mDragMode == DragLeft) { + newRange.lower = newRange.upper - mMinWidth; + } + else if (mDragMode == DragRight) { + newRange.upper = newRange.lower + mMinWidth; + } + } + } + + setRange(newRange.lower, newRange.upper); + + if (m_vecResult.size() == 1) + { + TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(0))); + if (pret) + { + pret->setRange(newRange.lower, newRange.upper); + } + } + else + { + if (mDragMode == DragRect) + { + float offset = mDragStartRange.lower - getRange().lower; + for (int i = 0; i < m_vecResult.size(); i++) + { + TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(i))); + if (pret == NULL) + continue; + QCPRange rg = pret->getRange(); + pret->setRange(rg.lower - offset, rg.upper - offset); + } + + } + else + { + TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(0))); + if (pret) + { + pret->setRange(pret->getRange().lower, newRange.upper); + } + pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.last())); + if (pret) + { + pret->setRange(newRange.lower, pret->getRange().upper); + } + } + } + mPlot->replot(); +} + // 删除框图 void TransparentGroupResult::deleteRect() { @@ -453,7 +577,11 @@ void TransparentGroupResult::onMouseRelease(QMouseEvent *event) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) { - + { + double low = mRect->topLeft->coords().x(); + double hight = mRect->bottomRight->coords().x(); + PropertyService()->initJieshiItemProperty(this, low, hight, m_Result); + } if (mDragRect->visible()) { double y = mPlot->xAxis->pixelToCoord(event->pos().y()); @@ -461,134 +589,49 @@ void TransparentGroupResult::onMouseRelease(QMouseEvent *event) QCPRange newRange = mDragStartRange; + double dval = dy; switch (mDragMode) { case DragLeft: { - //double proposedLeft = mDragStartRange.lower + dx; - double proposedLeft = mDragStartRange.lower + dy; - // 确保不超出轴范围且不使宽度小于最小值 - newRange.lower = qBound( - //mPlot->xAxis->range().lower, - getMyLower(), - proposedLeft, - mDragStartRange.upper - mMinWidth); + dval = mDragStartRange.lower + dy; break; } case DragRight: { - //double proposedRight = mDragStartRange.upper + dx; - double proposedRight = mDragStartRange.upper + dy; - // 确保不超出轴范围且不使宽度小于最小值 - newRange.upper = qBound( - mDragStartRange.lower + mMinWidth, - proposedRight, - getMyUpper()); - //mPlot->xAxis->range().upper); + dval = mDragStartRange.upper + dy; break; } case DragRect: { - double width = mDragStartRange.size(); - //double center = mDragStartRange.center() + dx; - double center = mDragStartRange.center() + dy; - newRange.lower = center - width / 2; - newRange.upper = center + width / 2; - - // 检查是否超出轴范围 - if (newRange.lower < getMyLower()) { - newRange.lower = getMyLower(); - newRange.upper = newRange.lower + width; - } - else if (newRange.upper > getMyUpper()) { - newRange.upper = getMyUpper(); - newRange.lower = newRange.upper - width; - } - break; } default: break; } - // 最终确保宽度不小于最小值(针对整体拖动的情况) - if (newRange.size() < mMinWidth) { - if (mDragMode == DragRect) { - // 如果是整体拖动,保持中心点不变 - double center = newRange.center(); - newRange.lower = center - mMinWidth / 2; - newRange.upper = center + mMinWidth / 2; - } - else { - // 如果是边界拖动,强制设置最小宽度 - if (mDragMode == DragLeft) { - newRange.lower = newRange.upper - mMinWidth; - } - else if (mDragMode == DragRight) { - newRange.upper = newRange.lower + mMinWidth; - } - } - } + this->setDragRect(mDragMode, dval); mDragRect->setVisible(false); mDragLine->setVisible(false); - setRange(newRange.lower, newRange.upper); - - if (m_vecResult.size() == 1) - { - TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(0))); - if (pret) - { - pret->setRange(newRange.lower, newRange.upper); - } - } - else - { - if (mDragMode == DragRect) - { - float offset = mDragStartRange.lower - getRange().lower; - for (int i = 0; i < m_vecResult.size(); i++) - { - TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(i))); - if (pret == NULL) - continue; - QCPRange rg = pret->getRange(); - pret->setRange(rg.lower - offset, rg.upper - offset); - } - - } - else - { - TransparentDraggableResult* pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.at(0))); - if (pret) - { - pret->setRange(pret->getRange().lower, newRange.upper); - } - pret = qobject_cast(m_mapDraggable_Result.value(m_vecResult.last())); - if (pret) - { - pret->setRange(newRange.lower, pret->getRange().upper); - } - } - } } else if (mDragLine->visible()) { - if (mDragMode == DragItem) - { - if (m_pDragResult) + if (mDragMode == DragItem) { - double y = mPlot->xAxis->pixelToCoord(event->pos().y()); - double dy = y - mDragStartY; - - QCPRange rg = m_pDragResult->getRange(); - m_pDragResult->setRange(rg.lower, rg.upper + dy); - - TransparentDraggableResult* upr = m_pDragResult->getUpResult(); - if (upr) + if (m_pDragResult) { - QCPRange rg = upr->getRange(); - upr->setRange(rg.lower + dy, rg.upper); + double y = mPlot->xAxis->pixelToCoord(event->pos().y()); + double dy = y - mDragStartY; + + QCPRange rg = m_pDragResult->getRange(); + m_pDragResult->setRange(rg.lower, rg.upper + dy); + + TransparentDraggableResult* upr = m_pDragResult->getUpResult(); + if (upr) + { + QCPRange rg = upr->getRange(); + upr->setRange(rg.lower + dy, rg.upper); + } + m_pDragResult = NULL; } - m_pDragResult = NULL; + mDragLine->setVisible(false); } - mDragLine->setVisible(false); - } } mPlot->replot(); } diff --git a/logPlus/TransparentGroupResult.h b/logPlus/TransparentGroupResult.h index 78491e9..961d092 100644 --- a/logPlus/TransparentGroupResult.h +++ b/logPlus/TransparentGroupResult.h @@ -19,12 +19,15 @@ public: ~TransparentGroupResult(); + enum DragMode { DragNone, DragLeft, DragRight, DragItem, DragRect }; + void addResultToPlot(double left_Low, double right_Hight, QString myResult, QString &strUuid); //设置最小宽度 void setMinWidth(double minWidth); //设置标题 void setTitle(QString strTitle); + QString getTitle(); //设置解释结论 void setResult(QString filePath); @@ -40,8 +43,15 @@ public: void setGroupConclusionProportion(int nCopr); // 设置显示位置 void setGroupShowPos(int nSPos); + // 设置层号显示 void setFloorVisible(bool bs); + // 设置层号字体 void setFloorFont(QFont f); + // 设置层号旋转 + void setFloorRot(double dr); + + //设置顶深, 底深 + void setDragRect(int dMode, double dragVal); // 删除框图 void deleteRect(); @@ -86,7 +96,6 @@ private: QString m_Result; - enum DragMode { DragNone, DragLeft, DragRight, DragItem, DragRect }; DragMode mDragMode = DragNone; //double mDragStartX = 0; double mDragStartY = 0; diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index ddf589f..9af2e5b 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -284,7 +284,7 @@ void FormInfo::paintEvent(QPaintEvent* event) //painter.drawText(rect, Qt::AlignCenter, m_strAliasName); if(m_strAliasName == "") { - painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, m_strLineName); + //painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, m_strLineName); } else { //气测/FMT/射孔/文本 @@ -421,6 +421,7 @@ void FormInfo::paintEvent(QPaintEvent* event) painter.setPen(m_lineColor); //painter.drawText(rect.left() + 20, 55, m_strUnit); //painter.drawText(rect.left() + 20, 80, QString::number(m_vmin)+" ~ "+QString::number(m_vmax)); + QString strShowTxt = ""; if(m_strType=="curveObject") { //曲线 @@ -435,7 +436,7 @@ void FormInfo::paintEvent(QPaintEvent* event) else if(m_strLineName=="RESULT") { //解释结论,不绘制左右范围 - painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, "解释结论"); + strShowTxt = "解释结论"; } else if(m_strLineName=="GEO_LITH") { @@ -455,12 +456,12 @@ void FormInfo::paintEvent(QPaintEvent* event) else if(m_strLineName=="CORE_PHYSICS") { //岩心分析,不绘制左右范围 - painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, "岩心实验数据"); + strShowTxt = "岩心实验数据"; } else if(m_strLineName=="FRAC_HOLE.TABLE" && m_strType=="tableObject") { //蝌蚪图,不绘制左右范围 - painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, "蝌蚪图"); + strShowTxt = "蝌蚪图"; } else if(m_strLineName=="井眼垮塌矢量图" || m_strLineName=="井斜方位图") @@ -469,6 +470,53 @@ void FormInfo::paintEvent(QPaintEvent* event) 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)); } + if (strShowTxt.length()>0) + { + QRect rt = rect; + QString text = ""; + if (!m_bVerticaDrawing) + { + rt.setX(rect.left()); + rt.setY(rect.top() + rect.height() / 3); + rt.setWidth(rect.width()); + rt.setHeight(rect.height() / 3); + text = strShowTxt; + } + else + { + for (int i = 0; i < strShowTxt.size(); i++) { + if (!i)text += strShowTxt.at(i); + else { + text += "\n"; + text += strShowTxt.at(i); + } + } + } + + if (m_nRotationAngle != 0) + { + // 获取文本的精确尺寸 + QFontMetrics fm(m_curveUnitFont); + int textWidth = fm.horizontalAdvance(text); + int textHeight = fm.height(); + + painter.save(); + painter.translate(rect.center()); // 将原点移到控件中心 + painter.rotate(m_nRotationAngle); // 顺时针旋转90度 + + // 3. 绘制文本(相对于新原点居中) + painter.drawText(-textWidth / 2, // x偏移:向左一半宽度 + -textHeight / 2, // y偏移:向上一半高度 + text); + + painter.restore(); + } + else + { + painter.drawText(rt, Qt::AlignCenter, text); + } + } + // if(m_strType=="tableObject" && (m_strLineName=="WORDS_RELUST" || m_strLineName == "RESULT" || m_strLineName == "GEO_LITH"|| m_strLineName == "SWALL_CORE" diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index a4674c2..76b8bdf 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -628,6 +628,10 @@ void QMyCustomPlot::setShowProperty(QVariant val, int ntag) QFont f = val.value(); pGroup->setFloorFont(f); } + else if (ntag == 5) + { + pGroup->setFloorRot(val.toDouble()); + } } } @@ -3567,6 +3571,10 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) { this->setShowProperty(varVal, 4); } + else if ("层号旋转" == strProperty) + { + this->setShowProperty(varVal, 5); + } this->replot(); } }