logplus/PluginCode/PluginUnit/myunitui.cpp

225 lines
7.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
if(m_pAction)
{
m_pAction->setText("直方图"); // 按钮显示文字
m_pAction->setToolTip("直方图"); // 鼠标移动到按钮显示tip
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);
}