254 lines
4.4 KiB
C
254 lines
4.4 KiB
C
|
#pragma once
|
|||
|
#include <vector>//包含头文件
|
|||
|
using namespace std;
|
|||
|
//块对象类,存放DXF的块对线,包括世界坐标、缩放比例、线、圆等对象
|
|||
|
//线对象
|
|||
|
|
|||
|
class Point2D32f
|
|||
|
{
|
|||
|
public:
|
|||
|
float x;
|
|||
|
float y;
|
|||
|
Point2D32f()
|
|||
|
{
|
|||
|
x=0.0;
|
|||
|
y=0.0;
|
|||
|
}
|
|||
|
Point2D32f(float fx,float fy)
|
|||
|
{
|
|||
|
x=fx;
|
|||
|
y=fy;
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
class Point3D32f
|
|||
|
{
|
|||
|
public:
|
|||
|
float x;
|
|||
|
float y;
|
|||
|
float z;
|
|||
|
Point3D32f()
|
|||
|
{
|
|||
|
x = 0.0;
|
|||
|
y = 0.0;
|
|||
|
z = 0.0;
|
|||
|
}
|
|||
|
Point3D32f(float fx,float fy,float fz)
|
|||
|
{
|
|||
|
x=fx;
|
|||
|
y=fy;
|
|||
|
z =fz;
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
class Point3DW32f
|
|||
|
{
|
|||
|
public:
|
|||
|
float x;
|
|||
|
float y;
|
|||
|
float z;
|
|||
|
float w;
|
|||
|
Point3DW32f()
|
|||
|
{
|
|||
|
x = 0.0;
|
|||
|
y = 0.0;
|
|||
|
z = 0.0;
|
|||
|
w =0.0;
|
|||
|
}
|
|||
|
Point3DW32f(float fx,float fy,float fz,float fw)
|
|||
|
{
|
|||
|
x=fx;
|
|||
|
y=fy;
|
|||
|
z =fz;
|
|||
|
w =fw;
|
|||
|
}
|
|||
|
|
|||
|
};
|
|||
|
class DXFText
|
|||
|
{
|
|||
|
public:
|
|||
|
/*! X Coordinate of insertion point. */
|
|||
|
double ipx;
|
|||
|
/*! Y Coordinate of insertion point. */
|
|||
|
double ipy;
|
|||
|
/*! Z Coordinate of insertion point. */
|
|||
|
double ipz;
|
|||
|
|
|||
|
/*! X Coordinate of alignment point. */
|
|||
|
double apx;
|
|||
|
/*! Y Coordinate of alignment point. */
|
|||
|
double apy;
|
|||
|
/*! Z Coordinate of alignment point. */
|
|||
|
double apz;
|
|||
|
|
|||
|
/*! Text height */
|
|||
|
double height;
|
|||
|
/*! Relative X scale factor. */
|
|||
|
double xScaleFactor;
|
|||
|
/*! 0 = default, 2 = Backwards, 4 = Upside down */
|
|||
|
int textGenerationFlags;
|
|||
|
/**
|
|||
|
* Horizontal justification.
|
|||
|
*
|
|||
|
* 0 = Left (default), 1 = Center, 2 = Right,
|
|||
|
* 3 = Aligned, 4 = Middle, 5 = Fit
|
|||
|
* For 3, 4, 5 the vertical alignment has to be 0.
|
|||
|
*/
|
|||
|
int hJustification;
|
|||
|
/**
|
|||
|
* Vertical justification.
|
|||
|
*
|
|||
|
* 0 = Baseline (default), 1 = Bottom, 2 = Middle, 3= Top
|
|||
|
*/
|
|||
|
int vJustification;
|
|||
|
/*! Text string. */
|
|||
|
std::string text;
|
|||
|
/*! Style (font). */
|
|||
|
std::string style;
|
|||
|
/*! Rotation angle of dimension text away from default orientation. */
|
|||
|
double angle;
|
|||
|
};
|
|||
|
class DXFMText
|
|||
|
{
|
|||
|
public:
|
|||
|
/*! X Coordinate of insertion point. */
|
|||
|
double ipx;
|
|||
|
/*! Y Coordinate of insertion point. */
|
|||
|
double ipy;
|
|||
|
/*! Z Coordinate of insertion point. */
|
|||
|
double ipz;
|
|||
|
/*! X Coordinate of X direction vector. */
|
|||
|
double dirx;
|
|||
|
/*! Y Coordinate of X direction vector. */
|
|||
|
double diry;
|
|||
|
/*! Z Coordinate of X direction vector. */
|
|||
|
double dirz;
|
|||
|
/*! Text height */
|
|||
|
double height;
|
|||
|
/*! Width of the text box. */
|
|||
|
double width;
|
|||
|
/**
|
|||
|
* Attachment point.
|
|||
|
*
|
|||
|
* 1 = Top left, 2 = Top center, 3 = Top right,
|
|||
|
* 4 = Middle left, 5 = Middle center, 6 = Middle right,
|
|||
|
* 7 = Bottom left, 8 = Bottom center, 9 = Bottom right
|
|||
|
*/
|
|||
|
int attachmentPoint;
|
|||
|
/**
|
|||
|
* Drawing direction.
|
|||
|
*
|
|||
|
* 1 = left to right, 3 = top to bottom, 5 = by style
|
|||
|
*/
|
|||
|
int drawingDirection;
|
|||
|
/**
|
|||
|
* Line spacing style.
|
|||
|
*
|
|||
|
* 1 = at least, 2 = exact
|
|||
|
*/
|
|||
|
int lineSpacingStyle;
|
|||
|
/**
|
|||
|
* Line spacing factor. 0.25 .. 4.0
|
|||
|
*/
|
|||
|
double lineSpacingFactor;
|
|||
|
/*! Text string. */
|
|||
|
std::string text;
|
|||
|
/*! Style string. */
|
|||
|
std::string style;
|
|||
|
/*! Rotation angle. */
|
|||
|
double angle;
|
|||
|
};
|
|||
|
class DXFLine
|
|||
|
{
|
|||
|
public:
|
|||
|
Point2D32f beginpoint;
|
|||
|
Point2D32f endpoint;
|
|||
|
};
|
|||
|
//圆对象
|
|||
|
class DXFCircle
|
|||
|
{
|
|||
|
public:
|
|||
|
Point2D32f centerpoint;
|
|||
|
double radius;
|
|||
|
};
|
|||
|
//多线实体对象
|
|||
|
class DXFPolyLineEntities
|
|||
|
{
|
|||
|
public:
|
|||
|
vector<Point2D32f> vertex;//顶点
|
|||
|
bool isclose;//闭合标志位
|
|||
|
};
|
|||
|
//圆弧对象对象
|
|||
|
class DXFArc
|
|||
|
{
|
|||
|
public:
|
|||
|
Point2D32f centerpoint;
|
|||
|
double radius;
|
|||
|
double bangle;//起点角度
|
|||
|
double eangle;//终点角度
|
|||
|
};
|
|||
|
|
|||
|
class Spline
|
|||
|
{
|
|||
|
public:
|
|||
|
unsigned int degree;
|
|||
|
|
|||
|
/*! Number of knots. */
|
|||
|
unsigned int nKnots;
|
|||
|
|
|||
|
/*! Number of control points. */
|
|||
|
unsigned int nControl;
|
|||
|
|
|||
|
/*! Number of fit points. */
|
|||
|
unsigned int nFit;
|
|||
|
|
|||
|
/*! Flags */
|
|||
|
int flags;
|
|||
|
|
|||
|
double tangentStartX;
|
|||
|
double tangentStartY;
|
|||
|
double tangentStartZ;
|
|||
|
double tangentEndX;
|
|||
|
double tangentEndY;
|
|||
|
double tangentEndZ;
|
|||
|
|
|||
|
vector<double> knotLst;
|
|||
|
vector<Point3D32f> fitPntLst;
|
|||
|
vector<Point3DW32f> ctrPntLst;
|
|||
|
|
|||
|
};
|
|||
|
class BlockObj
|
|||
|
{
|
|||
|
public:
|
|||
|
BlockObj()
|
|||
|
{
|
|||
|
sx = 1;
|
|||
|
sy = 1;
|
|||
|
sz = 1;
|
|||
|
ipx = 0;
|
|||
|
ipy = 0;
|
|||
|
ipz = 0;
|
|||
|
line.clear();
|
|||
|
}
|
|||
|
~BlockObj(){}
|
|||
|
//块名称
|
|||
|
string name;
|
|||
|
//缩放比例
|
|||
|
double sx;
|
|||
|
double sy;
|
|||
|
double sz;
|
|||
|
//用户坐标系相在世界坐标系中的位置
|
|||
|
double ipx;
|
|||
|
double ipy;
|
|||
|
double ipz;
|
|||
|
vector<DXFLine> line;
|
|||
|
vector<DXFCircle> circle;
|
|||
|
vector<DXFPolyLineEntities> polylineentities;
|
|||
|
vector<DXFArc> arc;
|
|||
|
vector<Spline> splineLst;
|
|||
|
vector<DXFText> textLst;
|
|||
|
vector<DXFMText> mtextLst;
|
|||
|
bool drawflag;
|
|||
|
};
|
|||
|
|