diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index 78e1429..fc76798 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -289,6 +289,51 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant emit CallManage::getInstance()->sig_changeGeoLithLine(m_formInfo->m_strUuid, m_formInfo->m_strSlfName, m_formInfo->m_strWellName, m_formInfo->m_strTrackName, m_formInfo->m_strLineName, dOilZhan); } } + else if (m_strCurrentProperty == Text_Property)//文字结论 + { + //先处理通用属性 + CommonPropertyChanged(pProperty, variant); + } + else if (m_strCurrentProperty == TextItem_Property) + { + //文字结论item + if("顶深(m)" == m_propertyData[pProperty]) + { + //qDebug() << "顶深(m)->改变"; + if(m_tdText) + { + double upper = variant.value(); + m_tdText->setUpper(-upper); + //保存 + m_tdText->mPlot->SaveToSLF_Text(); + } + } + else if("底深(m)" == m_propertyData[pProperty]) + { + //qDebug() << "底深(m)->改变"; + if(m_tdText) + { + double lower = variant.value(); + m_tdText->setLower(-lower); + //保存 + m_tdText->mPlot->SaveToSLF_Text(); + } + } + else if("文字结论" == m_propertyData[pProperty]) + { + //qDebug() << "文字结论->改变"; + if(m_tdText) + { + QString newResult = variant.value(); + m_tdText->setTitle(newResult); + // + QCPRange currentRange = m_tdText->getRange(); + m_tdText->setRange(currentRange.lower, currentRange.upper); + //保存 + m_tdText->mPlot->SaveToSLF_Text(); + } + } + } else if (m_strCurrentProperty == GujingItem_Property) { //固井结论item @@ -1632,6 +1677,11 @@ void PropertyWidget::initProperty(FormInfo *formInfo) //录井剖面 this->initGeoLithProperty(formInfo); } + else if (m_strLineName == "WORDS_RELUST") + { + //文字结论 + this->initTextProperty(formInfo); + } else{ this->initTableProperty(formInfo); } @@ -1796,6 +1846,32 @@ void PropertyWidget::initSwallCoreItemProperty(TransparentDraggableSwallCore* td //_CreateVariantPropertyItem("当前项", "宽度", -Depth, QVariant::Double); } +void PropertyWidget::initTextProperty(FormInfo *formInfo) +{ + _CreateVariantPropertyItem("通常", "选择井曲线", m_strLineName + "@" + m_strSlfName, QVariant::String); + + _CreateVariantPropertyItem("对象", "显示名称", formInfo->m_strAliasName, QVariant::String); + _CreateVariantPropertyItem("对象", "字体", formInfo->m_curveNameFont, QVariant::Font); + _CreateVariantPropertyItem("对象", "颜色", formInfo->m_lineColor, QVariant::Color); + + m_strCurrentProperty = Text_Property; +} + +void PropertyWidget::initTextItemProperty(TransparentDraggableRect* tdText, double lower, double upper, QString strResult) +{ + //初始化,清空 + InitCurrentViewInfo(); + + //当前属性类型 + m_strCurrentProperty = TextItem_Property; + m_tdText = tdText; + + // + _CreateVariantPropertyItem("当前项", "顶深(m)", -upper, QVariant::Double); + _CreateVariantPropertyItem("当前项", "底深(m)", -lower, QVariant::Double); + _CreateVariantPropertyItem("当前项", "文字结论", strResult, QVariant::String); +} + void PropertyWidget::initGujingProperty(FormInfo *formInfo) { _CreateVariantPropertyItem("通常", "选择井曲线", m_strLineName + "@" + m_strSlfName, QVariant::String); diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index ed32060..72160ce 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -23,6 +23,7 @@ #include "TransparentDraggableGujing.h" #include "TransparentDraggableSwallCore.h" #include "TransparentDraggableGeoLith.h" +#include "TransparentDraggableRect.h" //当前曲线类型 #define Widget_Property "Widget_Property" @@ -39,8 +40,11 @@ #define SwallCore_Property "SwallCore_Property" //井壁取心 #define SwallCoreItem_Property "SwallCoreItem_Property" //井壁取心item -#define GeoLith_Property "GeoLith_Property" //录井剖面 -#define GeoLithItem_Property "GeoLithItem_Property" //录井剖面item +#define GeoLith_Property "GeoLith_Property" //录井剖面 +#define GeoLithItem_Property "GeoLithItem_Property" //录井剖面item + +#define Text_Property "Text_Property" //文字结论 +#define TextItem_Property "TextItem_Property" //文字结论item #pragma execution_character_set("utf-8") @@ -110,6 +114,7 @@ public: TransparentDraggableGujing* m_tdGujing; TransparentDraggableSwallCore* m_tdSwallCore; TransparentDraggableGeoLith* m_tdGeoLith; + TransparentDraggableRect* m_tdText; public: QWidget* GetPropertyWidget(); @@ -149,10 +154,14 @@ public: void initSwallCoreProperty(FormInfo *formInfo); void initSwallCoreItemProperty(TransparentDraggableSwallCore* tdSwallCore, double Depth, QString LithologyImage, QString OilGasImage, QString ColorImage, double Sideleft, double width, int iColor); - // 固井结论属性 + // 录井剖面属性 void initGeoLithProperty(FormInfo *formInfo); void initGeoLithItemProperty(TransparentDraggableGeoLith* tdGeoLith, double lower, double upper, const QString myLith, const QString myOil, const QString myColor); + // 文字结论属性 + void initTextProperty(FormInfo *formInfo); + void initTextItemProperty(TransparentDraggableRect* tdText, double lower, double upper, QString strResult); + void ChangFillProperty();//填充属性改变 void ChangHeadItemProperty();//图头项改变 diff --git a/logPlus/TransparentDraggableRect.cpp b/logPlus/TransparentDraggableRect.cpp index 077aa72..15d5bb0 100644 --- a/logPlus/TransparentDraggableRect.cpp +++ b/logPlus/TransparentDraggableRect.cpp @@ -1,4 +1,6 @@ #include "TransparentDraggableRect.h" +#include "PropertyWidget.h" +#include "CallManage.h" extern double g_dPixelPerCm;//每厘米像素数 //static GeoIndicatorGenerator m_drawGeo; @@ -174,9 +176,100 @@ void TransparentDraggableRect::onDelRect() //mDragMode = DragNone; //删除框图 deleteRect(); + //保存 + mPlot->SaveToSLF_Text(); + //属性清空 + PropertyService()->InitCurrentViewInfo(); } +//设置深度移动量 +void TransparentDraggableRect::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_Text(); + + //属性清空 + PropertyService()->InitCurrentViewInfo(); + + //取消所有选中单元格 + emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); + } +} + +//设置顶深 +void TransparentDraggableRect::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 TransparentDraggableRect::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 TransparentDraggableRect::onMousePress(QMouseEvent *event) { if(event->button() != Qt::LeftButton)//右键 @@ -200,19 +293,13 @@ void TransparentDraggableRect::onMousePress(QMouseEvent *event) //event->accept(); + double low = mRect->topLeft->coords().x(); + double hight = mRect->bottomRight->coords().x(); + PropertyService()->initTextItemProperty(this, low, hight, mstrTitle); + QMenu menu(nullptr); - QAction *delAction = menu.addAction("删除框图"); - //delAction->installEventFilter(this); - connect(delAction, &QAction::triggered, this, &TransparentDraggableRect::onDelRect); - -// QAction* pItem = menu.exec(event->globalPos()); -// if(pItem == delAction) -// { -// //event->accept(); - -// int ii=0; -// ii++; -// } + menu.addAction(QIcon(::GetImagePath() + "icon/Delete.png"), "删除选中对象", this, &TransparentDraggableRect::onDelRect); + menu.addAction(QIcon(::GetImagePath() + "icon/Shift.png"), "设置深度移动量", this, &TransparentDraggableRect::setItemDepthOffset); menu.exec(event->globalPos()); return; @@ -351,6 +438,19 @@ void TransparentDraggableRect::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()->initTextItemProperty(this, low, hight, mstrTitle); + //保存 + mPlot->SaveToSLF_Text(); + + //取消所有选中单元格 + emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); + } + //避免二次绘制框图 mPlot->m_bDrawRect = false; //emit rangeChanged(getRange()); diff --git a/logPlus/TransparentDraggableRect.h b/logPlus/TransparentDraggableRect.h index fc9cfad..9621236 100644 --- a/logPlus/TransparentDraggableRect.h +++ b/logPlus/TransparentDraggableRect.h @@ -33,6 +33,11 @@ public: // 删除框图 void deleteRect(); + //设置顶深 + void setUpper(double upper); + //设置底深 + void setLower(double lower); + signals: void rangeChanged(QCPRange newRange); @@ -41,14 +46,15 @@ private: void updateHandles() ; private slots: - void onDelRect(); + void onDelRect(); //删除 + void setItemDepthOffset(); //设置深度移动量 void onMousePress(QMouseEvent *event); void onMouseMove(QMouseEvent *event); void onMouseRelease(QMouseEvent *event); double getMyLower(); double getMyUpper(); -private: +public: QMyCustomPlot *mPlot; QCPItemRect *mRect; QCPItemRect *mLeftHandle; diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index 0dc3543..70dabcd 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -871,7 +871,17 @@ QMyCustomPlot* FormDraw::addTableLine(QString strUuid, QString strSlfName, QStri else if (strLineName == "WORDS_RELUST") { //文字结论 - initWords(curv, strSlfName, strLineName); + if(listOtherProperty.size()>=3) + { + QString strAliasName = listOtherProperty[0]; + QColor newlineColor=QColor(0,0,0); + newlineColor.setNamedColor(listOtherProperty[1]); + initWords(curv, strSlfName, strLineName, strAliasName, newlineColor, listOtherProperty); + } + else + { + initWords(curv, strSlfName, strLineName); + } } else if (strLineName == "RESULT") { @@ -3400,7 +3410,7 @@ void FormDraw::initTableLine(QMyCustomPlot *widget, QString strSlfName, QString } -void FormDraw::initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName) +void FormDraw::initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty) { int iMyWidth = widget->axisRect(0)->width(); @@ -3433,15 +3443,18 @@ void FormDraw::initWords(QMyCustomPlot *widget, QString strSlfName, QString strL widget->xAxis2->setTicks(false); widget->yAxis2->setTicks(false); // - LoadFromSLF(widget, strSlfName, strLineName); + widget->LoadFromSLF_Text(strSlfName, strLineName); - QString strAliasName = ""; + if(listOtherProperty.size()>=3) + { + strAliasName = listOtherProperty[0]; + newlineColor.setNamedColor(listOtherProperty[1]); + } QString strUnit = ""; - QColor newlineColor=QColor(0,0,0); double width=2; QString strScaleType = ""; //道-对象 - m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject"); + m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject", listOtherProperty); } void FormDraw::initIMAGE_DATA(QMyCustomPlot *widget, QString strSlfName, QString strLineName) @@ -3489,75 +3502,6 @@ void FormDraw::initIMAGE_DATA(QMyCustomPlot *widget, QString strSlfName, QString m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, m_RightVal, m_LeftVal, strScaleType, "tableObject");//yanxinImageObject } -bool FormDraw::LoadFromSLF(QMyCustomPlot *widget, QString strSlfName, QString strLineName) -{ - QString FieldName="RESULT"; - - { - QString ss=strSlfName; - CMemRdWt *logio=new CMemRdWt(); - if(ss==""||!logio->Open(ss.toStdString().c_str(),CSlfIO::modeRead)) - { - delete logio; -// QMessageBox::information(NULL,"提示","SLF文件打开失败,请检查!!",QMessageBox::Yes); - return false; - } - int iIndex=logio->OpenTable(strLineName.toStdString().c_str()); - if(iIndex>-1) { - int len=logio->GetTableRecordLength(iIndex); - if(lenGetTableRecordCount(iIndex); - for(int i=0;iReadTable(iIndex,i+1,m_Result); -// WelllogItem* item=AddItem(m_Result->StartDepth,m_Result->EndDepth); -// if(!item) continue; -// OGWordsResultItem* pResult = dynamic_cast(item); - logio->GetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),m_Result->Words,i+1); - - if(strstr(m_Result->Words,"$L")) { - char *s=strstr(m_Result->Words,"$L"); - if(strstr(s+2,"$U")) { - char *p=strstr(s+1,"$U"); - int len=p-s-2; - char buf1[100]; - strncpy(buf1,s+2,len); - buf1[len]=0; -// SetLeftAndRightAlign(atoi(buf1)); -// SetUpAndDownAlign(atoi(p+2)); - } - else { -// SetLeftAndRightAlign(atoi(s+2)); - } - *s=0; - } - else if(strstr(m_Result->Words,"$U")){ - char *p=strstr(m_Result->Words,"$U"); -// SetUpAndDownAlign(atoi(p+2)); - *p=0; - } -// SetCharacters(m_Result->Words); - -// fontColor=QColor(0,0,0,255); -// backgroundColor=QColor(255,255,255,255); -// wordfont.setFamily("黑体"); -// wordfont.setPointSize(10); - - //显示文本 - widget->addTextToPlot(-m_Result->EndDepth, -m_Result->StartDepth, QString::fromLocal8Bit(m_Result->Words)); - //widget->addTextToPlot(-2910, -2900, "你好");//QString(m_Result->Words) - } - logio->CloseTable(iIndex); - delete buf; - } - delete logio; - } - return true; -} - bool FormDraw::LoadFromIMAGE_SLF(QMyCustomPlot *widget, QString strSlfName, QString strLineName) { { @@ -4157,8 +4101,6 @@ void FormDraw::initGujing(QMyCustomPlot *widget, QString strSlfName, QString str // widget->LoadFromSLF_Gujing(strSlfName, strLineName); - //QString strAliasName = "固井结论"; - //QColor newlineColor=QColor(0,0,0); if(listOtherProperty.size()>=3) { strAliasName = listOtherProperty[0]; diff --git a/logPlus/formdraw.h b/logPlus/formdraw.h index aa2ad02..14f2695 100644 --- a/logPlus/formdraw.h +++ b/logPlus/formdraw.h @@ -182,8 +182,7 @@ public: QColor m_crPointFillDenv; //文字结论 - void initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName); - bool LoadFromSLF(QMyCustomPlot *widget, QString strSlfName, QString strLineName); + void initWords(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "文字结论", QColor newlineColor=QColor(0,0,0), QStringList listOtherProperty={}); //解释结论 void initResult(QMyCustomPlot *widget, QString strSlfName, QString strLineName); diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index 0b3e6ef..229b153 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -421,7 +421,7 @@ void FormInfo::paintEvent(QPaintEvent* event) if(m_strLineName=="WORDS_RELUST") { //文字结论,不绘制左右范围 - painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, "文字结论"); + //painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3 ,Qt::AlignCenter, "文字结论"); } else if(m_strLineName=="RESULT") { diff --git a/logPlus/formtrack.cpp b/logPlus/formtrack.cpp index 70f776d..c637357 100644 --- a/logPlus/formtrack.cpp +++ b/logPlus/formtrack.cpp @@ -577,7 +577,8 @@ void FormTrack::s_AddTableLine(QString strSlfName, QString strWellName, QString formInfo->setFrontColor(QColor(0,0,0)); formInfo->setBackColor(QColor(255,255,255)); if(strLineName == "GUJING1_RESULT" || strLineName == "GUJING2_RESULT" || strLineName == "GUJING3_RESULT" - || strLineName == "GEO_LITH" || strLineName == "SWALL_CORE") + || strLineName == "GEO_LITH" || strLineName == "SWALL_CORE" + || strLineName == "WORDS_RELUST" ) { //固井结论 / 井壁取心 / 录井剖面 if(listOtherProperty.size()>=3) diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index 17edb71..981aa49 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -981,6 +981,17 @@ void QMyCustomPlot::contextMenuEvent(QContextMenuEvent *event) menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新数据", this, &QMyCustomPlot::RefreshItems_GeoLith); menu.exec(event->globalPos()); } + else if (m_strLineName == "WORDS_RELUST") + { + QMenu menu(this); + //岩性描述,文字结论 + menu.addAction(QIcon(::GetImagePath() + "curve.png"), "开始编辑文字结论", this, &QMyCustomPlot::onEditText); + //menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "从剪切板文本数据粘贴", this, &QMyCustomPlot::addItems_Text); + menu.addAction(QIcon(::GetImagePath() + "icon/ClearSelectCore.png"), "取消选中", this, &QMyCustomPlot::ClearSelectItems); + //menu.addAction(QIcon(::GetImagePath() + "icon/Delete.png"), "全部清空", this, &QMyCustomPlot::DeleteItems_Text); + //menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新数据", this, &QMyCustomPlot::RefreshItems_Text); + menu.exec(event->globalPos()); + } // QAction *resetAction = menu.addAction("添加框图"); // connect(resetAction, &QAction::triggered, this, &QMyCustomPlot::onAddRect); @@ -1106,6 +1117,86 @@ void QMyCustomPlot::onEditLine() } } +//右键--添加文字结论 +void QMyCustomPlot::onEditText() +{ + this->setInteractions(QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables | QCP::iMultiSelect); // 轴、图例、图表可以被选择,并且是多选的方式 + this->setSelectionRectMode(QCP::srmCustom); // 鼠标框选 + + if(m_bFirstTimeConnect) + { + //信号槽只绑定一次,避免重复绑定 + m_bFirstTimeConnect = false; + + for (int i=0; i < this->graphCount(); ++i) { + QCPGraph *graph = this->graph(i); + graph->setSelectable(QCP::stDataRange); + break; + } + + connect(this->selectionRect(), &QCPSelectionRect::accepted, [this](){ + if(this->m_bDrawRect == false) + { + this->m_bDrawRect = true; + return; + } + // 当选择完成时,获取矩形范围并放大 + QRectF rect = this->selectionRect()->rect(); // 获取选择的矩形区域(像素坐标) + m_bEditRect=true;//当前是否正在编辑曲线。 + + // 转换为坐标轴范围 + double top = rect.top(); + double bottom = rect.bottom(); + + double right_Hight = this->xAxis->pixelToCoord(top); + double left_Low = this->xAxis->pixelToCoord(bottom); + + //追加判断,避免框选重叠 + TransparentDraggableRect *pDraggableRect =NULL; + { + QMap::Iterator it = m_mapDraggable_Rect.begin(); + while( it != m_mapDraggable_Rect.end() ) + { + pDraggableRect = (TransparentDraggableRect*)it.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + if(tmpRange.lower >= left_Low && tmpRange.upper <= right_Hight) + { + return; + } + + if(tmpRange.upper >= left_Low && tmpRange.upper <= right_Hight) + { + return; + } + + if(tmpRange.lower >= left_Low && tmpRange.lower <= right_Hight) + { + return; + } + + it++; + } + } + + { + //添加文字结论 + this->addTextToPlot(left_Low, right_Hight, ""); + + //保存 + this->SaveToSLF_Text(); + + //属性清空 + PropertyService()->InitCurrentViewInfo(); + + //取消框选 + this->setInteractions(QCP::iSelectLegend | QCP::iSelectPlottables); + this->setSelectionRectMode(QCP::srmNone); + } + }); + } +} + //右键--添加固井 void QMyCustomPlot::onEditGujing() { @@ -1668,6 +1759,116 @@ bool QMyCustomPlot::SaveToSLF_GeoLith() return true; } +//保存文字结论 +bool QMyCustomPlot::SaveToSLF_Text() +{ + static int isrun=false; + if(isrun) return false; + QString ss=m_strSlfName; + if(ss=="") return false; + isrun=true; + + 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; + } + QString name=m_strLineName; + bool isfirst=false; + int iIndex=logio->OpenTable(name.toStdString().c_str()); + if (iIndex < 0) + { + if(!m_mapDraggable_Rect.size()) { + delete logio; + isrun=false; + return false; + } + iIndex=logio->Open_Set_Table(m_strLineName.toStdString().c_str(),0,4, + "NO,SDEP,EDEP,RESULT", + "4,4,4,100",//字段长度 + "1,4,4,6",//字段类型 + "0,0,0,0");//字段备注 + isfirst=true; + } + logio->SetTableRecordCount(iIndex,m_mapDraggable_Rect.size()); + if(!m_mapDraggable_Rect.size()) { + delete logio; + if(isfirst)AddTableToWellRound(); + isrun=false; + return false; + } + + int len=logio->GetTableRecordLength(iIndex); + if(len listSDepth; + for (QMap::Iterator iter = m_mapDraggable_Rect.begin(); iter != m_mapDraggable_Rect.end(); iter++) + { + pDraggableRect = (TransparentDraggableRect*)iter.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + // + float fSDepth = -tmpRange.upper; + listSDepth.append(fSDepth); + } + qSort(listSDepth); + + // + for(int i=0; i::Iterator iter = m_mapDraggable_Rect.begin(); iter != m_mapDraggable_Rect.end(); iter++) + { + pDraggableRect = (TransparentDraggableRect*)iter.value(); + // + QCPRange tmpRange = pDraggableRect->getRange(); + float fSDepth = -tmpRange.upper; + if(fSDepth == listSDepth[i])//按顺序写入 + { + memset(m_Result,0,sizeof(WORDS_DATA)); + m_Result->StartDepth=-tmpRange.upper; + m_Result->EndDepth=-tmpRange.lower; + m_Result->Order=i+1; + + int l=strlen(pDraggableRect->mstrTitle.toStdString().c_str()); + if(l>100) l=100; + strncpy(m_Result->Words,pDraggableRect->mstrTitle.toLocal8Bit().data(),l); + if(l<100) m_Result->Words[l]=0; + float yy=m_Result->Order; + +// if(pResult->GetLeftAndRightAlign()) { +// strcat(m_Result->Words,"$L"); +// QString s=QString::number(pResult->GetLeftAndRightAlign()); +// strcat(m_Result->Words,s.toStdString().c_str()); +// } +// if(pResult->GetUpAndDownAlign()!=1) { +// strcat(m_Result->Words,"$U"); +// QString s=QString::number(pResult->GetUpAndDownAlign()); +// strcat(m_Result->Words,s.toStdString().c_str()); +// } + logio->SetTableFieldData(iIndex,0,(char*)&yy,i+1); + logio->SetTableFieldData(iIndex,1,(char*)&m_Result->StartDepth,i+1); + logio->SetTableFieldData(iIndex,2,(char*)&m_Result->EndDepth,i+1); + QString FieldName = "RESULT"; + logio->SetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),(char*)&m_Result->Words,i+1); + } + } + } + logio->CloseTable(iIndex); + delete logio; + if(isfirst)AddTableToWellRound(); + delete buf; + isrun=false; + return true; +} + //保存固井结论道 bool QMyCustomPlot::SaveToSLF_Gujing() { @@ -4949,3 +5150,71 @@ void QMyCustomPlot::s_changeGeoLithLine(QString strUuid, QString strSlfName, QSt //不清空属性窗口 } + +bool QMyCustomPlot::LoadFromSLF_Text(QString strSlfName, QString strLineName) +{ + QString FieldName="RESULT"; + + { + QString ss=strSlfName; + CMemRdWt *logio=new CMemRdWt(); + if(ss==""||!logio->Open(ss.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; +// QMessageBox::information(NULL,"提示","SLF文件打开失败,请检查!!",QMessageBox::Yes); + return false; + } + int iIndex=logio->OpenTable(strLineName.toStdString().c_str()); + if(iIndex>-1) { + int len=logio->GetTableRecordLength(iIndex); + if(lenGetTableRecordCount(iIndex); + for(int i=0;iReadTable(iIndex,i+1,m_Result); +// WelllogItem* item=AddItem(m_Result->StartDepth,m_Result->EndDepth); +// if(!item) continue; +// OGWordsResultItem* pResult = dynamic_cast(item); + logio->GetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),m_Result->Words,i+1); + + if(strstr(m_Result->Words,"$L")) { + char *s=strstr(m_Result->Words,"$L"); + if(strstr(s+2,"$U")) { + char *p=strstr(s+1,"$U"); + int len=p-s-2; + char buf1[100]; + strncpy(buf1,s+2,len); + buf1[len]=0; +// SetLeftAndRightAlign(atoi(buf1)); +// SetUpAndDownAlign(atoi(p+2)); + } + else { +// SetLeftAndRightAlign(atoi(s+2)); + } + *s=0; + } + else if(strstr(m_Result->Words,"$U")){ + char *p=strstr(m_Result->Words,"$U"); +// SetUpAndDownAlign(atoi(p+2)); + *p=0; + } +// SetCharacters(m_Result->Words); + +// fontColor=QColor(0,0,0,255); +// backgroundColor=QColor(255,255,255,255); +// wordfont.setFamily("黑体"); +// wordfont.setPointSize(10); + + //显示文本 + this->addTextToPlot(-m_Result->EndDepth, -m_Result->StartDepth, QString::fromLocal8Bit(m_Result->Words)); + } + logio->CloseTable(iIndex); + delete buf; + } + delete logio; + } + return true; +} diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index b3dba5c..d711272 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -141,11 +141,11 @@ public: // 组 QMap m_mapDragGroup; - QMap m_mapDraggable_Rect; - QMap m_mapDraggable_Result; - QMap m_mapDraggable_GeoLith; - QMap m_mapDraggable_SwallCore; - QMap m_mapDraggable_Gujing; + 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_mapDraggable_MFac; QMap m_mapDraggable_Phase; @@ -181,13 +181,16 @@ public: QMap ColorOrder; QMap ColorInds; QStringList LithWidth; + double m_dOilZhan=8; //含油占比 QString GetIntLith(QString Lith); QString GetIntOil(QString Oil); QString GetIntColor(QString Color); bool SaveToSLF_GeoLith(); bool LoadFromSLF_GeoLith(QString strSlfName, QString strLineName); - //录井剖面 - double m_dOilZhan=8; //含油占比 + + //文字结论 + bool SaveToSLF_Text(); + bool LoadFromSLF_Text(QString strSlfName, QString strLineName); public slots: void slot_time(); @@ -311,6 +314,13 @@ public slots: void RefreshItems_GeoLith(); //刷新数据 void AddItem_GeoLith(QStringList lists); + //右键--编辑文字结论 + void onEditText(); +// void addItems_Text(); //从剪切板文本数据粘贴 +// void DeleteItems_Text(); //全部清空 +// void RefreshItems_Text(); //刷新数据 +// void AddItem_Text(QStringList lists); + // void addItems_Core();