#if !defined (READASTM_H) #define READASTM_H #pragma once #include "PDSMath/StdAfx.h" #include //#include #include "GroupCode.h" //某曲线层的信息 class CCurveLayerInfor : public CObject { public: CCurveNotchInforList m_listCurveLayer; //将圆弧,椭圆都转成控制点 CCurveNotchInforList m_listCurveCheckLayer; //该层校验层 将圆弧,椭圆都转成控制点 CPointDataList m_listTurnPointLayer; //该层转折点 记录POINT的数据 该变量对SPline, 圆弧,圆,椭圆无效 CPointDataList m_listCurvePointLayer; //该层曲线点 记录POINT的数据 该变量对SPline,圆弧,圆,椭圆无效 CTextDataList m_listPointGrade; //记录标志符为TEXT/MTEXT的放码点序号 public: CCurveLayerInfor(void); CCurveLayerInfor(CCurveLayerInfor& a); ~CCurveLayerInfor(void); void operator=(CCurveLayerInfor& a); void Initial(void); //位置偏移和放缩 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(dOffsetX, dOffsetY), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //设置放大 //输入参数: //dScale 放大缩小比例 //void SetScale(double dScale); //设置层中的点类型和放码ID //输入参数: // listPointGrade 放码点 // listTurnPointLayer 转折点 // listCurvePointLayer 曲线点 //说明: // 先查找this中的如果没有再在传入的中查找 void SetPointTypeGradeID(CTextDataList &listPointGrade, CPointDataList &listTurnPointLayer, CPointDataList &listCurvePointLayer); private: //根据效验层点确定曲线点 //将在点链listAllValidatePoint中但是没有在listAllPoint中的点加入到listCurvePoint中 //输入参数: // listAllPoint 曲线层 // listAllValidatePoint 校验层 //输入输出: // listCurvePoint 曲线点 void FindCurvePoint(CPointDataList &listAllPoint, CPointDataList &listAllValidatePoint, CPointDataList &listCurvePoint); }; //AAMA/ASTM的块信息 class CAMBlockInfor : public CObject { public: //文件中读入的数据 CString m_strBlockName; //为了记录BLOCK的块名(在组码2的后面) CString m_strPatternName; //纸样名 CString m_strSizeName; //号型名 BOOL m_bBaseSize; //=true 表示为基码;=false 不是, 这个用于在款式信息中没有读到基码号型是使用, 默认False 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> CCurveLayerInfor m_Layer1; //第1层, 边线 CCurveLayerInfor m_Layer14; //第14层,缝份线 CCurveLayerInfor m_Layer8; //第8层,辅助线 CCurveLayerInfor m_Layer11; //第11层 内部裁剪线 CCurveNotchInfor m_CurveLayer5; //放码线 CCurveNotchInfor m_CurveLayer6; //对称线 CCurveNotchInfor m_CurveLayer7; //布纹线 CCurveNotchInforList m_listCurveLayer910; //条格线 CCurveLayerInfor m_Layer; //除以上之外的所有层, 将圆弧,椭圆都转成控制点, m_listTurnPointLayer/m_listCurvePointLayer/m_listPointGrade存放该块中读入的所有放码点,转折点,曲线点 CTextDataList m_listTextData; //记录标志符为TEXT/MTEXT的数据 T文字 //CNotchInforList m_listNotchInfo; //剪口信息 CDrillInforList m_listDrillInfo; //13层或者Circle标识符钻孔信息 CInsertDataList m_listInsertData_Block; //块中插入信息 public: CStringArray m_arrCategory; //20180614 记录CATEGORY字段,CATEGORY作为布料还是注释, 根据情况而定,读入时另外保存 public: CAMBlockInfor(void); CAMBlockInfor(CAMBlockInfor& a); ~CAMBlockInfor(void); void operator=(CAMBlockInfor& a); void Initial(void); //位置偏移和放缩 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(dOffsetX, dOffsetY), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //设置放大 //输入参数: //dScale 放大缩小比例 //void SetScale(double dScale); //设置块中的点类型和放码ID //[输入] bAllInfor = true使用所有层设置;=false使用对应层设置 void SetPointTypeGradeID(BOOL bAllInfor); //20180614 判断m_arrCategory是否为布料名,如果是放入m_arrMaterial中如果不是放入m_strComment中 void DisposeMaterilaName(); private: void CopyBlockInfor(CAMBlockInfor &a); }; class CAMBlockInforList : public CList { public: CAMBlockInforList& operator=(CAMBlockInforList& rhs); // 赋值 //获取指定索引值上的项 //输入参数: // iIndex 索引值,从0开始,不可越界 //返回值: CAMBlockInfor& operator[](int iIndex); //位置偏移,旋转和放缩 //输入参数: //dOffsetX/dOffsetY 偏移量 //dSin/dCos 旋转角度, 旋转点为CPoint(dOffsetX, dOffsetY), 水平为零度 //dScaleX/dScaleY 放大缩小 20220408 XQ //说明: // 偏移->旋转->放大缩小 void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY); //设置放大 //输入参数: //dScale 放大缩小比例 //void SetScale(double dScale); //设置块中的点类型和放码ID //[输入] bAllInfor = true使用所有层设置;=false使用对应层设置 void SetPointTypeGradeID(BOOL bAllInfor); //将给定号型名替换成给定字符串 //输入参数: // strOldSizeName 旧号型名 // strNewSizeName 新号型名 void ReplaceSizeName(CString strOldSizeName, CString strNewSizeName); //在给定名称的号型对应的纸样链 //输入参数: // strSizeName 需要查找到号型名 //输出参数: // listBlockInfor 找到的纸样列表 //返回值: // =true 找到;=false 没有找到 BOOL FindSizeName(CString strSizeName, CAMBlockInforList &listBlockInfor); }; //放码文件中的数据 class CRulInfor : public CObject { public: BOOL m_bReadRul; //=true 表示读了rul文件 int m_iUnit; //= CONST_MM METRIC:mm;= CONST_INCH ENGLISH : 英寸; 默认mm int m_iSizeCount; //号型个数 CString m_strSampleSize; //基码 CList m_listAllSize; //所有号型 大小与m_iSizeCount一致 int m_iGradeCount; //放码量个数 CPointData **m_pRulData; //m_RulData[iSizeIndex][iGradeIndex] public: CRulInfor(void); CRulInfor(CRulInfor& a); ~CRulInfor(void); void operator=(CRulInfor& a); void Initial(void); //放缩 //输入参数: //dScale 放大缩小比例 //说明: // 不需要偏移,放码量本身是相对量 void SetScale( double dScale); private: void DeleteElta(); }; //Entities信息 class CAMEntitiesInfor : public CObject { public: CString m_strStyleName; //Style Name: CString m_strSampleSize; //基码Sample Size: int m_iUnit; //= CONST_MM METRIC:mm;= CONST_INCH ENGLISH : 英寸; 默认mm CString m_strGradeRulTable; //放码文件rul Grade Rule Table: CString m_strAuthor; //作者Author:;; m_listAllSize; //所有号型(不重复) 在处理读入数据时号型个数以该变量为准 CAMBlockInforList m_listBlockInfor; //读Block数据 CAMEntitiesInfor m_EntitiesInfor; //读Entities数据 CRulInfor m_rulInfor; //放码数据 public: CASTMFileInfor(void); CASTMFileInfor(CASTMFileInfor& a); ~CASTMFileInfor(void); void operator=(CASTMFileInfor& a); void Initial(void); }; //读文件 /* 说明: 1.该类中不对坐标进行转换,只是将文件中的坐标按原样读入; */ class CReadASTMFile: public CObject { public: CASTMFileInfor m_FileInfo; //读入的所有文件内容 private: FILE *m_pDXFFile; //文件指针 BOOL m_bReadWindowText; //=ture 读Window/Dos文本文件;=false 读Unix/Linux下文本文件 CString m_strFileName; //读取的文件名,同时也可以作为放码文件名 CString m_strValue1, m_strValue2; //用于读组码和数据 BOOL m_bOnlyReadBaseSize; //true 仅读基码 BOOL m_bPattern; //=true 读纸样;=false 结构线 int m_iAllInfor; //确定放码点和曲线转折点 ;= -1 没有确定 ;0 使用所有层设置;=1使用对应层设置 public: CReadASTMFile(void); ~CReadASTMFile(void); //读入文件 //输入参数: // strFilePath 文件路径 // bPattern =true 纸样, false 结构线, 结构线不用读rul // bOnlyReadBaseSize =true 仅读基码, 读纸样有效 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能TIIP文件 int ReadASTMFile(CString strFilePath, BOOL bPattern, BOOL bOnlyReadBaseSize); protected: //20200903 XQ 读一行文本 void ReadAString(FILE *fFile, CString &strString1); //读组码 //[输入] fFile 文件 //[输出] strString1/strString2 连续两行数据 void ReadGroupString(FILE *fFile, CString &strString1, CString &strString2); //读入文件 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能是TIIP文件 int ReadASTMFile(); //读BLOCK信息 //输出参数: // BlockInfor 读到的信息 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能TIIP文件 //说明: // 返回值为0时BlockInfor才有效 int ReadBlock(CAMBlockInfor &BlockInfor); //读POLYLINE //输出信息 // BlockInfor 块信息 // iLayer 所在的层 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能TIIP文件 //说明: // 返回值为0时BlockInfor才有效 int ReadPolylineData(CAMBlockInfor &BlockInfor, int &iLayer); //读POLYLINE数据 //输出参数: // CurveInfor 点信息 // listCurvePoint 曲线点信息 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能TIIP文件 //说明: // 返回值为0时CurveInfor才有效 int ReadPolylineData(CCurveNotchInfor &CurveInfor, CPointDataList &listCurvePoint); //读LINE //输出信息 // BlockInfor 块信息 // iLayer 所在的层 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 可能是AutoCAD文件 // = 3 可能TIIP文件 //说明: // 返回值为0时BlockInfor才有效 int ReadLineData(CAMBlockInfor &BlockInfor, int &iLayer); //读LINE int ReadLineData(CCurveNotchInfor &CurveInfor); //读TEXT void ReadTEXTData(CAMBlockInfor &BlockInfor, int iLayer); //读标识符TEXT信息 BOOL ReadTEXTData(CTextData &TextData); //纸样基本信息 //输入参数: // BlockInfor 块信息 // strInformation 纸样的信息字符串 //返回值: // =true表示为纸样基本信息 ;=false 不是为T文字 BOOL PatternInfor(CAMBlockInfor &BlockInfor, CString strInformation); //读POINT void ReadPointData(CAMBlockInfor &BlockInfor, int iLayer); //读剪口数据 //输出参数: // NotchInfor 剪口数据 //返回值: //= true输出参数可用;=false输出参数不可用 BOOL ReadNotch(CNotchInfor &NotchInfor); //读钻孔数据 //输出参数: // DrillInfor 钻孔数据 //返回值: //= true输出参数可用;=false输出参数不可用 BOOL ReadDrill(CDrillInfor &DrillInfor); //读CIRCLE void ReadCircleData(CAMBlockInfor &BlockInfor); //读ARC int ReadArcData(CAMBlockInfor &BlockInfor, int &iLayer); //读ARC BOOL ReadArcData(CCurveNotchInfor &CurveInfor); //读INSERT void ReadInsertData(CAMBlockInfor &BlockInfor); BOOL ReadInsertInfor(CInsertData &InsertData); //读Entities信息 //输出参数: // EntitiesInfor 读到的信息 //返回值: // = 0 读入成功 // = 1 文件打不开 // = 2 不是AAMA/ASTM文件 int ReadEntities(CAMEntitiesInfor &EntitiesInfor); //款式基本信息 //输入参数: // EntitiesInfor 块信息 // strInformation 纸样的信息字符串 //返回值: // =true表示为款式基本信息 ;=false 不是 BOOL StyleInfor(CAMEntitiesInfor &EntitiesInfor, CString strInformation); //读放码文件 void ReadRulFile(); //读rul文件中的放码信息 void ReadRulSize(FILE *pRulFile); //读rul文件中的放码量 void ReadRulGradeValue(FILE *pRulFile); //处理文件读入的数据 void DisposeFileData(); //处理纸样边线存在多段 void DisPosePatternBorder(); }; #endif