COMPASSi/trunk/code/inc/DataManager/DataManagerInterface/include/XLSXDataManager.h

272 lines
8.4 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.

#ifndef XLSXDataManager_H
#define XLSXDataManager_H
#include <deque>
#include <QString>
#include <QSettings>
#include <string>
#include <vector>
//#include <xlnt/xlnt.hpp>
#include "DataManagerGlobal.h"
#include "ModelData.h"
#include "PathUtil.h"
#include "xlnt/xlnt.hpp"
using namespace std;
class DATAMANAGER_DLL_API_EXPORTS ImportOffsetOption
{
public:
ImportOffsetOption()
{
m_fSectionLen = 5;
m_fBfY = 1;
m_bCreateBL = true;
m_bCreateWL = true;
}
string m_szFilePath; // 导入型值表所在路径
bool m_bCreateBL; // 是否导入控制点
bool m_bCreateWL; // 是否创建水线
double m_fSectionLen; // 船体分段长度单位mm
double m_fBfY; // 梁拱值
public:
// Getter and Setter functions
string getFilePath() { return m_szFilePath; }
void setFilePath( string& filePath) { m_szFilePath = filePath; }
bool getCreateBL() { return m_bCreateBL; }
void setCreateBL(bool createBL) { m_bCreateBL = createBL; }
bool getCreateWL() { return m_bCreateWL; }
void setCreateWL(bool createWL) { m_bCreateWL = createWL; }
float getSectionLen() { return m_fSectionLen; }
void setSectionLen(float sectionLen) { m_fSectionLen = sectionLen; }
float getBfY() { return m_fBfY; }
void setBfY(float bfY) { m_fBfY = bfY; }
};
// 型值点
class DATAMANAGER_DLL_API_EXPORTS OffsetPnt
{
public:
int m_nStIdx; // 横剖线的编号
double m_fStIdx; // 站号
double m_fStOffset; // 相对于站号的偏移量
double m_Y; // Y值
double m_Z; // Z值
bool m_bIsZhejiao; // 是否为折角点
public:
// Getter and Setter functions
int getnStIdx() { return m_nStIdx; }
void setnStIdx(int stIdx) { m_nStIdx = stIdx; }
double getfStIdxVal() { return m_fStIdx; }
void setfStIdxVal(double stIdx) { m_fStIdx = stIdx; }
double getStOffset() { return m_fStOffset; }
void setStOffset(double stOffset) { m_fStOffset = stOffset; }
double getY() { return m_Y; }
void setY(double Y) { m_Y = Y; }
double getZ() { return m_Z; }
void setZ(double Z) { m_Z = Z; }
bool isZhejiao() { return m_bIsZhejiao; }
void setIsZhejiao(bool isZhejiao) { m_bIsZhejiao = isZhejiao; }
};
// 横剖线
class DATAMANAGER_DLL_API_EXPORTS STLine
{
public:
string m_name; // 型线名称
string m_cmdName; // 命令名称
double m_fStIdx; // 站号
double m_fStOffset; // 相对于站号的偏移量
vector<OffsetPnt> m_ctrlPntLst; // 控制点集
public:
// Getter and Setter functions
string getName() { return m_name; }
void setName( string name) { m_name = name; }
string getCmdName() { return m_cmdName; }
void setCmdName( string cmdName) { m_cmdName = cmdName; }
double getfStIdx() { return m_fStIdx; }
void setfStIdx(double stIdx) { m_fStIdx = stIdx; }
double getStOffset() { return m_fStOffset; }
void setStOffset(double stOffset) { m_fStOffset = stOffset; }
vector<OffsetPnt>& getCtrlPntLst() { return m_ctrlPntLst; }
void setCtrlPntLst( vector<OffsetPnt>& ctrlPntLst) { m_ctrlPntLst = ctrlPntLst; }
};
// 纵剖线
class DATAMANAGER_DLL_API_EXPORTS BLLine
{
public:
string m_name; // 型线名称
double m_Y; // Y值
vector<OffsetPnt> m_ctrlPntLst; // 控制点集
public:
// Getter and Setter functions
string getName() { return m_name; }
void setName( string& name) { m_name = name; }
double getY() { return m_Y; }
void setY(double Y) { m_Y = Y; }
vector<OffsetPnt>& getCtrlPntLst() { return m_ctrlPntLst; }
void setCtrlPntLst( vector<OffsetPnt>& ctrlPntLst) { m_ctrlPntLst = ctrlPntLst; }
};
// 水线
class DATAMANAGER_DLL_API_EXPORTS WLLine
{
public:
string m_name; // 型线名称
double m_Z; // Z值
vector<OffsetPnt> m_ctrlPntLst; // 控制点集
public:
// Getter and Setter functions
string getName() { return m_name; }
void setName( string& name) { m_name = name; }
double getZ() { return m_Z; }
void setZ(double Z) { m_Z = Z; }
vector<OffsetPnt>& getCtrlPntLst() { return m_ctrlPntLst; }
void setCtrlPntLst( vector<OffsetPnt>& ctrlPntLst) { m_ctrlPntLst = ctrlPntLst; }
};
// 空间线
class DATAMANAGER_DLL_API_EXPORTS SpaceLine
{
public:
string m_name; // 型线名称
vector<OffsetPnt> m_ctrlPntLst; // 控制点集
public:
// Getter and Setter functions
string getName() { return m_name; }
void setName( string& name) { m_name = name; }
vector<OffsetPnt>& getCtrlPntLst() { return m_ctrlPntLst; }
void setCtrlPntLst( vector<OffsetPnt>& ctrlPntLst) { m_ctrlPntLst = ctrlPntLst; }
};
class DATAMANAGER_DLL_API_EXPORTS XLSXDataManager
{
public:
XLSXDataManager();
~XLSXDataManager();
void loadXLSXFile(std::string filePaht);
void setModeData(ModelData* _pModeData)
{
m_pModeData = _pModeData;
}
void setImportOffsetOption(ImportOffsetOption& _option)
{
m_impOption = _option;
}
//横向横剖线 命令集
std::vector<std::string>& getTransverseProfile_commad()
{
return m_vTransverseProfile_commad;
}
//梁拱命令
std::vector<std::string>& getCamber_commad()
{
return m_vCamber_commad;
}
//绘制纵剖线
std::vector<std::string>& getLongitudinalProfile_commad()
{
return m_vLongitudinalProfile_commad;
}
//水线
std::vector<std::string>& getWaterLine_commad()
{
return m_vWaterLine_commad;
}
//空间线
std::vector<std::string>& getSpaceLine_commad()
{
return m_vSpaceLine_commad;
}
private:
void GetStLineIdxAndOffset(string stLinestr, float& fSTIdx, float& fStOffset, STLine& tempSTLine);
//获取站号线的站号以及偏移量
void GetStLineIdxAndOffset(const std::string& stLinestr, double& fSTIdx, double& fStOffset) ;
bool IsDouble(const std::string& str);
bool IsNullOrEmptyAfterTrim(const std::string& str);
bool GetStationLine_H(xlnt::worksheet& heightSheet, xlnt::worksheet& halfBreadthSheet, float xSubSectionLen, float fSTIdx, float fStOffset, int rowIndex, vector<OffsetPnt>& pntLst, vector<int>& nH);
bool GetStationLine_W(xlnt::worksheet& halfBreadthSheet, float xSubSectionLen, float fSTIdx, float fStOffset, int rowIndex, std::vector<OffsetPnt>& pntLst, std::vector<int>& nW);
xlnt::cell_vector get_row_by_index(xlnt::worksheet& sheet, int row_idx) ;
void insertPnt1(OffsetPnt& pnt1, std::vector<OffsetPnt>& mergePntLst, int& np);
void insertPnt(std::vector<OffsetPnt>& pntLst_W, std::vector<OffsetPnt>& mergePntLst);
bool GetHalfBreadth(xlnt::worksheet& halfBreadthSheet, string sLineName, int rowIndex, double& dHalfBreath);
bool GetFlatSideHalfBreath(xlnt::worksheet& halfBreadthSheet, int rowIndex, double& dHalfBreath);
void SortBLLine(vector<OffsetPnt>& srcLst, vector<OffsetPnt>& sortLst);
//生成带引用的空间线命令 cqr-20210927
void CmdSpaceline(std::vector<STLine>& STLineLst,
SpaceLine& SpaceLineLst,
std::string& cmd) ;
void clear()
{
std::vector<std::string> _vTransverseProfile_commad;
_vTransverseProfile_commad.swap(m_vTransverseProfile_commad);
//梁拱命令
std::vector<std::string> _vCamber_commad;
_vCamber_commad.swap(m_vCamber_commad);
//绘制纵剖线
std::vector<std::string> _vLongitudinalProfile_commad;
_vLongitudinalProfile_commad.swap(m_vLongitudinalProfile_commad);
//水线
std::vector<std::string> _vWaterLine_commad;
_vWaterLine_commad.swap(m_vWaterLine_commad);
//空间线
std::vector<std::string> _vSpaceLine_commad;
_vSpaceLine_commad.swap(m_vSpaceLine_commad);
}
private:
//横剖线 命令集
std::vector<std::string> m_vTransverseProfile_commad;
//梁拱命令
std::vector<std::string> m_vCamber_commad;
//绘制纵剖线
std::vector<std::string> m_vLongitudinalProfile_commad;
//水线
std::vector<std::string> m_vWaterLine_commad;
//空间线
std::vector<std::string> m_vSpaceLine_commad;
ImportOffsetOption m_impOption;
ModelData* m_pModeData = nullptr;//外界赋值
};
#endif // FIFOCONTAINER_H