COMPASSi/trunk/code/inc/DataManager/Infrastructure.Data/Model/Geometry_M.h

598 lines
20 KiB
C++
Raw Permalink 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 GEOMETRY_T_H
#define GEOMETRY_T_H
#include "DataManagerGlobal.h"
#include "Interfaces.h"
#include <QString>
#include <QVector>
#include <typeinfo>
#include "OCC/OCCModeling/DllImportOccModeling.h"
#include "Hull_M.h"
struct DATAMANAGER_DLL_API_EXPORTS Point3D_M : public IModel
{
double m_X;
double m_Y;
double m_Z;
int m_CutDir;
double m_Cut;
int m_ResDir;
int m_ResType;
double m_Res;
int m_ProjDir;
int m_MirrorDir;
double m_MirrorOrgin;
Point3D_M(double x = 0.0, double y = 0.0, double z = 0.0, int cutDir = 0, double cut = 0.0,
int resDir = 0, int resType = 0, double res = 0.0, int projDir = 0, int mirrorDir = 0, double mirrorOrgin = 0.0)
: m_X(x), m_Y(y), m_Z(z), m_CutDir(cutDir), m_Cut(cut),
m_ResDir(resDir), m_ResType(resType), m_Res(res), m_ProjDir(projDir),
m_MirrorDir(mirrorDir), m_MirrorOrgin(mirrorOrgin)
{
setObjType(E_GEO_3D_OBJ_TYPE_POINT3D);
}
IModel* Clone()
{
IModel* p = new Point3D_M();
*p = *this;
return p;
}
Point3D getGeoPoint()
{
Point3D p;
p.ID = this->m_ID;
p.CmdID = this->m_CmdID;
p.Name = this->m_Name.toStdString(); // QByteArray转换为const char*
p.Command = this->m_Command.toStdString();
p.Visible = this->m_Visible;
p.Color = this->m_Color;
p.Transparency = this->m_Transparency;
p.Type = this->m_Type; // 类型(表达方式):0坐标,1曲线上截取,2曲线相交10线引用点C/N=?9镜像点
p.X = this->m_X;
p.Y = this->m_Y;
p.Z = this->m_Z;
p.CutDir = this->m_CutDir;
p.Cut = this->m_Cut;
p.ResDir = this->m_ResDir;
p.ResType = this->m_ResType;
p.Res = this->m_Res;
p.ProjDir = this->m_ProjDir;
p.MirrorDir = this->m_MirrorDir;
p.MirrorOrgin = this->m_MirrorOrgin;
p.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType;
for(int ik = 0; ik < this->m_Src.size(); ik++)
{
p.Src[ik] = this->m_Src[ik];
}
return p;
}
bool operator==(const Point3D_M& other) const {
return m_X == other.m_X && m_Y == other.m_Y && m_Z == other.m_Z;
}
};
struct DATAMANAGER_DLL_API_EXPORTS Curve_M : public IModel
{
QVector<int> m_KnotID;
QVector<int> m_KnotDir;
QVector<int> m_KnotDirII;
QVector<double> m_KnotAX;
QVector<double> m_KnotAY;
QVector<double> m_KnotAZ;
QVector<double> m_KnotAXII;
QVector<double> m_KnotAYII;
QVector<double> m_KnotAZII;
int m_ProjIDir;
int m_ProjIIDir;
int m_ProjIKnotCnt;
int m_ProjIIKnotCnt;
QVector<double> m_ProjIKnotX;
QVector<double> m_ProjIKnotY;
QVector<double> m_ProjIKnotZ;
QVector<double> m_ProjIIKnotX;
QVector<double> m_ProjIIKnotY;
QVector<double> m_ProjIIKnotZ;
QVector<int> m_ProjIKnotDir;
QVector<int> m_ProjIKnotDirII;
QVector<int> m_ProjIIKnotDir;
QVector<int> m_ProjIIKnotDirII;
QVector<double> m_ProjIKnotAX;
QVector<double> m_ProjIKnotAY;
QVector<double> m_ProjIKnotAZ;
QVector<double> m_ProjIKnotAXII;
QVector<double> m_ProjIKnotAYII;
QVector<double> m_ProjIKnotAZII;
QVector<double> m_ProjIIKnotAX;
QVector<double> m_ProjIIKnotAY;
QVector<double> m_ProjIIKnotAZ;
QVector<double> m_ProjIIKnotAXII;
QVector<double> m_ProjIIKnotAYII;
QVector<double> m_ProjIIKnotAZII;
double m_OX;
double m_OY;
double m_OZ;
double m_R1;
double m_R2;
double m_A1;
double m_A2;
double m_VX;
double m_VY;
double m_VZ;
double m_P1X;
double m_P1Y;
double m_P1Z;
double m_P2X;
double m_P2Y;
double m_P2Z;
double m_SplitX;
double m_SplitY;
double m_SplitZ;
double m_TrimX;
double m_TrimY;
double m_TrimZ;
bool m_Full;
int m_MirrorDir;
double m_MirrorOrgin;
double m_CopyOffsetX;
double m_CopyOffsetY;
double m_CopyOffsetZ;
Curve_M(int projIDir = 0, int projIIDir = 0, bool full = false,
int mirrorDir = 0, double mirrorOrgin = 0.0,
double copyOffsetX = 0.0, double copyOffsetY = 0.0, double copyOffsetZ = 0.0)
: m_ProjIDir(projIDir),
m_ProjIIDir(projIIDir),
m_Full(full),
m_MirrorDir(mirrorDir),
m_MirrorOrgin(mirrorOrgin),
m_CopyOffsetX(copyOffsetX),
m_CopyOffsetY(copyOffsetY),
m_CopyOffsetZ(copyOffsetZ),
m_ProjIKnotCnt(0),
m_ProjIIKnotCnt(0),
m_OX(0.0), m_OY(0.0), m_OZ(0.0),
m_R1(0.0), m_R2(0.0),
m_A1(0.0), m_A2(0.0),
m_VX(0.0), m_VY(0.0), m_VZ(0.0),
m_P1X(0.0), m_P1Y(0.0), m_P1Z(0.0),
m_P2X(0.0), m_P2Y(0.0), m_P2Z(0.0),
m_SplitX(0.0), m_SplitY(0.0), m_SplitZ(0.0),
m_TrimX(0.0), m_TrimY(0.0), m_TrimZ(0.0)
{
setObjType(E_GEO_3D_OBJ_TYPE_CURVE);
}
IModel* Clone()
{
IModel* p = new Curve_M();
*p = *this;
return p;
}
Curve getGeoCurve()
{
Curve cur;
cur.ID = this->m_ID;
cur.CmdID = this->m_CmdID;
// QByteArray baName = this->m_Name.toLatin1(); // must
// cur.Name =baName.data();
// QByteArray baCommand = this->m_Command.toLatin1(); // must
// cur.Command = baCommand.data();
// QByteArray baName = this->m_Name.toLatin1(); // must
// char *persistentPtr = new char[baName.size() + 1]; // +1为'\0'
// memset(persistentPtr, 0, baName.size() + 1);
// strcpy(persistentPtr, baName.constData());
cur.Name =this->m_Name.toStdString();// persistentPtr;
// QByteArray baCommand = this->m_Command.toLatin1(); // must
// char *persistentPtr1 = new char[baCommand.size() + 1]; // +1为'\0'
// memset(persistentPtr1, 0, baCommand.size() + 1);
// strcpy(persistentPtr1, baCommand.constData());
cur.Command = this->m_Command.toStdString();// persistentPtr1;
cur.Visible = this->m_Visible;
cur.Color = this->m_Color;
cur.Transparency = this->m_Transparency;
cur.Type = this->m_Type;
IModel::copyQVectorToArray<int>(this->m_Src, cur.Src);
IModel::copyQVectorToArray<int>(this->m_KnotID, cur.KnotID);
// int UsedBy[MAX_ARRAY_SIZE]; //被使用20170501 by czb
IModel::copyQVectorToArray<int>(this->m_KnotDir, cur.KnotDir);
IModel::copyQVectorToArray<int>(this->m_KnotDirII, cur.KnotDirII);
IModel::copyQVectorToArray<double>(this->m_KnotAX, cur.KnotAX);
IModel::copyQVectorToArray<double>(this->m_KnotAY, cur.KnotAY);
IModel::copyQVectorToArray<double>(this->m_KnotAZ, cur.KnotAZ);
// 节点切入角序列
// double KnotAX[MAX_ARRAY_SIZE];
// double KnotAY[MAX_ARRAY_SIZE];
// double KnotAZ[MAX_ARRAY_SIZE];
// 节点切出角序列
IModel::copyQVectorToArray<double>(this->m_KnotAXII, cur.KnotAXII);
IModel::copyQVectorToArray<double>(this->m_KnotAYII, cur.KnotAYII);
IModel::copyQVectorToArray<double>(this->m_KnotAZII, cur.KnotAZII);
// double KnotAXII[MAX_ARRAY_SIZE];
// double KnotAYII[MAX_ARRAY_SIZE];
// double KnotAZII[MAX_ARRAY_SIZE];
cur.ProjIDir = this->m_ProjIDir; // 投影面I/II方向:0YZ,1XZ,2XY.
cur.ProjIIDir = this->m_ProjIIDir;
// 投影面I/II节点个数
cur.ProjIKnotCnt = this->m_ProjIKnotCnt;
cur.ProjIIKnotCnt = this->m_ProjIIKnotCnt;
// 投影面I节点坐标序列
IModel::copyQVectorToArray<double>(this->m_ProjIKnotX, cur.ProjIKnotX);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotY, cur.ProjIKnotY);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotZ, cur.ProjIKnotZ);
// double ProjIKnotX[MAX_ARRAY_SIZE];
// double ProjIKnotY[MAX_ARRAY_SIZE];
// double ProjIKnotZ[MAX_ARRAY_SIZE];
// 投影面II节点坐标序列
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotX, cur.ProjIIKnotX);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotY, cur.ProjIIKnotY);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotZ, cur.ProjIIKnotZ);
// double ProjIIKnotX[MAX_ARRAY_SIZE];
// double ProjIIKnotY[MAX_ARRAY_SIZE];
// double ProjIIKnotZ[MAX_ARRAY_SIZE];
// 20170501 by czb新增
// IModel::copyQVectorToArray<int>(this->m_ProjIKnotDir, cur.ProjIKnotDir);
// IModel::copyQVectorToArray<int>(this->m_ProjIKnotDirII, cur.ProjIKnotDirII);
// IModel::copyQVectorToArray<int>(this->m_ProjIIKnotDir, cur.ProjIIKnotDir);
// IModel::copyQVectorToArray<int>(this->m_ProjIIKnotDirII, cur.ProjIIKnotDirII);
// int ProjIKnotDir[MAX_ARRAY_SIZE];// 投影面I节点入切出方向序列:0角度,1直线切出,2新段分割点新的edge要添加到wire中.
// int ProjIKnotDirII[MAX_ARRAY_SIZE];// 投影面I节点切出方向序列:0角度,1直线切出,2新段分割点新的edge要添加到wire中.
// int ProjIIKnotDir[MAX_ARRAY_SIZE];// 投影面II节点入切出方向序列:0角度,1直线切出,2新段分割点新的edge要添加到wire中.
// int ProjIIKnotDirII[MAX_ARRAY_SIZE];// 投影面II节点切出方向序列:0角度,1直线切出,2新段分割点新的edge要添加到wire中.
// 投影面I节点切入角序列
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAX, cur.ProjIKnotAX);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAY, cur.ProjIKnotAY);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAZ, cur.ProjIKnotAZ);
// double ProjIKnotAX[MAX_ARRAY_SIZE];
// double ProjIKnotAY[MAX_ARRAY_SIZE];
// double ProjIKnotAZ[MAX_ARRAY_SIZE];
// 投影面I节点切出角序列
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAXII, cur.ProjIKnotAXII);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAYII, cur.ProjIKnotAYII);
IModel::copyQVectorToArray<double>(this->m_ProjIKnotAZII, cur.ProjIKnotAZII);
// double ProjIKnotAXII[MAX_ARRAY_SIZE];
// double ProjIKnotAYII[MAX_ARRAY_SIZE];
// double ProjIKnotAZII[MAX_ARRAY_SIZE];
// 投影面II节点切入角序列
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAX, cur.ProjIIKnotAX);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAY, cur.ProjIIKnotAY);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAZ, cur.ProjIIKnotAZ);
// double ProjIIKnotAX[MAX_ARRAY_SIZE];
// double ProjIIKnotAY[MAX_ARRAY_SIZE];
// double ProjIIKnotAZ[MAX_ARRAY_SIZE];
// 投影面II节点切出角序列
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAXII, cur.ProjIIKnotAXII);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAYII, cur.ProjIIKnotAYII);
IModel::copyQVectorToArray<double>(this->m_ProjIIKnotAZII, cur.ProjIIKnotAZII);
// double ProjIIKnotAXII[MAX_ARRAY_SIZE];
// double ProjIIKnotAYII[MAX_ARRAY_SIZE];
// double ProjIIKnotAZII[MAX_ARRAY_SIZE];
// 20170501 by czb新增结束
cur.OX = this->m_OX;
cur.OY = this->m_OY;
cur.OZ = this->m_OZ;
cur.R1 = this->m_R1;
cur.R2 = this->m_R2;
cur.A1 = this->m_A1;
cur.A2 = this->m_A2;
cur.VX = this->m_VX;
cur.VY = this->m_VY;
cur.VZ = this->m_VZ;
cur.P1X = this->m_P1X;
cur.P1Y = this->m_P1Y;
cur.P1Z = this->m_P1Z;
cur.P2X = this->m_P2X;
cur.P2Y = this->m_P2Y;
cur.P2Z = this->m_P2Z;
cur.Full = this->m_Full;
cur.MirrorDir = this->m_MirrorDir; // 镜像面方向1-X, 2-Y, 3-Z
cur.MirrorOrgin = this->m_MirrorOrgin; // 镜像面位置与MirrorDir匹配的分量坐标
cur.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb
cur.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量
cur.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量
cur.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType;
return cur;
}
};
struct DATAMANAGER_DLL_API_EXPORTS Surface_M : public IModel
{
double m_OX;
double m_OY;
double m_OZ;
double m_PX;
double m_PY;
double m_PZ;
double m_AR;
int m_SplitDir;
double m_H;
int m_MirrorDir;
double m_MirrorOrgin;
double m_TrimX;
double m_TrimY;
double m_TrimZ;
double m_CopyOffsetX;
double m_CopyOffsetY;
double m_CopyOffsetZ;
Surface_M(double ox = 0.0, double oy = 0.0, double oz = 0.0, double px = 0.0, double py = 0.0, double pz = 0.0,
double ar = 0.0, int splitDir = 0, double h = 0.0, int mirrorDir = 0, double mirrorOrgin = 0.0,
double trimX = 0.0, double trimY = 0.0, double trimZ = 0.0,
double copyOffsetX = 0.0, double copyOffsetY = 0.0, double copyOffsetZ = 0.0)
: m_OX(ox), m_OY(oy), m_OZ(oz), m_PX(px), m_PY(py), m_PZ(pz),
m_AR(ar), m_SplitDir(splitDir), m_H(h), m_MirrorDir(mirrorDir),
m_MirrorOrgin(mirrorOrgin), m_TrimX(trimX), m_TrimY(trimY), m_TrimZ(trimZ),
m_CopyOffsetX(copyOffsetX), m_CopyOffsetY(copyOffsetY), m_CopyOffsetZ(copyOffsetZ)
{
setObjType(E_GEO_3D_OBJ_TYPE_SURFACE);
}
IModel* Clone()
{
IModel* p = new Surface_M();
*p = *this;
return p;
}
Surface getGeoSurface()
{
Surface sur;
sur.ID = this->m_ID;
sur.CmdID = this->m_CmdID;
// QByteArray baName = this->m_Name.toLatin1(); // must
// char *persistentPtr = new char[baName.size() + 1]; // +1为'\0'
// memset(persistentPtr, 0, baName.size() + 1);
// strcpy(persistentPtr, baName.constData());
sur.Name = this->m_Name.toStdString();// persistentPtr;
// QByteArray baCommand = this->m_Command.toLatin1(); // must
// char *persistentPtr1 = new char[baCommand.size() + 1]; // +1为'\0'
// memset(persistentPtr1, 0, baCommand.size() + 1);
// strcpy(persistentPtr1, baCommand.constData());
sur.Command = this->m_Command.toStdString();
sur.Visible = this->m_Visible;
sur.Color = this->m_Color;
sur.Transparency = this->m_Transparency;
sur.Type = this->m_Type;
IModel::copyQVectorToArray<int>(this->m_Src, sur.Src);
sur.OX = this->m_OX;
sur.OY = this->m_OY;
sur.OZ = this->m_OZ;
sur.PX = this->m_PX;
sur.PY = this->m_PY;
sur.PZ = this->m_PZ;
sur.AR = this->m_AR;
sur.SplitDir = this->m_SplitDir;
sur.H = this->m_H;
sur.MirrorDir = this->m_MirrorDir;
sur.MirrorOrgin = this->m_MirrorOrgin;
sur.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb
sur.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量
sur.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量
sur.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType;
return sur;
}
};
struct DATAMANAGER_DLL_API_EXPORTS Solid_M : public IModel
{
/// 旋转轴端点1/球心
double m_OX;
double m_OY;
double m_OZ;
/// 旋转轴端点2/剪切扣除点
double m_PX;
double m_PY;
double m_PZ;
/// 旋转角度/球半径
double m_AR;
double m_AR1;
// 球冠高度
double m_H;
double m_H1;
// 长方体
double m_L;
double m_B;
/// 镜像面方向1-X, 2-Y, 3-Z
int MirrorDir;
/// 镜像面位置与MirrorDir匹配的分量坐标
double m_MirrorOrgin;
double m_TrimX;
double m_TrimY;
double m_TrimZ;
/// 布尔运算方式:0并,1差,2交.
QVector<int> m_BoolMode; // 20170801 新增 by czb
/// 复制偏移分量
double m_CopyOffsetX; // 20170901 新增 by czb
/// 复制偏移分量
double m_CopyOffsetY;
/// 复制偏移分量
double m_CopyOffsetZ;
Solid_M(double ox = 0.0, double oy = 0.0, double oz = 0.0, double px = 0.0, double py = 0.0, double pz = 0.0,
double ar = 0.0, double ar1 = 0.0, double h = 0.0, double h1 = 0.0, double l = 0.0, double b = 0.0,
int mirrorDir = 0, double mirrorOrgin = 0.0, double trimX = 0.0, double trimY = 0.0, double trimZ = 0.0,
double copyOffsetX = 0.0, double copyOffsetY = 0.0, double copyOffsetZ = 0.0)
: m_OX(ox), m_OY(oy), m_OZ(oz), m_PX(px), m_PY(py), m_PZ(pz),
m_AR(ar), m_AR1(ar1), m_H(h), m_H1(h1), m_L(l), m_B(b),
MirrorDir(mirrorDir), m_MirrorOrgin(mirrorOrgin),
m_TrimX(trimX), m_TrimY(trimY), m_TrimZ(trimZ),
m_CopyOffsetX(copyOffsetX), m_CopyOffsetY(copyOffsetY), m_CopyOffsetZ(copyOffsetZ)
{
setObjType(E_GEO_3D_OBJ_TYPE_SOLID);
}
IModel* Clone()
{
IModel* p = new Solid_M();
*p = *this;
return p;
}
Solid getGeoSolid()
{
Solid solid;
// QByteArray baName = itSolid->m_Name.toLatin1(); // must
// char *persistentPtr = new char[baName.size() + 1]; // +1为'\0'
// memset(persistentPtr, 0, baName.size() + 1);
// strcpy(persistentPtr, baName.constData());
solid.Name = this->m_Name.toStdString();// persistentPtr;
// QByteArray baCommand = this->m_Command.toLatin1(); // must
// char *persistentPtr1 = new char[baCommand.size() + 1]; // +1为'\0'
// memset(persistentPtr1, 0, baCommand.size() + 1);
// strcpy(persistentPtr1, baCommand.constData());
solid.Command = this->m_Command.toStdString();
solid.ID = this->m_ID;
solid.CmdID = this->m_CmdID;
solid.Visible = this->m_Visible;
solid.Color = this->m_Color;
solid.Transparency = this->m_Transparency;
solid.Type = this->m_Type;
copyQVectorToArray<int>(this->m_Src, solid.Src);
solid.OX = this->m_OX;
solid.OY = this->m_OY;
solid.OZ = this->m_OZ;
solid.PX = this->m_PX;
solid.PY = this->m_PY;
solid.PZ = this->m_PZ;
solid.AR = this->m_AR;
solid.AR1 = this->m_AR1;
solid.H = this->m_H;
solid.H1 = this->m_H1;
solid.L = this->m_L;
solid.B = this->m_B;
solid.MirrorDir = this->MirrorDir;
solid.MirrorOrgin = this->m_MirrorOrgin;
solid.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb
solid.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量
solid.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量
solid.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType;
copyQVectorToArray<int>(this->m_BoolMode, solid.BoolMode);
return solid;
}
};
struct Point2D
{
public:
double x;
double y;
public:
// X属性
double getX() const { return x; }
void setX(double value) { x = value; }
// Y属性
double getY() const { return y; }
void setY(double value) { y = value; }
// == 运算符重载
bool operator==(const Point2D& other) const {
return (x == other.x) && (y == other.y);
}
// != 运算符重载
bool operator!=(const Point2D& other) const {
return (x != other.x) || (y != other.y);
}
// 等价于 Equals 方法(可选)
bool Equals(const Point2D& other) const {
return *this == other;
}
// GetHashCode 替代(可作为 map key 时使用)
std::size_t GetHashCode() const {
return std::hash<double>{}(x) ^ (std::hash<double>{}(y) << 1);
}
// ToString 方法
std::string ToString() const {
return std::to_string(x) + "," + std::to_string(y);
}
};
struct DATAMANAGER_DLL_API_EXPORTS Empty : public IModel
{
public:
Empty()
{
setObjType(E_GEO_3D_OBJ_TYPE_EMPTY);
}
};
class Model3D_MCommanData
{
public:
Model3D_MCommanData()
{
}
~Model3D_MCommanData()
{
}
static void reset()
{
TypeNameMaxId.clear();
TypeNameMaxId = {
{typeid(struct Point3D_M).name(), 0},
{typeid(struct Curve_M).name(), 0},
{typeid(struct Surface_M).name(), 0},
{typeid(struct Solid_M).name(), 0},
{typeid(struct Hull_M).name(), 0},
{typeid(struct Appendage_M).name(), 0},
{typeid(struct Space_M).name(), 0}
};
}
static std::unordered_map<std::string, std::string> TypeNamePrefixDic;
static std::unordered_map<std::string, int> TypeNamePrefixId;
static std::unordered_map<std::string, int> TypeNameMaxId;
static std::unordered_map<std::string, std::string> TypeNameCn;
};
#endif