source: trunk/VUT/work/IVReader/include/ivreader.h @ 187

Revision 187, 2.8 KB checked in by mattausch, 19 years ago (diff)

added animationbug fix (deleting while animation)fixed visibilityQueriesadditive shadow volumes fixed for octree
hack to fully empty queue after traversal
added demo for vienna model

Line 
1#ifndef __mIVReader_H__
2#define __mIVReader_H__
3
4
5#include "ivnode.h"
6#include "ivmeshdata.h"
7#include "ivmanualmeshloader.h"
8#include "ogre.h"
9
10#define COMMENTCHAR '#'
11#define BLOCKSIZE 150
12#define BUFFERSIZE 256
13
14
15static const int validIVHeaderCnt = 2;
16
17static const char *validIVHeader[2] = {
18    { "#Inventor V2.1 ascii\n" },
19        { "#VRML V1.0 ascii\n" },
20};
21
22
23enum IVTokenType
24{
25        IV_TOKEN_INVALID = -1,
26        IV_TOKEN_STRING = 0,
27        IV_TOKEN_INT = 1,
28        IV_TOKEN_REAL = 2,
29        IV_TOKEN_BRACEOPEN = 3,                         // {
30        IV_TOKEN_BRACECLOSE = 4,                        // }
31        IV_TOKEN_BRACKETOPEN = 5,                       // [
32        IV_TOKEN_BRACKETCLOSE = 6,                      // ]
33        IV_TOKEN_PARENTHESISOPEN = 7,           // (
34        IV_TOKEN_PARENTHESISCLOSE = 8,          // )
35        IV_TOKEN_DEF = 9,                                       // DEF
36        IV_TOKEN_USE = 10,                                      // USE
37};
38
39class __declspec(dllexport) IVMeshListNode
40{
41        public:
42                IVMeshListNode(std::string name, IVManualMeshLoader *loader);
43                ~IVMeshListNode();
44
45                void attachNewNode(std::string name, IVManualMeshLoader *loader);
46
47                IVManualMeshLoader *getManualMeshLoader(std::string name);
48
49                IVMeshListNode *next;
50
51        private:
52                std::string name;
53                IVManualMeshLoader *loader;
54};
55
56class __declspec(dllexport) IVDefListNode
57{
58        public:
59                IVDefListNode(std::string name, IVNode *node);
60                ~IVDefListNode();
61
62                void attachNewNode(std::string name, IVNode *node);
63
64                IVNode *getDef(std::string name);
65
66                IVDefListNode *next;
67
68        private:
69                std::string name;
70                IVNode *node;
71
72};
73
74class __declspec(dllexport) IVReader
75{
76        public:
77                IVReader();
78                ~IVReader();
79
80                void setLog(Ogre::Log *IVLog = NULL);
81
82                bool loadFile(const char* filename);
83                void print();
84//              IVNode *getNode(const char* name);
85
86
87                void buildTree(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *sceneNodeRoot);
88
89                void collapse();
90
91                static std::string intToStr(int num);
92                static std::string realToStr(Ogre::Real num);
93               
94                static Ogre::Log *IVLog;
95
96        private:
97                bool checkHeader(const char *string);
98                char buf[BUFFERSIZE];
99                int bufOffset;
100                bool getNextElement(char *token, IVTokenType *type);
101                void classify(char *token, IVTokenType *type);
102
103                bool isSpace(char c);
104                bool isNewline(char c);
105                bool eof;
106                bool isDigit(char c);
107                bool isHexDigit(char c);
108
109                IVNode *root;
110                FILE* infile;
111
112                static IVMeshListNode *meshList;
113                static void addMeshToList(std::string name, IVManualMeshLoader *loader);
114               
115                static int instanceCnt;
116
117                int treeCnt, nodeCnt, matCnt;
118                char *fileName;
119
120                Ogre::Entity *createEntity(Ogre::SceneManager* sceneMgr, std::string name, IVMeshData *mData, Ogre::Vector3 *translation = NULL);
121
122                void buildTree(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *sceneNodeRoot, IVNode *mIVReaderoot, IVMeshData *mData = NULL, Ogre::Material *material = NULL);
123
124                IVDefListNode *defList;
125                void addDefToList(std::string name, IVNode *node);
126
127};
128
129
130#endif
Note: See TracBrowser for help on using the repository browser.