453 lines
12 KiB
C++
453 lines
12 KiB
C++
#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 <TopoDS_Shape.hxx>
|
||
// 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;// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>﷽ʽ):0<><30><EFBFBD><EFBFBD>,1<><31><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD>ȡ,2<><32><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB>10<31><30><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>C/N=?<3F><>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
memset(Src, 0, sizeof(Src));
|
||
|
||
X = 0;
|
||
Y = 0;
|
||
Z = 0;
|
||
CutDir = 0;// <20><><EFBFBD>淽<EFBFBD><E6B7BD>:0X,1Y,2Z.<2E><>Type=1ʱʹ<CAB1><CAB9>.
|
||
Cut = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>.<2E><>Type=1ʱʹ<CAB1><CAB9>.
|
||
ResDir = 0;// Լ<><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0<><30>Լ<EFBFBD><D4BC>,1X,2Y,3Z.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
ResType = 0;// Լ<><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0<><30><EFBFBD><EFBFBD>,1С<31><D0A1>,2<><32><EFBFBD><EFBFBD>,3<>ӽ<EFBFBD>.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
Res = 0;// Լ<><D4BC>ֵ.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
ProjDir = 0;//ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>1X,2Y,3Z
|
||
MirrorDir = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>淽<EFBFBD><E6B7BD>1-X, 2-Y, 3-Z
|
||
MirrorOrgin = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>MirrorDirƥ<72><C6A5>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
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;// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>﷽ʽ):0<><30><EFBFBD><EFBFBD>,1<><31><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD>ȡ,2<><32><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB>10<31><30><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>C/N=?<3F><>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
memset(Src, 0, sizeof(Src));
|
||
|
||
X = 0;
|
||
Y = 0;
|
||
Z = 0;
|
||
CutDir = 0;// <20><><EFBFBD>淽<EFBFBD><E6B7BD>:0X,1Y,2Z.<2E><>Type=1ʱʹ<CAB1><CAB9>.
|
||
Cut = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>.<2E><>Type=1ʱʹ<CAB1><CAB9>.
|
||
ResDir = 0;// Լ<><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0<><30>Լ<EFBFBD><D4BC>,1X,2Y,3Z.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
ResType = 0;// Լ<><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0<><30><EFBFBD><EFBFBD>,1С<31><D0A1>,2<><32><EFBFBD><EFBFBD>,3<>ӽ<EFBFBD>.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
Res = 0;// Լ<><D4BC>ֵ.<2E><>Type=1<><31>2ʱʹ<CAB1><CAB9>.
|
||
ProjDir = 0;//ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>1X,2Y,3Z
|
||
MirrorDir = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>淽<EFBFBD><E6B7BD>1-X, 2-Y, 3-Z
|
||
MirrorOrgin = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>MirrorDirƥ<72><C6A5>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
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];
|
||
};
|
||
|