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 >
Wrap
Text File
|
1996-07-01
|
7KB
|
248 lines
#define DEMO_OBJS
#include "amber.hpp"
#include "demo.hpp"
#include "resource.h"
#define X 0
#define Y 1
#define Z 2
static OPENFILENAME ofn ;
static char *szFilter[] = { "VRML Files (*.WRL)", "*.wrl",
"WTK Files (*.NFF)", "*.nff",
"" } ;
static char szDataFilePath[_MAX_PATH];
//------------------------------------------------------------------------
// Initialize the popup file data.
//
void popFileInitialize (HWND hwnd)
{
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = szFilter [0] ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.lpstrFile = NULL ; // Set in Open and Close functions
ofn.nMaxFile = _MAX_PATH ;
ofn.lpstrFileTitle = NULL ; // Set in Open and Close functions
ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ; // Set in Open and Close functions
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = "wrl" ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
}
//------------------------------------------------------------------------
// These two routines pop open file dialog boxes for getting and
// saving files.
//
BOOL PopFileDlg (HWND hwnd,
LPSTR lpstrFileName,
LPSTR lpstrTitleName,
char *defext,
BOOL openDlgBox = TRUE)
{
ofn.hwndOwner = hwnd ;
strcpy(lpstrFileName, "*.wrl");
ofn.lpstrFile = lpstrFileName ;
ofn.lpstrFileTitle = lpstrTitleName ;
//ofn.lpstrFilter = "*.wrl";
ofn.nFilterIndex = 1;
ofn.Flags = OFN_NOCHANGEDIR;
ofn.lpstrDefExt = defext;
if (openDlgBox)
return GetOpenFileName (&ofn) ;
else
return GetSaveFileName (&ofn) ;
};
//------------------------------------------------------------------------
// getFilename routine for retrieving files from a file dialog box.
//
int getFilename(char *filename, char *ext,
BOOL openDlgBox = TRUE)
{
static char szFile [_MAX_PATH];
static char szTitle [_MAX_FNAME + _MAX_EXT];
int i = 0;
if (PopFileDlg (HWND(0), szFile, szTitle,
ext, openDlgBox)) {
strcpy(filename, szFile);
return 1;
}
else {
return 0;
}
};
void init(channelClass *ch)
{
CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_RENDERPOLYGONS, MF_CHECKED);
CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_RENDERSHADING, MF_CHECKED);
CheckMenuItem(GetMenu((HWND)ch->getRenderWindow()), CM_CHANNELMOUSE, MF_CHECKED);
}
void cleanup()
{
delete mouse;
delete platter;
delete amber;
}
extern void processChar(unsigned int nChar)
{
switch (nChar) {
default:
break;
}
}
void processWMCMD(HWND hwnd, WPARAM wParam)
{
CHOOSECOLOR cc;
geometryClass *geo;
universeClass *univ = amber->getCurrentUniverse();
channelClass *ch = amber->getCurrentChannel();
DWORD dwCustColors[16];
F4 color;
char filename[255];
switch(wParam){
case ID_PROGRAM_EXIT:
cleanup();
PostQuitMessage(0);
break;
case CM_CHANNELMOUSE:
if (mouse) break;
useMouse=1;
platter->removeChannel(ch);
mouse->attachChannel(ch);
CheckMenuItem(GetMenu(hwnd), CM_CHANNELMOUSE, MF_CHECKED);
CheckMenuItem(GetMenu(hwnd), CM_CHANNELPLATTER, MF_UNCHECKED);
break;
case CM_CHANNELPLATTER:
if (!mouse) break;
useMouse=0;
mouse->removeChannel(ch);
platter->attachChannel(ch);
CheckMenuItem(GetMenu(hwnd), CM_CHANNELMOUSE, MF_UNCHECKED);
CheckMenuItem(GetMenu(hwnd), CM_CHANNELPLATTER, MF_CHECKED);
break;
case CM_CHANNELBACKGROUND:
ch->getBackgroundColor(color);
cc.lStructSize = sizeof (CHOOSECOLOR);
cc.hwndOwner = NULL;
cc.hInstance = NULL;
cc.rgbResult = RGB ((char)(255.0 * color[0]),
(char)(255.0 * color[1]),
(char)(255.0 * color[2]));
cc.lpCustColors = dwCustColors;
cc.Flags = CC_RGBINIT | CC_FULLOPEN;
cc.lCustData = 0L;
cc.lpfnHook = NULL;
cc.lpTemplateName = NULL;
if (ChooseColor(&cc)) {
V4_init(color);
color[0] = (float)GetRValue(cc.rgbResult)/255.0;
color[1] = (float)GetGValue(cc.rgbResult)/255.0;
color[2] = (float)GetBValue(cc.rgbResult)/255.0;
ch->setBackgroundColor(color);
}
break;
case CM_WIREFRAME:
if (ch->getPolyFill() == _NOFILL) {
ch->setPolyFill(_FILL);
CheckMenuItem(GetMenu(hwnd), CM_WIREFRAME, MF_UNCHECKED);
}
else {
ch->setPolyFill(_NOFILL);
CheckMenuItem(GetMenu(hwnd), CM_WIREFRAME, MF_CHECKED);
}
break;
case CM_RENDERMATERIALS:
if (ch->getState() & RENDER_MATERIAL) {
ch->disableState(RENDER_MATERIAL);
CheckMenuItem(GetMenu(hwnd), CM_RENDERMATERIALS, MF_UNCHECKED);
}
else {
ch->enableState(RENDER_MATERIAL);
CheckMenuItem(GetMenu(hwnd), CM_RENDERMATERIALS, MF_CHECKED);
}
break;
case CM_RENDERNORMALS:
if (ch->getState() & RENDER_NORMAL) {
ch->disableState(RENDER_NORMAL);
CheckMenuItem(GetMenu(hwnd), CM_RENDERNORMALS, MF_UNCHECKED);
}
else {
ch->enableState(RENDER_NORMAL);
CheckMenuItem(GetMenu(hwnd), CM_RENDERNORMALS, MF_CHECKED);
}
break;
case CM_RENDERBOUNDING_BOX:
if (ch->getState() & RENDER_BOUNDINGBOX) {
ch->disableState(RENDER_BOUNDINGBOX);
CheckMenuItem(GetMenu(hwnd), CM_RENDERBOUNDING_BOX, MF_UNCHECKED);
}
else {
ch->enableState(RENDER_BOUNDINGBOX);
CheckMenuItem(GetMenu(hwnd), CM_RENDERBOUNDING_BOX, MF_CHECKED);
}
break;
case CM_RENDERSHADING:
if (ch->getPolyShading() == _SHADED) {
ch->setPolyShading(_FLAT);
CheckMenuItem(GetMenu(hwnd), CM_RENDERSHADING, MF_UNCHECKED);
}
else {
ch->setPolyShading(_SHADED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERSHADING, MF_CHECKED);
}
break;
case CM_RENDERPOLYGONS:
ch->setPolyRenderAs(_POLYS);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_CHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_UNCHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_UNCHECKED);
break;
case CM_RENDERTRIANGLES:
ch->setPolyRenderAs(_TRIS);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_UNCHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_CHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_UNCHECKED);
break;
case CM_RENDERPOINTS:
ch->setPolyRenderAs(_POINTS);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOLYGONS, MF_UNCHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERTRIANGLES, MF_UNCHECKED);
CheckMenuItem(GetMenu(hwnd), CM_RENDERPOINTS, MF_CHECKED);
break;
case CM_PROGRAMOPEN:
if (getFilename(filename, "*.wrl", TRUE)) {
univ->removeAllGeo();
amber->deleteAllGeos();
amber->deleteAllTextures();
amber->deleteAllMaterials();
geo = new geometryClass(filename);
}
break;
}
}