#if !defined (WRITEDXFFILE_H) #define WRITEDXFFILE_H #include "StdAfx.h" #include #include //点类型 #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 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 { public: CPointIDataList& operator=(CPointIDataList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CPointIData& operator[](int iIndex); }; ////////////////////////////////////////////////////////////////////////// class CCurveIData : public CObject { public: CPointIDataList m_listCtrlPoint; //控制点链 CList 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 { public: CCurveIDataList& operator=(CCurveIDataList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CCurveIData& operator[](int iIndex); //得到链表所有控制点, 不包含重复点 //输出参数: // listPointData 链表中所有控制点,控制点顺序按照链表顺序输出 void GetCtrlPointIData(CPointIDataList &listPointData); //得到链表所有实际点, 不包含重复点 //输出参数: // listPoint 链表中所有实际点,实际点顺序按照链表顺序输出 void GetActualPoint(CList &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 { 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 { 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 { 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: CUIntArray m_arrLQuantity; //左片布料份数 Quantity: //m_arrQuantity, m_arrLQuantity大小保持一致 BOOL m_bFlip; //翻转信息 =true 允许翻转 double m_dRotation; //最大倾斜角 Rotation<0...360> BOOL m_bFold; //折叠 Fold: =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 { 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