COMPASSi/trunk/code/inc/OCC/OCCLib/Geometry.h

453 lines
12 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.

#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>ʹ<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>ʹ<CAB1><CAB9>.
Res = 0;// Լ<><D4BC>ֵ.<2E><>Type=1<><31>ʹ<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>ʹ<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>ʹ<CAB1><CAB9>.
Res = 0;// Լ<><D4BC>ֵ.<2E><>Type=1<><31>ʹ<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];
};