diff --git a/logPlus/ObjTextResult.cpp b/logPlus/ObjTextResult.cpp new file mode 100644 index 0000000..687d340 --- /dev/null +++ b/logPlus/ObjTextResult.cpp @@ -0,0 +1,87 @@ +#include "ObjTextResult.h" +#include "MemRdWt.h" +#include "geometryutils.h" + +//气测/FMT/射孔/文本 +CObjTextResult::CObjTextResult() +{ +} + + +CObjTextResult::~CObjTextResult() +{ +}; + +bool CObjTextResult::LoadFromSLF(QMyCustomPlot *widget, QString strSlfName, QString csCurve) +{ + Slf_TxtPOS *m_pResult=NULL; + CMemRdWt *logio=new CMemRdWt(); + if(strSlfName==""||!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; +// QMessageBox::information(NULL,"提示","SLF文件打开失败,请检查!!",QMessageBox::Yes); + return false; + } + + int iIndex=logio->OpenTable(csCurve.toStdString().c_str()); + if(iIndex>-1) { + int count = logio->GetTableRecordCount(iIndex); + int fieldnum = logio->GetTableFieldCount(iIndex); + int len = logio->GetTableRecordLength(iIndex); + Slf_TABLE_FIELD *pField=new Slf_TABLE_FIELD[fieldnum+1]; + logio->GetTableFieldInfo(iIndex,pField); + + m_FieldNameList.clear(); + m_FieldUnitList.clear(); + m_FieldHZNameList.clear(); + m_FieldHZUnitList.clear(); + // + for(int i=0;iGetTableFieldData(iIndex,0,buf,i+1); + m_pResult->Order=atof(buf); + logio->GetTableFieldData(iIndex,1,buf,i+1); + m_pResult->Depth=atof(buf); + logio->GetTableFieldData(iIndex,2,buf,i+1); + m_pResult->CorrDepth=atof(buf); + double top=m_pResult->Depth; + double bottom=m_pResult->Depth; + if(m_FieldNameList.size()>2&& + (m_FieldNameList[2].indexOf("EDEP")>-1 || + m_FieldNameList[2].indexOf("ENDEP")>-1) + ) + { + bottom=m_pResult->CorrDepth; + } + + CoreValues.clear(); + ValueTypes.clear(); + for(int j=0;jGetTableFieldData(iIndex,j,buf,i+1); + ValueTypes.append(iType); + float val=0; + val=atof(buf); + CoreValues.append(QString::number(val)); + } + + // + widget->addJiegutextToPlot(-bottom, -top, CoreValues, iMaxNum); + } + logio->CloseTable(iIndex); + delete m_pResult; + } + delete logio; + return true; +} diff --git a/logPlus/ObjTextResult.h b/logPlus/ObjTextResult.h new file mode 100644 index 0000000..0aceeee --- /dev/null +++ b/logPlus/ObjTextResult.h @@ -0,0 +1,40 @@ +#ifndef OBTextRESULTITEM_H +#define OBTextRESULTITEM_H + +#include +#include "qmycustomplot.h" + +//#define CoreWidth 0.5 +//#define CoreHeight 0.05 +struct Slf_TxtPOS { + int Order; + float Depth; + float CorrDepth; +}; + +class CObjTextResult :public QObject +{ + Q_OBJECT +public: + CObjTextResult(); + virtual ~CObjTextResult(); + + virtual bool LoadFromSLF(QMyCustomPlot *widget, QString strSlfName, QString csCurve); + +protected: + +public: + QStringList m_FieldNameList; + QStringList m_FieldHZNameList; + QStringList m_FieldUnitList; + QStringList m_FieldHZUnitList; + + QList ValueTypes; + QStringList CoreValues; + + int iMaxNum = 0; +private: + +}; + +#endif diff --git a/logPlus/ObjTubingstringResult.h b/logPlus/ObjTubingstringResult.h index 60430d0..eed6c4d 100644 --- a/logPlus/ObjTubingstringResult.h +++ b/logPlus/ObjTubingstringResult.h @@ -1,11 +1,4 @@ -/** -* @file ObjTubingstringResult.h -* @brief 套管 -* @date -* @author: -*/ - -#ifndef OBTubingstringResultITEM_H +#ifndef OBTubingstringResultITEM_H #define OBTubingstringResultITEM_H #include @@ -18,11 +11,7 @@ struct Slf_JIEGUPOS { char Dest[64]; }; -/** -* @class -* @brief -* @see -*/ +//套管 class CObjTubingstringResult :public QObject { Q_OBJECT diff --git a/logPlus/PickFrac.h b/logPlus/PickFrac.h index 50f4765..b96ed36 100644 --- a/logPlus/PickFrac.h +++ b/logPlus/PickFrac.h @@ -5,7 +5,6 @@ #include "qmycustomplot.h" //裂缝 - //const int iFracType=15; typedef struct tagPOINTF diff --git a/logPlus/TransparentDraggableFac.cpp b/logPlus/TransparentDraggableFac.cpp index 84c206e..7f27a49 100644 --- a/logPlus/TransparentDraggableFac.cpp +++ b/logPlus/TransparentDraggableFac.cpp @@ -89,7 +89,7 @@ void TransparentDraggableFac::deleteRect() // mRightHandle->deleteLater(); // mPixmap->deleteLater(); - mPlot->m_mapDraggableFac.remove(m_strUuid); + mPlot->m_mapDraggable_Fac.remove(m_strUuid); mPlot->removeItem(mRect); mPlot->removeItem(mLeftHandle); @@ -155,7 +155,7 @@ void TransparentDraggableFac::initRect() //mItemTitle->position->setType(QCPItemPosition::ptAxisRectRatio); mItemTitle->position->setCoords(0.5, 0); mItemTitle->setLayer("overlay"); - mItemTitle->setRotation(90); + mItemTitle->setRotation(90);//竖直文字 } void TransparentDraggableFac::updateHandles() diff --git a/logPlus/TransparentDraggableJiegutext.cpp b/logPlus/TransparentDraggableJiegutext.cpp new file mode 100644 index 0000000..fd4ab52 --- /dev/null +++ b/logPlus/TransparentDraggableJiegutext.cpp @@ -0,0 +1,479 @@ +#include "TransparentDraggableJiegutext.h" + +extern double g_dPixelPerCm;//每厘米像素数 +//static GeoIndicatorGenerator m_drawGeo; + +TransparentDraggableJiegutext::TransparentDraggableJiegutext(QMyCustomPlot *parentPlot, QString strUuid, double minWidth, QStringList strTitle) + : QObject(parentPlot), mPlot(parentPlot), mstrTitle(strTitle), mMinWidth(minWidth) +{ + m_strUuid = strUuid; + // + initRect(); +} + +TransparentDraggableJiegutext::~TransparentDraggableJiegutext() +{ + if(mPlot) { +// mPlot->removeItem(mRect); +// mPlot->removeItem(mLeftHandle); +// mPlot->removeItem(mRightHandle); + } +} + +//设置最小宽度 +void TransparentDraggableJiegutext::setMinWidth(double minWidth) +{ + mMinWidth = minWidth; +} + +//设置标题 +void TransparentDraggableJiegutext::setTitle(QStringList strTitle) +{ +// mstrTitle = strTitle; + +// iMaxNum=strTitle.size(); +// if(iMaxNum>MAX_NUM) +// { +// iMaxNum=MAX_NUM; +// } +// for(int i=0; isetText(mstrTitle[i]); +// //mItemTitle->setBrush(QBrush(Qt::red)); +// mItemTitle[i]->setFont(QFont("Arial", 12, QFont::Bold)); +// mItemTitle[i]->setColor(Qt::black); +// mItemTitle[i]->setPositionAlignment(Qt::AlignTop | Qt::AlignHCenter); +// mItemTitle[i]->position->setType(QCPItemPosition::ptPlotCoords); +// //mItemTitle->position->setType(QCPItemPosition::ptAxisRectRatio); +// mItemTitle[i]->position->setCoords(0.5, 0); +// mItemTitle[i]->setLayer("overlay"); +// mItemTitle[i]->setRotation(90);//竖直文字 +// } + +// QPen wPen(Qt::black, 1); +// for(int i=0; isetPen(wPen); +// } + +// //mPlot->replot(); +} + +// 设置矩形范围 +void TransparentDraggableJiegutext::setRange(double left_Low, double right_Hight) +{ + if(left_Low >= right_Hight) return; + + double lY1 = mPlot->yAxis->range().lower;//+10 + double lY2 = mPlot->yAxis->range().upper; + mRect->topLeft->setCoords(left_Low, lY1); + mRect->bottomRight->setCoords(right_Hight, lY2); + + float fSpace = (lY2 - lY1)/(float)iMaxNum; + float flNewPos = mPlot->xAxis->coordToPixel((left_Low + right_Hight)/2.0) - 15; + for(int i=0; iposition->setCoords(mPlot->xAxis->pixelToCoord(flNewPos), + i*fSpace + 0.5*fSpace); // 设置文本在矩形中心位置 + } + + //分隔线 + for(int i=0; istart->setCoords(left_Low, (i+1)*fSpace); + pLine[i]->end->setCoords(right_Hight, (i+1)*fSpace); + } + + updateHandles(); + mPlot->replot(); +} + +// 获取当前范围 +QCPRange TransparentDraggableJiegutext::getRange() +{ + return QCPRange(mRect->topLeft->coords().x(), mRect->bottomRight->coords().x()); +} + +// 设置矩形颜色 +void TransparentDraggableJiegutext::setColor(const QColor &color) +{ + mRect->setBrush(QBrush(color)); + mRect->setPen(QPen(color.darker())); + //mPlot->replot(); +} + +// 删除框图 +void TransparentDraggableJiegutext::deleteRect() +{ + if(mPlot) { + +// mRect->deleteLater(); +// mLeftHandle->deleteLater(); +// mRightHandle->deleteLater(); +// mPixmap->deleteLater(); + + mPlot->m_mapDraggable_Jiegutext.remove(m_strUuid); + + mPlot->removeItem(mRect); + mPlot->removeItem(mLeftHandle); + mPlot->removeItem(mRightHandle); + //mPlot->removeItem(mPixmap); + for(int i=0; iremoveItem(mItemTitle[i]); + } + for(int i=0; iremoveItem(pLine[i]); + } + + mPlot->replot(); + this->deleteLater(); + + // +// //避免二次绘制框图 +// mPlot->m_bDrawRect = false; +// mDragMode = DragNone; +// //取消选中框 +// mPlot->selectionRect()->cancel(); +// mPlot->replot(); +// mPlot->selectionRect()->mActive=true; + } +} + + +void TransparentDraggableJiegutext::initRect() +{ + // 创建透明矩形 + mRect = new QCPItemRect(mPlot); + mRect->setLayer("overlay"); // 确保在最上层 + mRect->setBrush(QBrush(QColor(255, 255, 255, 50))); // 半透明蓝色 + mRect->setPen(QPen(QColor(70, 70, 255, 200))); + + // 创建左右边界控制点 + mLeftHandle = new QCPItemRect(mPlot); + mLeftHandle->setLayer("overlay"); + mLeftHandle->setBrush(QBrush(Qt::red)); + mLeftHandle->setPen(QPen(Qt::darkRed)); + + mRightHandle = new QCPItemRect(mPlot); + mRightHandle->setLayer("overlay"); + mRightHandle->setBrush(QBrush(Qt::red)); + mRightHandle->setPen(QPen(Qt::darkRed)); + + // 设置初始位置 + //double center = mPlot->xAxis->range().center(); +// setRange(center - 10, center + 10); + + // 连接鼠标事件 + connect(mPlot, &QCustomPlot::mousePress, this, &TransparentDraggableJiegutext::onMousePress); + connect(mPlot, &QCustomPlot::mouseMove, this, &TransparentDraggableJiegutext::onMouseMove); + connect(mPlot, &QCustomPlot::mouseRelease, this, &TransparentDraggableJiegutext::onMouseRelease); + +// mPixmap = new QCPItemPixmap(mPlot); +// //mPixmap->setPixmap(QPixmap(":/image/file.png")); // 设置图片 +// mPixmap->setScaled(true, Qt::IgnoreAspectRatio); // 设置缩放方式 +// mPixmap->setLayer("overlay"); // 确保在最上层 + + iMaxNum=mstrTitle.size(); + if(iMaxNum>MAX_NUM) + { + iMaxNum=MAX_NUM; + } + for(int i=0; isetText(mstrTitle[i]); + //mItemTitle->setBrush(QBrush(Qt::red)); + mItemTitle[i]->setFont(QFont("Arial", 12, QFont::Bold)); + mItemTitle[i]->setColor(Qt::black); + mItemTitle[i]->setPositionAlignment(Qt::AlignTop | Qt::AlignHCenter); + mItemTitle[i]->position->setType(QCPItemPosition::ptPlotCoords); + //mItemTitle->position->setType(QCPItemPosition::ptAxisRectRatio); + mItemTitle[i]->position->setCoords(0.5, 0); + mItemTitle[i]->setLayer("overlay"); + mItemTitle[i]->setRotation(90);//竖直文字 + } + + QPen wPen(Qt::black, 1); + for(int i=0; isetPen(wPen); + } +} + +void TransparentDraggableJiegutext::updateHandles() +{ + // 左边界矩形控制点 + mLeftHandle->topLeft->setParentAnchor(mRect->topLeft); + mLeftHandle->bottomRight->setParentAnchor(mRect->topRight);//(mRect->bottomLeft); + mLeftHandle->topLeft->setCoords(-0.5, 0.5); // 矩形大小 + mLeftHandle->bottomRight->setCoords(0.5, -0.5); // 矩形大小 + + // 右边界矩形控制点 + mRightHandle->topLeft->setParentAnchor(mRect->bottomLeft); + mRightHandle->bottomRight->setParentAnchor(mRect->bottomRight); + mRightHandle->topLeft->setCoords(-0.5, 0.5); // 矩形大小 + mRightHandle->bottomRight->setCoords(0.5, -0.5); // 矩形大小 + +} + +void TransparentDraggableJiegutext::onDelRect() +{ + //mDragMode = DragNone; + //删除框图 + deleteRect(); +} + + +void TransparentDraggableJiegutext::onMousePress(QMouseEvent *event) +{ + if(event->button() != Qt::LeftButton)//右键 + { + double y = mPlot->xAxis->pixelToCoord(event->pos().y());//x轴展示深度 + QCPRange currentRange = getRange(); + if(mLeftHandle->selectTest(event->pos(), false) < 5) { + mDragMode = DragNone; + } + else if(mRightHandle->selectTest(event->pos(), false) < 5) { + mDragMode = DragNone; + } + //else if(x >= currentRange.lower && x <= currentRange.upper) { + else if(y >= currentRange.lower && y <= currentRange.upper) { + mDragMode = DragNone; + } + else { + mDragMode = DragNone; + return; + } + + //event->accept(); + + QMenu menu(nullptr); + QAction *delAction = menu.addAction("删除框图"); + //delAction->installEventFilter(this); + connect(delAction, &QAction::triggered, this, &TransparentDraggableJiegutext::onDelRect); + +// QAction* pItem = menu.exec(event->globalPos()); +// if(pItem == delAction) +// { +// //event->accept(); + +// int ii=0; +// ii++; +// } + menu.exec(event->globalPos()); + + return; + } + + event->accept(); + + // 检查点击了哪个部分 + //double x = mPlot->xAxis->pixelToCoord(event->pos().x()); + //double y = mPlot->yAxis->pixelToCoord(event->pos().y()); + + double y = mPlot->xAxis->pixelToCoord(event->pos().y());//x轴展示深度 + + QCPRange currentRange = getRange(); + + if(mLeftHandle->selectTest(event->pos(), false) < 5) { + mDragMode = DragLeft; + } + else if(mRightHandle->selectTest(event->pos(), false) < 5) { + mDragMode = DragRight; + } + //else if(x >= currentRange.lower && x <= currentRange.upper) { + else if(y >= currentRange.lower && y <= currentRange.upper) { + mDragMode = DragRect; + } + else { + mDragMode = DragNone; + return; + } + + //mDragStartX = x; + mDragStartY = y; + mDragStartRange = currentRange; + +} + +void TransparentDraggableJiegutext::onMouseMove(QMouseEvent *event) +{ + if(mDragMode == DragNone) return; + + event->accept(); + + //double x = mPlot->xAxis->pixelToCoord(event->pos().x()); + //double dx = x - mDragStartX; + + double y = mPlot->xAxis->pixelToCoord(event->pos().y()); + double dy = y - mDragStartY; + + QCPRange newRange = mDragStartRange; + + 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); + 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); + 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; + } + +// QCPRange axisRange = mPlot->xAxis->range(); +// if(newRange.lower < axisRange.lower) { +// newRange.lower = axisRange.lower; +// newRange.upper = newRange.lower + width; +// } +// else if(newRange.upper > axisRange.upper) { +// newRange.upper = axisRange.upper; +// newRange.lower = newRange.upper - width; +// } + break; + } + default: + break; + } + +// //取整数(方便显示统计,左右边界整数显示。) +// newRange.lower = (int)newRange.lower; +// QCPRange rangeByFile = mPlot->xAxis->range(); +// if (std::fabs(rangeByFile.upper - (int)newRange.upper) >= 1.0) +// { +// newRange.upper = (int)newRange.upper; +// } + + // 最终确保宽度不小于最小值(针对整体拖动的情况) + 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); + +} + +void TransparentDraggableJiegutext::onMouseRelease(QMouseEvent *event) +{ + if(event->button() == Qt::LeftButton && mDragMode != DragNone) { + event->accept(); + //避免二次绘制框图 + mPlot->m_bDrawRect = false; + //emit rangeChanged(getRange()); + mDragMode = DragNone; + //取消选中状态 +// QCPDataSelection emptySelection; +// mPlot->graph(0)->setSelection(emptySelection); +// mPlot->replot(); + + //取消选中框 + mPlot->selectionRect()->cancel(); + mPlot->replot(); + mPlot->selectionRect()->mActive=true; + } +} + +double TransparentDraggableJiegutext::getMyLower() +{ + double dLower = mPlot->xAxis->range().lower; + double proposedLeft = mDragStartRange.lower; + + TransparentDraggableJiegutext *pDraggableRect =NULL; + { + QMap::Iterator it = mPlot->m_mapDraggable_Jiegutext.begin(); + while( it != mPlot->m_mapDraggable_Jiegutext.end() ) + { + if(it.key() == m_strUuid) + { + it++; + continue; + } + pDraggableRect = (TransparentDraggableJiegutext*)it.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + if(tmpRange.upper >= dLower && tmpRange.upper <= proposedLeft) + { + dLower = tmpRange.upper; + } + it++; + } + } + + return dLower; +} + +double TransparentDraggableJiegutext::getMyUpper() +{ + double dUpper = mPlot->xAxis->range().upper; + double proposedRight = mDragStartRange.upper; + + TransparentDraggableJiegutext *pDraggableRect =NULL; + { + QMap::Iterator it = mPlot->m_mapDraggable_Jiegutext.begin(); + while( it != mPlot->m_mapDraggable_Jiegutext.end() ) + { + if(it.key() == m_strUuid) + { + it++; + continue; + } + pDraggableRect = (TransparentDraggableJiegutext*)it.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + if(tmpRange.lower <= dUpper && tmpRange.lower >= proposedRight) + { + dUpper = tmpRange.lower; + } + it++; + } + } + + return dUpper; +} + diff --git a/logPlus/TransparentDraggableJiegutext.h b/logPlus/TransparentDraggableJiegutext.h new file mode 100644 index 0000000..6410b8f --- /dev/null +++ b/logPlus/TransparentDraggableJiegutext.h @@ -0,0 +1,77 @@ +#ifndef TRANSPARENTDRAGGABLEJIEGUTEXT_H +#define TRANSPARENTDRAGGABLEJIEGUTEXT_H + +#include +#include "qmycustomplot.h" +#include +#include + +#pragma execution_character_set("utf-8") // 强制指定执行字符集为 UTF-8 + +#define MAX_NUM 4 + +//气测/FMT/射孔/文本 +class TransparentDraggableJiegutext : public QObject +{ + Q_OBJECT +public: + explicit TransparentDraggableJiegutext(QMyCustomPlot *parentPlot, QString strUuid="", double minWidth = 1.0, QStringList strTitle = {}); + + ~TransparentDraggableJiegutext(); + + //设置最小宽度 + void setMinWidth(double minWidth); + //设置标题 + void setTitle(QStringList strTitle); + + // 设置矩形范围 + void setRange(double left_Low, double right_Hight); + // 获取当前范围 + QCPRange getRange(); + + // 设置矩形颜色 + void setColor(const QColor &color); + + // 删除框图 + void deleteRect(); + +signals: + void rangeChanged(QCPRange newRange); + +private: + void initRect(); + void updateHandles() ; + +private slots: + void onDelRect(); + void onMousePress(QMouseEvent *event); + void onMouseMove(QMouseEvent *event); + void onMouseRelease(QMouseEvent *event); + double getMyLower(); + double getMyUpper(); + +public: + QMyCustomPlot *mPlot; + QCPItemRect *mRect; + QCPItemRect *mLeftHandle; + QCPItemRect *mRightHandle; + + //QCPItemPixmap *mPixmap; + int iMaxNum = 0; + QCPItemText *mItemTitle[MAX_NUM]; + QStringList mstrTitle; + QString m_strUuid = ""; + //分隔线 + QCPItemLine* pLine[MAX_NUM-1]; + + enum DragMode { DragNone, DragLeft, DragRight, DragRect }; + DragMode mDragMode = DragNone; + //double mDragStartX = 0; + double mDragStartY = 0; + QCPRange mDragStartRange; + + // 添加最小宽度成员变量 + double mMinWidth; +}; + +#endif // TRANSPARENTDRAGGABLEJIEGUTEXT_H diff --git a/logPlus/TransparentDraggableMFac.cpp b/logPlus/TransparentDraggableMFac.cpp index 36c1275..f0c1345 100644 --- a/logPlus/TransparentDraggableMFac.cpp +++ b/logPlus/TransparentDraggableMFac.cpp @@ -89,7 +89,7 @@ void TransparentDraggableMFac::deleteRect() // mRightHandle->deleteLater(); // mPixmap->deleteLater(); - mPlot->m_mapDraggableMFac.remove(m_strUuid); + mPlot->m_mapDraggable_MFac.remove(m_strUuid); mPlot->removeItem(mRect); mPlot->removeItem(mLeftHandle); @@ -378,8 +378,8 @@ double TransparentDraggableMFac::getMyLower() TransparentDraggableMFac *pDraggableRect =NULL; { - QMap::Iterator it = mPlot->m_mapDraggableMFac.begin(); - while( it != mPlot->m_mapDraggableMFac.end() ) + QMap::Iterator it = mPlot->m_mapDraggable_MFac.begin(); + while( it != mPlot->m_mapDraggable_MFac.end() ) { if(it.key() == m_strUuid) { @@ -407,8 +407,8 @@ double TransparentDraggableMFac::getMyUpper() TransparentDraggableMFac *pDraggableRect =NULL; { - QMap::Iterator it = mPlot->m_mapDraggableMFac.begin(); - while( it != mPlot->m_mapDraggableMFac.end() ) + QMap::Iterator it = mPlot->m_mapDraggable_MFac.begin(); + while( it != mPlot->m_mapDraggable_MFac.end() ) { if(it.key() == m_strUuid) { diff --git a/logPlus/TransparentDraggablePhase.cpp b/logPlus/TransparentDraggablePhase.cpp index fe216a5..be10214 100644 --- a/logPlus/TransparentDraggablePhase.cpp +++ b/logPlus/TransparentDraggablePhase.cpp @@ -89,7 +89,7 @@ void TransparentDraggablePhase::deleteRect() // mRightHandle->deleteLater(); // mPixmap->deleteLater(); - mPlot->m_mapDraggablePhase.remove(m_strUuid); + mPlot->m_mapDraggable_Phase.remove(m_strUuid); mPlot->removeItem(mRect); mPlot->removeItem(mLeftHandle); diff --git a/logPlus/TransparentDraggableRect.cpp b/logPlus/TransparentDraggableRect.cpp index b4616f3..077aa72 100644 --- a/logPlus/TransparentDraggableRect.cpp +++ b/logPlus/TransparentDraggableRect.cpp @@ -85,7 +85,7 @@ void TransparentDraggableRect::deleteRect() // mRightHandle->deleteLater(); // mPixmap->deleteLater(); - mPlot->m_mapDraggableRect.remove(m_strUuid); + mPlot->m_mapDraggable_Rect.remove(m_strUuid); mPlot->removeItem(mRect); mPlot->removeItem(mLeftHandle); @@ -374,8 +374,8 @@ double TransparentDraggableRect::getMyLower() TransparentDraggableRect *pDraggableRect =NULL; { - QMap::Iterator it = mPlot->m_mapDraggableRect.begin(); - while( it != mPlot->m_mapDraggableRect.end() ) + QMap::Iterator it = mPlot->m_mapDraggable_Rect.begin(); + while( it != mPlot->m_mapDraggable_Rect.end() ) { if(it.key() == m_strUuid) { @@ -403,8 +403,8 @@ double TransparentDraggableRect::getMyUpper() TransparentDraggableRect *pDraggableRect =NULL; { - QMap::Iterator it = mPlot->m_mapDraggableRect.begin(); - while( it != mPlot->m_mapDraggableRect.end() ) + QMap::Iterator it = mPlot->m_mapDraggable_Rect.begin(); + while( it != mPlot->m_mapDraggable_Rect.end() ) { if(it.key() == m_strUuid) { diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index beffd18..bfec9b7 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -12,6 +12,7 @@ #include "DrawFac.h" #include "ObjTubingstringResult.h" #include "ObjGeostratums.h" +#include "ObjTextResult.h" //以下参数从配置文件读取 extern int g_iIndex; @@ -1510,9 +1511,10 @@ void FormDraw::s_addJiegutext(QString strUuid, QString strSlfName, QString strWe curv->yAxis2->setTicks(false); //气测/FMT/射孔/文本 - QString strWaveName = "TUBTOOLS"; - CObjTubingstringResult *objTubingstringResult = new CObjTubingstringResult(); - objTubingstringResult->LoadFromSLF(curv, strSlfName, strWaveName); + QString strWaveName = "WELL_XSCGB"; + //QString strWaveName = "GASLOG"; + CObjTextResult *objTextResult = new CObjTextResult(); + objTextResult->LoadFromSLF(curv, strSlfName, strWaveName); // connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); @@ -1521,12 +1523,24 @@ void FormDraw::s_addJiegutext(QString strUuid, QString strSlfName, QString strWe m_listLineName.push_back(strLineName); QString strAliasName = "气测/FMT/射孔/文本"; + if(objTextResult->iMaxNum > 0) + { + strAliasName = ""; + for(int i=0; iiMaxNum; i++) + { + if(i>0) + { + strAliasName += "/"; + } + strAliasName += objTextResult->m_FieldNameList[i]; + } + } QString strUnit = ""; QColor newlineColor=QColor(0,0,0); double width=2; QString strScaleType = ""; //道-对象 - m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "TubingstringObject"); + m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "JiegutextObject"); } //沉积相 diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index 0ee0f35..5a3bfb8 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -177,6 +177,38 @@ void FormInfo::paintEvent(QPaintEvent* event) painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, m_strLineName); } else { + //气测/FMT/射孔/文本 + if(m_strType=="JiegutextObject") + { + QStringList list = m_strAliasName.split("/");//QString字符串分割函数 + int iMaxNum = list.size(); + if (iMaxNum > 1) + { + float fSpace = rect.width()/(float)iMaxNum; + for(int i=0; isetMinWidth(0.1); dragRect->setTitle(strText); - m_mapDraggableRect[strUuid] = dragRect; + m_mapDraggable_Rect[strUuid] = dragRect; } void QMyCustomPlot::addResultToPlot(double left_Low, double right_Hight, QString myResult, QString &strUuid, QString strText) @@ -498,6 +499,27 @@ void QMyCustomPlot::addGujingToPlot(double left_Low, double right_Hight, const Q m_mapDraggable_Gujing[strUuid] = dragRect; } +//气测/FMT/射孔/文本 +void QMyCustomPlot::addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, int &iMaxNum, QColor crColor) +{ + QtCommonClass *qtCommon = new QtCommonClass(this); + QString strUuid = qtCommon->getUUid(); + + // 在初始化代码中 + TransparentDraggableJiegutext *dragRect = new TransparentDraggableJiegutext(this, strUuid, 1.0, strText); + // 设置初始范围 + dragRect->setRange(left_Low, right_Hight); + // 可选:设置颜色 + dragRect->setColor(crColor); // 半透明白色 + //最小宽度 + dragRect->setMinWidth(0.1); + //dragRect->setTitle(strText);//直接创建时赋值 + + m_mapDraggable_Jiegutext[strUuid] = dragRect; + // + iMaxNum = dragRect->iMaxNum; +} + //沉积相-微相 void QMyCustomPlot::addMFacToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor) { @@ -514,7 +536,7 @@ void QMyCustomPlot::addMFacToPlot(double left_Low, double right_Hight, const QSt dragRect->setMinWidth(0.1); dragRect->setTitle(strText); - m_mapDraggableMFac[strUuid] = dragRect; + m_mapDraggable_MFac[strUuid] = dragRect; } //沉积相-亚相 @@ -533,7 +555,7 @@ void QMyCustomPlot::addPhaseToPlot(double left_Low, double right_Hight, const QS dragRect->setMinWidth(0.1); dragRect->setTitle(strText); - m_mapDraggablePhase[strUuid] = dragRect; + m_mapDraggable_Phase[strUuid] = dragRect; } //沉积相-相 @@ -552,7 +574,7 @@ void QMyCustomPlot::addFacToPlot(double left_Low, double right_Hight, const QStr dragRect->setMinWidth(0.1); dragRect->setTitle(strText); - m_mapDraggableFac[strUuid] = dragRect; + m_mapDraggable_Fac[strUuid] = dragRect; } //套管 diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index 8f54c3a..8b44fb6 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -69,16 +69,17 @@ public: int m_iCurNum=0; int m_iSplitNum=2000; //2000000; //2000; - QMap m_mapDraggableRect; + QMap m_mapDraggable_Rect; QMap m_mapDraggable_Result; QMap m_mapDraggable_GeoLith; QMap m_mapDraggable_SwallCore; QMap m_mapDraggable_Gujing; QMap m_mapDraggable_Image; - QMap m_mapDraggableMFac; - QMap m_mapDraggablePhase; - QMap m_mapDraggableFac; + QMap m_mapDraggable_MFac; + QMap m_mapDraggable_Phase; + QMap m_mapDraggable_Fac; QMap m_mapDraggable_Guan; + QMap m_mapDraggable_Jiegutext; public slots: void slot_time(); @@ -99,6 +100,8 @@ public: void addGujingToPlot(double left_Low, double right_Hight, const QString strResult); + void addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, int &iMaxNum, QColor crColor=QColor(255, 255, 255, 80)); + void addMFacToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); void addPhaseToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); void addFacToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); diff --git a/logPlus/qtprojectwidgets.cpp b/logPlus/qtprojectwidgets.cpp index 9f437b6..42d6119 100644 --- a/logPlus/qtprojectwidgets.cpp +++ b/logPlus/qtprojectwidgets.cpp @@ -286,8 +286,8 @@ void QtProjectWidgets::loadIndexSysTree(QTreeWidgetItem *parent, QString fileFul QString wellname=""; Slf_FILE_MESSAGE mssage; logio->GetFileMessage(mssage); - wellname=mssage.WellName; - wellname=wellname.toUpper(); + wellname=QString::fromLocal8Bit(mssage.WellName); + //wellname=wellname.toUpper(); if (wellname.isEmpty()||wellname.length()>64||wellname.indexOf('&')>-1) { //辨别井名是否有效,无效则采用文件名 @@ -401,12 +401,12 @@ void QtProjectWidgets::loadWellTree(QTreeWidgetItem *parent, QString fileFull, Q Slf_FILE_MESSAGE mssage; logio->GetFileMessage(mssage); - if(parent->text(0) != QString(mssage.WellName)) + if(parent->text(0) != QString(QString::fromLocal8Bit(mssage.WellName))) { delete logio; return; } - QString wellname=mssage.Item; + QString wellname=QString::fromLocal8Bit(mssage.WellName); if (wellname.isEmpty()||wellname.length()>64||wellname.indexOf('&')>-1) { QFileInfo fileinfo;