diff --git a/logPlus/ObjTubingstringResult.h b/logPlus/ObjTubingstringResult.h index eed6c4d..eef0fce 100644 --- a/logPlus/ObjTubingstringResult.h +++ b/logPlus/ObjTubingstringResult.h @@ -4,13 +4,6 @@ #include #include "qmycustomplot.h" -struct Slf_JIEGUPOS { - int Order; - float Depth; - float Number; - char Dest[64]; -}; - //套管 class CObjTubingstringResult :public QObject { diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index 31dd154..abc9eb8 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -843,59 +843,202 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant else { QString strItem = m_propertyData[pProperty]; - bool bShow = variant.value(); - // + if(strItem != "") + { + bool bShow = variant.value(); + // - QString strAliasName = m_formInfo->m_strAliasName; - if(strAliasName == "气测-FMT-射孔-文本" || strAliasName == "") - { - if(bShow) + QString strAliasName = m_formInfo->m_strAliasName; + if(strAliasName == "气测-FMT-射孔-文本" || strAliasName == "") { - strAliasName = strItem; - m_formInfo->m_strAliasName = strAliasName; - //改变曲线Title - emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); - } - } - else - { - if(bShow) - { - strAliasName += "/" + strItem; - m_formInfo->m_strAliasName = strAliasName; - //改变曲线Title - emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + if(bShow) + { + strAliasName = strItem; + m_formInfo->m_strAliasName = strAliasName; + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } } else { - QStringList listAliasName = strAliasName.split("/");//QString字符串分割函数 - if(listAliasName.contains(strItem)) + if(bShow) { - listAliasName.removeOne(strItem); - } - if(listAliasName.size()==0) - { - strAliasName == "气测-FMT-射孔-文本"; + strAliasName += "/" + strItem; + m_formInfo->m_strAliasName = strAliasName; //改变曲线Title emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); } else { - strAliasName = ""; - for(int i=0; i0) - { - strAliasName += "/"; - } - strAliasName += listAliasName[i]; + listAliasName.removeOne(strItem); } + if(listAliasName.size()==0) + { + strAliasName == "气测-FMT-射孔-文本"; + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } + else + { + strAliasName = ""; + for(int i=0; i0) + { + strAliasName += "/"; + } + strAliasName += listAliasName[i]; + } + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } + } + } + } + } + } + else if (m_strCurrentProperty == JiegutextItem_Property) + { + //气测/FMT/射孔/文本item + if("顶深(m)" == m_propertyData[pProperty]) + { + //qDebug() << "顶深(m)->改变"; + if(m_tdJiegutext) + { + double upper = variant.value(); + m_tdJiegutext->setUpper(-upper); + //保存 + m_tdJiegutext->mPlot->SaveToSLF_Jiegutext(); + } + } + else if("底深(m)" == m_propertyData[pProperty]) + { + //qDebug() << "底深(m)->改变"; + if(m_tdJiegutext) + { + double lower = variant.value(); + m_tdJiegutext->setLower(-lower); + //保存 + m_tdJiegutext->mPlot->SaveToSLF_Jiegutext(); + } + } + else if("显示名称" == m_propertyData[pProperty]) + { + QString newAliasName = variant.value(); + m_formInfo->m_strAliasName = newAliasName; + m_formInfo->update(); + } + else if("字体" == m_propertyData[pProperty]) + { + //字体 + // 假设variant已经被设置为包含QColor + QFont newFont = variant.value(); + m_formInfo->m_curveNameFont = newFont; + m_formInfo->update(); + } + else if("颜色" == m_propertyData[pProperty]) + { + QColor newColor = variant.value(); + m_formInfo->m_lineColor = newColor; + m_formInfo->update(); + } + else if("选择井曲线" == m_propertyData[pProperty]) + { + QString sFilePath = variant.value(); + if(sFilePath.indexOf("@")>-1) + { + int ind=sFilePath.indexOf("@"); + QString strLineName = sFilePath.left(ind); + sFilePath=sFilePath.mid(ind+1); + sFilePath.trimmed(); + //只支持以下名称 + //if (strLineName == "GUJING1_RESULT" || strLineName == "GUJING2_RESULT" || strLineName == "GUJING3_RESULT") + { + QString strOldLineName = m_formInfo->m_strLineName; + QString strOldSlfName = m_formInfo->m_strSlfName; + //暂时不允许改变slf井次名称,不然不在同一口井绘制 + if(strOldSlfName != sFilePath) + { + QMessageBox::information(nullptr,"提示","不允许改变slf井次名称"); + return; + } + //名称不变 + if(strOldLineName == strLineName) + { + return; + } + + // + m_formInfo->m_strLineName = strLineName; + //m_formInfo->m_strSlfName = sFilePath; + m_formInfo->update(); + + //改变曲线名 + emit CallManage::getInstance()->sig_changeJiegutextLine(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, strOldLineName, strLineName); + } + } + } + else + { + QString strItem = m_propertyData[pProperty]; + if(strItem != "") + { + bool bShow = variant.value(); + // + + QString strAliasName = m_formInfo->m_strAliasName; + if(strAliasName == "气测-FMT-射孔-文本" || strAliasName == "") + { + if(bShow) + { + strAliasName = strItem; + m_formInfo->m_strAliasName = strAliasName; //改变曲线Title emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); } } + else + { + if(bShow) + { + strAliasName += "/" + strItem; + m_formInfo->m_strAliasName = strAliasName; + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } + else + { + QStringList listAliasName = strAliasName.split("/");//QString字符串分割函数 + if(listAliasName.contains(strItem)) + { + listAliasName.removeOne(strItem); + } + if(listAliasName.size()==0) + { + strAliasName == "气测-FMT-射孔-文本"; + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } + else + { + strAliasName = ""; + for(int i=0; i0) + { + strAliasName += "/"; + } + strAliasName += listAliasName[i]; + } + //改变曲线Title + emit CallManage::getInstance()->sig_changeJiegutextTitle(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, strAliasName); + } + } + } } - } } @@ -2536,3 +2679,47 @@ void PropertyWidget::initJiegutextProperty(FormInfo *formInfo) } m_strCurrentProperty = Jiegutext_Property; } + +void PropertyWidget::initJiegutextItemProperty(TransparentDraggableJiegutext* tdJiegutext, double lower, double upper) +{ + //初始化,清空 + InitCurrentViewInfo(); + FormInfo* formInfo = tdJiegutext->mPlot->m_formTrack->getFormInfoByParameters(tdJiegutext->mPlot->m_strUuid, tdJiegutext->mPlot->m_strWellName, + tdJiegutext->mPlot->m_strTrackName, tdJiegutext->mPlot->m_strLineName); + if (formInfo != NULL) + { + m_formInfo = formInfo; + + m_strUuid = formInfo->m_strUuid; + m_strTrackUuid = formInfo->m_strTrackUuid; + // + m_strSlfName = formInfo->m_strSlfName; + m_strWellName = formInfo->m_strWellName; + m_strTrackName = formInfo->m_strTrackName; + m_strLineName = formInfo->m_strLineName; + + _CreateVariantPropertyItem("通常", "选择井曲线", m_strLineName + "@" + m_strSlfName, QVariant::String); + _CreateVariantPropertyItem("对象", "字体", formInfo->m_curveNameFont, QVariant::Font); + _CreateVariantPropertyItem("对象", "颜色", formInfo->m_lineColor, QVariant::Color); + + QStringList listAliasName = formInfo->m_strAliasName.split("/");//QString字符串分割函数 + // + for(int i=0; i< formInfo->m_FieldNameList.size(); i++) + { + bool bCkeck = false; + if(listAliasName.contains(formInfo->m_FieldNameList[i])) + { + bCkeck = true; + } + _CreateVariantPropertyItem("表格数据", formInfo->m_FieldNameList[i], bCkeck, QVariant::Bool); + } + } + + //当前属性类型 + m_strCurrentProperty = JiegutextItem_Property; + m_tdJiegutext = tdJiegutext; + + // + _CreateVariantPropertyItem("当前项", "顶深(m)", -upper, QVariant::Double); + _CreateVariantPropertyItem("当前项", "底深(m)", -lower, QVariant::Double); +} diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index d4c5c15..be0e0a9 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -25,6 +25,7 @@ #include "TransparentDraggableGeoLith.h" #include "TransparentDraggableRect.h" #include "TransparentDraggableLayer.h" +#include "TransparentDraggableJiegutext.h" #include "TransparentGroupResult.h" @@ -55,6 +56,7 @@ #define LayerItem_Property "LayerItem_Property" //地质分层item #define Jiegutext_Property "Jiegutext_Property" //气测/FMT/射孔/文本 +#define JiegutextItem_Property "JiegutextItem_Property" //气测/FMT/射孔/文本item #pragma execution_character_set("utf-8") @@ -127,6 +129,7 @@ public: TransparentDraggableGeoLith* m_tdGeoLith; TransparentDraggableRect* m_tdText; TransparentDraggableLayer* m_tdLayer; + TransparentDraggableJiegutext* m_tdJiegutext; public: QWidget* GetPropertyWidget(); @@ -183,6 +186,8 @@ public: //气测/FMT/射孔/文本 void initJiegutextProperty(FormInfo *formInfo); + void initJiegutextItemProperty(TransparentDraggableJiegutext* tdJiegutext, double lower, double upper); + void ChangFillProperty();//填充属性改变 void ChangHeadItemProperty();//图头项改变 diff --git a/logPlus/TransparentDraggableJiegutext.cpp b/logPlus/TransparentDraggableJiegutext.cpp index a9ffc9a..79175d1 100644 --- a/logPlus/TransparentDraggableJiegutext.cpp +++ b/logPlus/TransparentDraggableJiegutext.cpp @@ -1,4 +1,6 @@ #include "TransparentDraggableJiegutext.h" +#include "PropertyWidget.h" +#include "CallManage.h" extern double g_dPixelPerCm;//每厘米像素数 //static GeoIndicatorGenerator m_drawGeo; @@ -223,9 +225,58 @@ void TransparentDraggableJiegutext::updateHandles() void TransparentDraggableJiegutext::onDelRect() { - //mDragMode = DragNone; //删除框图 deleteRect(); + //保存 + mPlot->SaveToSLF_Jiegutext(); + //属性清空 + PropertyService()->InitCurrentViewInfo(); +} + +//设置深度移动量 +void TransparentDraggableJiegutext::setItemDepthOffset() +{ + bool ok=0; + double depthshift=QInputDialog::getDouble(NULL,"深度移动","请输入移动的深度量(上移-,下移+)",0.0,-2147483647, 2147483647,4,&ok); + if(!ok) return; + + QCPRange currentRange = getRange(); + QCPRange newRange = currentRange; + + newRange.lower = currentRange.lower-depthshift; + newRange.upper = currentRange.upper-depthshift; + + // + double width = currentRange.size(); +// //double center = mDragStartRange.center() + dx; +// double center = currentRange.center() - depthshift; +// newRange.lower = center - width/2; +// newRange.upper = center + width/2; + + // 检查是否超出轴范围 + if(newRange.lower < getMyLower()) { + return; + } + else if(newRange.upper > getMyUpper()) { + return; + } + // + setRange(newRange.lower, newRange.upper); + + { +// double low = mRect->topLeft->coords().x(); +// double hight = mRect->bottomRight->coords().x(); +// PropertyService()->initGujingItemProperty(this, low, hight, m_Result); + + //保存 + mPlot->SaveToSLF_Jiegutext(); + + //属性清空 + PropertyService()->InitCurrentViewInfo(); + + //取消所有选中单元格 + emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); + } } @@ -251,20 +302,13 @@ void TransparentDraggableJiegutext::onMousePress(QMouseEvent *event) } //event->accept(); + double low = mRect->topLeft->coords().x(); + double hight = mRect->bottomRight->coords().x(); + PropertyService()->initJiegutextItemProperty(this, low, hight); 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.addAction(QIcon(::GetImagePath() + "icon/Delete.png"), "删除选中对象", this, &TransparentDraggableJiegutext::onDelRect); + menu.addAction(QIcon(::GetImagePath() + "icon/Shift.png"), "设置深度移动量", this, &TransparentDraggableJiegutext::setItemDepthOffset); menu.exec(event->globalPos()); return; @@ -429,10 +473,66 @@ void TransparentDraggableJiegutext::onMouseMove(QMouseEvent *event) } +//设置顶深 +void TransparentDraggableJiegutext::setUpper(double upper) +{ + QCPRange currentRange = getRange(); + QCPRange newRange = currentRange; + + double proposedRight = upper; + // 确保不超出轴范围且不使宽度小于最小值 + newRange.upper = qBound( + currentRange.lower + mMinWidth, + proposedRight, + getMyUpper()); + + // 最终确保宽度不小于最小值(针对整体拖动的情况) + if(newRange.size() < mMinWidth) { + newRange.upper = newRange.lower + mMinWidth; + } + + setRange(newRange.lower, newRange.upper); +} + +//设置底深 +void TransparentDraggableJiegutext::setLower(double lower) +{ + QCPRange currentRange = getRange(); + QCPRange newRange = currentRange; + + double proposedLeft = lower; + // 确保不超出轴范围且不使宽度小于最小值 + newRange.lower = qBound( + getMyLower(), + proposedLeft, + currentRange.upper - mMinWidth); + + // 最终确保宽度不小于最小值(针对整体拖动的情况) + if(newRange.size() < mMinWidth) { + // 如果是边界拖动,强制设置最小宽度 + newRange.lower = newRange.upper - mMinWidth; + } + + setRange(newRange.lower, newRange.upper); +} + void TransparentDraggableJiegutext::onMouseRelease(QMouseEvent *event) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) { event->accept(); + //属性 + //if(mDragMode == DragRect) + { + double low = mRect->topLeft->coords().x(); + double hight = mRect->bottomRight->coords().x(); + PropertyService()->initJiegutextItemProperty(this, low, hight); + //保存 + mPlot->SaveToSLF_Jiegutext(); + + //取消所有选中单元格 + emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); + } + //避免二次绘制框图 mPlot->m_bDrawRect = false; //emit rangeChanged(getRange()); diff --git a/logPlus/TransparentDraggableJiegutext.h b/logPlus/TransparentDraggableJiegutext.h index bdcad7c..8bdb375 100644 --- a/logPlus/TransparentDraggableJiegutext.h +++ b/logPlus/TransparentDraggableJiegutext.h @@ -35,6 +35,11 @@ public: // 删除框图 void deleteRect(); + //设置顶深 + void setUpper(double upper); + //设置底深 + void setLower(double lower); + signals: void rangeChanged(QCPRange newRange); @@ -43,7 +48,8 @@ private: void updateHandles() ; private slots: - void onDelRect(); + void onDelRect(); //删除 + void setItemDepthOffset(); //设置深度移动量 void onMousePress(QMouseEvent *event); void onMouseMove(QMouseEvent *event); void onMouseRelease(QMouseEvent *event); @@ -61,6 +67,7 @@ public: QCPItemText *mItemTitle[MAX_NUM]; QStringList mstrTitle; QString m_strUuid = ""; + QStringList mList_coredat; //分隔线 QCPItemLine* pLine[MAX_NUM-1]; diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index 2f16773..5925bc1 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -1107,6 +1107,24 @@ void QMyCustomPlot::contextMenuEvent(QContextMenuEvent *event) menu.addAction(QIcon(::GetImagePath() + "development.png"), "合并结论", this, &QMyCustomPlot::MegResultImage); menu.exec(event->globalPos()); } + + // + FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + if (pInfo == NULL) + { + return; + } + QString strType = pInfo->m_strType; + if (strType == "JiegutextObject") + { + QMenu menu(this); + //气测/FMT/射孔/文本 + menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "从剪切板文本数据粘贴", this, &QMyCustomPlot::addItems_Jiegutext); + menu.addAction(QIcon(::GetImagePath() + "icon/ClearSelectCore.png"), "取消选中", this, &QMyCustomPlot::ClearSelectItems); + menu.addAction(QIcon(::GetImagePath() + "icon/Delete.png"), "全部清空", this, &QMyCustomPlot::DeleteItems_Jiegutext); + menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新数据", this, &QMyCustomPlot::RefreshItems_Jiegutext); + menu.exec(event->globalPos()); + } } //右键--添加分段线 @@ -3344,38 +3362,6 @@ void QMyCustomPlot::DeleteItems_Gujing() PropertyService()->InitCurrentViewInfo(); } -//刷新数据 -void QMyCustomPlot::RefreshItems_Jiegutext(QString strAliasName) -{ - //删除对象 - TransparentDraggableJiegutext *pDraggableRect =NULL; - QMap::Iterator it = m_mapDraggable_Jiegutext.begin(); - while( it != m_mapDraggable_Jiegutext.end() ) - { - pDraggableRect = (TransparentDraggableJiegutext*)it.value(); - it++; - pDraggableRect->deleteRect(); - } - - //重新加载 - //QString strAliasName = "气测-FMT-射孔-文本"; - LoadFromSLF_Jiegutext(m_strSlfName, m_strLineName, strAliasName); - //设置所有title,供用户选择 - FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); - if (pInfo == NULL) - { - return; - } - // - pInfo->m_strAliasName = strAliasName; - pInfo->m_FieldNameList.clear(); - pInfo->m_FieldNameList.append(this->m_FieldNameList); - pInfo->update(); - - //属性清空 - PropertyService()->InitCurrentViewInfo(); -} - //刷新数据 void QMyCustomPlot::RefreshItems_Gujing() { @@ -3599,7 +3585,7 @@ void QMyCustomPlot::addImageToPlot(double left_Low, double right_Hight, const QS dragRect->setResult(imagePath); // 设置初始范围 dragRect->setRange(left_Low, right_Hight); - // 可选:设置颜色` + // 可选:设置颜色 dragRect->setColor(QColor(255, 255, 255, 80)); // 半透明红色 //最小宽度 dragRect->setMinWidth(0.1); @@ -4239,7 +4225,7 @@ void QMyCustomPlot::addGujingToPlot(double left_Low, double right_Hight, const Q } //气测/FMT/射孔/文本 -void QMyCustomPlot::addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, QColor crColor) +void QMyCustomPlot::addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, const QStringList strList_coredat, QColor crColor) { QtCommonClass *qtCommon = new QtCommonClass(this); QString strUuid = qtCommon->getUUid(); @@ -4252,7 +4238,7 @@ void QMyCustomPlot::addJiegutextToPlot(double left_Low, double right_Hight, cons dragRect->setColor(crColor); // 半透明白色 //最小宽度 dragRect->setMinWidth(0.1); - //dragRect->setTitle(strText);//直接创建时赋值 + dragRect->mList_coredat.append(strList_coredat);//直接创建时赋值 m_mapDraggable_Jiegutext[strUuid] = dragRect; } @@ -5611,8 +5597,6 @@ void QMyCustomPlot::s_changeJiegutextTitle(QString strUuid, QString strSlfName, return; } - //刷新数据 - //RefreshItems_Jiegutext(strAliasName); //删除对象 TransparentDraggableJiegutext *pDraggableRect =NULL; QMap::Iterator it = m_mapDraggable_Jiegutext.begin(); @@ -6103,22 +6087,25 @@ bool QMyCustomPlot::LoadFromSLF_Jiegutext(QString strSlfName, QString csCurve, Q bottom=m_pResult->CorrDepth; } + QStringList coredat; CoreValues.clear(); ValueTypes.clear(); for(int j=0;jGetTableFieldData(iIndex,j,buf,i+1); + ValueTypes.append(iType); + float val=0; + val=atof(buf); + coredat.append(QString::number(val)); + if(listAliasName.contains(m_FieldNameList[j])) { - int iType = logio->GetTableFieldData(iIndex,j,buf,i+1); - ValueTypes.append(iType); - float val=0; - val=atof(buf); CoreValues.append(QString::number(val)); } } // - this->addJiegutextToPlot(-bottom, -top, CoreValues); + this->addJiegutextToPlot(-bottom, -top, CoreValues, coredat); } logio->CloseTable(iIndex); delete m_pResult; @@ -6126,3 +6113,389 @@ bool QMyCustomPlot::LoadFromSLF_Jiegutext(QString strSlfName, QString csCurve, Q delete logio; return true; } + +//从剪切板文本数据粘贴 +void QMyCustomPlot::addItems_Jiegutext() +{ + QClipboard *clipboard = QApplication::clipboard(); //获取系统剪贴板指针 + QString originalText = clipboard->text(); //获取剪贴板上文本信息 + int isspace=originalText.indexOf(" "); + int istab=originalText.indexOf("\t"); + int isd=originalText.indexOf(","); + + if((istab>-1|isd>-1)&&isspace>-1) + { + QMessageBox::information(NULL,"提示", "\",\"或制表符与空格键并存,自动分解可能有误!\n建议用单一符号风格!"); + } + originalText.replace("\t"," "); + originalText.replace(","," "); + originalText.replace("\r\n","\n"); + originalText.replace("\r","\n"); + QStringList line=originalText.split("\n"); + line.removeAll(""); + if(line.size()<1) return; + QString TableName; + QStringList temp1; + + if(line.size()>1) { + temp1=line[0].split(" "); + temp1.removeAll(""); + if(temp1.size()==1&&temp1.at(0).length()&&!temp1.at(0).at(0).isDigit()) { + TableName=temp1.at(0); + line.removeAt(0); + //CoreObj->SetName(TableName);//此处更改曲线名称,暂时不处理 + } + } + QString ss=m_strSlfName; + CMemRdWt *logio=new CMemRdWt(); + if(ss==""||!logio->Open(ss.toStdString().c_str(),CSlfIO::modeReadWrite)) + { + delete logio; + QMessageBox::information(NULL,"提示","SLF文件打开失败,请检查!!",QMessageBox::Yes); + return; + } + int k=0; + QStringList coredat=line[0].split(" "); + if((istab==-1||isd==-1)&&isspace>=0) coredat.removeAll(""); + int iIndex=logio->OpenTable(m_strLineName.toStdString().c_str()); + if(iIndex>=0) { + int count=logio->GetTableFieldCount(iIndex); + if(count!=coredat.size()) { + logio->DiscardObject(m_strLineName.toStdString().c_str()); + } + iIndex=-1; + } + bool hasNO=false; + int isSK=0; + bool isfirst=false; + if(iIndex<0) + { + QString name,Length,type,temp; + bool ret=false; + QStringList css; + if(line.size()>1) css=line[1].split(" "); + if(coredat.size()&&!coredat[0].isEmpty()) { + int NUM=0; + if(!coredat.at(0).at(0).isDigit()){ + if(coredat.at(0).indexOf("NO",0,Qt::CaseInsensitive)<0 + &&coredat.at(0).indexOf("序号")<0 + &&coredat.at(0).indexOf("INDEX")<0 + &&coredat.at(0).indexOf("ORDER")<0 + ) + { + coredat.insert(0,"NO"); + hasNO=true; + } + } + if(hasNO) css.insert(0,"1"); + if((m_strLineName.indexOf("SK",0,Qt::CaseInsensitive)>-1||m_strLineName.indexOf("PERT",0,Qt::CaseInsensitive)>-1)&&(coredat.size()==4||coredat.size()==5)) + { + isSK=1; + name="NO,SDEP,EDEP,ZONE,RESULT,THICK,TT,ZONENO,LAYER,DEST"; + Length="4,4,4,8,4,4,4,64,64,64"; + type= "1,4,4,6,1,4,4,6,6,6"; + temp= "0,0,0,0,1,0,0,0,0,0"; + NUM=10; + } + else { + //CViewInfoText*pInv=dynamic_cast(m_discreteLogViewInfo); + for(int j=0;jj) + { + for (int k=0;kGetDrawGASLOG()||isdi) { + if(bDrawGASLOG||isdi) { + type+="6"; + Length+="64"; + } + else { + type+="4"; + Length+="4"; + } + } + temp+="0"; + if(j!=coredat.size()) + { + name+=","; + Length+=","; + type+=","; + temp+=","; + } + } + if(!coredat.at(0).at(0).isDigit()&&coredat.at(0).at(0)!='.'&&coredat.at(0).at(0)!='-') name=coredat.join(","); + NUM=coredat.size(); + } + iIndex=logio->Open_Set_Table(m_strLineName.toStdString().c_str(),0,NUM, + (char*)name.toStdString().c_str(), + (char*)Length.toStdString().c_str(),//字段长度 + (char*)type.toStdString().c_str(),//字段类型 + (char*)temp.toStdString().c_str());//字段备注,1-枚举 + isfirst=true; + logio->SetTableRecordCount(iIndex,0); + } + } + + // + FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + if (pInfo == NULL) + { + return; + } + // + QString strAliasName = pInfo->m_strAliasName; + QStringList listAliasName = strAliasName.split("/");//QString字符串分割函数 + + // + int count=logio->GetTableFieldCount(iIndex); + Slf_TABLE_FIELD*pField=new Slf_TABLE_FIELD[count]; + logio->GetTableFieldInfo(iIndex,pField); + // + m_FieldNameList.clear(); + for(int i=0;i=0) coredat.removeAll(""); + if(coredat.size()<1) continue; + if(coredat[0].isEmpty()) continue; + if(coredat.size()<2)continue; + if(!coredat.at(0).at(0).isDigit()) continue; + if(hasNO) coredat.insert(0,QString::number(0)); +// for(int j=0;jSetTableFieldData(iIndex,j,(char*)&yy,k+1); +// } +// else if(j==3) logio->SetTableFieldData(iIndex,7,(char*)coredat[j].toStdString().c_str(),k+1); +// else if(j==4) logio->SetTableFieldData(iIndex,8,(char*)coredat[j].toStdString().c_str(),k+1); +// else if(j==5) logio->SetTableFieldData(iIndex,9,(char*)coredat[j].toStdString().c_str(),k+1); +// } +// else { +// if(pField[j].RepCode==6) { +// logio->SetTableFieldData(iIndex,j,(char*)coredat[j].toStdString().c_str(),k+1); +// } +// else { +// yy=coredat[j].toFloat(); +// logio->SetTableFieldData(iIndex,j,(char*)&yy,k+1); +// } +// } +// } +// k++; + + //------------------------------------- + CoreValues.clear(); + for(int j=0;j2&& + (m_FieldNameList[2].indexOf("EDEP")>-1 || + m_FieldNameList[2].indexOf("ENDEP")>-1) + ) + { + bottom=coredat[2].toDouble(); + } + this->addJiegutextToPlot(-bottom, -top, CoreValues, coredat); + } + delete logio; + delete []pField; + if(isfirst) + { + AddTableToWellRound(); + pInfo->m_FieldNameList.clear(); + pInfo->m_FieldNameList.append(m_FieldNameList); + } + + SaveToSLF_Jiegutext(); + //属性清空 + PropertyService()->InitCurrentViewInfo(); +} + +bool QMyCustomPlot::SaveToSLF_Jiegutext() +{ + static int isrun=false; + if(isrun) return false; + QString ss=m_strSlfName; + if(ss=="") return false; + isrun=true; + + Slf_TxtPOS m_Result; + CMemRdWt *logio=new CMemRdWt(); + if(!logio->Open(ss.toStdString().c_str(),CSlfIO::modeReadWrite)) + { + delete logio; + QMessageBox::information(NULL,"提示","SLF文件打开失败,请检查!!",QMessageBox::Yes); + isrun=false; + return false; + } + bool isfirst=false; + int iIndex=logio->OpenTable(m_strLineName.toStdString().c_str()); + if (iIndex < 0) + { + if(!m_mapDraggable_Jiegutext.size()) { + delete logio; + isrun=false; + return false; + } + iIndex=logio->Open_Set_Table(m_strLineName.toStdString().c_str(),0,3, + "NO,DEPTH,DDEP", + "4,4,4",//字段长度 + "1,4,4",//字段类型 + "0,0,0");//字段备注,1-枚举 + isfirst=true; + } + logio->SetTableRecordCount(iIndex,m_mapDraggable_Jiegutext.size()); + if(!m_mapDraggable_Jiegutext.size()) { + delete logio; + if(isfirst)AddTableToWellRound(); + isrun=false; + return false; + } + + int count=logio->GetTableFieldCount(iIndex); + Slf_TABLE_FIELD *pField = new Slf_TABLE_FIELD[count]; + logio->GetTableFieldInfo(iIndex,pField); + + TransparentDraggableJiegutext *pDraggableRect =NULL; + + //排序 + QList listSDepth; + for (QMap::Iterator iter = m_mapDraggable_Jiegutext.begin(); iter != m_mapDraggable_Jiegutext.end(); iter++) + { + pDraggableRect = (TransparentDraggableJiegutext*)iter.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + // + float fSDepth = -tmpRange.upper; + listSDepth.append(fSDepth); + } + qSort(listSDepth); + + // + for(int i=0; i::Iterator iter = m_mapDraggable_Jiegutext.begin(); iter != m_mapDraggable_Jiegutext.end(); iter++) + { + pDraggableRect = (TransparentDraggableJiegutext*)iter.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + float fSDepth = -tmpRange.upper; + if(fSDepth == listSDepth[i])//按顺序写入 + { + memset(&m_Result,0,sizeof(Slf_TxtPOS)); + m_Result.Order = i+1; + m_Result.Depth = -tmpRange.upper; + m_Result.CorrDepth = -tmpRange.lower; + float yy=m_Result.Order; + logio->SetTableFieldData(iIndex,0,(char *)&yy,i+1); + yy=m_Result.Depth; + logio->SetTableFieldData(iIndex,1,(char *)&yy,i+1); + yy=m_Result.CorrDepth; + logio->SetTableFieldData(iIndex,2,(char *)&yy,i+1); + + for(int iRecNum=3; iRecNummList_coredat.size(); iRecNum++) + { + if(pField[iRecNum].RepCode==6) { + logio->SetTableFieldData(iIndex, iRecNum, (char*)pDraggableRect->mList_coredat[iRecNum].toStdString().c_str(), i+1); + } + else { + yy=pDraggableRect->mList_coredat[iRecNum].toFloat(); + logio->SetTableFieldData(iIndex,iRecNum,(char*)&yy,i+1); + } + //logio->SetTableFieldData(iIndex,iRecNum,(char*)pDraggableRect->mList_coredat[iRecNum].toLocal8Bit().data(),i+1);//toStdString().c_str() + } + + } + } + } + logio->CloseTable(iIndex); + delete []pField; + delete logio; + if(isfirst)AddTableToWellRound(); + isrun=false; + return true; +} + +//全部清空 +void QMyCustomPlot::DeleteItems_Jiegutext() +{ + if(QMessageBox::information(NULL,QObject::tr("提示"),QObject::tr("该功能将清除当前组件展示的全部信息,清除后无法恢复,但会备份到对应的\"_BAK\"中,确定清除吗?"),QMessageBox::Yes|QMessageBox::No)!=QMessageBox::Yes) return; + QString obj=m_strLineName + "BAK"; + CopyToSLFFile(m_strSlfName, false, (char *)obj.toStdString().c_str()); + AddTableToWellRound(); + + //删除对象 + TransparentDraggableJiegutext *pDraggableRect =NULL; + QMap::Iterator it = m_mapDraggable_Jiegutext.begin(); + while( it != m_mapDraggable_Jiegutext.end() ) + { + pDraggableRect = (TransparentDraggableJiegutext*)it.value(); + it++; + pDraggableRect->deleteRect(); + } + + //保存 + this->SaveToSLF_Jiegutext(); + //属性清空 + PropertyService()->InitCurrentViewInfo(); +} + +//刷新数据 +void QMyCustomPlot::RefreshItems_Jiegutext() +{ + //删除对象 + TransparentDraggableJiegutext *pDraggableRect =NULL; + QMap::Iterator it = m_mapDraggable_Jiegutext.begin(); + while( it != m_mapDraggable_Jiegutext.end() ) + { + pDraggableRect = (TransparentDraggableJiegutext*)it.value(); + it++; + pDraggableRect->deleteRect(); + } + + // + FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + if (pInfo == NULL) + { + return; + } + // + QString strAliasName = pInfo->m_strAliasName; + //加载 + this->LoadFromSLF_Jiegutext(m_strSlfName, m_strLineName, strAliasName); + //属性清空 + PropertyService()->InitCurrentViewInfo(); +} + diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index 1123fd6..69371b8 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -21,6 +21,13 @@ struct Slf_TxtPOS { float CorrDepth; }; +struct Slf_JIEGUPOS { + int Order; + float Depth; + float Number; + char Dest[64]; +}; + class TransparentGroupResult; class QMyCustomPlot : public QCustomPlot { @@ -219,6 +226,7 @@ public: QList ValueTypes; QStringList CoreValues; bool LoadFromSLF_Jiegutext(QString strSlfName, QString csCurve, QString strAliasName); + bool SaveToSLF_Jiegutext(); public slots: void slot_time(); @@ -253,7 +261,7 @@ public: void addGujingToPlot(double left_Low, double right_Hight, const QString strResult); //气测/FMT/射孔/文本 - void addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, QColor crColor=QColor(255, 255, 255, 80)); + void addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, const QStringList strList_coredat, 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)); @@ -371,8 +379,9 @@ public slots: void AddItem_Layer(QStringList lists); //右键--气测-管柱-文本-FMT-射孔 - void RefreshItems_Jiegutext(QString strAliasName = "气测-FMT-射孔-文本"); //刷新数据 - + void addItems_Jiegutext(); //从剪切板文本数据粘贴 + void DeleteItems_Jiegutext(); //全部清空 + void RefreshItems_Jiegutext(); //刷新数据 //右键--编辑岩心照片 void onEditImage(); void addItemsImage(); //从剪切板文本数据粘贴