logplus/Plugin/PluginUnit/myunitui.cpp

222 lines
7.2 KiB
C++
Raw Normal View History

#include "myunitui.h"
#include "ui_myunitui.h"
#include "PluginName.h"
#include "MemRdWt.h"
#include <QJsonDocument>
#include <QJsonObject>
//固井结构体(注:此处为表格输出示例)
typedef struct ss_struct
{
int GNO;
float GSDEP,GEDEP;
int GRESULT;
} GUJING;
MyUnitUI::MyUnitUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyUnitUI)
{
ui->setupUi(this);
//保存logplus窗口句柄
m_mainParentWindow = (QMainWindow *)parent;
//绑定logplus信号槽
connect(this, SIGNAL(sig_PluginMsg(QString)), m_mainParentWindow, SLOT(s_PluginMsg(QString)));
//测试用
//点击按钮
connect(ui->pushButton, &QPushButton::clicked, this, [ = ]()
{
s_ButtonClick();
});
}
MyUnitUI::~MyUnitUI()
{
delete ui;
}
QString MyUnitUI::getParams()
{
return ui->lineEdit->text();
}
void MyUnitUI::setParams(QString &strParams)
{
if (strParams.length() <= 0)
{
return;
}
QJsonParseError err_rpt;
QJsonDocument root_Doc = QJsonDocument::fromJson(strParams.toStdString().c_str(), &err_rpt);//字符串格式化为JSON
if (err_rpt.error != QJsonParseError::NoError)
{
return;
}
QJsonObject root_Obj = root_Doc.object();
if (root_Obj.contains("prjname"))
{
// 获取当前项目名称
m_strPrjName = root_Obj.value("prjname").toString();
ui->lineEdit->setText(m_strPrjName);
}
}
QAction *MyUnitUI::createAction()
{
//下面, 平台显示按钮, 如需要平台显示解开注释
m_pAction = new QAction();
m_pAction->setText("直方图");
m_pAction->setToolTip("直方图");
m_pAction->setIcon( QIcon(":/image/zfu.png"));
m_pAction->setProperty("PluginName", PLUGINUNIT);
return m_pAction;
}
//测试按钮
void MyUnitUI::s_ButtonClick()
{
QVector<QString> vecSlfList;
QVector<QString> vecWellList;
// 根据当前项目名称获取当前项目的slf文件获取当前项目井文件
bool bret = CMemRdWt::getPrjAllSlf(m_strPrjName, vecSlfList, vecWellList);
if(vecSlfList.size() > 0)
{
CMemRdWt *pMemRdWt=new CMemRdWt();
//1初始化参数、输入
pMemRdWt->Const();
pMemRdWt->In();
if(!pMemRdWt->Open(vecSlfList.at(6).toStdString().c_str(),CMemRdWt::modeReadWrite)) {
delete pMemRdWt;
return;
}
//2波形类型的输出数据初始化检查
char outname[2][16];
int OUTindex = 0, WaveIndex = 0;
pMemRdWt->GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称参数1是序列值从0开始波形/曲线均使用GetOutCurveName函数
float fSdep = 2900; //设置起始深度
float fEdep = 3000; //设置结束深度
float fRlev = 0.0; //设置采样间隔
int index1 = pMemRdWt->OpenWave(outname[OUTindex]);//检查是否存在outname[OUTindex]波形
if(index1 < 0) //返回索引小于0说明没有该波形需要创建
{
//创建方式:
Slf_WAVE myWave;
strcpy(myWave.Name, outname[OUTindex]);
strcpy(myWave.AliasName, outname[OUTindex]);
strcpy(myWave.DepthUnit, "m");
myWave.CodeLen = 4;
myWave.RepCode = 4;
myWave.DefVal = 0;
myWave.StartDepth = fSdep;
myWave.EndDepth = fEdep;
myWave.DepLevel = fRlev;
strcpy(myWave.DepthUnit, "m");
myWave.StartTime = 0; //起始记录时间
myWave.TimeLevel = 5; //时间采样间隔
myWave.ArrayNum = 1; //阵列数
myWave.TimeSamples = 36; //时间采样总数
strcpy(myWave.TimeUnit, "ns"); //时间单位
index1 = pMemRdWt->OpenWave((Slf_WAVE *)&myWave); //创建波形(注:此时返回索引应>1代表创建成功
}
if(index1 < 0)
{
return;
}else
{
WaveIndex = index1;
}
//3曲线类型的输出数据初始化检查
OUTindex = 1;//按extern "C"中定义的输出数据顺序设置
pMemRdWt->GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称参数1是序列值从0开始
index1 = pMemRdWt->OpenCurve(outname[1]);//index1 = MemRdWt.OpenCurve("EEE");//检查数据是否存在//outname[OUTindex]
if(index1 < 0) //返回索引小于0说明没有这条曲线需要创建
{
//创建方式:
Slf_CURVE myCurve; //定义曲线对象
strcpy(myCurve.Name, outname[1]); //设置名称
strcpy(myCurve.AliasName, outname[1]); //设置别名
strcpy(myCurve.Unit, "m"); //设置数据单位
myCurve.CodeLen = 4; //设置字节长度4float
myCurve.RepCode = 4; //设置数据类型4float
myCurve.DefVal = 0; //设置默认值
myCurve.StartDepth = fSdep; //设置起始深度
myCurve.EndDepth = fEdep; //设置结束深度
myCurve.DepLevel = fRlev; //设置采样间隔
strcpy(myCurve.DepthUnit, "m"); //设置深度单位
index1 = pMemRdWt->OpenCurve((Slf_CURVE *)&myCurve); //创建曲线(注:此时返回索引应>1代表创建成功
}
if(index1 < 0)
{
return;
}
/*************************************************向平台写表格示例*************************************************************
*****************************begin****************************/
//1固井结论表格
int itable1 = pMemRdWt->OpenOG_RESULT("固井质量");//例如表格取名为“固井质量”
pMemRdWt->SetTableRecordCount(itable1, 0); //清空原有表格数据
GUJING *CCNN2 = new GUJING[5];
for(int i = 0; i < 5; i++)
{
CCNN2[i].GNO = i + 1;
CCNN2[i].GSDEP = 2000 + i * 10;
CCNN2[i].GEDEP = 2000 + (i + 1) * 10;
CCNN2[i].GRESULT = 1;
int temp = pMemRdWt->WriteTable(itable1, i + 1, &CCNN2[i]);
}
//2其他表格
struct Slf_RST{
int Order;
float Depth;
float CorrDepth;
};
struct Slf_RST m_Result;
itable1 = pMemRdWt->OpenTable("ABCD");
if (itable1 < 0)
{
itable1 = pMemRdWt->Open_Set_Table("ABCD",0,3,
"NO,DEPTH,DDEP",
"4,4,4",//字段长度
"1,4,4",//字段类型
"0,0,0");//字段备注,1-枚举
}
pMemRdWt->SetTableRecordCount(itable1,3); //设置表格有3行数据
for(int j = 0; j < 3; j++)
{
memset(&m_Result, 0, sizeof(Slf_RST));
m_Result.Order = j + 1;
m_Result.Depth = 10;
m_Result.CorrDepth = 20 + j;
pMemRdWt->WriteTable(itable1, j + 1, &m_Result);
}
pMemRdWt->CloseTable(itable1);
delete pMemRdWt;
}
//
QString strMsg = ui->lineEdit->text();
//插件给平台发消息
emit sig_PluginMsg("插件给平台发了消息:" + strMsg);
}