PlotterHMI/datafile/dxf/dxflib/WriteDxfFile.h
huahaiyan 9f74511e69 20240315
1、增加数据分割功能(完成)
2、更换dxf库(进行中)
2024-03-15 16:49:50 +08:00

343 lines
8.5 KiB
C++
Raw 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.

#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; //剪口类型,输出的层类型 480,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