3dPageTexture.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dPageTexture.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #include "3dObjectDialog.h"
  22. #include "EditTextureDlg.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char BASED_CODE THIS_FILE[] = __FILE__;
  26. #endif
  27. //////////////////////////////////////////////////////////////////
  28. // C3dPageTexture
  29. IMPLEMENT_DYNCREATE(C3dPageTexture, CPropertyPage)
  30. /////////////////////////////////////////////////////////////////////////////
  31. // C3dPageTexture dialog construction
  32. C3dPageTexture::C3dPageTexture()
  33. : CPropertyPage(C3dPageTexture::IDD)
  34. {
  35. //{{AFX_DATA_INIT(C3dPageTexture)
  36. m_szTextureFileName = _T("<None>");
  37. //}}AFX_DATA_INIT
  38. }
  39. /////////////////////////////////////////////////////////////////////////////
  40. // C3dPageTexture Destructor
  41. C3dPageTexture::~C3dPageTexture()
  42. {
  43. }
  44. void C3dPageTexture::DoDataExchange(CDataExchange* pDX)
  45. {
  46. CPropertyPage::DoDataExchange(pDX);
  47. //{{AFX_DATA_MAP(C3dPageTexture)
  48. DDX_Text(pDX, IDC_IMAGE_NAME, m_szTextureFileName);
  49. //}}AFX_DATA_MAP
  50. }
  51. BEGIN_MESSAGE_MAP(C3dPageTexture, CPropertyPage)
  52. //{{AFX_MSG_MAP(C3dPageTexture)
  53. ON_BN_CLICKED(IDC_TEXTURE_OPEN, OnTextureOpen)
  54. ON_BN_CLICKED(IDC_TEXTURE_EDIT, OnTextureEdit)
  55. ON_BN_CLICKED(IDC_TEXTURE_REMOVE, OnTextureRemove)
  56. //}}AFX_MSG_MAP
  57. END_MESSAGE_MAP()
  58. /////////////////////////////////////////////////////////////////////////////
  59. // C3dPageTexture message handlers
  60. BOOL C3dPageTexture::OnInitDialog() 
  61. {
  62. // let the base class do the default work
  63. CPropertyPage::OnInitDialog();
  64. // If our Object has a background Texture map, copy its name to
  65. // the CEdit box.
  66. if(m_pObject)
  67. {
  68. if(m_pObject->m_pTexture)
  69. {
  70. if(m_pObject->m_pTexture->m_szFileName.GetLength())
  71. m_szTextureFileName = m_pObject->m_pTexture->m_szFileName;
  72. }
  73. }
  74. // Dialog box is being initialized (FALSE)
  75. // or data is being retrieved (TRUE).
  76. UpdateData(FALSE);
  77. return TRUE;  // return TRUE unless you set the focus to a control
  78.               // EXCEPTION: OCX Property Pages should return FALSE
  79. }
  80. void C3dPageTexture::OnTextureOpen() 
  81. {
  82. CFileDialog fileDlg(TRUE, NULL, NULL);
  83. fileDlg.m_ofn.lpstrFilter = "Texture Files (*.bmp)*.bmpDIB Files (*.dib)*.dibAVI Files (*.avi)*.aviAll Files (*.*)*.*";
  84. fileDlg.m_ofn.lpstrTitle = "Open Texture Map";
  85. if(!m_pObject)
  86. return;
  87. int retn = fileDlg.DoModal();
  88. if(retn == IDOK) {
  89. CString szFile = fileDlg.GetFileName();
  90. CString szPath = fileDlg.GetPathName();
  91. CString szFileExt = fileDlg.GetFileExt();
  92. if(szFileExt.Compare("bmp") == 0 ||
  93.    szFileExt.Compare("dib") == 0 ||
  94.    szFileExt.Compare("avi") == 0)
  95. {
  96. if(m_pObject->AddTexture(szPath.GetBuffer(128)))
  97. {
  98. // Force a rebuild of the objects display lists
  99. m_pObject->m_bBuildLists = TRUE;
  100. m_szTextureFileName = szPath;
  101. // Dialog box is being initialized (FALSE)
  102. // or data is being retrieved (TRUE).
  103. UpdateData(FALSE);
  104. }
  105. else
  106. AfxMessageBox("Could not create Texture map!", MB_OK, NULL);
  107. }
  108. else
  109. AfxMessageBox("Unsupported File Extension!  Select files with either 'bmp', 'dib' or 'avi' extensions.", MB_OK, NULL);
  110. }
  111. }
  112. void C3dPageTexture::OnTextureEdit() 
  113. {
  114. // Get a pointer to our objects texture
  115. if(m_pObject)
  116. {
  117. if(m_pObject->m_pTexture)
  118. {
  119. CTexture* pTexture = m_pObject->m_pTexture;
  120. ASSERT(pTexture);
  121. CEditTextureDlg textureDlg(pTexture, CWnd::GetActiveWindow());
  122. textureDlg.DoModal();
  123. // Force a repaint of the window
  124. pTexture->m_bApplyImage = TRUE;
  125. }
  126. else
  127. AfxMessageBox("There are no background textures to edit!", MB_OK, 0);
  128. }
  129. }
  130. void C3dPageTexture::OnTextureRemove() 
  131. {
  132. if(m_pObject)
  133. {
  134. // Delete the objects texture map
  135. if(m_pObject->m_pTexture)
  136. {
  137. m_pObject->DeleteTexture();
  138. m_szTextureFileName = _T("<None>");
  139. // Dialog box is being initialized (FALSE)
  140. // or data is being retrieved (TRUE).
  141. UpdateData(FALSE);
  142. }
  143. }
  144. }