diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/freestyle/intern/geometry/GeomCleaner.cpp | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/freestyle/intern/geometry/GeomCleaner.cpp')
-rw-r--r-- | source/blender/freestyle/intern/geometry/GeomCleaner.cpp | 357 |
1 files changed, 189 insertions, 168 deletions
diff --git a/source/blender/freestyle/intern/geometry/GeomCleaner.cpp b/source/blender/freestyle/intern/geometry/GeomCleaner.cpp index 9643593a03d..32d6fc62085 100644 --- a/source/blender/freestyle/intern/geometry/GeomCleaner.cpp +++ b/source/blender/freestyle/intern/geometry/GeomCleaner.cpp @@ -20,13 +20,13 @@ */ #if 0 -#if defined(__GNUC__) && (__GNUC__ >= 3) +# if defined(__GNUC__) && (__GNUC__ >= 3) // hash_map is not part of the C++ standard anymore; // hash_map.h has been kept though for backward compatibility -# include <hash_map.h> -#else -# include <hash_map> -#endif +# include <hash_map.h> +# else +# include <hash_map> +# endif #endif #include <stdio.h> @@ -43,188 +43,209 @@ using namespace std; namespace Freestyle { -void GeomCleaner::SortIndexedVertexArray(const float *iVertices, unsigned iVSize, const unsigned *iIndices, - unsigned iISize, float **oVertices, unsigned **oIndices) +void GeomCleaner::SortIndexedVertexArray(const float *iVertices, + unsigned iVSize, + const unsigned *iIndices, + unsigned iISize, + float **oVertices, + unsigned **oIndices) { - // First, we build a list of IndexVertex: - list<IndexedVertex> indexedVertices; - unsigned i; - for (i = 0; i < iVSize; i += 3) { - indexedVertices.push_back(IndexedVertex(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2]), i / 3)); - } - - // q-sort - indexedVertices.sort(); - - // build the indices mapping array: - unsigned *mapIndices = new unsigned[iVSize / 3]; - *oVertices = new float[iVSize]; - list<IndexedVertex>::iterator iv; - unsigned newIndex = 0; - unsigned vIndex = 0; - for (iv = indexedVertices.begin(); iv != indexedVertices.end(); iv++) { - // Build the final results: - (*oVertices)[vIndex] = iv->x(); - (*oVertices)[vIndex + 1] = iv->y(); - (*oVertices)[vIndex + 2] = iv->z(); - - mapIndices[iv->index()] = newIndex; - newIndex++; - vIndex += 3; - } - - // Build the final index array: - *oIndices = new unsigned[iISize]; - for (i = 0; i < iISize; i++) { - (*oIndices)[i] = 3 * mapIndices[iIndices[i] / 3]; - } - - delete [] mapIndices; + // First, we build a list of IndexVertex: + list<IndexedVertex> indexedVertices; + unsigned i; + for (i = 0; i < iVSize; i += 3) { + indexedVertices.push_back( + IndexedVertex(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2]), i / 3)); + } + + // q-sort + indexedVertices.sort(); + + // build the indices mapping array: + unsigned *mapIndices = new unsigned[iVSize / 3]; + *oVertices = new float[iVSize]; + list<IndexedVertex>::iterator iv; + unsigned newIndex = 0; + unsigned vIndex = 0; + for (iv = indexedVertices.begin(); iv != indexedVertices.end(); iv++) { + // Build the final results: + (*oVertices)[vIndex] = iv->x(); + (*oVertices)[vIndex + 1] = iv->y(); + (*oVertices)[vIndex + 2] = iv->z(); + + mapIndices[iv->index()] = newIndex; + newIndex++; + vIndex += 3; + } + + // Build the final index array: + *oIndices = new unsigned[iISize]; + for (i = 0; i < iISize; i++) { + (*oIndices)[i] = 3 * mapIndices[iIndices[i] / 3]; + } + + delete[] mapIndices; } -void GeomCleaner::CompressIndexedVertexArray(const float *iVertices, unsigned iVSize, const unsigned *iIndices, - unsigned iISize, float **oVertices, unsigned *oVSize, unsigned **oIndices) +void GeomCleaner::CompressIndexedVertexArray(const float *iVertices, + unsigned iVSize, + const unsigned *iIndices, + unsigned iISize, + float **oVertices, + unsigned *oVSize, + unsigned **oIndices) { - // First, we build a list of IndexVertex: - vector<Vec3f> vertices; - unsigned i; - for (i = 0; i < iVSize; i += 3) { - vertices.push_back(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2])); - } - - unsigned *mapVertex = new unsigned[iVSize]; - vector<Vec3f>::iterator v = vertices.begin(); - - vector<Vec3f> compressedVertices; - Vec3f previous = *v; - mapVertex[0] = 0; - compressedVertices.push_back(vertices.front()); - - v++; - Vec3f current; - i = 1; - for (; v != vertices.end(); v++) { - current = *v; - if (current == previous) - mapVertex[i] = compressedVertices.size() - 1; - else { - compressedVertices.push_back(current); - mapVertex[i] = compressedVertices.size() - 1; - } - previous = current; - i++; - } - - // Builds the resulting vertex array: - *oVSize = 3 * compressedVertices.size(); - *oVertices = new float[*oVSize]; - i = 0; - for (v = compressedVertices.begin(); v != compressedVertices.end(); v++) { - (*oVertices)[i] = (*v)[0]; - (*oVertices)[i + 1] = (*v)[1]; - (*oVertices)[i + 2] = (*v)[2]; - i += 3; - } - - // Map the index array: - *oIndices = new unsigned[iISize]; - for (i = 0; i < iISize; i++) { - (*oIndices)[i] = 3 * mapVertex[iIndices[i] / 3]; - } - - delete [] mapVertex; + // First, we build a list of IndexVertex: + vector<Vec3f> vertices; + unsigned i; + for (i = 0; i < iVSize; i += 3) { + vertices.push_back(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2])); + } + + unsigned *mapVertex = new unsigned[iVSize]; + vector<Vec3f>::iterator v = vertices.begin(); + + vector<Vec3f> compressedVertices; + Vec3f previous = *v; + mapVertex[0] = 0; + compressedVertices.push_back(vertices.front()); + + v++; + Vec3f current; + i = 1; + for (; v != vertices.end(); v++) { + current = *v; + if (current == previous) + mapVertex[i] = compressedVertices.size() - 1; + else { + compressedVertices.push_back(current); + mapVertex[i] = compressedVertices.size() - 1; + } + previous = current; + i++; + } + + // Builds the resulting vertex array: + *oVSize = 3 * compressedVertices.size(); + *oVertices = new float[*oVSize]; + i = 0; + for (v = compressedVertices.begin(); v != compressedVertices.end(); v++) { + (*oVertices)[i] = (*v)[0]; + (*oVertices)[i + 1] = (*v)[1]; + (*oVertices)[i + 2] = (*v)[2]; + i += 3; + } + + // Map the index array: + *oIndices = new unsigned[iISize]; + for (i = 0; i < iISize; i++) { + (*oIndices)[i] = 3 * mapVertex[iIndices[i] / 3]; + } + + delete[] mapVertex; } -void GeomCleaner::SortAndCompressIndexedVertexArray(const float *iVertices, unsigned iVSize, const unsigned *iIndices, - unsigned iISize, float **oVertices, unsigned *oVSize, +void GeomCleaner::SortAndCompressIndexedVertexArray(const float *iVertices, + unsigned iVSize, + const unsigned *iIndices, + unsigned iISize, + float **oVertices, + unsigned *oVSize, unsigned **oIndices) { - // tmp arrays used to store the sorted data: - float *tmpVertices; - unsigned *tmpIndices; - - Chronometer chrono; - // Sort data - chrono.start(); - GeomCleaner::SortIndexedVertexArray(iVertices, iVSize, iIndices, iISize, &tmpVertices, &tmpIndices); - if (G.debug & G_DEBUG_FREESTYLE) { - printf("Sorting: %lf sec.\n", chrono.stop()); - } - - // compress data - chrono.start(); - GeomCleaner::CompressIndexedVertexArray(tmpVertices, iVSize, tmpIndices, iISize, oVertices, oVSize, oIndices); - real duration = chrono.stop(); - if (G.debug & G_DEBUG_FREESTYLE) { - printf("Merging: %lf sec.\n", duration); - } - - // deallocates memory: - delete [] tmpVertices; - delete [] tmpIndices; + // tmp arrays used to store the sorted data: + float *tmpVertices; + unsigned *tmpIndices; + + Chronometer chrono; + // Sort data + chrono.start(); + GeomCleaner::SortIndexedVertexArray( + iVertices, iVSize, iIndices, iISize, &tmpVertices, &tmpIndices); + if (G.debug & G_DEBUG_FREESTYLE) { + printf("Sorting: %lf sec.\n", chrono.stop()); + } + + // compress data + chrono.start(); + GeomCleaner::CompressIndexedVertexArray( + tmpVertices, iVSize, tmpIndices, iISize, oVertices, oVSize, oIndices); + real duration = chrono.stop(); + if (G.debug & G_DEBUG_FREESTYLE) { + printf("Merging: %lf sec.\n", duration); + } + + // deallocates memory: + delete[] tmpVertices; + delete[] tmpIndices; } /*! Defines a hash table used for searching the Cells */ struct GeomCleanerHasher { #define _MUL 950706376UL #define _MOD 2147483647UL - inline size_t operator() (const Vec3r& p) const - { - size_t res = ((unsigned long) (p[0] * _MUL)) % _MOD; - res = ((res + (unsigned long) (p[1]) * _MUL)) % _MOD; - return ((res +(unsigned long) (p[2]) * _MUL)) % _MOD; - } + inline size_t operator()(const Vec3r &p) const + { + size_t res = ((unsigned long)(p[0] * _MUL)) % _MOD; + res = ((res + (unsigned long)(p[1]) * _MUL)) % _MOD; + return ((res + (unsigned long)(p[2]) * _MUL)) % _MOD; + } #undef _MUL #undef _MOD }; -void GeomCleaner::CleanIndexedVertexArray(const float *iVertices, unsigned iVSize, const unsigned *iIndices, - unsigned iISize, float **oVertices, unsigned *oVSize, unsigned **oIndices) +void GeomCleaner::CleanIndexedVertexArray(const float *iVertices, + unsigned iVSize, + const unsigned *iIndices, + unsigned iISize, + float **oVertices, + unsigned *oVSize, + unsigned **oIndices) { - typedef map<Vec3f, unsigned> cleanHashTable; - vector<Vec3f> vertices; - unsigned i; - for (i = 0; i < iVSize; i += 3) - vertices.push_back(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2])); - - cleanHashTable ht; - vector<unsigned> newIndices; - vector<Vec3f> newVertices; - - // elimination of needless points - unsigned currentIndex = 0; - vector<Vec3f>::const_iterator v = vertices.begin(); - vector<Vec3f>::const_iterator end = vertices.end(); - cleanHashTable::const_iterator found; - for (; v != end; v++) { - found = ht.find(*v); - if (found != ht.end()) { - // The vertex is already in the new array. - newIndices.push_back((*found).second); - } - else { - newVertices.push_back(*v); - newIndices.push_back(currentIndex); - ht[*v] = currentIndex; - currentIndex++; - } - } - - // creation of oVertices array: - *oVSize = 3 * newVertices.size(); - *oVertices = new float[*oVSize]; - currentIndex = 0; - end = newVertices.end(); - for (v = newVertices.begin(); v != end ; v++) { - (*oVertices)[currentIndex++] = (*v)[0]; - (*oVertices)[currentIndex++] = (*v)[1]; - (*oVertices)[currentIndex++] = (*v)[2]; - } - - // map new indices: - *oIndices = new unsigned[iISize]; - for (i = 0; i < iISize; i++) - (*oIndices)[i] = 3 * newIndices[iIndices[i] / 3]; + typedef map<Vec3f, unsigned> cleanHashTable; + vector<Vec3f> vertices; + unsigned i; + for (i = 0; i < iVSize; i += 3) + vertices.push_back(Vec3f(iVertices[i], iVertices[i + 1], iVertices[i + 2])); + + cleanHashTable ht; + vector<unsigned> newIndices; + vector<Vec3f> newVertices; + + // elimination of needless points + unsigned currentIndex = 0; + vector<Vec3f>::const_iterator v = vertices.begin(); + vector<Vec3f>::const_iterator end = vertices.end(); + cleanHashTable::const_iterator found; + for (; v != end; v++) { + found = ht.find(*v); + if (found != ht.end()) { + // The vertex is already in the new array. + newIndices.push_back((*found).second); + } + else { + newVertices.push_back(*v); + newIndices.push_back(currentIndex); + ht[*v] = currentIndex; + currentIndex++; + } + } + + // creation of oVertices array: + *oVSize = 3 * newVertices.size(); + *oVertices = new float[*oVSize]; + currentIndex = 0; + end = newVertices.end(); + for (v = newVertices.begin(); v != end; v++) { + (*oVertices)[currentIndex++] = (*v)[0]; + (*oVertices)[currentIndex++] = (*v)[1]; + (*oVertices)[currentIndex++] = (*v)[2]; + } + + // map new indices: + *oIndices = new unsigned[iISize]; + for (i = 0; i < iISize; i++) + (*oIndices)[i] = 3 * newIndices[iIndices[i] / 3]; } } /* namespace Freestyle */ |