598 lines
20 KiB
C++
598 lines
20 KiB
C++
#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 |