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

449 lines
12 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 (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 METRICmm= 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 METRICmm= 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