沉积相右键菜单功能,追加删除微相、修改沉积相。

This commit is contained in:
jiayulong 2026-03-17 16:57:24 +08:00
parent ae0c8f0c11
commit 3b32c2ed8e
18 changed files with 562 additions and 69 deletions

View File

@ -701,7 +701,7 @@ void TransparentDraggableGeoLith::setLower(double lower)
if(newRange.size() < mMinWidth) { if(newRange.size() < mMinWidth) {
// 如果是边界拖动,强制设置最小宽度 // 如果是边界拖动,强制设置最小宽度
newRange.lower = newRange.upper - mMinWidth; newRange.lower = newRange.upper - mMinWidth;
} }
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -897,6 +897,13 @@ void TransparentDraggableGeoLith::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -905,14 +912,16 @@ void TransparentDraggableGeoLith::onMouseRelease(QMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x(); double hight = mRect->bottomRight->coords().x();
PropertyService()->initGeoLithItemProperty(this, low, hight, m_Lith, m_Oil, m_Color); PropertyService()->initGeoLithItemProperty(this, low, hight, m_Lith, m_Oil, m_Color);
//保存 if(m_bChange)
mPlot->SaveToSLF_GeoLith(); {
//保存
mPlot->SaveToSLF_GeoLith();
}
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");

View File

@ -108,6 +108,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLEGEOLITH_H #endif // TRANSPARENTDRAGGABLEGEOLITH_H

View File

@ -622,6 +622,12 @@ void TransparentDraggableGujing::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -630,14 +636,16 @@ void TransparentDraggableGujing::onMouseRelease(QMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x(); double hight = mRect->bottomRight->coords().x();
PropertyService()->initGujingItemProperty(this, low, hight, m_Result); PropertyService()->initGujingItemProperty(this, low, hight, m_Result);
//保存 if(m_bChange)
mPlot->SaveToSLF_Gujing(); {
//保存
mPlot->SaveToSLF_Gujing();
}
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");

View File

@ -92,6 +92,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLEGUJING_H #endif // TRANSPARENTDRAGGABLEGUJING_H

View File

@ -471,6 +471,12 @@ void TransparentDraggableJiegutext::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -555,13 +561,15 @@ void TransparentDraggableJiegutext::onMouseRelease(QMouseEvent *event)
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x(); double hight = mRect->bottomRight->coords().x();
PropertyService()->initJiegutextItemProperty(this, low, hight); PropertyService()->initJiegutextItemProperty(this, low, hight);
//保存 if(m_bChange)
mPlot->SaveToSLF_Jiegutext(); {
//保存
mPlot->SaveToSLF_Jiegutext();
}
//重新加载数据 //重新加载数据
this->ReLoadValues(); this->ReLoadValues();

View File

@ -87,6 +87,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLEJIEGUTEXT_H #endif // TRANSPARENTDRAGGABLEJIEGUTEXT_H

View File

@ -559,6 +559,12 @@ void TransparentDraggableLayer::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -568,13 +574,15 @@ void TransparentDraggableLayer::onMouseRelease(QMouseEvent *event)
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x(); double hight = mRect->bottomRight->coords().x();
PropertyService()->initLayerItemProperty(this, low, hight, mstrTitle); PropertyService()->initLayerItemProperty(this, low, hight, mstrTitle);
//保存 if(m_bChange)
mPlot->SaveToSLF_Layer(); {
//保存
mPlot->SaveToSLF_Layer();
}
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");

View File

@ -105,6 +105,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLELAYER_H #endif // TRANSPARENTDRAGGABLELAYER_H

View File

@ -1,7 +1,14 @@
#include "TransparentDraggableMFac.h" #include "TransparentDraggableMFac.h"
#include "PropertyWidget.h"
#include "CallManage.h"
#include "fracsel.h"
extern double g_dPixelPerCm;//每厘米像素数 extern double g_dPixelPerCm;//每厘米像素数
//static GeoIndicatorGenerator m_drawGeo; //static GeoIndicatorGenerator m_drawGeo;
//沉积相
extern double g_SDepthFac;
extern double g_EDepthFac;
extern QString g_SelectMFac;
TransparentDraggableMFac::TransparentDraggableMFac(QMyCustomPlot *parentPlot, QString strUuid, double minWidth, QString strTitle) TransparentDraggableMFac::TransparentDraggableMFac(QMyCustomPlot *parentPlot, QString strUuid, double minWidth, QString strTitle)
: QObject(parentPlot), mPlot(parentPlot), mstrTitle(strTitle), mMinWidth(minWidth) : QObject(parentPlot), mPlot(parentPlot), mstrTitle(strTitle), mMinWidth(minWidth)
@ -173,16 +180,99 @@ void TransparentDraggableMFac::updateHandles()
} }
//修改沉积相
void TransparentDraggableMFac::onChangeRect()
{
double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x();
// 创建对话框
FracSel *dlg = new FracSel(nullptr);
dlg->setChangeInfo(low, hight, mPlot->m_FracDef, mstrTitle);
//
dlg->setAttribute(Qt::WA_DeleteOnClose);//关闭时,自动删除窗口对象
int result = dlg->exec();//模态对话框
if (result == QDialog::Accepted) {
// 处理用户点击了确定按钮的逻辑
qDebug() << "Accepted=";
//
setTitle(g_SelectMFac);
setRange(-g_EDepthFac, -g_SDepthFac);
mPlot->SaveToSLF_Fac();
//刷新 bAdd不支持true,否则崩溃因为发消息的item本身会被删除无法继续后续处理
mPlot->RefreshItems_Fac(false);
}
else if (result == QDialog::Rejected) {
// 处理用户点击了取消按钮的逻辑
qDebug() << "Rejected=";
}
else {
// 处理其他情况的逻辑
qDebug() << "other=";
}
}
void TransparentDraggableMFac::onDelRect() void TransparentDraggableMFac::onDelRect()
{ {
//mDragMode = DragNone; //mDragMode = DragNone;
//删除框图 //删除框图
deleteRect(); deleteRect();
//保存
mPlot->SaveToSLF_Fac();
//刷新 bAdd不支持true,否则崩溃因为发消息的item本身会被删除无法继续后续处理
mPlot->RefreshItems_Fac(false);
//属性清空
PropertyService()->InitCurrentViewInfo();
} }
//设置顶深
void TransparentDraggableMFac::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 TransparentDraggableMFac::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 TransparentDraggableMFac::onMousePress(QMouseEvent *event) void TransparentDraggableMFac::onMousePress(QMouseEvent *event)
{ {
m_bChange = false;
if(event->button() != Qt::LeftButton)//右键 if(event->button() != Qt::LeftButton)//右键
{ {
double y = mPlot->xAxis->pixelToCoord(event->pos().y());//x轴展示深度 double y = mPlot->xAxis->pixelToCoord(event->pos().y());//x轴展示深度
@ -203,20 +293,13 @@ void TransparentDraggableMFac::onMousePress(QMouseEvent *event)
} }
//event->accept(); //event->accept();
// double low = mRect->topLeft->coords().x();
// double hight = mRect->bottomRight->coords().x();
// PropertyService()->initGujingItemProperty(this, low, hight, m_Result);
QMenu menu(nullptr); QMenu menu(nullptr);
QAction *delAction = menu.addAction("删除框图"); menu.addAction(QIcon(::GetImagePath() + "icon/DelColumn.png"), "删除微相", this, &TransparentDraggableMFac::onDelRect);
//delAction->installEventFilter(this); menu.addAction(QIcon(::GetImagePath() + "icon/AddRow.png"), "修改沉积相", this, &TransparentDraggableMFac::onChangeRect);
connect(delAction, &QAction::triggered, this, &TransparentDraggableMFac::onDelRect);
// QAction* pItem = menu.exec(event->globalPos());
// if(pItem == delAction)
// {
// //event->accept();
// int ii=0;
// ii++;
// }
menu.exec(event->globalPos()); menu.exec(event->globalPos());
return; return;
@ -253,8 +336,38 @@ void TransparentDraggableMFac::onMousePress(QMouseEvent *event)
} }
int TransparentDraggableMFac::getCursor()
{
if (m_bMoveRect)
{
return 2;
}
if (m_bArrow)
{
return 1;
}
return 0;
}
void TransparentDraggableMFac::onMouseMove(QMouseEvent *event) void TransparentDraggableMFac::onMouseMove(QMouseEvent *event)
{ {
if (mDragMode == DragRect)
{
m_bMoveRect = true;
}
else if (mLeftHandle->selectTest(event->pos(), false) < 5
|| mRightHandle->selectTest(event->pos(), false) < 5)
{
m_bArrow = true;
m_bMoveRect = false;
}
else
{
m_bArrow = false;
m_bMoveRect = false;
}
//--------------------
if(mDragMode == DragNone) return; if(mDragMode == DragNone) return;
event->accept(); event->accept();
@ -347,6 +460,12 @@ void TransparentDraggableMFac::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -355,6 +474,20 @@ void TransparentDraggableMFac::onMouseRelease(QMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
// double low = mRect->topLeft->coords().x();
// double hight = mRect->bottomRight->coords().x();
// PropertyService()->initGujingItemProperty(this, low, hight, m_Result);
//属性
if(m_bChange)
{
//保存
mPlot->SaveToSLF_Fac();
//刷新 bAdd不支持true,否则崩溃因为发消息的item本身会被删除无法继续后续处理
mPlot->RefreshItems_Fac(false);
//取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");
}
//避免二次绘制框图 //避免二次绘制框图
mPlot->m_bDrawRect = false; mPlot->m_bDrawRect = false;
//emit rangeChanged(getRange()); //emit rangeChanged(getRange());

View File

@ -34,6 +34,11 @@ public:
// 删除框图 // 删除框图
void deleteRect(); void deleteRect();
//设置顶深
void setUpper(double upper);
//设置底深
void setLower(double lower);
signals: signals:
void rangeChanged(QCPRange newRange); void rangeChanged(QCPRange newRange);
@ -43,13 +48,14 @@ private:
private slots: private slots:
void onDelRect(); void onDelRect();
void onChangeRect();
void onMousePress(QMouseEvent *event); void onMousePress(QMouseEvent *event);
void onMouseMove(QMouseEvent *event); void onMouseMove(QMouseEvent *event);
void onMouseRelease(QMouseEvent *event); void onMouseRelease(QMouseEvent *event);
double getMyLower(); double getMyLower();
double getMyUpper(); double getMyUpper();
private: public:
QMyCustomPlot *mPlot; QMyCustomPlot *mPlot;
QCPItemRect *mRect; QCPItemRect *mRect;
QCPItemRect *mLeftHandle; QCPItemRect *mLeftHandle;
@ -68,6 +74,13 @@ private:
// 添加最小宽度成员变量 // 添加最小宽度成员变量
double mMinWidth; double mMinWidth;
//鼠标形状
bool m_bArrow = false;
bool m_bMoveRect = false;
int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLEMFAC_H #endif // TRANSPARENTDRAGGABLEMFAC_H

View File

@ -445,6 +445,12 @@ void TransparentDraggableRect::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -454,13 +460,16 @@ void TransparentDraggableRect::onMouseRelease(QMouseEvent *event)
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
double hight = mRect->bottomRight->coords().x(); double hight = mRect->bottomRight->coords().x();
PropertyService()->initTextItemProperty(this, low, hight, mstrTitle); PropertyService()->initTextItemProperty(this, low, hight, mstrTitle);
//保存
mPlot->SaveToSLF_Text(); if(m_bChange)
{
//保存
mPlot->SaveToSLF_Text();
}
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");

View File

@ -97,6 +97,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLERECT_H #endif // TRANSPARENTDRAGGABLERECT_H

View File

@ -644,6 +644,12 @@ void TransparentDraggableSwallCore::onMouseMove(QMouseEvent *event)
} }
} }
//位置改变鼠标拖动item
if(newRange.lower!= mDragStartRange.lower || newRange.upper!= mDragStartRange.upper)
{
m_bChange = true;
}
setRange(newRange.lower, newRange.upper); setRange(newRange.lower, newRange.upper);
} }
@ -695,7 +701,7 @@ void TransparentDraggableSwallCore::onMouseRelease(QMouseEvent *event)
if(event->button() == Qt::LeftButton && mDragMode != DragNone) { if(event->button() == Qt::LeftButton && mDragMode != DragNone) {
event->accept(); event->accept();
//属性 //属性
//if(mDragMode == DragRect)
{ {
double low = mRect->topLeft->coords().x(); double low = mRect->topLeft->coords().x();
QString ColorImage = ""; QString ColorImage = "";
@ -710,8 +716,11 @@ void TransparentDraggableSwallCore::onMouseRelease(QMouseEvent *event)
PropertyService()->initSwallCoreItemProperty(this, low, m_Lith, m_Oil, ColorImage, m_fLeftSpace / g_dPixelPerCm, 1, mstrTitle.toInt()); PropertyService()->initSwallCoreItemProperty(this, low, m_Lith, m_Oil, ColorImage, m_fLeftSpace / g_dPixelPerCm, 1, mstrTitle.toInt());
//保存 if(m_bChange)
mPlot->SaveToSLF_SwallCore(); {
//保存
mPlot->SaveToSLF_SwallCore();
}
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, ""); emit CallManage::getInstance()->sig_Raise(mPlot->m_strUuid, "", "", "", "", 0, "");

View File

@ -110,6 +110,8 @@ public:
bool m_bArrow = false; bool m_bArrow = false;
bool m_bMoveRect = false; bool m_bMoveRect = false;
int getCursor(); int getCursor();
//鼠标是否拖动item
bool m_bChange = false;
}; };
#endif // TRANSPARENTDRAGGABLESWALLCORE_H #endif // TRANSPARENTDRAGGABLESWALLCORE_H

View File

@ -51,7 +51,6 @@ void FracSel::loadStyle(const QString &qssFile)
} }
} }
void FracSel::setInfo(double right_Hight, QList <FAC_DEF> FracDef) void FracSel::setInfo(double right_Hight, QList <FAC_DEF> FracDef)
{ {
ui->doubleSpinBox_1->setValue(-right_Hight); ui->doubleSpinBox_1->setValue(-right_Hight);
@ -62,6 +61,17 @@ void FracSel::setInfo(double right_Hight, QList <FAC_DEF> FracDef)
} }
} }
void FracSel::setChangeInfo(double left_Low, double right_Hight, QList <FAC_DEF> FracDef, QString strCurrent)
{
ui->doubleSpinBox_1->setValue(-right_Hight);
ui->doubleSpinBox_2->setValue(-left_Low);
for(int i=0; i<FracDef.size(); i++)
{
ui->comboBox->addItem(FracDef[i].mFac);
}
ui->comboBox->setCurrentText(strCurrent);
}
// //
void FracSel::slotOkClicked() void FracSel::slotOkClicked()
{ {

View File

@ -22,6 +22,7 @@ private:
public: public:
void loadStyle(const QString &qssFile); void loadStyle(const QString &qssFile);
void setInfo(double right_Hight, QList <FAC_DEF> FracDef); void setInfo(double right_Hight, QList <FAC_DEF> FracDef);
void setChangeInfo(double left_Low, double right_Hight, QList <FAC_DEF> FracDef, QString strCurrent);
public slots: public slots:

View File

@ -2163,6 +2163,8 @@ bool QMyCustomPlot::SaveToSLF_SwallCore()
if(n>sizeof(m_Result.dest)) n=sizeof(m_Result.dest); if(n>sizeof(m_Result.dest)) n=sizeof(m_Result.dest);
strncpy(m_Result.dest,name.toLocal8Bit().data(),n); strncpy(m_Result.dest,name.toLocal8Bit().data(),n);
logio->WriteTable(iIndex,i+1,&m_Result); logio->WriteTable(iIndex,i+1,&m_Result);
//
break;
} }
} }
} }
@ -2309,6 +2311,8 @@ bool QMyCustomPlot::SaveToSLF_GeoLith()
strncpy(m_Result.Dest,name.toLocal8Bit().data(),n); strncpy(m_Result.Dest,name.toLocal8Bit().data(),n);
// //
logio->WriteTable(iIndex,i+1,&m_Result); logio->WriteTable(iIndex,i+1,&m_Result);
//
break;
} }
} }
} }
@ -2418,6 +2422,8 @@ bool QMyCustomPlot::SaveToSLF_Text()
logio->SetTableFieldData(iIndex,2,(char*)&m_Result->EndDepth,i+1); logio->SetTableFieldData(iIndex,2,(char*)&m_Result->EndDepth,i+1);
QString FieldName = "RESULT"; QString FieldName = "RESULT";
logio->SetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),(char*)&m_Result->Words,i+1); logio->SetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),(char*)&m_Result->Words,i+1);
//
break;
} }
} }
} }
@ -2543,6 +2549,8 @@ bool QMyCustomPlot::SaveToSLF_Layer()
// { // {
// logio->SetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),(char*)pGeoItem->GetCharacters().toStdString().c_str(),j+1); // logio->SetTableFieldData(iIndex,(char*)FieldName.toStdString().c_str(),(char*)pGeoItem->GetCharacters().toStdString().c_str(),j+1);
// } // }
//
break;
} }
} }
} }
@ -6819,7 +6827,8 @@ bool QMyCustomPlot::SaveToSLF_Jiegutext()
} }
//logio->SetTableFieldData(iIndex,iRecNum,(char*)pDraggableRect->mList_coredat[iRecNum].toLocal8Bit().data(),i+1);//toStdString().c_str() //logio->SetTableFieldData(iIndex,iRecNum,(char*)pDraggableRect->mList_coredat[iRecNum].toLocal8Bit().data(),i+1);//toStdString().c_str()
} }
//
break;
} }
} }
} }
@ -7501,7 +7510,7 @@ void QMyCustomPlot::ReadFracDef()
} }
} }
void QMyCustomPlot::ReadData_Fac(QString strSlfName, QString csCurve) void QMyCustomPlot::ReadData_Fac(QString strSlfName, QString csCurve, bool bAdd)
{ {
if(strSlfName.isEmpty()) return; if(strSlfName.isEmpty()) return;
//清空 //清空
@ -7531,8 +7540,11 @@ void QMyCustomPlot::ReadData_Fac(QString strSlfName, QString csCurve)
mrw.ReadTable(iIndex,i+1,(void*)&frac); mrw.ReadTable(iIndex,i+1,(void*)&frac);
m_ObjList_Fac.append(frac); m_ObjList_Fac.append(frac);
//微相 if(bAdd)
this->addMFacToPlot(-frac.edep, -frac.sdep, QString::fromLocal8Bit(frac.mFac)); {
//微相
this->addMFacToPlot(-frac.edep, -frac.sdep, QString::fromLocal8Bit(frac.mFac));
}
} }
mrw.CloseTable(iIndex); mrw.CloseTable(iIndex);
} }
@ -7571,33 +7583,89 @@ void QMyCustomPlot::DrawFac(int iType)
str2 = QString::fromLocal8Bit(pObj.Phase); str2 = QString::fromLocal8Bit(pObj.Phase);
str2.trimmed(); str2.trimmed();
if (str2!=str1 || j==(m_ObjList_Fac.count()-1)) // if (str2!=str1 || j==(m_ObjList_Fac.count()-1))
// {
// if ( j==(m_ObjList_Fac.count()-1))
// bottom = m_ObjList_Fac[j].edep;
// else
// bottom = m_ObjList_Fac[j-1].edep;
if(j==(m_ObjList_Fac.count()-1))//最后1个
{ {
if ( j==(m_ObjList_Fac.count()-1)) if (str2!=str1)
bottom = m_ObjList_Fac[j].edep; {
else //倒数第2个item
bottom = m_ObjList_Fac[j-1].edep; bottom = m_ObjList_Fac[j-1].edep;
//显示文本
if (iType==1)
{
//相
this->addFacToPlot(-bottom, -top, str1);
}
else
{
//亚相
this->addPhaseToPlot(-bottom, -top, str1);
}
//添加最后1个不同的item
//显示文本 top = pObj.sdep;
if (iType==1) bottom = pObj.edep;
{ str1=str2;
//相 //显示文本
this->addFacToPlot(-bottom, -top, str1); if (iType==1)
{
//相
this->addFacToPlot(-bottom, -top, str1);
}
else
{
//亚相
this->addPhaseToPlot(-bottom, -top, str1);
}
} }
else else
{ {
//亚相 bottom = pObj.edep;
this->addPhaseToPlot(-bottom, -top, str1); //显示文本
if (iType==1)
{
//相
this->addFacToPlot(-bottom, -top, str1);
}
else
{
//亚相
this->addPhaseToPlot(-bottom, -top, str1);
}
} }
top = pObj.sdep;
str1=str2;
} }
else
{
if (str2!=str1)
{
//
bottom = m_ObjList_Fac[j-1].edep;
//显示文本
if (iType==1)
{
//相
this->addFacToPlot(-bottom, -top, str1);
}
else
{
//亚相
this->addPhaseToPlot(-bottom, -top, str1);
}
top = pObj.sdep;
str1=str2;
}
}
} }
} }
bool QMyCustomPlot::LoadFromSLF_Fac(QString strSlfName, QString csCurve) bool QMyCustomPlot::LoadFromSLF_Fac(QString strSlfName, QString csCurve, bool bAdd)
{ {
//隐藏刻度 //隐藏刻度
this->xAxis->setTicks(false); this->xAxis->setTicks(false);
@ -7605,23 +7673,34 @@ bool QMyCustomPlot::LoadFromSLF_Fac(QString strSlfName, QString csCurve)
this->xAxis2->setTicks(false); this->xAxis2->setTicks(false);
this->yAxis2->setTicks(false); this->yAxis2->setTicks(false);
//先删除
if(m_qcpItemLine)
{
removeItem(m_qcpItemLine);
}
if(m_qcpItemLine2)
{
removeItem(m_qcpItemLine2);
}
//画2条竖线 //画2条竖线
int iMyWidth = this->axisRect(0)->width(); int iMyWidth = this->axisRect(0)->width();
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(this); m_qcpItemLine = new QCPItemStraightLine(this);
qcpItemLine->point1->setCoords(-1, iMyWidth/2);//位置 m_qcpItemLine->point1->setCoords(-1, iMyWidth/2);//位置
qcpItemLine->point2->setCoords(-2, iMyWidth/2);//位置 m_qcpItemLine->point2->setCoords(-2, iMyWidth/2);//位置
//qcpItemLine->setPen(pPenStraightLine); //qcpItemLine->setPen(pPenStraightLine);
QCPItemStraightLine *qcpItemLine2 = new QCPItemStraightLine(this); m_qcpItemLine2 = new QCPItemStraightLine(this);
qcpItemLine2->point1->setCoords(-1, 3*iMyWidth/4);//位置 m_qcpItemLine2->point1->setCoords(-1, 3*iMyWidth/4);//位置
qcpItemLine2->point2->setCoords(-2, 3*iMyWidth/4);//位置 m_qcpItemLine2->point2->setCoords(-2, 3*iMyWidth/4);//位置
ReadFracDef(); ReadFracDef();
ReadData_Fac(strSlfName, csCurve); ReadData_Fac(strSlfName, csCurve, bAdd);
DrawFac(1);//相 DrawFac(1);//相
DrawFac(2);//亚相 DrawFac(2);//亚相
replot();
return true; return true;
} }
@ -7642,7 +7721,10 @@ void QMyCustomPlot::addItem_Fac()
//微相 //微相
this->addMFacToPlot(-g_EDepthFac, -g_SDepthFac, g_SelectMFac); this->addMFacToPlot(-g_EDepthFac, -g_SDepthFac, g_SelectMFac);
this->replot(); //this->replot();
SaveToSLF_Fac();
//刷新
RefreshItems_Fac(false);
} }
else if (result == QDialog::Rejected) { else if (result == QDialog::Rejected) {
// 处理用户点击了取消按钮的逻辑 // 处理用户点击了取消按钮的逻辑
@ -7653,3 +7735,190 @@ void QMyCustomPlot::addItem_Fac()
qDebug() << "other="; qDebug() << "other=";
} }
} }
//打开或创建数据表,不超过16个字段
// char Name[3][32]={"NAME","VALUE","SCRIPT"};// 64 字段名称
// char HZName[3][32]={"参数名称","参数数值","参数描述"};// 64 别名
// char Unit[3][32]={"","",""};;// 32 字段单位
// char HZUnit[3][32]={"","",""};// 32 单位别名
// short RepCode[3]={6,4,6};// 2 字段数据类型
// short CodeLength[3]={64,4,256};//字段长度
// unsigned short Reserved[3]={0,0,0};//字段备注
int OpenTable2(CMemRdWt *MemRdWt,char *strTable,char *strInfo,int nFields,char Name[16][32],char HZName[16][32],char Unit[16][32],
char HZUnit[16][32],short *RepCode,short *CodeLength,unsigned short *tReserved)
{
int i,indext;
indext=MemRdWt->OpenTable(strTable);
if(indext<0)
{
Slf_OBJECT_FIELD Par_Table_Field[16];
Slf_OBJECT_FIELD Table_Field[16];
for(i=0;i<nFields;i++)
{
strcpy(Table_Field[i].Name,Name[i]);
strcpy(Table_Field[i].HZName,HZName[i]);
strcpy(Table_Field[i].Unit,Unit[i]);;//32字段单位
strcpy(Table_Field[i].HZUnit,HZUnit[i]);;//32单位别名
Table_Field[i].CodeLength=CodeLength[i];
Table_Field[i].RepCode=RepCode[i];
Table_Field[i].Sequence=0;//是否连续控制
Table_Field[i].Start=1;//字段起始值
Table_Field[i].End=99999;//字段起始值
Table_Field[i].Rlev=1;//字段采样间隔
Table_Field[i].SamplePoint=1;//一个阵列的横向采样样本点数
Table_Field[i].ArrayNum=1;//阵列数
Table_Field[i].Vmin=-99999;//字段最大值
Table_Field[i].Vmax=99999;//字段最小值
Table_Field[i].DefVal=9999;//缺省值
*(DWORD *)&Table_Field[i].Reserved=tReserved[i];
}
indext=MemRdWt->CreateTable(0,strTable,strInfo,nFields,Table_Field,0);
}
return indext;
}
//保存
void QMyCustomPlot::SaveToSLF_Fac()
{
int i,nField = 40;
int nCount = m_mapDraggable_MFac.size();
char FacFile[MAX_PATH];
CMemRdWt mrw;
FAC_TABLE m_Result;
strcpy(FacFile,"LITHA");
QString wellname = m_strSlfName;
if ( mrw.Open(wellname.toStdString().c_str()) ) // 打开井文件
{
char tName[7][32]={"NO","SDEP","EDEP","FAC","PHASE","MFAC","DEST"};// 64 字段名称
char tHZName[7][32]={"序号","开始深度","结束深度","沉积相","亚相","微相","描述"};// 64 别名
char tUnit[7][32]={"","M","M","","","",""};// 32 字段单位
char tHZUnit[7][32]={"","","","","","",""};// 32 单位别名
short tRepCode[7]={1,4,4,6,6,6,6};// 2 字段数据类型
short tCodeLength[7]={4,4,4,32,32,32,32};//字段长度
unsigned short tReserved[7]={0,0,0,0,0,0,0};//字段备注
//
QString strInfo = "岩性数据表";
char szInfo[MAX_PATH];
memset(szInfo, 0, sizeof(szInfo));
//微相
int n=strlen(strInfo.toStdString().c_str());
strncpy(szInfo, strInfo.toLocal8Bit().data(),n);
int iLithIndex=OpenTable2(&mrw,FacFile,szInfo,7,
tName,tHZName,tUnit,tHZUnit,tRepCode,tCodeLength,tReserved);
//保存输入输出曲线定义
if (iLithIndex>= 0)
{
TransparentDraggableMFac *pDraggableRect =NULL;
//排序
QList<float> listSDepth;
for (QMap<QString,QObject *>::Iterator iter = m_mapDraggable_MFac.begin(); iter != m_mapDraggable_MFac.end(); iter++)
{
pDraggableRect = (TransparentDraggableMFac*)iter.value();
//
QCPRange tmpRange = pDraggableRect->getRange();
//
float fSDepth = -tmpRange.upper;
listSDepth.append(fSDepth);
}
qSort(listSDepth);
//if ( nCount>=2)
{
mrw.SetTableRecordCount(iLithIndex,nCount);
//
for(int i=0; i<listSDepth.size(); i++)
{
for (QMap<QString,QObject *>::Iterator iter = m_mapDraggable_MFac.begin(); iter != m_mapDraggable_MFac.end(); iter++)
{
pDraggableRect = (TransparentDraggableMFac*)iter.value();
//
QCPRange tmpRange = pDraggableRect->getRange();
float fSDepth = -tmpRange.upper;
if(fSDepth == listSDepth[i])//按顺序写入
{
memset(&m_Result,0,sizeof(FAC_TABLE));
m_Result.sdep = -tmpRange.upper;
m_Result.edep = -tmpRange.lower;
m_Result.no = i+1;
for (int j=0; j<m_FracDef.count(); j++)
{
if ( m_FracDef[j].mFac == pDraggableRect->mstrTitle )
{
//微相
int n=strlen(m_FracDef[j].mFac.toStdString().c_str());
if(n>sizeof(m_Result.mFac)) n=sizeof(m_Result.mFac);
strncpy(m_Result.mFac, m_FracDef[j].mFac.toLocal8Bit().data(),n);
//亚相
n=strlen(m_FracDef[j].Phase.toStdString().c_str());
if(n>sizeof(m_Result.Phase)) n=sizeof(m_Result.Phase);
strncpy(m_Result.Phase, m_FracDef[j].Phase.toLocal8Bit().data(),n);
//相
n=strlen(m_FracDef[j].Fac.toStdString().c_str());
if(n>sizeof(m_Result.Fac)) n=sizeof(m_Result.Fac);
strncpy(m_Result.Fac, m_FracDef[j].Fac.toLocal8Bit().data(),n);
//
mrw.WriteTable(iLithIndex,i+1,&m_Result);
break;
}
}
//
break;
}
}
}
}
mrw.CloseTable(iLithIndex);
}
mrw.Close();
}
}
//刷新数据 bAdd不支持true,否则崩溃因为发消息的item本身会被删除无法继续后续处理
void QMyCustomPlot::RefreshItems_Fac(bool bAdd)
{
//return;
//删除对象
if(bAdd)
{
//微相
TransparentDraggableMFac *pDraggableRect =NULL;
QMap<QString,QObject *>::Iterator it = m_mapDraggable_MFac.begin();
while( it != m_mapDraggable_MFac.end() )
{
pDraggableRect = (TransparentDraggableMFac*)it.value();
it++;
pDraggableRect->deleteRect();
}
}
//亚相
TransparentDraggablePhase *pDraggableRect2 =NULL;
QMap<QString,QObject *>::Iterator it2 = m_mapDraggable_Phase.begin();
while( it2 != m_mapDraggable_Phase.end() )
{
pDraggableRect2 = (TransparentDraggablePhase*)it2.value();
it2++;
pDraggableRect2->deleteRect();
}
//相
TransparentDraggableFac *pDraggableRect3 =NULL;
QMap<QString,QObject *>::Iterator it3 = m_mapDraggable_Fac.begin();
while( it3 != m_mapDraggable_Fac.end() )
{
pDraggableRect3 = (TransparentDraggableFac*)it3.value();
it3++;
pDraggableRect3->deleteRect();
}
//重新加载
LoadFromSLF_Fac(m_strSlfName, m_strLineName, bAdd);
//属性清空
PropertyService()->InitCurrentViewInfo();
}

View File

@ -66,7 +66,6 @@ public:
// 绘图类型-波形 // 绘图类型-波形
void initWave2(QString strSlfName, QString strWaveName); void initWave2(QString strSlfName, QString strWaveName);
void initColorTable(); void initColorTable();
void setSchemeIndex(int nidx, int colorNum); void setSchemeIndex(int nidx, int colorNum);
double** getWavedata(int nrow, int ncol); double** getWavedata(int nrow, int ncol);
@ -186,9 +185,9 @@ public:
QMap<QString, QObject*> m_mapDraggable_SwallCore; //井壁取心 QMap<QString, QObject*> m_mapDraggable_SwallCore; //井壁取心
QMap<QString, QObject*> m_mapDraggable_Gujing; //固井 QMap<QString, QObject*> m_mapDraggable_Gujing; //固井
QMap<QString, QObject*> m_mapDraggable_Image; QMap<QString, QObject*> m_mapDraggable_Image;
QMap<QString, QObject*> m_mapDraggable_MFac; QMap<QString, QObject*> m_mapDraggable_MFac; //微相
QMap<QString, QObject*> m_mapDraggable_Phase; QMap<QString, QObject*> m_mapDraggable_Phase; //亚相
QMap<QString, QObject*> m_mapDraggable_Fac; QMap<QString, QObject*> m_mapDraggable_Fac; //相
QMap<QString, QObject*> m_mapDraggable_Guan; QMap<QString, QObject*> m_mapDraggable_Guan;
QMap<QString, QObject*> m_mapDraggable_Jiegutext; QMap<QString, QObject*> m_mapDraggable_Jiegutext;
QMap<QString, QObject*> m_mapDraggable_Line; QMap<QString, QObject*> m_mapDraggable_Line;
@ -258,10 +257,14 @@ public:
//沉积相 //沉积相
QList <FAC_DEF> m_FracDef; QList <FAC_DEF> m_FracDef;
QList <FAC_TABLE> m_ObjList_Fac; QList <FAC_TABLE> m_ObjList_Fac;
QCPItemStraightLine *m_qcpItemLine=nullptr;
QCPItemStraightLine *m_qcpItemLine2=nullptr;
void ReadFracDef(); void ReadFracDef();
void ReadData_Fac(QString strSlfName, QString csCurve); void ReadData_Fac(QString strSlfName, QString csCurve, bool bAdd=true);
void DrawFac(int iType); void DrawFac(int iType);
bool LoadFromSLF_Fac(QString strSlfName, QString csCurve); bool LoadFromSLF_Fac(QString strSlfName, QString csCurve, bool bAdd=true);
//保存
void SaveToSLF_Fac();
public slots: public slots:
void slot_time(); void slot_time();
@ -429,6 +432,7 @@ public slots:
//右键--沉积相 //右键--沉积相
void addItem_Fac(); //添加沉积相 void addItem_Fac(); //添加沉积相
void RefreshItems_Fac(bool bAdd=true); //刷新数据
//右键--解释结论 //右键--解释结论
void onOpenEditResult(); void onOpenEditResult();