home *** CD-ROM | disk | FTP | other *** search
/ VRML Tools for 3D Cyberspace / VRML_Tools_For_3D_Cyberspace.iso / amber / demos / viewer / demo.bak < prev    next >
Text File  |  1996-07-01  |  7KB  |  248 lines

  1. #define DEMO_OBJS
  2.  
  3. #include "amber.hpp"
  4. #include "demo.hpp"
  5. #include "resource.h"
  6.  
  7. #define X 0
  8. #define Y 1
  9. #define Z 2
  10.  
  11. static OPENFILENAME ofn ;
  12. static char *szFilter[] = { "VRML Files (*.WRL)",  "*.wrl",
  13.                                      "WTK Files (*.NFF)", "*.nff",
  14.                                             "" } ;
  15. static char szDataFilePath[_MAX_PATH];
  16.  
  17. //------------------------------------------------------------------------
  18. // Initialize the popup file data.
  19. //
  20. void popFileInitialize (HWND hwnd)
  21.       {
  22.  
  23.       ofn.lStructSize       = sizeof (OPENFILENAME) ;
  24.       ofn.hwndOwner         = hwnd ;
  25.       ofn.hInstance         = NULL ;
  26.       ofn.lpstrFilter       = szFilter [0] ;
  27.       ofn.lpstrCustomFilter = NULL ;
  28.       ofn.nMaxCustFilter    = 0 ;
  29.       ofn.nFilterIndex      = 0 ;
  30.       ofn.lpstrFile         = NULL ;          // Set in Open and Close functions
  31.       ofn.nMaxFile          = _MAX_PATH ;
  32.       ofn.lpstrFileTitle    = NULL ;          // Set in Open and Close functions
  33.       ofn.nMaxFileTitle     = _MAX_FNAME + _MAX_EXT ;
  34.       ofn.lpstrInitialDir   = NULL ;
  35.       ofn.lpstrTitle        = NULL ;
  36.       ofn.Flags             = 0 ; // Set in Open and Close functions
  37.       ofn.nFileOffset       = 0 ;
  38.       ofn.nFileExtension    = 0 ;
  39.       ofn.lpstrDefExt       = "wrl" ;
  40.       ofn.lCustData         = 0L ;
  41.       ofn.lpfnHook          = NULL ;
  42.       ofn.lpTemplateName    = NULL ;
  43.       }
  44.  
  45. //------------------------------------------------------------------------
  46. // These two routines pop open file dialog boxes for getting and
  47. // saving files.
  48. //
  49. BOOL PopFileDlg (HWND hwnd, 
  50.                         LPSTR lpstrFileName,
  51.                         LPSTR lpstrTitleName,
  52.                         char *defext,
  53.                         BOOL openDlgBox = TRUE)
  54. {
  55.       ofn.hwndOwner         = hwnd ;
  56.  
  57.       strcpy(lpstrFileName, "*.wrl");
  58.  
  59.       ofn.lpstrFile         = lpstrFileName ;
  60.  
  61.       ofn.lpstrFileTitle    = lpstrTitleName ;
  62.       //ofn.lpstrFilter       = "*.wrl";
  63.       ofn.nFilterIndex      = 1;
  64.       ofn.Flags             = OFN_NOCHANGEDIR;
  65.       ofn.lpstrDefExt       = defext;
  66.  
  67.       if (openDlgBox)
  68.             return GetOpenFileName (&ofn) ;
  69.       else
  70.             return GetSaveFileName (&ofn) ;
  71. };
  72.  
  73. //------------------------------------------------------------------------
  74. // getFilename routine for retrieving files from a file dialog box.
  75. //
  76. int getFilename(char *filename, char *ext,
  77.                      BOOL openDlgBox = TRUE)
  78. {
  79.      static char szFile [_MAX_PATH];
  80.      static char szTitle [_MAX_FNAME + _MAX_EXT];
  81.      int i = 0;
  82.  
  83.      if (PopFileDlg (HWND(0), szFile, szTitle,
  84.                           ext, openDlgBox)) {
  85.           strcpy(filename, szFile);
  86.           return 1;
  87.      }
  88.      else {
  89.           return 0;
  90.      }
  91. };
  92.  
  93. void init(channelClass *ch)
  94. {
  95.     CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_RENDERPOLYGONS, MF_CHECKED);
  96.     CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_RENDERSHADING, MF_CHECKED);
  97.     CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_CHANNELMOUSE, MF_CHECKED);
  98. }
  99.  
  100. void cleanup()
  101. {
  102.     delete mouse;
  103.     delete platter;
  104.     delete amber;
  105. }
  106.  
  107. extern void processChar(unsigned int nChar)
  108. {
  109.     switch (nChar) {
  110.         default:
  111.             break;
  112.     }
  113. }
  114.  
  115. void processWMCMD(HWND hwnd, WPARAM wParam)
  116. {
  117.     CHOOSECOLOR cc;
  118.     geometryClass *geo;
  119.     universeClass *univ = amber->getCurrentUniverse();
  120.     channelClass *ch = amber->getCurrentChannel();
  121.    DWORD    dwCustColors[16];
  122.     F4 color;
  123.     char filename[255];
  124.     switch(wParam){
  125.         case ID_PROGRAM_EXIT:
  126.             cleanup();
  127.             PostQuitMessage(0);
  128.             break;
  129.         case CM_CHANNELMOUSE:
  130.             if (mouse) break;
  131.             useMouse=1;
  132.             platter->removeChannel(ch);
  133.             mouse->attachChannel(ch);
  134.             CheckMenuItem(GetMenu(hwnd), CM_CHANNELMOUSE, MF_CHECKED);
  135.             CheckMenuItem(GetMenu(hwnd), CM_CHANNELPLATTER, MF_UNCHECKED);
  136.             break;
  137.         case CM_CHANNELPLATTER:
  138.             if (!mouse) break;
  139.             useMouse=0;
  140.             mouse->removeChannel(ch);
  141.             platter->attachChannel(ch);
  142.             CheckMenuItem(GetMenu(hwnd), CM_CHANNELMOUSE, MF_UNCHECKED);
  143.             CheckMenuItem(GetMenu(hwnd), CM_CHANNELPLATTER, MF_CHECKED);
  144.             break;
  145.         case CM_CHANNELBACKGROUND:
  146.             ch->getBackgroundColor(color);
  147.             cc.lStructSize = sizeof (CHOOSECOLOR);
  148.             cc.hwndOwner   = NULL;
  149.             cc.hInstance   = NULL;
  150.             cc.rgbResult   = RGB ((char)(255.0 * color[0]),
  151.                                          (char)(255.0 * color[1]),
  152.                                          (char)(255.0 * color[2]));
  153.             cc.lpCustColors = dwCustColors;
  154.             cc.Flags       = CC_RGBINIT | CC_FULLOPEN;
  155.             cc.lCustData   = 0L;
  156.             cc.lpfnHook    = NULL;
  157.             cc.lpTemplateName = NULL;
  158.  
  159.             if (ChooseColor(&cc)) {
  160.                 V4_init(color);
  161.                 color[0] = (float)GetRValue(cc.rgbResult)/255.0;
  162.                 color[1] = (float)GetGValue(cc.rgbResult)/255.0;
  163.                 color[2] = (float)GetBValue(cc.rgbResult)/255.0;
  164.                 ch->setBackgroundColor(color);
  165.             }
  166.  
  167.             break;
  168.         case CM_WIREFRAME:
  169.             if (ch->getPolyFill() == _NOFILL) {
  170.                 ch->setPolyFill(_FILL);
  171.                 CheckMenuItem(GetMenu(hwnd), CM_WIREFRAME, MF_UNCHECKED);
  172.             }
  173.             else {
  174.                 ch->setPolyFill(_NOFILL);
  175.                 CheckMenuItem(GetMenu(hwnd), CM_WIREFRAME, MF_CHECKED);
  176.             }
  177.             break;
  178.         case CM_RENDERMATERIALS:
  179.             if (ch->getState() & RENDER_MATERIAL) {
  180.                 ch->disableState(RENDER_MATERIAL);
  181.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERMATERIALS, MF_UNCHECKED);
  182.             }
  183.             else {
  184.                 ch->enableState(RENDER_MATERIAL);
  185.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERMATERIALS, MF_CHECKED);
  186.             }
  187.             break;
  188.         case CM_RENDERNORMALS:
  189.             if (ch->getState() & RENDER_NORMAL) {
  190.                 ch->disableState(RENDER_NORMAL);
  191.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERNORMALS, MF_UNCHECKED);
  192.             }
  193.             else {
  194.                 ch->enableState(RENDER_NORMAL);
  195.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERNORMALS, MF_CHECKED);
  196.             }
  197.             break;
  198.         case CM_RENDERBOUNDING_BOX:
  199.             if (ch->getState() & RENDER_BOUNDINGBOX) {
  200.                 ch->disableState(RENDER_BOUNDINGBOX);
  201.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERBOUNDING_BOX, MF_UNCHECKED);
  202.             }
  203.             else {
  204.                 ch->enableState(RENDER_BOUNDINGBOX);
  205.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERBOUNDING_BOX, MF_CHECKED);
  206.             }
  207.             break;
  208.         case CM_RENDERSHADING:
  209.             if (ch->getPolyShading() == _SHADED) {
  210.                 ch->setPolyShading(_FLAT);
  211.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERSHADING, MF_UNCHECKED);
  212.             }
  213.             else {
  214.                 ch->setPolyShading(_SHADED);
  215.                 CheckMenuItem(GetMenu(hwnd), CM_RENDERSHADING, MF_CHECKED);
  216.             }
  217.             break;
  218.         case CM_RENDERPOLYGONS:
  219.             ch->setPolyRenderAs(_POLYS);
  220.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_CHECKED);
  221.             CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_UNCHECKED);
  222.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_UNCHECKED);
  223.             break;
  224.         case CM_RENDERTRIANGLES:
  225.             ch->setPolyRenderAs(_TRIS);
  226.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_UNCHECKED);
  227.             CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_CHECKED);
  228.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_UNCHECKED);
  229.             break;
  230.         case CM_RENDERPOINTS:
  231.             ch->setPolyRenderAs(_POINTS);
  232.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_UNCHECKED);
  233.             CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_UNCHECKED);
  234.             CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_CHECKED);
  235.             break;
  236.         case CM_PROGRAMOPEN:
  237.             if (getFilename(filename, "*.wrl", TRUE)) {
  238.                 univ->removeAllGeo();
  239.                 amber->deleteAllGeos();
  240.                 amber->deleteAllTextures();
  241.                 amber->deleteAllMaterials();
  242.                 geo = new geometryClass(filename);
  243.             }
  244.             break;
  245.     }
  246. }
  247.  
  248.