COMPASSi/trunk/code/inc/InlandModel/StabilityModelInterface/StabilityModel.h

305 lines
11 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef STABILITY_MODEL_H
#define STABILITY_MODEL_H
#include "DataManager.h"
#include "InlandModelGlobal.h"
#include "OCC/OCCModeling/DllImportOccModeling.h"
#include "ChangeFSPos.h"
#include "OptionDataColorSetting.h"
#include "CommandStreamProcessing.h"
#include "StabilityUndoRedoManager.h"
#ifdef __cplusplus
extern "C"
{
#endif
struct ModelBase3D
{
int color; // 颜色
};
struct Triangle3D : public ModelBase3D
{
std::vector<double> v1; // 顶点1
std::vector<double> v2; // 顶点2
std::vector<double> v3; // 顶点3
int id;
int visible; // 可见性
};
struct Line3D : public ModelBase3D
{
int id;
std::vector<double> dp; // 插值点
std::vector<double> src; // 原始点
int visible; // 可见性
};
struct m_Point3D : public ModelBase3D
{
std::vector<double> v1; // 起点
int id;
int visible; // 可见性
};
struct m_Solid : public ModelBase3D//实体
{
std::vector<double> v1; // 顶点1
std::vector<double> v2; // 顶点2
std::vector<double> v3; // 顶点3
int id;
int visible; // 可见性
};
struct m_mainbody : public ModelBase3D //主体
{
std::vector<double> v1; // 顶点1
std::vector<double> v2; // 顶点2
std::vector<double> v3; // 顶点3
int id;
int visible; // 可见性
};
struct m_space : public ModelBase3D //舱室
{
std::vector<double> v1; // 顶点1
std::vector<double> v2; // 顶点2
std::vector<double> v3; // 顶点3
int id;
int visible; // 可见性
bool isunit; // 是否是单元舱室
};
struct m_Appendage : public ModelBase3D //附体
{
std::vector<double> v1; // 顶点1
std::vector<double> v2; // 顶点2
std::vector<double> v3; // 顶点3
int id;
int visible; // 可见性
};
// enum E_SHOW_OBJ_INFOR
// {
// E_SHOW_OBJ_INFOR_COMMAND = 0,
// E_SHOW_OBJ_INFOR_XYZ,
// E_SHOW_OBJ_INFOR_RIB_CRD,
// E_SHOW_OBJ_INFOR_STATION_CRD,
// E_SHOW_OBJ_INFOR_LOCATIE_OBJ,
// E_SHOW_OBJ_INFOR_OBJ_CRD,
// E_SHOW_OBJ_INFOR_OBJ_V,
// E_SHOW_OBJ_INFOR_SIZE
// };
class INLAND_DLL_API_EXPORTS StabilityModel
{
public:
static StabilityModel *getStabilityModelInstance();
static void destroy();
DataManager *getDataManagerPtr();
static StabilityModel *getStabilityModelpPtr();
void loadXLSXFile(const QString &filePath);
void get3DObjColor(int type,int& iColor,bool& isShowName);
void readFile(XMLFile_Type type, const QString &filePath);
///----------------------------------------稳性计算-----------------start-------------------------------////
bool stabilityCalc(std::vector<string>& commandLines, E_AnalysisModuleOperation_Type type);
bool stabilityCalcMainContent(std::vector<string>& commandLines);
std::vector<string> GetStabNodeOnly(std::vector<string>& commandLines);
void ExportBInfDef();
void ExportXLabel();
void CalFrame(std::map<int, double>& Frames);
void ExportFrame(string ID, double X);
void CalStation(std::map<double, double>& Stations);
void ExportOffsetLabel();
///----------------------------------------稳性计算-----------------end-------------------------------////
QString updateDelete3dToJson(vector<string>& names);
QString updateDelete3dToJson(string& name);
void update3dToJson(json& outjson, E_GEO_3D_OBJ_TYPE type, int id = 0);
QString getUpdate3dToJson();
QString getUpdate3dToJson(std::vector<int>& ids);
QString getUpdate_UI_StateJson();
void saveFile(QString& savefilePath);
void modifyOutJson_color(json& j, const std::string& key, int new_color_value) ;
void snap_point(SNAP_POINTS_Type iSelect, int &errorCode, QString &outMsg, QString &data, const QString &message);
bool ShapeTom_mainBodyByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeToCellByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeToTriangleByFaceIndex(int &index, TopoDS_Shape &shape);
std::vector<double> DiscretePoints(TopoDS_Edge &curve, double dAngle, double dTol);
std::vector<double> DiscretePointsByAngle(Handle_Geom_BSplineCurve &curve, double dAngle, double dTol);
bool ShapeToLineByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeTom_pointByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeToSolidByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeTom_spaceByFaceIndex(int &index, TopoDS_Shape &shape);
bool ShapeTom_appendageByFaceIndex(int &index, TopoDS_Shape &shape);
void ExportShapeToJsonFile();
void ExportShapeToJSON_nolhmann(nlohmann::json& jsonOutput);
void ExportHullToJSON_nolhmann(nlohmann::json& jsonOutput);
std::string CurveTypeToString(GeomAbs_CurveType type);
bool create_point(std::string& singlecmdstring, QString &outJsonData);
bool create_line(std::string& singlecmdstring, QString &outJsonData);
bool create_surface(std::string& singlecmdstring, QString &outJsonData);
bool create_solid(std::string& singlecmdstring, QString &outJsonData);
bool create_Hull(std::string& singlecmdstring, QString &outJsonData);
bool create_unit_and_space(std::string& singlecmdstring, QString &outJsonData);
bool create_Appendage(std::string& singlecmdstring, QString &outJsonData);
void stab_model_editor_hydro_static(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_tank_cap(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_intact(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_allow_kg(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_damage(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_damage_prob(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_inclining(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_check(int &errorCode, QString &outMsg, QString &data, const QString &message);
void stab_model_editor_save(int &errorCode, QString &outMsg, QString &data, const QString &message);
void InitGeometry();
void InitHull();
void analysis_show_tree(int &errorCode, QString &outMsg, QString &data, const QString &message);
void hull_show_tree(int &errorCode, QString &outMsg, QString &data, const QString &message);
bool cmd_copy(std::string& singlecmdstring, QString &outJsonData);
bool cmd_trim(std::string& singlecmdstring, QString &outJsonData);
bool cmd_mirror(std::string& singlecmdstring, QString &outJsonData);
bool cmd_intersection(std::string& singlecmdstring, QString &outJsonData);
bool cmd_join(std::string& singlecmdstring, QString &outJsonData);
bool cmd_delete(std::string& singlecmdstring, QString &outJsonData);
void from(int &errorCode, QString &outMsg, QString &data, const QString &message);
//bool setObjVisible(int id,int value);
bool setObjVisible(std::string& singlecmdstring, QString &outJsonData);
//void setvisible(int &errorCode, QString &outMsg, const nlohmann::json &j, const QString &originalStr);
bool showWindowsLog(QString& log);
//log 不能有空格
void addShowWindowsLog(QString log);
//tool ship ------------start
void tool_ship_prej_infor_from(const json& j);
void tool_ship_prej_infor_to(json& j);
void tool_ship_main_elements_from(const json& j);
void tool_ship_main_elements_to(json& j);
void tool_ship_hull_scale_from(const json& j);
void tool_ship_hull_scale_to(json& j);
//tool ship ------------end
//bool Menu_toolbar_show_obj_infor(E_SHOW_OBJ_INFOR type,std::vector<int>& ids,QString& outStr ); //获取obj infor
bool Menu_toolbar_show_obj_infor_XYZ(std::vector<string>& ids,QString& outStr ); //获取obj XYZ infor
bool cmd_tool_show_obj_command(std::string& singlecmdstring, QString &outJsonData); //获取命令
bool cmd_tool_show_curve_rib_crd(std::vector<string>& ids,bool isShowCoordF,QString& outStr ); //获取肋位号
//import iges file
long ImportIGES(const json& j);
long ImportIGES(std::string fileName, int impType, vector<float> vTransfromParams, bool bIsAddMode);
void ExportIGES(const json& j);
void ImportDXF(QString filePath);
void push_undo_redo_data(int icommandid, std::vector<IModel*>& data);
void cmd_undo(QString& strDeleteJson, QString& strChangeJson);
void cmd_redo(QString& strDeleteJson, QString& strChangeJson);
//导入型值表
//横向横剖线 命令集
std::vector<std::string>& getTransverseProfile_commad();
//梁拱命令
std::vector<std::string>& getCamber_commad();
//绘制纵剖线
std::vector<std::string>& getLongitudinalProfile_commad();
//水线
std::vector<std::string>& getWaterLine_commad();
//空间线
std::vector<std::string>& getSpaceLine_commad();
void setImportOffsetOption(ImportOffsetOption& _option);
void autoAddExecutingCmdID()
{
if (m_pDataManager)
{
m_pDataManager->autoAddExecutingCmdID();
}
}
void setCurentUsingFilePath(QString filePath)
{
m_strCurentUsingFilePath = filePath;
2025-06-26 15:07:17 +08:00
if(m_pDataManager)
{
m_pDataManager->setCurentUsingFilePath(m_strCurentUsingFilePath);
}
2025-06-25 15:06:42 +08:00
}
QString getCurentUsingFilePath()
{
return m_strCurentUsingFilePath;
}
private:
StabilityModel();
~StabilityModel();
StabilityModel(const StabilityModel &) = delete;
StabilityModel &operator=(const StabilityModel &) = delete;
private:
static StabilityModel *m_pStabilityModel;
DataManager *m_pDataManager = nullptr;
OCCStructDataMD *m_pDataMD = nullptr;
std::map<string, std::vector<m_Solid>> m_solidsByFaceIndex;
std::map<string, std::vector<Triangle3D>> m_trianglesByFaceIndex;
std::map<string, std::vector<Line3D>> m_linesByFaceIndex;
std::map<string, std::vector<m_Point3D>> m_pointByFaceIndex;
std::map<string, std::vector<m_mainbody>> m_mainBodyByFaceIndex; //主体
std::map<string, std::vector<m_space>> m_spaceByFaceIndex; //舱室+单元体 tpye 0是舱室1是单元体
std::map<string, std::vector<m_Appendage>> m_appendageByFaceIndex; //附体
QString m_strCurentUsingFilePath = "";
XMLFile_Type m_eLoadDataType;
};
#ifdef __cplusplus
}
#endif
#endif // Stability_MODEL_H