DwgReader.h
上传用户:hell82222
上传日期:2013-12-19
资源大小:1872k
文件大小:8k
源码类别:

CAD

开发平台:

Visual C++

  1. #if !defined(AFX_DWGREADER_H__FCBEDD8A_A5E2_4614_A97E_65CF2974943D__INCLUDED_)
  2. #define AFX_DWGREADER_H__FCBEDD8A_A5E2_4614_A97E_65CF2974943D__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. #include "Reader.h"
  7. #include "KmMatch.h"
  8. #include "ProgressInfo.h"
  9. #include "KmgConverter.h"
  10. #include "CommandInfo.h"
  11. #include "Vector.h"
  12. #include "KmObject.h"
  13. #include "KmDim.h"
  14. #define DATAVESSEL_BLOCKDEF (1)
  15. #define DATAVESSEL_DATABASE (2)
  16. #define DATAVESSEL_MODELSPACE (3)
  17. #define DATAVESSEL_TEMPVESSEL (4)
  18. typedef enum
  19. {
  20. AD_WORD,
  21. AD_BLANKSPACE,
  22. AD_END_OF_PARAGRAPH
  23. } AD_MTEXT_WORD_TYPE;
  24. typedef struct
  25. {
  26. char   text[500];
  27. double width;
  28. int    type;
  29. double height;
  30. } AD_MTEXT_WORD, *PAD_MTEXT_WORD;
  31. class CDwgReader : public CReader  
  32. {
  33. public:
  34. CDwgReader(CProgressInfo* pProgress,CCommandInfo* pCommand,CKmgConverter* pConverter);
  35. virtual ~CDwgReader();
  36. static void fn_loadometer(short spercent);
  37. private:
  38. CProgressInfo* m_pProgress;
  39. CCommandInfo* m_pCommand;
  40. CKmgConverter* m_pConverter;
  41. PAD_DWGHDR adhd; //adhd -- header structure
  42. PAD_ENT_HDR adenhd; //adenhd -- entity header structure
  43. PAD_ENT aden; //aden -- entity body structure
  44. PAD_OBJ_HDR adobhd;
  45. PAD_OBJ adob;
  46. PAD_TB adtb; //adtb -- union containing the various table structures
  47. PAD_XD adxd; //adxd -- extended data structure
  48. CArray<ADPLOTSTYLETABLE*,ADPLOTSTYLETABLE*>m_aPlotStyleTable;
  49. int m_iCurPlotStyleTable;
  50. int m_iModelPlotStyleTable;
  51. short sReturnValue;
  52. #ifdef _BAOJI_//宝鸡
  53. double m_dTotalTxtHeight;
  54. DWORD  m_dwTextcount;
  55. #endif
  56. private://实体属性
  57. // CArray<int,int> m_alwidth;//线宽
  58. CArray<int,int> m_aColor;//颜色
  59. CMatchList1 m_altype;//线形
  60. CMatchList2 m_alayer;//层
  61. CMatchList2 m_ablock;//块定义
  62. CMatchList2 m_adimstyle;//尺寸样式
  63. CMatchList3 m_apaper;//纸区空间
  64. CMatchList4 m_amltype;//平行线样式
  65. CMatchList5 m_ashape;//形
  66. CMatchList6 m_aplot;//打印样式
  67. private://系统变量
  68. int m_icolorbyback;//颜色随底色的颜色值
  69. int m_ilinewidthdefault;//默认线宽
  70. double m_dpointtocircleradius;//点转换为圆的半径
  71. double m_dconstrulinelength;//结构线的长度
  72. int m_ddimconvmode;//尺寸转换为块
  73. // int m_dmtextconvmode;//多行文字转换方式
  74. int m_dproxyconvmode;//代理实体转换方式
  75. int m_dsplineconvmode;//样条转换方式
  76. int m_dviewcutconvmode;//视口裁减方式
  77. double m_dlinespacemodify;//行距校正系数
  78. // double m_dtextposmodify;//字的位置校正系数
  79. // double m_dtoltexthight;//默认字高-主要用于形位公差
  80. double m_dtoltextwidthf;//默认字宽比字高
  81. double m_dtoltextspacef;//默认字间距比字高
  82. int m_dplotstyleconvmode;//打印样式转换模式
  83. int m_ddimstyleconvmode;
  84. CString m_strDimStyleFullName;
  85. AD_OBJHANDLE m_hFirstDimStyle;
  86. public:
  87. void RGBtoHSV(double r,double g,double b,double *h,double *s,double *v);
  88. void UsePlotStyle(int acicolor,int& ilwidth,int& icolor,int& iltype,double& dlscale,AD_OBJHANDLE plotstyleobjhandle,unsigned char flag=0);
  89. BOOL BeginConvert(); //转换开始的初始化.
  90. BOOL Parse(); //分析文件的主函数.
  91. BOOL Parse(AD_DB_HANDLE dwghandle); //分析文件的主函数.
  92. BOOL EndConvert(); //结束转换.
  93. BOOL allocateadptrs(void); //为DWG读取包申请内存空间.
  94. void freeadptrs(void); //为DWG读取包释放内存空间.
  95. private:
  96. BOOL processfile(AD_DB_HANDLE dwghandle,BOOL bPaper=TRUE);//入口
  97. BOOL processheader(AD_DB_HANDLE dwghandle);
  98. BOOL processsysvar(AD_DB_HANDLE dwghandle);
  99. BOOL processcolor(AD_DB_HANDLE dwghandle);
  100. BOOL processlinetype(AD_DB_HANDLE dwghandle);
  101. BOOL processlinewidth(AD_DB_HANDLE dwghandle);
  102. BOOL processplotstyle(AD_DB_HANDLE dwghandle);
  103. BOOL processlayer(AD_DB_HANDLE dwghandle);
  104. BOOL processlinescale(AD_DB_HANDLE dwghandle);
  105. BOOL processblockdefine(AD_DB_HANDLE dwghandle);
  106. BOOL processblockdefineobjs(AD_DB_HANDLE dwghandle,BOOL bref=FALSE);
  107. BOOL processobject(AD_DB_HANDLE dwghandle);
  108. BOOL processentity(AD_DB_HANDLE dwghandle);//直接使用PAD_ENT_HDR adenhd;和PAD_ENT aden;
  109. BOOL processmodalentity(AD_DB_HANDLE dwghandle,CStringArray *pstrSpaceNames,CStringArray *pstrSpaceFiles);
  110. BOOL processpaperentity(AD_DB_HANDLE dwghandle,CStringArray *pstrSpaceNames,CStringArray *pstrSpaceFiles);
  111. BOOL processshapefile(AD_DB_HANDLE dwghandle);
  112. BOOL processcodepage(AD_DB_HANDLE dwghandle);
  113. BOOL processdimstyle(AD_DB_HANDLE dwghandle);
  114. BOOL processnouseblock(AD_DB_HANDLE dwghandle);
  115. private:
  116. BOOL processobject_mlinestyle(AD_DB_HANDLE dwghandle);
  117. BOOL processobject_layout(AD_DB_HANDLE dwghandle);
  118. private:
  119. BOOL processentity_enthead(AD_DB_HANDLE dwghandle);
  120. BOOL processentity_shape(AD_DB_HANDLE dwghandle);
  121. BOOL processentity_line(AD_DB_HANDLE dwghandle);
  122. BOOL processentity_3dline(AD_DB_HANDLE dwghandle);
  123. BOOL processentity_point(AD_DB_HANDLE dwghandle);
  124. BOOL processentity_circle(AD_DB_HANDLE dwghandle);
  125. BOOL processentity_ellipse(AD_DB_HANDLE dwghandle);
  126. BOOL processentity_arc(AD_DB_HANDLE dwghandle);
  127. BOOL processentity_xline(AD_DB_HANDLE dwghandle);
  128. BOOL processentity_3dface(AD_DB_HANDLE dwghandle);
  129. BOOL processentity_ray(AD_DB_HANDLE dwghandle);
  130. BOOL processentity_spline(AD_DB_HANDLE dwghandle);
  131. BOOL processentity_insert(AD_DB_HANDLE dwghandle);
  132. BOOL processentity_block(AD_DB_HANDLE dwghandle);
  133. BOOL processentity_mline(AD_DB_HANDLE dwghandle);
  134. BOOL processentity_solid(AD_DB_HANDLE dwghandle);
  135. BOOL processentity_acis(AD_DB_HANDLE dwghandle);
  136. BOOL processentity_trace(AD_DB_HANDLE dwghandle);
  137. BOOL processentity_viewport(AD_DB_HANDLE dwghandle);
  138. BOOL processentity_text(AD_DB_HANDLE dwghandle);
  139. BOOL processentity_attdef(AD_DB_HANDLE dwghandle);
  140. BOOL processentity_attrib(AD_DB_HANDLE dwghandle);
  141. BOOL processentity_dim(AD_DB_HANDLE dwghandle);
  142. BOOL processentity_mtext(AD_DB_HANDLE dwghandle);
  143. BOOL processentity_atext(AD_DB_HANDLE dwghandle);
  144. BOOL processentity_rtext(AD_DB_HANDLE dwghandle);
  145. BOOL processentity_polyline(AD_DB_HANDLE dwghandle,AD_VMADDR list);
  146. BOOL processentity_lwpline(AD_DB_HANDLE dwghandle);//polyline2
  147. BOOL processentity_leader(AD_DB_HANDLE dwghandle);
  148. BOOL processentity_tolerance(AD_DB_HANDLE dwghandle);
  149. void processentity_tol_blob(int code,short datatype,double &tolhight);
  150. BOOL processentity_hatch(AD_DB_HANDLE dwghandle);
  151. BOOL processentity_dim_head(AD_DB_HANDLE dwghandle,KmObject* obj);
  152. BOOL processentity_dim_tail(AD_DB_HANDLE dwghandle,KmObject* obj);
  153. void processentity_dim_blob(AD_DB_HANDLE dwghandle,KmDimStlAcsMgr* &pDimStlAccMgr,int code,short datatype);
  154. BOOL processentity_dim_rotated(AD_DB_HANDLE dwghandle);
  155. BOOL processentity_dim_aligned(AD_DB_HANDLE dwghandle);
  156. BOOL processentity_dim_angular(AD_DB_HANDLE dwghandle);
  157. BOOL processentity_dim_diameter(AD_DB_HANDLE dwghandle);
  158. BOOL processentity_dim_radius(AD_DB_HANDLE dwghandle);
  159. BOOL processentity_dim_angular3pt(AD_DB_HANDLE dwghandle);
  160. BOOL processentity_dim_ordinate(AD_DB_HANDLE dwghandle);
  161. BOOL processentity_dim_blockref(AD_DB_HANDLE dwghandle);
  162. private:
  163. BOOL preprocess_Convertxref(AD_DB_HANDLE dwghandle);
  164. BOOL preprocess_Convertmtext(AD_DB_HANDLE dbh,int mode);
  165. short preprocess_ExtractMTextString(PAD_MTEXT mtext, unsigned char **cptr);
  166. void preprocess_AddWord(AD_DB_HANDLE dbh,PAD_MTEXT_WORD pWord,PAD_TDATA pTData,PAD_SHPTB pShp,PAD_BLOB_CTRL bcptr,int type,double height);
  167. int preprocess_BuildWordList(AD_DB_HANDLE dbh, PAD_ENT pEnt, AD_VMADDR blob);
  168. void preprocess_BreakParagraph(AD_DB_HANDLE dbh,PAD_ENT pEnt,AD_VMADDR blob,int wordCount,AD_VMADDR entList,PAD_ENT_HDR pHdr);
  169. BOOL preprocess_Convertproxy(AD_DB_HANDLE handle,int mode);
  170. void calculate_3dbulgelines(CArray<CVector*,CVector*>&avectors);
  171. BOOL calculate_BackView();
  172. void calculate_rotatealix(double &x,double &y,double a);
  173. BOOL CallSpaceConvDlg(HWND hWnd,CStringArray &m_strSpaceNames,CStringArray &m_strSpaceFiles,int &iCur);
  174. };
  175. #endif // !defined(AFX_DWGREADER_H__FCBEDD8A_A5E2_4614_A97E_65CF2974943D__INCLUDED_)