parent
ac7413680e
commit
19ed90ce86
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -0,0 +1,45 @@
|
||||
#ifndef NMWXPROPERTYINTERPOLATIONDLG_H
|
||||
#define NMWXPROPERTYINTERPOLATIONDLG_H
|
||||
|
||||
#include "iDlgBase.h"
|
||||
#include "nmSubWxs_global.h"
|
||||
|
||||
class QComboBox;
|
||||
class QDoubleSpinBox;
|
||||
class QLineEdit;
|
||||
class QPushButton;
|
||||
class QTableWidget;
|
||||
|
||||
class NM_SUB_WXS_EXPORT nmWxPropertyInterpolationDlg : public iDlgBase
|
||||
{
|
||||
public:
|
||||
explicit nmWxPropertyInterpolationDlg(QWidget* parent = 0);
|
||||
|
||||
private:
|
||||
// 初始化属性插值界面
|
||||
void initInterpolationUI();
|
||||
|
||||
private:
|
||||
// 插值属性及名称
|
||||
QComboBox* m_pPropertyCombo;
|
||||
QLineEdit* m_pNameEdit;
|
||||
|
||||
// 测点数据录入
|
||||
QDoubleSpinBox* m_pNewValueSpin;
|
||||
QPushButton* m_pMapPickButton;
|
||||
QTableWidget* m_pPointTable;
|
||||
QPushButton* m_pDeletePointButton;
|
||||
QPushButton* m_pClearPointsButton;
|
||||
|
||||
// Kriging插值参数
|
||||
QDoubleSpinBox* m_pNuggetSpin;
|
||||
QDoubleSpinBox* m_pSillSpin;
|
||||
QDoubleSpinBox* m_pRangeSpin;
|
||||
QComboBox* m_pModelCombo;
|
||||
|
||||
// 结果预览及应用
|
||||
QPushButton* m_pPreviewButton;
|
||||
QPushButton* m_pApplyButton;
|
||||
};
|
||||
|
||||
#endif // NMWXPROPERTYINTERPOLATIONDLG_H
|
||||
@ -0,0 +1,146 @@
|
||||
#include "nmWxPropertyInterpolationDlg.h"
|
||||
|
||||
#include <QAbstractItemView>
|
||||
#include <QComboBox>
|
||||
#include <QCoreApplication>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QFormLayout>
|
||||
#include <QGroupBox>
|
||||
#include <QHBoxLayout>
|
||||
#include <QHeaderView>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QTableWidget>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
namespace
|
||||
{
|
||||
// 使用独立翻译上下文,便于统一维护对话框文本
|
||||
QString interpolationText(const char* sourceText)
|
||||
{
|
||||
return QCoreApplication::translate("nmWxPropertyInterpolationDlg", sourceText);
|
||||
}
|
||||
|
||||
// 创建统一格式的非负数值输入框
|
||||
QDoubleSpinBox* createNumberSpinBox(QWidget* parent, double value)
|
||||
{
|
||||
QDoubleSpinBox* spinBox = new QDoubleSpinBox(parent);
|
||||
spinBox->setRange(0.0, 1.0e12);
|
||||
spinBox->setDecimals(6);
|
||||
spinBox->setValue(value);
|
||||
spinBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||
return spinBox;
|
||||
}
|
||||
}
|
||||
|
||||
nmWxPropertyInterpolationDlg::nmWxPropertyInterpolationDlg(QWidget* parent)
|
||||
: iDlgBase(parent),
|
||||
m_pPropertyCombo(NULL),
|
||||
m_pNameEdit(NULL),
|
||||
m_pNewValueSpin(NULL),
|
||||
m_pMapPickButton(NULL),
|
||||
m_pPointTable(NULL),
|
||||
m_pDeletePointButton(NULL),
|
||||
m_pClearPointsButton(NULL),
|
||||
m_pNuggetSpin(NULL),
|
||||
m_pSillSpin(NULL),
|
||||
m_pRangeSpin(NULL),
|
||||
m_pModelCombo(NULL),
|
||||
m_pPreviewButton(NULL),
|
||||
m_pApplyButton(NULL)
|
||||
{
|
||||
setWindowTitle(interpolationText("Property Interpolation"));
|
||||
setWindowModality(Qt::NonModal);
|
||||
setModal(false);
|
||||
setMinimumSize(520, 620);
|
||||
resize(560, 680);
|
||||
initInterpolationUI();
|
||||
}
|
||||
|
||||
void nmWxPropertyInterpolationDlg::initInterpolationUI()
|
||||
{
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
// 插值属性及名称设置
|
||||
QFormLayout* dataSetLayout = new QFormLayout;
|
||||
m_pPropertyCombo = new QComboBox(this);
|
||||
m_pPropertyCombo->addItem(interpolationText("Permeability k"), QString("k"));
|
||||
m_pPropertyCombo->addItem(interpolationText("Porosity phi"), QString("phi"));
|
||||
m_pPropertyCombo->addItem(interpolationText("Reservoir thickness h"), QString("h"));
|
||||
dataSetLayout->addRow(interpolationText("Property:"), m_pPropertyCombo);
|
||||
|
||||
m_pNameEdit = new QLineEdit(interpolationText("Permeability"), this);
|
||||
dataSetLayout->addRow(interpolationText("Name:"), m_pNameEdit);
|
||||
mainLayout->addLayout(dataSetLayout);
|
||||
|
||||
// 测点数据录入区域
|
||||
QGroupBox* pointGroup = new QGroupBox(interpolationText("Measurement Points"), this);
|
||||
QVBoxLayout* pointLayout = new QVBoxLayout(pointGroup);
|
||||
|
||||
QHBoxLayout* newPointLayout = new QHBoxLayout;
|
||||
newPointLayout->addWidget(new QLabel(interpolationText("New value:"), pointGroup));
|
||||
m_pNewValueSpin = createNumberSpinBox(pointGroup, 0.0);
|
||||
newPointLayout->addWidget(m_pNewValueSpin, 1);
|
||||
m_pMapPickButton = new QPushButton(interpolationText("Select on Map"), pointGroup);
|
||||
m_pMapPickButton->setCheckable(true);
|
||||
// 地图选点功能将在后续阶段接入
|
||||
m_pMapPickButton->setEnabled(false);
|
||||
newPointLayout->addWidget(m_pMapPickButton);
|
||||
pointLayout->addLayout(newPointLayout);
|
||||
|
||||
// 每个测点保存坐标及对应的属性值
|
||||
m_pPointTable = new QTableWidget(0, 3, pointGroup);
|
||||
QStringList headers;
|
||||
headers << interpolationText("X") << interpolationText("Y") << interpolationText("Value");
|
||||
m_pPointTable->setHorizontalHeaderLabels(headers);
|
||||
m_pPointTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
|
||||
m_pPointTable->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_pPointTable->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
m_pPointTable->setAlternatingRowColors(true);
|
||||
pointLayout->addWidget(m_pPointTable, 1);
|
||||
|
||||
// 测点列表管理按钮
|
||||
QHBoxLayout* pointButtonLayout = new QHBoxLayout;
|
||||
pointButtonLayout->addStretch();
|
||||
m_pDeletePointButton = new QPushButton(interpolationText("Delete Selected"), pointGroup);
|
||||
m_pDeletePointButton->setEnabled(false);
|
||||
pointButtonLayout->addWidget(m_pDeletePointButton);
|
||||
m_pClearPointsButton = new QPushButton(interpolationText("Clear"), pointGroup);
|
||||
m_pClearPointsButton->setEnabled(false);
|
||||
pointButtonLayout->addWidget(m_pClearPointsButton);
|
||||
pointLayout->addLayout(pointButtonLayout);
|
||||
mainLayout->addWidget(pointGroup, 1);
|
||||
|
||||
// Kriging插值参数设置
|
||||
QGroupBox* parameterGroup = new QGroupBox(interpolationText("Kriging Parameters"), this);
|
||||
QFormLayout* parameterLayout = new QFormLayout(parameterGroup);
|
||||
m_pNuggetSpin = createNumberSpinBox(parameterGroup, 0.01);
|
||||
parameterLayout->addRow(interpolationText("Nugget:"), m_pNuggetSpin);
|
||||
m_pSillSpin = createNumberSpinBox(parameterGroup, 100.0);
|
||||
parameterLayout->addRow(interpolationText("Sill:"), m_pSillSpin);
|
||||
m_pRangeSpin = createNumberSpinBox(parameterGroup, 1000.0);
|
||||
parameterLayout->addRow(interpolationText("Range:"), m_pRangeSpin);
|
||||
m_pModelCombo = new QComboBox(parameterGroup);
|
||||
m_pModelCombo->addItem(interpolationText("Spherical (0)"), 0);
|
||||
m_pModelCombo->addItem(interpolationText("Exponential (1)"), 1);
|
||||
m_pModelCombo->addItem(interpolationText("Gaussian (2)"), 2);
|
||||
parameterLayout->addRow(interpolationText("Model:"), m_pModelCombo);
|
||||
mainLayout->addWidget(parameterGroup);
|
||||
|
||||
// 底部操作按钮
|
||||
QHBoxLayout* buttonLayout = new QHBoxLayout;
|
||||
m_pPreviewButton = new QPushButton(interpolationText("Preview"), this);
|
||||
// 插值计算和预览功能将在后续阶段接入
|
||||
m_pPreviewButton->setEnabled(false);
|
||||
buttonLayout->addWidget(m_pPreviewButton);
|
||||
buttonLayout->addStretch();
|
||||
m_pApplyButton = new QPushButton(interpolationText("Apply"), this);
|
||||
m_pApplyButton->setEnabled(false);
|
||||
buttonLayout->addWidget(m_pApplyButton);
|
||||
QPushButton* closeButton = new QPushButton(interpolationText("Close"), this);
|
||||
buttonLayout->addWidget(closeButton);
|
||||
mainLayout->addLayout(buttonLayout);
|
||||
|
||||
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
|
||||
}
|
||||
Loading…
Reference in New Issue