~ubuntu-branches/ubuntu/lucid/blender/lucid

« back to all changes in this revision

Viewing changes to extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Chris Coulson
  • Date: 2009-08-06 22:32:19 UTC
  • mfrom: (1.2.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20090806223219-8z4eej1u8levu4pz
Tags: 2.49a+dfsg-0ubuntu1
* Merge from debian unstable, remaining changes:
  - debian/control: Build-depend on python-2.6 rather than python-2.5.
  - debian/misc/*.desktop: Add Spanish translation to .desktop 
    files.
  - debian/pyversions: 2.6.
  - debian/rules: Clean *.o of source/blender/python/api2_2x/
* New upstream release (LP: #382153).
* Refreshed patches:
  - 01_sanitize_sys.patch
  - 02_tmp_in_HOME
  - 10_use_systemwide_ftgl
  - 70_portability_platform_detection
* Removed patches merged upstream:
  - 30_fix_python_syntax_warning
  - 90_ubuntu_ffmpeg_52_changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
        if (m_use32bitIndices)
36
36
        {
37
37
                m_indexedMeshes[0].m_numTriangles = m_32bitIndices.size()/3;
38
 
                m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_32bitIndices[0];
 
38
                m_indexedMeshes[0].m_triangleIndexBase = 0;
39
39
                m_indexedMeshes[0].m_indexType = PHY_INTEGER;
40
40
                m_indexedMeshes[0].m_triangleIndexStride = 3*sizeof(int);
41
41
        } else
42
42
        {
43
43
                m_indexedMeshes[0].m_numTriangles = m_16bitIndices.size()/3;
44
 
                m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_16bitIndices[0];
 
44
                m_indexedMeshes[0].m_triangleIndexBase = 0;
45
45
                m_indexedMeshes[0].m_indexType = PHY_SHORT;
46
46
                m_indexedMeshes[0].m_triangleIndexStride = 3*sizeof(short int);
47
47
        }
49
49
        if (m_use4componentVertices)
50
50
        {
51
51
                m_indexedMeshes[0].m_numVertices = m_4componentVertices.size();
52
 
                m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_4componentVertices[0];
 
52
                m_indexedMeshes[0].m_vertexBase = 0;
53
53
                m_indexedMeshes[0].m_vertexStride = sizeof(btVector3);
54
54
        } else
55
55
        {
56
56
                m_indexedMeshes[0].m_numVertices = m_3componentVertices.size()/3;
57
 
                m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_3componentVertices[0];
 
57
                m_indexedMeshes[0].m_vertexBase = 0;
58
58
                m_indexedMeshes[0].m_vertexStride = 3*sizeof(btScalar);
59
59
        }
60
60
 
74
74
        }
75
75
}
76
76
 
77
 
int     btTriangleMesh::findOrAddVertex(const btVector3& vertex)
 
77
 
 
78
int     btTriangleMesh::findOrAddVertex(const btVector3& vertex, bool removeDuplicateVertices)
78
79
{
79
80
        //return index of new/existing vertex
80
 
        //todo: could use acceleration structure for this
 
81
        ///@todo: could use acceleration structure for this
81
82
        if (m_use4componentVertices)
82
83
        {
83
 
                for (int i=0;i< m_4componentVertices.size();i++)
84
 
                {
85
 
                        if ((m_4componentVertices[i]-vertex).length2() <= m_weldingThreshold)
86
 
                        {
87
 
                                return i;
 
84
                if (removeDuplicateVertices)
 
85
                        {
 
86
                        for (int i=0;i< m_4componentVertices.size();i++)
 
87
                        {
 
88
                                if ((m_4componentVertices[i]-vertex).length2() <= m_weldingThreshold)
 
89
                                {
 
90
                                        return i;
 
91
                                }
88
92
                        }
89
93
                }
90
94
                m_indexedMeshes[0].m_numVertices++;
96
100
        } else
97
101
        {
98
102
                
99
 
                for (int i=0;i< m_3componentVertices.size();i+=3)
 
103
                if (removeDuplicateVertices)
100
104
                {
101
 
                        btVector3 vtx(m_3componentVertices[i],m_3componentVertices[i+1],m_3componentVertices[i+2]);
102
 
                        if ((vtx-vertex).length2() <= m_weldingThreshold)
 
105
                        for (int i=0;i< m_3componentVertices.size();i+=3)
103
106
                        {
104
 
                                return i/3;
 
107
                                btVector3 vtx(m_3componentVertices[i],m_3componentVertices[i+1],m_3componentVertices[i+2]);
 
108
                                if ((vtx-vertex).length2() <= m_weldingThreshold)
 
109
                                {
 
110
                                        return i/3;
 
111
                                }
105
112
                        }
106
 
                }
107
 
                m_3componentVertices.push_back(vertex.getX());
108
 
                m_3componentVertices.push_back(vertex.getY());
109
 
                m_3componentVertices.push_back(vertex.getZ());
 
113
        }
 
114
                m_3componentVertices.push_back((float)vertex.getX());
 
115
                m_3componentVertices.push_back((float)vertex.getY());
 
116
                m_3componentVertices.push_back((float)vertex.getZ());
110
117
                m_indexedMeshes[0].m_numVertices++;
111
118
                m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_3componentVertices[0];
112
119
                return (m_3componentVertices.size()/3)-1;
114
121
 
115
122
}
116
123
                
117
 
void    btTriangleMesh::addTriangle(const btVector3& vertex0,const btVector3& vertex1,const btVector3& vertex2)
 
124
void    btTriangleMesh::addTriangle(const btVector3& vertex0,const btVector3& vertex1,const btVector3& vertex2,bool removeDuplicateVertices)
118
125
{
119
126
        m_indexedMeshes[0].m_numTriangles++;
120
 
                
121
 
        addIndex(findOrAddVertex(vertex0));
122
 
        addIndex(findOrAddVertex(vertex1));
123
 
        addIndex(findOrAddVertex(vertex2));
 
127
        addIndex(findOrAddVertex(vertex0,removeDuplicateVertices));
 
128
        addIndex(findOrAddVertex(vertex1,removeDuplicateVertices));
 
129
        addIndex(findOrAddVertex(vertex2,removeDuplicateVertices));
124
130
}
125
131
 
126
132
int btTriangleMesh::getNumTriangles() const