s045508Doc.cpp
上传用户:bjzhifu888
上传日期:2013-01-22
资源大小:136k
文件大小:4k
源码类别:

STL

开发平台:

Visual C++

  1. // s045508Doc.cpp : implementation of the CS045508Doc class
  2. //
  3. #include "stdafx.h"
  4. #include "s045508.h"
  5. #include "s045508Doc.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CS045508Doc
  13. IMPLEMENT_DYNCREATE(CS045508Doc, CDocument)
  14. BEGIN_MESSAGE_MAP(CS045508Doc, CDocument)
  15. //{{AFX_MSG_MAP(CS045508Doc)
  16. // NOTE - the ClassWizard will add and remove mapping macros here.
  17. //    DO NOT EDIT what you see in these blocks of generated code!
  18. //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CS045508Doc construction/destruction
  22. CS045508Doc::CS045508Doc()
  23. {
  24. // TODO: add one-time construction code here
  25. }
  26. CS045508Doc::~CS045508Doc()
  27. {
  28. }
  29. BOOL CS045508Doc::OnNewDocument()
  30. {
  31. if (!CDocument::OnNewDocument())
  32. return FALSE;
  33. // TODO: add reinitialization code here
  34. // (SDI documents will reuse this document)
  35. return TRUE;
  36. }
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CS045508Doc serialization
  39. void CS045508Doc::Serialize(CArchive& ar)
  40. {
  41. if (ar.IsStoring())
  42. {
  43. // TODO: add storing code here
  44. }
  45. else
  46. {
  47. // TODO: add loading code here
  48. }
  49. }
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CS045508Doc diagnostics
  52. #ifdef _DEBUG
  53. void CS045508Doc::AssertValid() const
  54. {
  55. CDocument::AssertValid();
  56. }
  57. void CS045508Doc::Dump(CDumpContext& dc) const
  58. {
  59. CDocument::Dump(dc);
  60. }
  61. #endif //_DEBUG
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CS045508Doc commands
  64. BOOL CS045508Doc::OnOpenDocument(LPCTSTR lpszPathName) 
  65. {
  66. if (!CDocument::OnOpenDocument(lpszPathName))
  67. return FALSE;
  68. // TODO: Add your specialized creation code here
  69. CVector temp;
  70. CString cstr, cstrtemp,checkstr;
  71. CStdioFile inFile;
  72. VertexArray.RemoveAll();   //empty array
  73. NormalArray.RemoveAll();
  74. inFile.Open(lpszPathName, CFile::modeRead);  //open file
  75. inFile.ReadString(cstr); //read "solid ***"
  76.     
  77. inFile.ReadString(cstr);   //read the first normal vector line
  78. ncon=0;    // normal vector counter
  79. pcon=0;    // vetex vector counter
  80. checkstr=cstr[3];          // ensure the normal vector line exists 
  81. while (checkstr==cstr[3])  // if exist, the third charecter must be "f" of "  facet"
  82. {
  83. cstr.TrimLeft("  facet normal ");  //in order to get the first vector number
  84. for (int i = 0; cstr[i] != ' '; i++) //the first number is end before a " "
  85. cstrtemp = cstrtemp + cstr[i];  //store all the numbers needed
  86. temp.x = (float)atof(cstrtemp);  //translate string into float 
  87. cstrtemp.Empty();
  88. for (i++; cstr[i] != ' '; i++)  //the second number is also end before a " "
  89. cstrtemp = cstrtemp + cstr[i];
  90. temp.y = (float)atof(cstrtemp);
  91. cstrtemp.Empty();
  92. for (i++; i < cstr.GetLength(); i++)  //the third number is end when the line ends
  93.  cstrtemp = cstrtemp + cstr[i];
  94. temp.z = (float)atof(cstrtemp);
  95. cstrtemp.Empty(); 
  96. NormalArray.Add(temp);   //add the vector to the array
  97. ncon++;                  //counter of normal vector +1
  98. inFile.ReadString(cstr); //read "outer loop"
  99. for (i = 0; i < 3; i++)    //there are three vectors in a vertex
  100. {
  101.       
  102.       inFile.ReadString(cstr);  //read the vertex line
  103.       cstr.TrimLeft("      vertex ");   //the following is similar to the method getting normal vector
  104.       for (int j = 0; cstr[j] != ' '; j++)
  105.             cstrtemp = cstrtemp + cstr[j];
  106.       temp.x = (float)atof(cstrtemp);
  107.       cstrtemp.Empty();
  108.       for (j++; cstr[j] != ' '; j++)
  109.             cstrtemp = cstrtemp + cstr[j];
  110.       temp.y = (float)atof(cstrtemp);
  111.       cstrtemp.Empty();
  112.       for (j++; j < cstr.GetLength(); j++)
  113.             cstrtemp = cstrtemp + cstr[j];
  114.       temp.z = (float)atof(cstrtemp);
  115.       cstrtemp.Empty();
  116.       VertexArray.Add(temp);    //store the vector in the array
  117.       pcon++;                   //counter of vertex +1 
  118.                            //note that pcon+3 when  ncon+1
  119. inFile.ReadString(cstr);  //read "end loop"
  120. inFile.ReadString(cstr);  //read "end facet"
  121. inFile.ReadString(cstr);  //read the next normal vector
  122. }
  123. inFile.Close();
  124. return TRUE;
  125. }