#ifndef HULL_H #define HULL_H #include "DataManagerGlobal.h" #include "Interfaces.h" #include #include /// 主甲板面 struct DATAMANAGER_DLL_API_EXPORTS MainDeckSurf_M : public IModel { public: MainDeckSurf_M() { setObjType(E_GEO_3D_OBJ_TYPE_MAINDECKSURF); } }; // 外板面 struct DATAMANAGER_DLL_API_EXPORTS ShellSurf_M : public IModel { ShellSurf_M() { setObjType(E_GEO_3D_OBJ_TYPE_SHELLSURF); } }; // 主船体 struct DATAMANAGER_DLL_API_EXPORTS Hull_M : public IModel { // 体运算方式:0并,1差,2交. QVector m_SolidAddMode; // 镜像面方向:1-X, 2-Y, 3-Z int m_MirrorDir; // 镜像面位置,与MirrorDir匹配的分量坐标 double m_MirrorOrgin; // 复制偏移分量 double m_CopyOffsetX; // 20170901 新增 by czb // 复制偏移分量 double m_CopyOffsetY; // 复制偏移分量 double m_CopyOffsetZ; Hull_M() : m_SolidAddMode(), // 默认空体运算集合 m_MirrorDir(0), // 不镜像 m_MirrorOrgin(0.0), m_CopyOffsetX(0.0), m_CopyOffsetY(0.0), m_CopyOffsetZ(0.0) { setObjType(E_GEO_3D_OBJ_TYPE_HULL); } IModel* Clone() { IModel* p = new Hull_M(); *p = *this; return p; } Hull getGeoHull() { Hull hull; // QByteArray baName = itH->m_Name.toLatin1(); // must // char *persistentPtr = new char[baName.size() + 1]; // +1为'\0' // memset(persistentPtr, 0, baName.size() + 1); // strcpy(persistentPtr, baName.constData()); hull.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()); hull.Command = this->m_Command.toStdString();// persistentPtr1; hull.ID = this->m_ID; hull.CmdID = this->m_CmdID; hull.Visible = this->m_Visible; hull.Color = this->m_Color; hull.Transparency = this->m_Transparency; hull.Type = this->m_Type; IModel::copyQVectorToArray(this->m_Src, hull.Src); IModel::copyQVectorToArray(this->m_SolidAddMode, hull.SolidAddMode); hull.MirrorDir = this->m_MirrorDir; hull.MirrorOrgin = this->m_MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 hull.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb hull.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量 hull.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量 hull.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType; return hull; } }; // 平台面 struct DATAMANAGER_DLL_API_EXPORTS DeckSurf_M : public IModel { public: DeckSurf_M() { setObjType(E_GEO_3D_OBJ_TYPE_DECKSURF); } IModel* Clone() { IModel* p = new DeckSurf_M(); *p = *this; return p; } // 生成方式:0来自几何面,1参数化 int m_GenType; // 面的位置或面边界起止位置 double m_X1; double m_X2; double m_Y1; double m_Y2; double m_Z; }; // 上建外围面 struct DATAMANAGER_DLL_API_EXPORTS BoundSurf_M : public IModel { public: BoundSurf_M() { setObjType(E_GEO_3D_OBJ_TYPE_BOUNDSURF); } IModel* Clone() { IModel* p = new BoundSurf_M(); *p = *this; return p; } // 生成方式:0来自几何面,1参数化 int m_GenType; // 面的位置或面边界起止位置 double m_X1; double m_X2; double m_Y1; double m_Y2; double m_Z1; double m_Z2; // 上建外围面方向:0横向(X),1纵向(Y) int m_Dir; }; // 分舱面 struct DATAMANAGER_DLL_API_EXPORTS SubdivSurf_M : public IModel { public: SubdivSurf_M() { setObjType(E_GEO_3D_OBJ_TYPE_SUBDIVSURF); } IModel* Clone() { IModel* p = new SubdivSurf_M(); *p = *this; return p; } // 生成方式:0来自几何面,1参数化 int m_GenType; // 面的位置 double m_XY; // 分舱面方向:0横向(X),1纵向(Y) int m_Dir; // 边界定义方式:0坐标,1限制面 int m_BndType; // 面边界起止位置(坐标) double m_X1; double m_X2; double m_Y1; double m_Y2; double m_Z1; double m_Z2; // 面边界起止位置(限制面),若为0,则该方向以船壳(主甲板面+外板面)作为限制 int m_RefX1; int m_RefX2; int m_RefY1; int m_RefY2; int m_RefZ1; int m_RefZ2; // 是否槽形结构:0否,1是 int m_Corrugated; // 槽条方向:0垂向,1水平 int m_CorDir; // 槽形参数 double m_S; double m_A; double m_D; double m_F; }; // 开敞客货区 struct DATAMANAGER_DLL_API_EXPORTS OpenCargoRegion_M : public IModel { public: OpenCargoRegion_M() { setObjType(E_GEO_3D_OBJ_TYPE_OPENCARGOREGION); } }; // 舱室 struct DATAMANAGER_DLL_API_EXPORTS Space_M : public IModel { int m_GenType; // 体运算方式:0并,1差,2交. QVector m_SolidAddMode; // 面的位置或面边界起止位置 double m_X1; double m_X2; // 首面特征点定义 characteristic points QVector LCharacterPoints; QVector FCharacterPoints; double m_Y; double m_Z; int m_HullID; bool m_IsUnit; // 镜像面方向:1-X, 2-Y, 3-Z int m_MirrorDir; // 镜像面位置,与MirrorDir匹配的分量坐标 double m_MirrorOrgin; // 复制偏移分量 double m_CopyOffsetX; // 20170901 新增 by czb // 复制偏移分量 double m_CopyOffsetY; // 复制偏移分量 double m_CopyOffsetZ; // XUEFENG ADDED 202012 int m_NumSections; Space_M() : m_GenType(0), m_SolidAddMode(), m_X1(0.0), m_X2(0.0), LCharacterPoints(), FCharacterPoints(), m_Y(0.0), m_Z(0.0), m_HullID(0), m_IsUnit(false), m_MirrorDir(0), m_MirrorOrgin(0.0), m_CopyOffsetX(0.0), m_CopyOffsetY(0.0), m_CopyOffsetZ(0.0), m_NumSections(0) { setObjType(E_GEO_3D_OBJ_TYPE_SPACE); } IModel* Clone() { IModel* p = new Space_M(); *p = *this; return p; } Space getGeoSpace() { Space space; // 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()); space.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()); space.Command = this->m_Command.toStdString();// persistentPtr1; space.ID = this->m_ID; space.CmdID = this->m_CmdID; space.Visible = this->m_Visible; space.Color = this->m_Color; space.Transparency = this->m_Transparency; space.Type = this->m_Type; IModel::copyQVectorToArray(this->m_Src, space.Src); IModel::copyQVectorToArray(this->m_SolidAddMode, space.SolidAddMode); space.MirrorDir = this->m_MirrorDir; space.MirrorOrgin = this->m_MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 space.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb space.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量 space.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量 space.X1 = this->m_X1; space.X2 = this->m_X2; IModel::copyQVectorToArray(this->LCharacterPoints, space.LCharacterPoints); IModel::copyQVectorToArray(this->FCharacterPoints, space.FCharacterPoints); space.Y = this->m_Y; space.Z = this->m_Z; space.HullID = this->m_HullID; space.isUnit = this->m_IsUnit; space.numSections = this->m_NumSections; space.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType; return space; } }; // 附体 struct DATAMANAGER_DLL_API_EXPORTS Appendage_M : public IModel { // 体运算方式:0并,1差,2交. QVector m_SolidAddMode; // 是否负体:0否,1是 int m_Minus; // 镜像面方向:1-X, 2-Y, 3-Z int m_MirrorDir; // 镜像面位置,与MirrorDir匹配的分量坐标 double m_MirrorOrgin; // 复制偏移分量 double m_CopyOffsetX; // 20170901 新增 by czb // 复制偏移分量 double m_CopyOffsetY; // 复制偏移分量 double m_CopyOffsetZ; Appendage_M() : m_SolidAddMode(), m_Minus(0), m_MirrorDir(0), m_MirrorOrgin(0.0), m_CopyOffsetX(0.0), m_CopyOffsetY(0.0), m_CopyOffsetZ(0.0) { setObjType(E_GEO_3D_OBJ_TYPE_APPENDAGE); } IModel* Clone() { IModel* p = new Appendage_M(); *p = *this; return p; } Appendage getGeoAppendage() { Appendage appendage; // 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()); appendage.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()); appendage.Command = this->m_Command.toStdString();// persistentPtr1; appendage.ID = this->m_ID; appendage.CmdID = this->m_CmdID; appendage.Visible = this->m_Visible; appendage.Color = this->m_Color; appendage.Transparency = this->m_Transparency; appendage.Type = this->m_Type; IModel::copyQVectorToArray(this->m_Src, appendage.Src); IModel::copyQVectorToArray(this->m_SolidAddMode, appendage.SolidAddMode); appendage.Minus = this->m_Minus; // 负体 appendage.MirrorDir = this->m_MirrorDir; appendage.MirrorOrgin = this->m_MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 appendage.CopyOffsetX = this->m_CopyOffsetX; // 复制偏移分量,20170901 新增 by czb appendage.CopyOffsetY = this->m_CopyOffsetY; // 复制偏移分量 appendage.CopyOffsetZ = this->m_CopyOffsetZ; // 复制偏移分量 appendage.m_objType = (E_GEO_3D_OBJ_TYPE)this->m_objType; return appendage; } }; #endif