#if !defined (READAUTCAD_H) #define READAUTCAD_H #pragma once #include "PDSMath/StdAfx.h" #include //#include #include "GroupCode.h" /////////////////////////////////Start: CDimension///////////////////////////////////////// //标注组码, 目前只识别一种标注 class CDimension : public CGroupCode { public: int m_iType; // -1 = 初始化值 // 0 = 转角标注、水平标注或垂直标注 // 1 = 对齐标注 // 2 = 角度标注 // 3 = 直径标注 // 4 = 半径标注 // 5 = 角度三点标注 // 6 = 坐标标注 // 32 = 标注信息在给定的块中 CString m_strBlockName; CPointData m_ptLU; //文字显示的位置 //标注的显示位置坐标 CPointData m_ptPoint0; CPointData m_ptPoint1; CPointData m_ptPoint2; CPointData m_ptPoint3; CPointData m_ptPoint4; CPointData m_ptPoint5; CPointData m_ptPoint6; BOOL m_bNoString; //=true 表示标注没有字符串,字符串需要根据计算得到; false 标注字符串为m_strDimension CString m_strDimension; //用户明确地输入了标注文字(可选,缺省值为测量结果) 如果为空或"<>",以文字方式标注测量结果; 如果为 " "(一个空格),禁止输出文字 public: CDimension(void); CDimension(CDimension& a); ~CDimension(void); BOOL operator==(CDimension& a); void operator=(CDimension& a); void Initial(void); //处理读入的数据 //返回值: // true 数据可用 ;=false数据不可用 BOOL DisPoseReadData(); //处理字符串 //说明: //将读入的字符串"{\fSimSun|b0|i0|c134|p2;线性}",处理为"线性" void DisPoseText(CString &strString); //标注设置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //将标注转成字符串信息 //输出参数: // TextData 字符串信息 void TransText(CTextData &TextData); }; class CDimensionList : public CList { public: CDimensionList& operator=(CDimensionList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CDimension& operator[](int iIndex); //标注位置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //将标注转成字符串 void TransText(CTextDataList &listTextData); }; //////////////////////////////////End: CDimension//////////////////////////////////////// //////////////////////////////////Start: CSolidInfor//////////////////////////////////////// class CSolidInfor : public CGroupCode { public: CCurveNotchInfor m_CurveInfor; public: CSolidInfor(void); CSolidInfor(CSolidInfor& a); ~CSolidInfor(void); void operator=(CSolidInfor& a); void Initial(void); //设置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //设置放大 //输入参数: //dScale 放大缩小比例 //void SetScale(double dScale); }; class CSolidInforList : public CList { public: CSolidInforList& operator=(CSolidInforList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CSolidInfor& operator[](int iIndex); //标注位置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //得到链表中所有曲线 void GetCurveInforList(CCurveNotchInforList &listCurveInfor); }; ///////////////////////////////////End: CSolidInfor/////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //Auto CAD中块信息 class CAuBlockInfor : public CObject { public: CString m_strBlockName; //为了记录BLOCK的块名(在组码2的后面) CString m_strPatternName; //纸样名 CString m_strSizeName; //号型名 CStringArray m_arrMaterial; //布料名 CUIntArray m_arrQuantity; //总片布料份数 Quantity: //纸样名,号型名两个变量是为了防止客户使用AutoCAD读ASTM/TIIP文件 CCurveNotchInforList m_listCurveInfo; //所有的线信息 CTextDataList m_listTextData; //记录标志符为TEXT/MTEXT的数据 CPointDataList m_listPointInfo; //所有点 记录POINT的数据 CDimensionList m_listDimension; //标注信息 CSolidInforList m_listSolidInfor; //实体信息, 标注中的三角形 CInsertDataList m_listInsertData_Block; //块中插入信息 //在m_listCurveInfo/m_listArcCircle/m_listEllispse中找出纸样块 CPatternBlockList m_listPatternBlock; //纸样块 public: CAuBlockInfor(void); CAuBlockInfor(CAuBlockInfor& a); ~CAuBlockInfor(void); void operator=(CAuBlockInfor& a); void Initial(void); //位置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //判断该块是否为空块 //返回值: // =true 是;=false不是 //说明: // 空块是没有任何数据,即所有链表为空 BOOL IsEmptyBlock(); //得到纸样块,信息存在在m_listPatternBlock中 void GetPatternBlock(); private: //得到纸样块 //输入参数: // listAllCurveInfor 所有曲线 // listTextData 所有文字 //输出参数: // listPatternBlock 纸样块 void GetPatternBlock(CCurveNotchInforList &listAllCurveInfor, CTextDataList &listTextData, CPointDataList &listPointInfo, CPatternBlockList &listPatternBlock); }; class CAuBlockInfoList : public CList { public: CAuBlockInfoList& operator=(CAuBlockInfoList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CAuBlockInfor& operator[](int iIndex); //根据给定的块名找出对应的块 //[输入] strBlockName 块名 //[输出] BlockInfor 找到的块 //返回值: // 找到块的位置, 没有找到返回NULL POSITION FindBlockName(CString strBlockName, CAuBlockInfor &BlockInfor); //标注位置偏移 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(0,0), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //删除空块(没有任何数据的块) void DeleteEmptyBlock(); //得到纸样块 void GetPatternBlock(); }; ////////////////////////////////////////////////////////////////////////// //TABLE ->LTYPE class CLTypeInfor : public CObject { public: //说明: 由于AutoCAD文件中输出的类型都是通过代号表示的,这里都使用字符串 CString m_strLTypeName; //线型名称 CString m_strDescribe; //描述 public: CLTypeInfor(void); CLTypeInfor(CLTypeInfor& a); ~CLTypeInfor(void); void operator=(CLTypeInfor& a); void Initial(void); }; class CLTypeInforList : public CList { public: CLTypeInforList& operator=(CLTypeInforList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CLTypeInfor& operator[](int iIndex); }; ////////////////////////////////////////////////////////////////////////// //TABLE ->LAYER class CLayerInfor : public CObject { public: //说明: 由于AutoCAD文件中输出的类型都是通过代号表示的,这里都使用字符串 CString m_strLayerName; //图层名 int m_iStandard; //标准标志值 /* m_iStandard 标准标志值(位编码值): 1 = 冻结图层,否则图层解冻 2 = 在新视口中缺省设置为冻结图层 4 = 锁定图层 */ CString m_strColor; //颜色数 CString m_strLineType; //线型名 public: CLayerInfor(void); CLayerInfor(CLayerInfor& a); ~CLayerInfor(void); void operator=(CLayerInfor& a); void Initial(void); }; class CLayerInforList : public CList { public: CLayerInforList& operator=(CLayerInforList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CLayerInfor& operator[](int iIndex); //给定的层名对应颜色 //输入参数: // strLayerName 层名 //返回值: // 层名对应颜色;没有为空 CString FindColor(CString strLayerName); }; ////////////////////////////////////////////////////////////////////////// class CAuTableInfor : public CObject { public: //说明: 由于AutoCAD文件中输出的类型都是通过代号表示的,所有这里都使用字符串 CLTypeInforList m_listLType; //标识符 LTYPE 整个文件所用线型 CLayerInforList m_listLayer; //标识符 LAYER 整个文件图层信息, Entities可以包含该列表中没有的图层信息 public: CAuTableInfor(void); CAuTableInfor(CAuTableInfor& a); ~CAuTableInfor(void); void operator=(CAuTableInfor& a); void Initial(void); }; ////////////////////////////////////////////////////////////////////////// class CAutoCADFileInfo : public CObject { public: CAuBlockInfoList m_listBlockInfor; CAuBlockInfor m_EntitiesInfor; //层信息 CAuTableInfor m_TableInfor; //层信息 TABLES public: CAutoCADFileInfo(void); CAutoCADFileInfo(CAutoCADFileInfo& a); ~CAutoCADFileInfo(void); void operator=(CAutoCADFileInfo& a); void Initial(void); //得到纸样块 //m_listBlockInfor/m_EntitiesInfor中信息转成CPatternBlockList void GetPatternBlock(); //除去隐藏不用的BLOCK void RemoveUnUseBlock(); }; /* 说明: 1.该类中不对坐标进行转换,只是将文件中的坐标按原样读入; */ class CReadAutoCAD: public CObject { public: CAutoCADFileInfo m_FileInfo; //读入的所有文件内容 private: FILE *m_pDXFFile; //文件指针 BOOL m_bReadWindowText; //=ture 读Window/Dos文本文件;=false 读Unix/Linux下文本文件 CString m_strValue1, m_strValue2; //用于读组码和数据 BOOL m_bPattern; //=true要创建纸样;=false 结构线 BOOL m_bReadSolid; //=true填充标识线;=false 不读入 public: CReadAutoCAD(void); ~CReadAutoCAD(void); //读入文件 //输入参数: // strFilePath 文件路径 // bPattern = true 读入纸样;=false 结构线 // bReadSolid = true读入填充标识线;=false不读入 20210902 XQ BOOL ReadAutoCADFile(CString strFilePath, BOOL bPattern, BOOL bReadSolid); private: //读组码 //[输入] fFile 文件 //[输出] strString1/strString2 连续两行数据 void ReadGroupString(FILE *fFile, CString &strString1, CString &strString2); //读数据 // 返回值: // =true 读数据成功;=false 读数据失败 //说明: //读入数据存放在m_FileInfo BOOL ReadFileData(); //读TABLE信息 // TableInfor读到的TABLE信息 // 返回值: // =true 读数据成功;=false 读数据失败 //说明: // 在函数中不能对TableInfor初始化 BOOL ReadTableData(CAuTableInfor &TableInfor); //读标识符LAYER BOOL ReadLayerData(CLayerInfor &LayerInfor); //读标识符LTYPE BOOL ReadLTypeData(CLTypeInfor <ypeInfor); //读BLOCK信息 // BlockInfor读到的BLOCK信息 // bReadBlock =true 读BLOCK;=false读ENTITIES // 返回值: // =true 读数据成功;=false 读数据失败 BOOL ReadBlockData(CAuBlockInfor &BlockInfor, BOOL bReadBlock); //读标识符ARC信息 BOOL ReadArcData(CCurveNotchInfor &ArcCircleData); //读标识符CIRCLE信息 BOOL ReadCircleData(CCurveNotchInfor &ArcCircleData); //读标识符ELLIPSE信息 BOOL ReadEllipseData(CCurveNotchInfor &EllipseData); //读标识符LINE信息 BOOL ReadLineData(CCurveNotchInfor &CurveInfor); //读标识符MLINE信息 BOOL ReadMLineData(CCurveNotchInfor &CurveInfor); //读标识符POLYLINE信息 BOOL ReadPolylineData(CCurveNotchInfor &CurveInfor); //读标识符LWPOLYLINE信息 BOOL ReadLWPolylineData(CCurveNotchInfor &CurveInfor); //读标识符SPLINE信息 BOOL ReadSPLineData(CCurveNotchInfor &CurveInfor); //读标识符TEXT信息 BOOL ReadTEXTData(CTextData &TextData); //分析字符串是否为纸样名称或者号型名称 //[输入] strRef 参考字符串 //[输出] strName 名称 该值只有在返回值大于0时有效 //返回值: // =0 不是任何名称 // =1 纸样名称 // =2 号型名称 // =3 布料名 // =4 布料份数 int NameSizeInfor(CString strRef, CString &strName); //读标识符MTEXT信息 BOOL ReadMTEXTData(CTextData &TextData); //读标识符POINT信息 BOOL ReadPointData(CPointData &PointData); //读标识符DIMENSION信息 BOOL ReadDimensionData(CDimension &Dimension); //读标识符SOLID信息 BOOL ReadSolidData(CSolidInfor &SolidInfor); //读标识符INSERT信息 BOOL ReadInsertData(CInsertData &InsertData); //计算SPline曲线 // pBlockInfor 需要计算SPline的块 void CalcuateSPlineCurve(CAuBlockInfor *pBlockInfor); }; #endif