// ---------------------------------------------------------------------------- // TransparentXVL (ALEX SDK sample) // Aron Gombas // (C) 3NF Corp. // ---------------------------------------------------------------------------- #include #include "ALEX.hpp" // ---------------------------------------------------------------------------- // // ---------------------------------------------------------------------------- const char *applicationName = "TransparentXVL"; // ---------------------------------------------------------------------------- // // ---------------------------------------------------------------------------- /** * This sample program: * - deletes all original materials * - adds one transparent blue material * - applies this material to the whole model */ int main (int argc, char *argv[]) { printf ("%s\n", applicationName); printf ("(%s %s)\n", __DATE__, __TIME__); printf ("Copyright (C) 2003 3NF Corporation. All rights reserved.\n"); printf ("support@3nf.com\n"); printf ("http://www.3nf.com\n\n"); printf ("Abstract Library for XVL, Version %s\n", ALEXVersion); printf ("Copyright (C) 2001-2002 3NF Corporation. All rights reserved.\n\n"); if (argc < 3) { printf ("Usage: %s inputfile outputfile\n", argv[0]); return 1; } // init XMLPlatformUtils::Initialize (); // load XVL printf ("Opening \"%s\"...\n", argv[1]); DOMDocument *doc = XVLFileIO::ReadXVL (argv[1]); // delete all materials DOMNodeList *materialNodes = XVLMaterialManager::GetMaterialNodes (doc); std::vector materialNames; for (long i = 0; i < materialNodes->getLength (); i++) { XVLMaterial m ((DOMElement *)materialNodes->item (i)); materialNames.push_back (m.GetID ()); } for (std::vector::iterator it = materialNames.begin (); it != materialNames.end (); it++) { StrX name (*it); printf ("Deleting material \"%s\"...\n", name.localForm ()); XVLMaterialManager::DeleteMaterial (doc, *it); } // add new material XMLCh materialName[] = L"Glass"; printf ("Adding new material...\n"); XVLMaterial m = XVLMaterialManager::AddMaterial (doc, materialName); m.SetDiffuseColor (0x00FF6666); m.SetSpecularColor (0x00FFAA88); m.SetShininess (0.5); m.SetTransparency (0.4); // apply new material to the whole model printf ("Applying new material...\n"); DOMTreeWalker *walker = XVLHierarchyManager::GetHierarchy (doc); walker->firstChild (); XVLGroupable *root = XVLGroupable::GetInstance ((DOMElement *)walker->getCurrentNode ()); root->SetMaterial (materialName); // save XVL printf ("Saving \"%s\"...\n", argv[2]); XVLFileIO::WriteXVL (argv[2], doc, 0); // close XMLPlatformUtils::Terminate (); return 0; }