449 lines
12 KiB
C++
449 lines
12 KiB
C++
#if !defined (READASTM_H)
|
||
#define READASTM_H
|
||
#pragma once
|
||
|
||
#include "PDSMath/StdAfx.h"
|
||
#include <iostream>
|
||
//#include <afxtempl.h>
|
||
#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:<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>
|
||
|
||
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<CAMBlockInfor,CAMBlockInfor&>
|
||
{
|
||
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<CString, CString> 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:<string>
|
||
CString m_strSampleSize; //基码Sample Size:<string>
|
||
int m_iUnit; //= CONST_MM METRIC:mm;= CONST_INCH ENGLISH : 英寸; 默认mm
|
||
CString m_strGradeRulTable; //放码文件rul Grade Rule Table:<string>
|
||
CString m_strAuthor; //作者Author:<Vendor name>;<application>;<release #》
|
||
CString m_strVersion; //输出的软件版本号
|
||
CInsertDataList m_listInsertData;
|
||
|
||
public:
|
||
CAMEntitiesInfor(void);
|
||
CAMEntitiesInfor(CAMEntitiesInfor& a);
|
||
~CAMEntitiesInfor(void);
|
||
void operator=(CAMEntitiesInfor& a);
|
||
void Initial(void);
|
||
};
|
||
|
||
class CASTMFileInfor : public CObject
|
||
{
|
||
public:
|
||
|
||
// 注意:
|
||
//m_listBlockInfor和 m_listSameSizeBlockInfor中的数据是一样的只能选其一使用
|
||
|
||
//初始值为dxf文件中读到信息
|
||
CString m_strSampleSize; //基码, 在处理读入数据时基码以该变量为准
|
||
CList<CString, CString> 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
|