今天把我的代码改了下,用一个新的结构体去包含原来的结构体,然后发现一个问题,如何初始化?
代码如下
typedef struct
{
double x0, y0, x1, y1;//直线的起止点
}LINE;//读取排样dxf结果时候的直线数据存储结构
typedef struct
{
double Arccent_x, Arccent_y;//保留ARC的圆心
double m_Arc_r;//ARC的半径
double m_ArcAngle_start, m_ArcAngle_end;//ARC的起止角度
}ARC;
typedef struct
{
double m_Circent_x, m_Circent_y;//CIRCLE的圆心
double m_Circle_r;//CIRCLE的半径
}CIRCLE;
typedef struct
{
double GeoEle_start_x0, GeoEle_start_y0, GeoEle_start_x1, GeoEle_start_y1;//作为每一个图元的标准直线段,用作后续寻求同一个封闭图元而用的标准
LINE m_line;//包含三种类型
ARC m_arc;
CIRCLE m_circle;
unsigned int m_typegeomele;//1为LINE,2为ARC,3为CIRCLE,默认是1
int m_GeomEleID;//对每一个图元编号,将来为寻找封闭图元遍历用的,默认为-1
int m_GeomCloseID;//对每一个封闭环所属的图元进行编号,给将来封闭环之间判断使用,默认为-1
bool m_IsGeomeleAccept;//判断该图元是不是已经被收录,默认为NULL
}GeomStandData;//创建一个统一的数据结构,用来存放所有的类型,带着走
我又写了个类去包含这四个结构体,类的作用主要是对这些结构体进行操作
class GEOMELE//只是用来对图元参数进行处理
{
public:
GEOMELE();
~GEOMELE();
public://将LINE ARC CIRLCE等元素读取进来,将来切割时候要用到这些原始数据
LINE m_line ;//开始时候我想在这里写成LINE m_line={0.0,0.0,0.0,0.0},下面几个也类似,但发现一编译就出错。如下图
ARC m_arc ;
CIRCLE m_circle;
GeomStandData m_geomstandData ;
public://这个类要实现的功能
//读取转换数据的功能,输入LINE,ARC,CIRCLE的原始数据,转换成GeoEle_start_x0, GeoEle_start_y0, GeoEle_start_x1, GeoEle_start_y1;
//LINE ReadLineData(double x0,double y0,double x1,double y1);//读取直线的数据,并把数据保存起来返回给图元的统一起点和终点,用来将来寻找封闭环用
GeomStandData ReadLineData(LINE m_line);//输入dxf里面LINE的四个参数,输出
GeomStandData ReadARCData(double Arccent_x, double Arccent_y, double r, double angle_start, double angle_end);//读取ARC的参数,共有五个参数,但是要转为图元的统一起点和终点,用来将来寻找封闭环用
GeomStandData ReadCIRCLE(double Circent_x, double Circent_y, double R);//对于圆而言,那么他就是独立的封闭环,给它附一个特别的值如99999,下个类判断到这个值的时候,直接让他是一个封闭环就好
//将
};
为此我将初始化放到类的构造函数里面,把结构体里面的结构体初始化分三步走,先在.h里面实例化结构体,然后在构造函数里面先初始化子结构体,然后把结构体整体带入。
GEOMELE::GEOMELE()
{
m_line = { 0.0, 0.0, 0.0, 0.0 };
m_arc = { 0.0, 0.0, 0.0, 0.0, 0.0 };
m_circle = { 0.0, 0.0, 0.0 };
m_geomstandData = { 0.0, 0.0, 0.0, 0.0, m_line, m_arc, m_circle, 1, -1, -1, NULL };
}