Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/physics/src/ogreode/OgreOdeTriangleMeshDataManager.cpp @ 1919

Last change on this file since 1919 was 1919, checked in by rgrieder, 16 years ago

Added OgreODE to our source repository because already we really need the newest version. And there is no hope to find any packages under linux.
The files included should compile and link with Ogre 1.4/1.6 and ODE 0.9/0.10. I was only able to test Ogre 1.4 and ODE 0.9/.10 under msvc until now.

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1#include "OgreOdePrecompiledHeaders.h"
2
3#include "OgreOdeTriangleMeshDataManager.h"
4
5using namespace Ogre;
6using namespace OgreOde;
7
8namespace Ogre
9{
10        template<> TriangleMeshDataManager *Ogre::Singleton<TriangleMeshDataManager>::ms_Singleton = 0;
11}
12
13namespace OgreOde
14{
15
16       
17        //-----------------------------------------------------------------------
18        TriangleMeshDataManager::TriangleMeshDataManager()
19        {
20        }
21
22        //-----------------------------------------------------------------------
23        TriangleMeshDataManager::~TriangleMeshDataManager()
24        {
25                //mTriangleMeshDataMap.clear();
26        }
27       
28        //-----------------------------------------------------------------------
29        TriangleMeshDataManager *TriangleMeshDataManager::getSingletonPtr () 
30        {
31                return ms_Singleton;
32        }
33
34        //-----------------------------------------------------------------------
35        TriangleMeshDataManager &TriangleMeshDataManager::getSingleton ()
36        { 
37                assert (ms_Singleton); 
38                return (*ms_Singleton);
39        }
40
41
42        //-----------------------------------------------------------------------
43        void TriangleMeshDataManager::addTriangleMeshData(const String& name, TriangleMeshDataPtr shape, Vector3 scale)
44        {
45
46                mTriangleMeshDataMap[name][scale] = shape;
47               
48                // reduce count so when Ode::Geometry changes its dataPtr or is deleted we arn't
49                // left with this one on a referance count of 1
50                unsigned int* count = shape.useCountPointer();
51                (*count)--;
52               
53        }
54
55
56        //-----------------------------------------------------------------------
57        void TriangleMeshDataManager::removeTriangleMeshData(const String& name, Vector3 scale)
58        {
59               
60                TriangleMeshDataPtrMap::iterator itr = mTriangleMeshDataMap.find(name);
61                if(itr != mTriangleMeshDataMap.end())
62                {
63               
64                        std::map<Ogre::Vector3, TriangleMeshDataPtr, vectorLess>::iterator itr2;
65                       
66                        itr2 = itr->second.find(scale);
67                       
68                        if ( itr2 != itr->second.end() )
69                        {
70                                //printf ("no TriangleMeshData for scale so erase it\n");
71                                itr->second.erase(itr2);
72                                itr2->second.setNull();
73                        }
74                       
75                        if (itr->second.size() == 0) 
76                        {
77                                //printf ("have no TriangleMeshData for this mesh so erase it from map\n");
78                                mTriangleMeshDataMap.erase(itr); 
79                        }
80                }
81                       
82        }
83       
84       
85        /** looks for mesh name then size or returns a NULL TriangleMeshDataPtr
86        */
87        //-----------------------------------------------------------------------
88        TriangleMeshDataPtr TriangleMeshDataManager::getTriangleMeshData(const String& name, Vector3 scale)
89        {
90       
91                TriangleMeshDataPtrMap::iterator itr = mTriangleMeshDataMap.find(name);
92                if(itr != mTriangleMeshDataMap.end())
93                {
94                        std::map<Ogre::Vector3, TriangleMeshDataPtr, vectorLess>::iterator itr2;
95                       
96                        itr2 = itr->second.find(scale);
97                       
98                        if ( itr2 != itr->second.end() )
99                        {
100                                return itr2->second;
101                        }
102                }
103               
104                //printf ("TriangleMeshDataManager::getTriangleMeshData not found\n");
105               
106                return NULL;
107       
108        }
109
110}
Note: See TracBrowser for help on using the repository browser.