343 lines
8.5 KiB
C++
343 lines
8.5 KiB
C++
#if !defined (WRITEDXFFILE_H)
|
||
#define WRITEDXFFILE_H
|
||
|
||
#include "StdAfx.h"
|
||
#include <iostream>
|
||
#include <afxtempl.h>
|
||
|
||
//点类型
|
||
#define POINT_TURN 0
|
||
#define POINT_CURVE 1
|
||
#define POINT_ARC 2
|
||
|
||
//曲线类型
|
||
#define CURVE_POLYLINE 0
|
||
#define CURVE_ARC 1
|
||
#define CURVE_CIRCLE 2
|
||
#define CURVE_SPLINE 3 //只用于AutoCAD
|
||
|
||
|
||
//剪口类型
|
||
#define NOTCH_T 0
|
||
#define NOTCH_I 1
|
||
#define NOTCH_U 2
|
||
#define NOTCH_V 3
|
||
|
||
//款式信息
|
||
class CWriteStyleInfo : public CObject
|
||
{
|
||
public:
|
||
CPoint m_ptDesignOffset; //款式开始坐标(系统坐标)
|
||
CString m_strStyleName;
|
||
CString m_strBaseSizeName;
|
||
CList<CString, CString> m_listAllSize;
|
||
|
||
CWriteStyleInfo(void);
|
||
CWriteStyleInfo(CWriteStyleInfo& a);
|
||
~CWriteStyleInfo(void);
|
||
|
||
void operator=(CWriteStyleInfo& a);
|
||
void Initial(void);
|
||
};
|
||
/////////////////////////////////////////////////////////////////////////
|
||
class CPointIData : public CObject
|
||
{
|
||
public:
|
||
CPoint m_ptPoint;
|
||
int m_iGradeIndex;
|
||
int m_iPointType; //POINT_TURN
|
||
|
||
public:
|
||
CPointIData(void);
|
||
CPointIData(CPointIData& a);
|
||
~CPointIData(void);
|
||
|
||
void operator=(CPointIData& a);
|
||
void Initial(void);
|
||
};
|
||
class CPointIDataList : public CList<CPointIData,CPointIData&>
|
||
{
|
||
public:
|
||
CPointIDataList& operator=(CPointIDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CPointIData& operator[](int iIndex);
|
||
};
|
||
//////////////////////////////////////////////////////////////////////////
|
||
class CCurveIData : public CObject
|
||
{
|
||
public:
|
||
CPointIDataList m_listCtrlPoint; //控制点链
|
||
CList<CPoint, CPoint> m_listActualPoint; //实际点链
|
||
|
||
BOOL m_bClose; //=true闭合;=false 开口
|
||
int m_iCurveType; //=CURVE_ARC, CURVE_CIRCLE, CURVE_POLYLINE
|
||
int m_iDrawType; //线形
|
||
COLORREF m_crColor; //颜色
|
||
int m_iLayer; //曲线所在的层
|
||
|
||
//说明:
|
||
/* 根据曲线类型确定输出数据:
|
||
CURVE_ARC m_listCtrlPoint 为曲线输出三个控制点, m_listActualPoint为实际点链
|
||
CURVE_CIRCLE m_listCtrlPoint 为曲线输出三个控制点, m_listActualPoint为实际点链
|
||
CURVE_POLYLINE m_listCtrlPoint为曲线输出控制点, m_listActualPoint为实际点链 m_listCtrlPoint与m_listActualPoint值是一样的
|
||
|
||
CURVE_SPLINE指用于AutoCAD的输出
|
||
CURVE_SPLINE m_listCtrlPoint为曲线经过的控制点, m_listActualPoint为曲线不经过的控制点, m_listActualPoint点的个数是m_listCtrlPoint点个数* 4 - 4
|
||
*/
|
||
public:
|
||
CCurveIData(void);
|
||
CCurveIData(CCurveIData& a);
|
||
~CCurveIData(void);
|
||
|
||
void operator=(CCurveIData& a);
|
||
void Initial(void);
|
||
|
||
private:
|
||
void CopyData(CCurveIData &a);
|
||
};
|
||
|
||
class CCurveIDataList : public CList<CCurveIData,CCurveIData&>
|
||
{
|
||
public:
|
||
CCurveIDataList& operator=(CCurveIDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CCurveIData& operator[](int iIndex);
|
||
|
||
//得到链表所有控制点, 不包含重复点
|
||
//输出参数:
|
||
// listPointData 链表中所有控制点,控制点顺序按照链表顺序输出
|
||
void GetCtrlPointIData(CPointIDataList &listPointData);
|
||
|
||
//得到链表所有实际点, 不包含重复点
|
||
//输出参数:
|
||
// listPoint 链表中所有实际点,实际点顺序按照链表顺序输出
|
||
void GetActualPoint(CList<CPoint, CPoint> &listPoint);
|
||
};
|
||
//////////////////////////////////////////////////////////////////////////
|
||
//文字
|
||
class CTextIData : public CObject
|
||
{
|
||
public:
|
||
CPointIData m_PointData;
|
||
CString m_strText;
|
||
double m_dHeight; //单位 mm
|
||
double m_dAngle; //与水平方向的角度
|
||
public:
|
||
|
||
CTextIData(void);
|
||
CTextIData(CTextIData& a);
|
||
~CTextIData(void);
|
||
void operator=(CTextIData& a);
|
||
void Initial(void);
|
||
};
|
||
class CTextIDataList : public CList<CTextIData,CTextIData&>
|
||
{
|
||
public:
|
||
CTextIDataList& operator=(CTextIDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CTextIData& operator[](int iIndex);
|
||
};
|
||
//////////////////////////////////////////////////////////////////////////
|
||
//钻孔信息
|
||
class CDrillIData : public CObject
|
||
{
|
||
public:
|
||
CPointIData m_ptDrill;
|
||
|
||
public:
|
||
CDrillIData(void);
|
||
CDrillIData(CDrillIData& a);
|
||
~CDrillIData(void);
|
||
void operator=(CDrillIData& a);
|
||
void Initial(void);
|
||
};
|
||
|
||
class CDrillIDataList : public CList<CDrillIData,CDrillIData&>
|
||
{
|
||
public:
|
||
CDrillIDataList& operator=(CDrillIDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CDrillIData& operator[](int iIndex);
|
||
};
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
//剪口信息
|
||
class CNotchIData : public CObject
|
||
{
|
||
public:
|
||
BOOL m_bBorder; //=true 边线剪口;=false 缝份剪口
|
||
CPointIData m_ptNotch;
|
||
int m_iType; //剪口类型,输出的层类型 ,4,80,81,82,83
|
||
int m_iWidth; // 剪口宽度 系统单位
|
||
int m_iHeight; //剪口深度 系统单位
|
||
BOOL m_bAngle; //=true剪口角度输出;=false剪口角度不输出
|
||
double m_dAngle; //剪口角度;与X轴角度
|
||
|
||
public:
|
||
CNotchIData(void);
|
||
CNotchIData(CNotchIData& a);
|
||
~CNotchIData(void);
|
||
void operator=(CNotchIData& a);
|
||
void Initial(void);
|
||
};
|
||
|
||
class CNotchIDataList : public CList<CNotchIData,CNotchIData&>
|
||
{
|
||
public:
|
||
CNotchIDataList& operator=(CNotchIDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CNotchIData& operator[](int iIndex);
|
||
|
||
//根据给定,找到对应剪口
|
||
//输入参数:
|
||
// ptPoint 剪口点
|
||
//返回值:
|
||
// == NULL 没有找到;=false 找到
|
||
POSITION FindNotch(CPoint ptPoint);
|
||
|
||
//查找边线/缝份上的剪口
|
||
//输入参数:
|
||
// bBorder = true 边线;=false 缝份
|
||
//输出参数:
|
||
// listNotch 对应线上的剪口
|
||
void GetNotch(BOOL bBorder, CNotchIDataList &listNotch);
|
||
};
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
//说明:
|
||
// 按 AutoCAD输出时只输出m_listBorder/m_listSeam/m_listAssistantCurve/m_listText/ m_ptOffset/m_dAngle
|
||
class CPatternData : public CObject
|
||
{
|
||
public:
|
||
CString m_strBlockName; //块名
|
||
CString m_strPatternName; //纸样名
|
||
CString m_strSizeName; //号型名
|
||
CString m_strComment; //注释COMMENT/ANNOTATION
|
||
CStringArray m_arrMaterial; //布料名
|
||
CUIntArray m_arrQuantity; //总片布料份数 Quantity:<R,L>
|
||
CUIntArray m_arrLQuantity; //左片布料份数 Quantity:<R,L>
|
||
//m_arrQuantity, m_arrLQuantity大小保持一致
|
||
|
||
BOOL m_bFlip; //翻转信息 =true 允许翻转
|
||
double m_dRotation; //最大倾斜角 Rotation<0...360>
|
||
BOOL m_bFold; //折叠 Fold:<Y/N> =true 允许折叠
|
||
double m_dTilt; //最大倾斜角度 Tilt:<+/-0..90>
|
||
|
||
CCurveIDataList m_listBorder; //边线
|
||
CCurveIDataList m_listSeam; //缝份线
|
||
CCurveIDataList m_listAssistantCurve; //辅助线
|
||
CTextIDataList m_listText; //字符串
|
||
|
||
CNotchIDataList m_listNotch; //剪口 剪口点最好在控制点上,要不然剪口没有输出出去
|
||
CDrillIDataList m_listDrill; //钻孔
|
||
|
||
CCurveIData m_GrainLine; //布纹线
|
||
CCurveIData m_SymmetryLine; //对称轴
|
||
|
||
//纸样的偏移和旋转角度,旋转点为CPoint(0,0), 水平为零度
|
||
CPoint m_ptOffset;
|
||
double m_dAngle;
|
||
public:
|
||
CPatternData(void);
|
||
CPatternData(CPatternData& a);
|
||
~CPatternData(void);
|
||
void operator=(CPatternData& a);
|
||
void Initial(void);
|
||
private:
|
||
void CopyData(CPatternData &a);
|
||
};
|
||
|
||
class CPatternDataList : public CList<CPatternData,CPatternData&>
|
||
{
|
||
public:
|
||
CPatternDataList& operator=(CPatternDataList& rhs); // 赋值
|
||
|
||
//获取指定索引值上的项
|
||
//输入参数:
|
||
// iIndex 索引值,从0开始,不可越界
|
||
//返回值:
|
||
CPatternData& operator[](int iIndex);
|
||
|
||
//设置块名
|
||
//说明:
|
||
// 目前按照在列表中索引命名
|
||
void SetBlockName();
|
||
|
||
};
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
class CWriteDxfData : public CObject
|
||
{
|
||
public:
|
||
int m_iDPMM;
|
||
|
||
//款式信息,款式号型信息
|
||
CWriteStyleInfo m_StyleInfo;
|
||
//结构线信息
|
||
CCurveIDataList m_listCurveOfFile; //文件中所有点线信息
|
||
CTextIDataList m_listTextOfFile; //文件中所有字符信息
|
||
|
||
//纸样信息
|
||
CPatternDataList m_listPattern; //纸样
|
||
//放码量 该变量只有读入rul文件有用
|
||
int m_iGradeCount; //放码量个数
|
||
int m_iSizeCount; //号型个数
|
||
//m_iSizeCount, m_iGradeCount只对m_RulData起作用
|
||
CPoint **m_pRulData; //m_RulData[iSizeIndex][iGradeIndex]
|
||
|
||
public:
|
||
CWriteDxfData(void);
|
||
CWriteDxfData(CWriteDxfData& a);
|
||
~CWriteDxfData(void);
|
||
|
||
void operator=(CWriteDxfData& a);
|
||
void Initial(void);
|
||
|
||
private:
|
||
void DeleteElta();
|
||
|
||
void CopyData(CWriteDxfData &a);
|
||
|
||
};
|
||
|
||
//写文件
|
||
//输入参数:
|
||
// strPath; 文件全路径
|
||
// iFileType; = 0 ASTM文件;= 1 AAMA文件; =2 AutoCAD文件
|
||
// Data 输出的数据
|
||
// bAutoCADVer15 =true输出R15 输出控制点有Spline;=false输出R12 输出实际点链, 只用于AutoCAD
|
||
//返回值:
|
||
// =true 输出正确;=false路径无法保存
|
||
//说明:
|
||
// 单位按mm处理
|
||
BOOL WriteFile( CString strPath, int iFileType, CWriteDxfData &Data, BOOL bAutoCADVer15);
|
||
|
||
|
||
//纸样坐标转换成设备坐标
|
||
//输入参数:
|
||
// ptPoint 纸样坐标
|
||
//输出参数:
|
||
// fx, fy 对应的设备坐标的X和Y值
|
||
void PttnToDP(double dScale, CPoint ptOffset, CPoint ptPoint, float &fx, float &fy);
|
||
|
||
#endif |