#pragma once #ifndef MAX_ARRAY_SIZE_L #define MAX_ARRAY_SIZE_L 256 #endif /// ID前缀如下 /// 0-Point3D, 1-Curve, 2-Surface,3-Solid /// 10-MainDeckSurf,11-ShellSurf,12-DeckSurf,13-BoundSurf,14-SubdivSurf,15-OpencargoResion /// 16-Space,17-Appendage,18-Hull #define MAX_SIZE_OF_OBJECT_GROUP 1000000 //#define PI 3.14159 #include "Hull.h" // ADD BY XUEFENG 20180731 // FOR CODES COMBINE #include "Quantity_Color.hxx" #include // END ADD //本数据结构定义必须同\Infrastructure\Infrastructure.Data\Model\Geometry.cs中数据结构定义完全一致,意义一致 //***点 struct Point3D :public OBJ3D { Point3D() { ID = 0; //0 = ID/MAX_SIZE_OF_OBJECT_GROUP CmdID = 0; //Name = nullptr; //Command = nullptr; Visible = 0; Color = 0; Transparency = 0; Type = 0;// ����(���﷽ʽ):0����,1�����Ͻ�ȡ,2�����ཻ��10�����õ�C/N=?��9����� memset(Src, 0, sizeof(Src)); X = 0; Y = 0; Z = 0; CutDir = 0;// ���淽��:0X,1Y,2Z.��Type=1ʱʹ��. Cut = 0; // ����λ��.��Type=1ʱʹ��. ResDir = 0;// Լ������:0��Լ��,1X,2Y,3Z.��Type=1��2ʱʹ��. ResType = 0;// Լ������:0����,1С��,2����,3�ӽ�.��Type=1��2ʱʹ��. Res = 0;// Լ��ֵ.��Type=1��2ʱʹ��. ProjDir = 0;//ͶӰ����1X,2Y,3Z MirrorDir = 0; // �����淽��1-X, 2-Y, 3-Z MirrorOrgin = 0; // ������λ�ã���MirrorDirƥ��ķ������� setObjType(E_GEO_3D_OBJ_TYPE_POINT3D); } ~Point3D() { } void clear() { ID = 0; //0 = ID/MAX_SIZE_OF_OBJECT_GROUP CmdID = 0; // if(Name != nullptr) // { // delete Name; // Name = nullptr; // } // if(Command != nullptr) // { // //delete Command; // //Command = nullptr; // } Visible = 0; Color = 0; Transparency = 0; Type = 0;// ����(���﷽ʽ):0����,1�����Ͻ�ȡ,2�����ཻ��10�����õ�C/N=?��9����� memset(Src, 0, sizeof(Src)); X = 0; Y = 0; Z = 0; CutDir = 0;// ���淽��:0X,1Y,2Z.��Type=1ʱʹ��. Cut = 0; // ����λ��.��Type=1ʱʹ��. ResDir = 0;// Լ������:0��Լ��,1X,2Y,3Z.��Type=1��2ʱʹ��. ResType = 0;// Լ������:0����,1С��,2����,3�ӽ�.��Type=1��2ʱʹ��. Res = 0;// Լ��ֵ.��Type=1��2ʱʹ��. ProjDir = 0;//ͶӰ����1X,2Y,3Z MirrorDir = 0; // �����淽��1-X, 2-Y, 3-Z MirrorOrgin = 0; // ������λ�ã���MirrorDirƥ��ķ������� } int ID; //0 = ID/MAX_SIZE_OF_OBJECT_GROUP int CmdID; // char* Name; // char* Command; int Visible; int Color; double Transparency; int Type;// 类型(表达方式):0坐标,1曲线上截取,2曲线相交,10线引用点C/N=?,9镜像点 int Src[MAX_ARRAY_SIZE_L]; double X; double Y; double Z; int CutDir;// 截面方向:0X,1Y,2Z.仅Type=1时使用. double Cut; // 截面位置.仅Type=1时使用. int ResDir;// 约束方向:0无约束,1X,2Y,3Z.仅Type=1或2时使用. int ResType;// 约束类型:0等于,1小于,2大于,3接近.仅Type=1或2时使用. double Res;// 约束值.仅Type=1或2时使用. int ProjDir;//投影方向1X,2Y,3Z int MirrorDir; // 镜像面方向:1-X, 2-Y, 3-Z double MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 }; //***线 struct Curve:public OBJ3D { Curve() : ID(0), CmdID(0), Visible(0), Color(0), Transparency(0.0), Type(0), ProjIDir(0), ProjIIDir(0), ProjIKnotCnt(0), ProjIIKnotCnt(0), OX(0.0), OY(0.0), OZ(0.0), R1(0.0), R2(0.0), A1(0.0), A2(0.0), VX(0.0), VY(0.0), VZ(0.0), P1X(0.0), P1Y(0.0), P1Z(0.0), P2X(0.0), P2Y(0.0), P2Z(0.0), Full(false), MirrorDir(0), MirrorOrgin(0.0), CopyOffsetX(0.0), CopyOffsetY(0.0), CopyOffsetZ(0.0) { // 数值型数组清零 memset(Src, 0, sizeof(Src)); memset(KnotID, 0, sizeof(KnotID)); memset(KnotDir, 0, sizeof(KnotDir)); memset(KnotDirII, 0, sizeof(KnotDirII)); memset(KnotAX, 0, sizeof(KnotAX)); memset(KnotAY, 0, sizeof(KnotAY)); memset(KnotAZ, 0, sizeof(KnotAZ)); memset(KnotAXII, 0, sizeof(KnotAXII)); memset(KnotAYII, 0, sizeof(KnotAYII)); memset(KnotAZII, 0, sizeof(KnotAZII)); memset(ProjIKnotX, 0, sizeof(ProjIKnotX)); memset(ProjIKnotY, 0, sizeof(ProjIKnotY)); memset(ProjIKnotZ, 0, sizeof(ProjIKnotZ)); memset(ProjIIKnotX, 0, sizeof(ProjIIKnotX)); memset(ProjIIKnotY, 0, sizeof(ProjIIKnotY)); memset(ProjIIKnotZ, 0, sizeof(ProjIIKnotZ)); memset(ProjIKnotDir, 0, sizeof(ProjIKnotDir)); memset(ProjIKnotDirII, 0, sizeof(ProjIKnotDirII)); memset(ProjIIKnotDir, 0, sizeof(ProjIIKnotDir)); memset(ProjIIKnotDirII, 0, sizeof(ProjIIKnotDirII)); memset(ProjIKnotAX, 0, sizeof(ProjIKnotAX)); memset(ProjIKnotAY, 0, sizeof(ProjIKnotAY)); memset(ProjIKnotAZ, 0, sizeof(ProjIKnotAZ)); memset(ProjIKnotAXII, 0, sizeof(ProjIKnotAXII)); memset(ProjIKnotAYII, 0, sizeof(ProjIKnotAYII)); memset(ProjIKnotAZII, 0, sizeof(ProjIKnotAZII)); memset(ProjIIKnotAX, 0, sizeof(ProjIIKnotAX)); memset(ProjIIKnotAY, 0, sizeof(ProjIIKnotAY)); memset(ProjIIKnotAZ, 0, sizeof(ProjIIKnotAZ)); memset(ProjIIKnotAXII, 0, sizeof(ProjIIKnotAXII)); memset(ProjIIKnotAYII, 0, sizeof(ProjIIKnotAYII)); memset(ProjIIKnotAZII, 0, sizeof(ProjIIKnotAZII)); setObjType(E_GEO_3D_OBJ_TYPE_CURVE); } ~Curve() { } void clear() { // if(Name != nullptr) // { // delete Name; // Name = nullptr; // } // if(Command != nullptr) // { // delete Command; // Command = nullptr; // } } int ID; int CmdID; // char* Name; // char* Command; int Visible; int Color; double Transparency; int Type; int Src[MAX_ARRAY_SIZE_L]; //依赖源 //int UsedBy[MAX_ARRAY_SIZE_L]; //被使用,20170501 by czb int KnotID[MAX_ARRAY_SIZE_L]; //将节点与依赖分开,20170501 by czb int KnotDir[MAX_ARRAY_SIZE_L];// 结入切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. int KnotDirII[MAX_ARRAY_SIZE_L];// 节点切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. // 节点切入角序列 double KnotAX[MAX_ARRAY_SIZE_L] ; double KnotAY[MAX_ARRAY_SIZE_L] ; double KnotAZ[MAX_ARRAY_SIZE_L] ; // 节点切出角序列 double KnotAXII[MAX_ARRAY_SIZE_L] ; double KnotAYII[MAX_ARRAY_SIZE_L] ; double KnotAZII[MAX_ARRAY_SIZE_L] ; int ProjIDir;// 投影面I/II方向:0YZ,1XZ,2XY. int ProjIIDir; //投影面I/II节点个数 int ProjIKnotCnt; int ProjIIKnotCnt; // 投影面I节点坐标序列 double ProjIKnotX[MAX_ARRAY_SIZE_L]; double ProjIKnotY[MAX_ARRAY_SIZE_L]; double ProjIKnotZ[MAX_ARRAY_SIZE_L]; // 投影面II节点坐标序列 double ProjIIKnotX[MAX_ARRAY_SIZE_L]; double ProjIIKnotY[MAX_ARRAY_SIZE_L]; double ProjIIKnotZ[MAX_ARRAY_SIZE_L]; //20170501 by czb,新增 int ProjIKnotDir[MAX_ARRAY_SIZE_L];// 投影面I节点入切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. int ProjIKnotDirII[MAX_ARRAY_SIZE_L];// 投影面I节点切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. int ProjIIKnotDir[MAX_ARRAY_SIZE_L];// 投影面II节点入切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. int ProjIIKnotDirII[MAX_ARRAY_SIZE_L];// 投影面II节点切出方向序列:0角度,1直线切出,2新段分割点,新的edge要添加到wire中. // 投影面I节点切入角序列 double ProjIKnotAX[MAX_ARRAY_SIZE_L] ; double ProjIKnotAY[MAX_ARRAY_SIZE_L] ; double ProjIKnotAZ[MAX_ARRAY_SIZE_L] ; // 投影面I节点切出角序列 double ProjIKnotAXII[MAX_ARRAY_SIZE_L] ; double ProjIKnotAYII[MAX_ARRAY_SIZE_L] ; double ProjIKnotAZII[MAX_ARRAY_SIZE_L] ; // 投影面II节点切入角序列 double ProjIIKnotAX[MAX_ARRAY_SIZE_L] ; double ProjIIKnotAY[MAX_ARRAY_SIZE_L] ; double ProjIIKnotAZ[MAX_ARRAY_SIZE_L] ; // 投影面II节点切出角序列 double ProjIIKnotAXII[MAX_ARRAY_SIZE_L] ; double ProjIIKnotAYII[MAX_ARRAY_SIZE_L] ; double ProjIIKnotAZII[MAX_ARRAY_SIZE_L] ; //20170501 by czb,新增结束 double OX; double OY; double OZ; double R1; double R2; double A1; double A2; double VX; double VY; double VZ; double P1X; double P1Y; double P1Z; double P2X; double P2Y; double P2Z; bool Full; int MirrorDir; // 镜像面方向:1-X, 2-Y, 3-Z double MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 double CopyOffsetX; // 复制偏移分量,20170901 新增 by czb double CopyOffsetY;// 复制偏移分量 double CopyOffsetZ;// 复制偏移分量 }; //***面 struct Surface:public OBJ3D { public: Surface() { setObjType(E_GEO_3D_OBJ_TYPE_SURFACE); } int ID; int CmdID; // char* Name; // char* Command; int Visible; int Color; double Transparency; int Type;// 类型:0网格,1放样,2扫掠,3旋转,4管道,5球面,10沿Y轴镜像,11拼接,12剪切,13拆分 int Src[MAX_ARRAY_SIZE_L]; double OX; // 镜像面:X的位置坐标 double OY; // 镜像面:Y的位置坐标 double OZ; // 镜像面:Z的位置坐标 double PX; double PY; double PZ; double AR; int SplitDir;// 拆分结果:0Left,1Right 镜像面:0-X, 1-Y, 2-Z double H; int MirrorDir; // 镜像面方向:1-X, 2-Y, 3-Z double MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 double CopyOffsetX; // 复制偏移分量,20170901 新增 by czb double CopyOffsetY;// 复制偏移分量 double CopyOffsetZ;// 复制偏移分量 }; //***体 struct Solid:public OBJ3D { public: Solid() { setObjType(E_GEO_3D_OBJ_TYPE_SOLID); } int ID; int CmdID; // char* Name; // char* Command; int Visible; int Color; double Transparency; int Type; // 类型:0围拢,1扫掠,2旋转,3球,10镜像,12剪切,7体组合,14复制 int Src[MAX_ARRAY_SIZE_L] ; double OX; double OY; double OZ; double PX; double PY; double PZ; double AR; double AR1; double H; double H1; double L; double B; //20161112 by czb int MirrorDir; // 镜像面方向:1-X, 2-Y, 3-Z double MirrorOrgin; // 镜像面位置,与MirrorDir匹配的分量坐标 int BoolMode[MAX_ARRAY_SIZE_L];// 布尔运算方式:0并,1差,2交. 20170801 新增 by czb double CopyOffsetX; // 复制偏移分量,20170901 新增 by czb double CopyOffsetY;// 复制偏移分量 double CopyOffsetZ;// 复制偏移分量 }; //***肋骨 struct Frame { int ID; int Num; //肋位号 int NumS; double Dis; //肋距 }; //***横剖面型线中的型值点 struct ScPoint2D { double Y; double Z; }; //***型值表中的型值点 struct OffsetTablePoint { double X; double Y; double Z; }; //***站 struct Station { int ID; double Num;//站位号 double Pos;//站位位置 }; //***水线 struct WaterlinePos { int ID; char * Num;//水线号 double Pos;//水线位置 }; //***纵剖线 struct ButtocklinePos { int ID; char * Num;// 纵剖线号 double Pos;// 纵剖线位置 }; //***各类图元的显示信息 struct ModelDisplayOption { bool ShowName; int Color; }; ////***OCC拓扑对象显示参数 struct OccAisVar { // ADDED BY XUEFENG 20180731 // FOR CODES COMBINE Quantity_Color color;//颜色 // END ADDED // DELETE BY XUEFENG 20180731 // FOR CODES COMBINE //AnyCore::ColorValue color;//颜色 // END DELETE //end 2016srq double transparency;//透明度 bool visible;//可见性 bool showName;//是否显示名字 std::string name;//名字 }; //redo undo数据对象 struct GeomTopoVar { std::string name; Point3D point; Curve curve; Surface surface; Solid solid; MainDeckSurf maindecksurf; ShellSurf shellsurf; Hull hull; DeckSurf decksurf; BoundSurf boundsurf; SubdivSurf subdivsurf; OpenCargoRegion opencargoregion; Space space; Appendage appendage; TopoDS_Shape toposhape; }; //***重命名 struct RenameObject { int ID; int CmdID; char* Name; char* Command; int Visible; int Color; double Transparency; int Type; int Src[MAX_ARRAY_SIZE_L]; };