diff options
Diffstat (limited to 'thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp')
-rw-r--r-- | thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp | 540 |
1 files changed, 265 insertions, 275 deletions
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp index afe45e1d2d..13c0a343f1 100644 --- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp +++ b/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp @@ -10,31 +10,31 @@ // #include <limits.h> -#include <string.h> //memcpy +#include <string.h> //memcpy struct btSdfDataStream { const char* m_data; int m_size; - + int m_currentOffset; - + btSdfDataStream(const char* data, int size) - :m_data(data), - m_size(size), - m_currentOffset(0) + : m_data(data), + m_size(size), + m_currentOffset(0) { - } - template<class T> bool read(T& val) + template <class T> + bool read(T& val) { int bytes = sizeof(T); - if (m_currentOffset+bytes<=m_size) + if (m_currentOffset + bytes <= m_size) { char* dest = (char*)&val; - memcpy(dest,&m_data[m_currentOffset],bytes); - m_currentOffset+=bytes; + memcpy(dest, &m_data[m_currentOffset], bytes); + m_currentOffset += bytes; return true; } btAssert(0); @@ -42,137 +42,133 @@ struct btSdfDataStream } }; - bool btMiniSDF::load(const char* data, int size) { - int fileSize = -1; + int fileSize = -1; - btSdfDataStream ds(data,size); - { - double buf[6]; - ds.read(buf); - m_domain.m_min[0] = buf[0]; - m_domain.m_min[1] = buf[1]; - m_domain.m_min[2] = buf[2]; - m_domain.m_min[3] = 0; - m_domain.m_max[0] = buf[3]; - m_domain.m_max[1] = buf[4]; - m_domain.m_max[2] = buf[5]; - m_domain.m_max[3] = 0; - } - { - unsigned int buf2[3]; - ds.read(buf2); - m_resolution[0] = buf2[0]; - m_resolution[1] = buf2[1]; - m_resolution[2] = buf2[2]; - } - { - double buf[3]; - ds.read(buf); - m_cell_size[0] = buf[0]; - m_cell_size[1] = buf[1]; - m_cell_size[2] = buf[2]; - } - { - double buf[3]; - ds.read(buf); - m_inv_cell_size[0] = buf[0]; - m_inv_cell_size[1] = buf[1]; - m_inv_cell_size[2] = buf[2]; - } - { - unsigned long long int cells; - ds.read(cells); - m_n_cells = cells; - } - { - unsigned long long int fields; - ds.read(fields); - m_n_fields = fields; - } + btSdfDataStream ds(data, size); + { + double buf[6]; + ds.read(buf); + m_domain.m_min[0] = buf[0]; + m_domain.m_min[1] = buf[1]; + m_domain.m_min[2] = buf[2]; + m_domain.m_min[3] = 0; + m_domain.m_max[0] = buf[3]; + m_domain.m_max[1] = buf[4]; + m_domain.m_max[2] = buf[5]; + m_domain.m_max[3] = 0; + } + { + unsigned int buf2[3]; + ds.read(buf2); + m_resolution[0] = buf2[0]; + m_resolution[1] = buf2[1]; + m_resolution[2] = buf2[2]; + } + { + double buf[3]; + ds.read(buf); + m_cell_size[0] = buf[0]; + m_cell_size[1] = buf[1]; + m_cell_size[2] = buf[2]; + } + { + double buf[3]; + ds.read(buf); + m_inv_cell_size[0] = buf[0]; + m_inv_cell_size[1] = buf[1]; + m_inv_cell_size[2] = buf[2]; + } + { + unsigned long long int cells; + ds.read(cells); + m_n_cells = cells; + } + { + unsigned long long int fields; + ds.read(fields); + m_n_fields = fields; + } - - unsigned long long int nodes0; - std::size_t n_nodes0; - ds.read(nodes0); - n_nodes0 = nodes0; - if (n_nodes0 > 1024 * 1024 * 1024) - { - return m_isValid; - } - m_nodes.resize(n_nodes0); - for (unsigned int i=0;i<n_nodes0;i++) + unsigned long long int nodes0; + std::size_t n_nodes0; + ds.read(nodes0); + n_nodes0 = nodes0; + if (n_nodes0 > 1024 * 1024 * 1024) + { + return m_isValid; + } + m_nodes.resize(n_nodes0); + for (unsigned int i = 0; i < n_nodes0; i++) + { + unsigned long long int n_nodes1; + ds.read(n_nodes1); + btAlignedObjectArray<double>& nodes = m_nodes[i]; + nodes.resize(n_nodes1); + for (int j = 0; j < nodes.size(); j++) { - unsigned long long int n_nodes1; - ds.read(n_nodes1); - btAlignedObjectArray<double>& nodes = m_nodes[i]; - nodes.resize(n_nodes1); - for ( int j=0;j<nodes.size();j++) - { - double& node = nodes[j]; - ds.read(node); - } + double& node = nodes[j]; + ds.read(node); } + } - unsigned long long int n_cells0; - ds.read(n_cells0); - m_cells.resize(n_cells0); - for (int i=0;i<n_cells0;i++) + unsigned long long int n_cells0; + ds.read(n_cells0); + m_cells.resize(n_cells0); + for (int i = 0; i < n_cells0; i++) + { + unsigned long long int n_cells1; + btAlignedObjectArray<btCell32>& cells = m_cells[i]; + ds.read(n_cells1); + cells.resize(n_cells1); + for (int j = 0; j < n_cells1; j++) { - unsigned long long int n_cells1; - btAlignedObjectArray<btCell32 >& cells = m_cells[i]; - ds.read(n_cells1); - cells.resize(n_cells1); - for (int j=0;j<n_cells1;j++) - { - btCell32& cell = cells[j]; - ds.read(cell); - } + btCell32& cell = cells[j]; + ds.read(cell); } + } + + { + unsigned long long int n_cell_maps0; + ds.read(n_cell_maps0); + m_cell_map.resize(n_cell_maps0); + for (int i = 0; i < n_cell_maps0; i++) { - unsigned long long int n_cell_maps0; - ds.read(n_cell_maps0); - - m_cell_map.resize(n_cell_maps0); - for (int i=0;i<n_cell_maps0;i++) + unsigned long long int n_cell_maps1; + btAlignedObjectArray<unsigned int>& cell_maps = m_cell_map[i]; + ds.read(n_cell_maps1); + cell_maps.resize(n_cell_maps1); + for (int j = 0; j < n_cell_maps1; j++) { - unsigned long long int n_cell_maps1; - btAlignedObjectArray<unsigned int>& cell_maps = m_cell_map[i]; - ds.read(n_cell_maps1); - cell_maps.resize(n_cell_maps1); - for (int j=0;j<n_cell_maps1;j++) - { - unsigned int& cell_map = cell_maps[j]; - ds.read(cell_map); - } + unsigned int& cell_map = cell_maps[j]; + ds.read(cell_map); } } + } - m_isValid = (ds.m_currentOffset == ds.m_size); - return m_isValid; + m_isValid = (ds.m_currentOffset == ds.m_size); + return m_isValid; } - -unsigned int btMiniSDF::multiToSingleIndex(btMultiIndex const & ijk) const +unsigned int btMiniSDF::multiToSingleIndex(btMultiIndex const& ijk) const { return m_resolution[1] * m_resolution[0] * ijk.ijk[2] + m_resolution[0] * ijk.ijk[1] + ijk.ijk[0]; } - + btAlignedBox3d btMiniSDF::subdomain(btMultiIndex const& ijk) const { btAssert(m_isValid); btVector3 tmp; - tmp.m_floats[0] = m_cell_size[0]*(double)ijk.ijk[0]; - tmp.m_floats[1] = m_cell_size[1]*(double)ijk.ijk[1]; - tmp.m_floats[2] = m_cell_size[2]*(double)ijk.ijk[2]; - + tmp.m_floats[0] = m_cell_size[0] * (double)ijk.ijk[0]; + tmp.m_floats[1] = m_cell_size[1] * (double)ijk.ijk[1]; + tmp.m_floats[2] = m_cell_size[2] * (double)ijk.ijk[2]; btVector3 origin = m_domain.min() + tmp; - btAlignedBox3d box = btAlignedBox3d (origin, origin + m_cell_size); + btAlignedBox3d box = btAlignedBox3d(origin, origin + m_cell_size); return box; } @@ -181,8 +177,8 @@ btMiniSDF::singleToMultiIndex(unsigned int l) const { btAssert(m_isValid); unsigned int n01 = m_resolution[0] * m_resolution[1]; - unsigned int k = l / n01; - unsigned int temp = l % n01; + unsigned int k = l / n01; + unsigned int temp = l % n01; unsigned int j = temp / m_resolution[0]; unsigned int i = temp % m_resolution[0]; btMultiIndex mi; @@ -199,59 +195,57 @@ btMiniSDF::subdomain(unsigned int l) const return subdomain(singleToMultiIndex(l)); } - btShapeMatrix btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) const { btAssert(m_isValid); btShapeMatrix res; - + btScalar x = xi[0]; btScalar y = xi[1]; btScalar z = xi[2]; - btScalar x2 = x*x; - btScalar y2 = y*y; - btScalar z2 = z*z; - - btScalar _1mx = 1.0 - x; - btScalar _1my = 1.0 - y; - btScalar _1mz = 1.0 - z; + btScalar x2 = x * x; + btScalar y2 = y * y; + btScalar z2 = z * z; - btScalar _1px = 1.0 + x; - btScalar _1py = 1.0 + y; - btScalar _1pz = 1.0 + z; + btScalar _1mx = 1.0 - x; + btScalar _1my = 1.0 - y; + btScalar _1mz = 1.0 - z; - btScalar _1m3x = 1.0 - 3.0 * x; - btScalar _1m3y = 1.0 - 3.0 * y; - btScalar _1m3z = 1.0 - 3.0 * z; + btScalar _1px = 1.0 + x; + btScalar _1py = 1.0 + y; + btScalar _1pz = 1.0 + z; - btScalar _1p3x = 1.0 + 3.0 * x; - btScalar _1p3y = 1.0 + 3.0 * y; - btScalar _1p3z = 1.0 + 3.0 * z; + btScalar _1m3x = 1.0 - 3.0 * x; + btScalar _1m3y = 1.0 - 3.0 * y; + btScalar _1m3z = 1.0 - 3.0 * z; - btScalar _1mxt1my = _1mx * _1my; - btScalar _1mxt1py = _1mx * _1py; - btScalar _1pxt1my = _1px * _1my; - btScalar _1pxt1py = _1px * _1py; + btScalar _1p3x = 1.0 + 3.0 * x; + btScalar _1p3y = 1.0 + 3.0 * y; + btScalar _1p3z = 1.0 + 3.0 * z; - btScalar _1mxt1mz = _1mx * _1mz; - btScalar _1mxt1pz = _1mx * _1pz; - btScalar _1pxt1mz = _1px * _1mz; - btScalar _1pxt1pz = _1px * _1pz; + btScalar _1mxt1my = _1mx * _1my; + btScalar _1mxt1py = _1mx * _1py; + btScalar _1pxt1my = _1px * _1my; + btScalar _1pxt1py = _1px * _1py; - btScalar _1myt1mz = _1my * _1mz; - btScalar _1myt1pz = _1my * _1pz; - btScalar _1pyt1mz = _1py * _1mz; - btScalar _1pyt1pz = _1py * _1pz; + btScalar _1mxt1mz = _1mx * _1mz; + btScalar _1mxt1pz = _1mx * _1pz; + btScalar _1pxt1mz = _1px * _1mz; + btScalar _1pxt1pz = _1px * _1pz; - btScalar _1mx2 = 1.0 - x2; - btScalar _1my2 = 1.0 - y2; - btScalar _1mz2 = 1.0 - z2; + btScalar _1myt1mz = _1my * _1mz; + btScalar _1myt1pz = _1my * _1pz; + btScalar _1pyt1mz = _1py * _1mz; + btScalar _1pyt1pz = _1py * _1pz; + btScalar _1mx2 = 1.0 - x2; + btScalar _1my2 = 1.0 - y2; + btScalar _1mz2 = 1.0 - z2; // Corner nodes. - btScalar fac = 1.0 / 64.0 * (9.0 * (x2 + y2 + z2) - 19.0); + btScalar fac = 1.0 / 64.0 * (9.0 * (x2 + y2 + z2) - 19.0); res[0] = fac * _1mxt1my * _1mz; res[1] = fac * _1pxt1my * _1mz; res[2] = fac * _1mxt1py * _1mz; @@ -264,10 +258,10 @@ btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) cons // Edge nodes. fac = 9.0 / 64.0 * _1mx2; - btScalar fact1m3x = fac * _1m3x; - btScalar fact1p3x = fac * _1p3x; - res[ 8] = fact1m3x * _1myt1mz; - res[ 9] = fact1p3x * _1myt1mz; + btScalar fact1m3x = fac * _1m3x; + btScalar fact1p3x = fac * _1p3x; + res[8] = fact1m3x * _1myt1mz; + res[9] = fact1p3x * _1myt1mz; res[10] = fact1m3x * _1myt1pz; res[11] = fact1p3x * _1myt1pz; res[12] = fact1m3x * _1pyt1mz; @@ -276,8 +270,8 @@ btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) cons res[15] = fact1p3x * _1pyt1pz; fac = 9.0 / 64.0 * _1my2; - btScalar fact1m3y = fac * _1m3y; - btScalar fact1p3y = fac * _1p3y; + btScalar fact1m3y = fac * _1m3y; + btScalar fact1p3y = fac * _1p3y; res[16] = fact1m3y * _1mxt1mz; res[17] = fact1p3y * _1mxt1mz; res[18] = fact1m3y * _1pxt1mz; @@ -288,8 +282,8 @@ btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) cons res[23] = fact1p3y * _1pxt1pz; fac = 9.0 / 64.0 * _1mz2; - btScalar fact1m3z = fac * _1m3z; - btScalar fact1p3z = fac * _1p3z; + btScalar fact1m3z = fac * _1m3z; + btScalar fact1p3z = fac * _1p3z; res[24] = fact1m3z * _1mxt1my; res[25] = fact1p3z * _1mxt1my; res[26] = fact1m3z * _1mxt1py; @@ -309,7 +303,7 @@ btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) cons btScalar _18x = 18.0 * x; btScalar _18y = 18.0 * y; btScalar _18z = 18.0 * z; - + btScalar _3m9x2 = 3.0 - 9.0 * x2; btScalar _3m9y2 = 3.0 - 9.0 * y2; btScalar _3m9z2 = 3.0 - 9.0 * z2; @@ -325,132 +319,128 @@ btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) cons btScalar _18zm9tx2py2p3z2m19 = _18z - _9tx2py2p3z2m19; btScalar _18zp9tx2py2p3z2m19 = _18z + _9tx2py2p3z2m19; - dN(0,0) =_18xm9t3x2py2pz2m19 * _1myt1mz; - dN(0,1) =_1mxt1mz * _18ym9tx2p3y2pz2m19; - dN(0,2) =_1mxt1my * _18zm9tx2py2p3z2m19; - dN(1,0) =_18xp9t3x2py2pz2m19 * _1myt1mz; - dN(1,1) =_1pxt1mz * _18ym9tx2p3y2pz2m19; - dN(1,2) =_1pxt1my * _18zm9tx2py2p3z2m19; - dN(2,0) =_18xm9t3x2py2pz2m19 * _1pyt1mz; - dN(2,1) =_1mxt1mz * _18yp9tx2p3y2pz2m19; - dN(2,2) =_1mxt1py * _18zm9tx2py2p3z2m19; - dN(3,0) =_18xp9t3x2py2pz2m19 * _1pyt1mz; - dN(3,1) =_1pxt1mz * _18yp9tx2p3y2pz2m19; - dN(3,2) =_1pxt1py * _18zm9tx2py2p3z2m19; - dN(4,0) =_18xm9t3x2py2pz2m19 * _1myt1pz; - dN(4,1) =_1mxt1pz * _18ym9tx2p3y2pz2m19; - dN(4,2) =_1mxt1my * _18zp9tx2py2p3z2m19; - dN(5,0) =_18xp9t3x2py2pz2m19 * _1myt1pz; - dN(5,1) =_1pxt1pz * _18ym9tx2p3y2pz2m19; - dN(5,2) =_1pxt1my * _18zp9tx2py2p3z2m19; - dN(6,0) =_18xm9t3x2py2pz2m19 * _1pyt1pz; - dN(6,1) =_1mxt1pz * _18yp9tx2p3y2pz2m19; - dN(6,2) =_1mxt1py * _18zp9tx2py2p3z2m19; - dN(7,0) =_18xp9t3x2py2pz2m19 * _1pyt1pz; - dN(7,1) =_1pxt1pz * _18yp9tx2p3y2pz2m19; - dN(7,2) =_1pxt1py * _18zp9tx2py2p3z2m19; + dN(0, 0) = _18xm9t3x2py2pz2m19 * _1myt1mz; + dN(0, 1) = _1mxt1mz * _18ym9tx2p3y2pz2m19; + dN(0, 2) = _1mxt1my * _18zm9tx2py2p3z2m19; + dN(1, 0) = _18xp9t3x2py2pz2m19 * _1myt1mz; + dN(1, 1) = _1pxt1mz * _18ym9tx2p3y2pz2m19; + dN(1, 2) = _1pxt1my * _18zm9tx2py2p3z2m19; + dN(2, 0) = _18xm9t3x2py2pz2m19 * _1pyt1mz; + dN(2, 1) = _1mxt1mz * _18yp9tx2p3y2pz2m19; + dN(2, 2) = _1mxt1py * _18zm9tx2py2p3z2m19; + dN(3, 0) = _18xp9t3x2py2pz2m19 * _1pyt1mz; + dN(3, 1) = _1pxt1mz * _18yp9tx2p3y2pz2m19; + dN(3, 2) = _1pxt1py * _18zm9tx2py2p3z2m19; + dN(4, 0) = _18xm9t3x2py2pz2m19 * _1myt1pz; + dN(4, 1) = _1mxt1pz * _18ym9tx2p3y2pz2m19; + dN(4, 2) = _1mxt1my * _18zp9tx2py2p3z2m19; + dN(5, 0) = _18xp9t3x2py2pz2m19 * _1myt1pz; + dN(5, 1) = _1pxt1pz * _18ym9tx2p3y2pz2m19; + dN(5, 2) = _1pxt1my * _18zp9tx2py2p3z2m19; + dN(6, 0) = _18xm9t3x2py2pz2m19 * _1pyt1pz; + dN(6, 1) = _1mxt1pz * _18yp9tx2p3y2pz2m19; + dN(6, 2) = _1mxt1py * _18zp9tx2py2p3z2m19; + dN(7, 0) = _18xp9t3x2py2pz2m19 * _1pyt1pz; + dN(7, 1) = _1pxt1pz * _18yp9tx2p3y2pz2m19; + dN(7, 2) = _1pxt1py * _18zp9tx2py2p3z2m19; dN.topRowsDivide(8, 64.0); btScalar _m3m9x2m2x = -_3m9x2 - _2x; - btScalar _p3m9x2m2x = _3m9x2 - _2x; + btScalar _p3m9x2m2x = _3m9x2 - _2x; btScalar _1mx2t1m3x = _1mx2 * _1m3x; btScalar _1mx2t1p3x = _1mx2 * _1p3x; - dN( 8,0) = _m3m9x2m2x * _1myt1mz, - dN( 8,1) = -_1mx2t1m3x * _1mz, - dN( 8,2) = -_1mx2t1m3x * _1my; - dN( 9,0) = _p3m9x2m2x * _1myt1mz, - dN( 9,1) = -_1mx2t1p3x * _1mz, - dN( 9,2) = -_1mx2t1p3x * _1my; - dN(10,0) = _m3m9x2m2x * _1myt1pz, - dN(10,1) = -_1mx2t1m3x * _1pz, - dN(10,2) = _1mx2t1m3x * _1my; - dN(11,0) = _p3m9x2m2x * _1myt1pz, - dN(11,1) = -_1mx2t1p3x * _1pz, - dN(11,2) = _1mx2t1p3x * _1my; - dN(12,0) = _m3m9x2m2x * _1pyt1mz, - dN(12,1) = _1mx2t1m3x * _1mz, - dN(12,2) = -_1mx2t1m3x * _1py; - dN(13,0) = _p3m9x2m2x * _1pyt1mz, - dN(13,1) = _1mx2t1p3x * _1mz, - dN(13,2) = -_1mx2t1p3x * _1py; - dN(14,0) = _m3m9x2m2x * _1pyt1pz, - dN(14,1) = _1mx2t1m3x * _1pz, - dN(14,2) = _1mx2t1m3x * _1py; - dN(15,0) = _p3m9x2m2x * _1pyt1pz, - dN(15,1) = _1mx2t1p3x * _1pz, - dN(15,2) = _1mx2t1p3x * _1py; + dN(8, 0) = _m3m9x2m2x * _1myt1mz, + dN(8, 1) = -_1mx2t1m3x * _1mz, + dN(8, 2) = -_1mx2t1m3x * _1my; + dN(9, 0) = _p3m9x2m2x * _1myt1mz, + dN(9, 1) = -_1mx2t1p3x * _1mz, + dN(9, 2) = -_1mx2t1p3x * _1my; + dN(10, 0) = _m3m9x2m2x * _1myt1pz, + dN(10, 1) = -_1mx2t1m3x * _1pz, + dN(10, 2) = _1mx2t1m3x * _1my; + dN(11, 0) = _p3m9x2m2x * _1myt1pz, + dN(11, 1) = -_1mx2t1p3x * _1pz, + dN(11, 2) = _1mx2t1p3x * _1my; + dN(12, 0) = _m3m9x2m2x * _1pyt1mz, + dN(12, 1) = _1mx2t1m3x * _1mz, + dN(12, 2) = -_1mx2t1m3x * _1py; + dN(13, 0) = _p3m9x2m2x * _1pyt1mz, + dN(13, 1) = _1mx2t1p3x * _1mz, + dN(13, 2) = -_1mx2t1p3x * _1py; + dN(14, 0) = _m3m9x2m2x * _1pyt1pz, + dN(14, 1) = _1mx2t1m3x * _1pz, + dN(14, 2) = _1mx2t1m3x * _1py; + dN(15, 0) = _p3m9x2m2x * _1pyt1pz, + dN(15, 1) = _1mx2t1p3x * _1pz, + dN(15, 2) = _1mx2t1p3x * _1py; btScalar _m3m9y2m2y = -_3m9y2 - _2y; - btScalar _p3m9y2m2y = _3m9y2 - _2y; + btScalar _p3m9y2m2y = _3m9y2 - _2y; btScalar _1my2t1m3y = _1my2 * _1m3y; btScalar _1my2t1p3y = _1my2 * _1p3y; - dN(16,0) = -_1my2t1m3y * _1mz, - dN(16,1) = _m3m9y2m2y * _1mxt1mz, - dN(16,2) = -_1my2t1m3y * _1mx; - dN(17,0) = -_1my2t1p3y * _1mz, - dN(17,1) = _p3m9y2m2y * _1mxt1mz, - dN(17,2) = -_1my2t1p3y * _1mx; - dN(18,0) = _1my2t1m3y * _1mz, - dN(18,1) = _m3m9y2m2y * _1pxt1mz, - dN(18,2) = -_1my2t1m3y * _1px; - dN(19,0) = _1my2t1p3y * _1mz, - dN(19,1) = _p3m9y2m2y * _1pxt1mz, - dN(19,2) = -_1my2t1p3y * _1px; - dN(20,0) = -_1my2t1m3y * _1pz, - dN(20,1) = _m3m9y2m2y * _1mxt1pz, - dN(20,2) = _1my2t1m3y * _1mx; - dN(21,0) = -_1my2t1p3y * _1pz, - dN(21,1) = _p3m9y2m2y * _1mxt1pz, - dN(21,2) = _1my2t1p3y * _1mx; - dN(22,0) = _1my2t1m3y * _1pz, - dN(22,1) = _m3m9y2m2y * _1pxt1pz, - dN(22,2) = _1my2t1m3y * _1px; - dN(23,0) = _1my2t1p3y * _1pz, - dN(23,1) = _p3m9y2m2y * _1pxt1pz, - dN(23,2) = _1my2t1p3y * _1px; - + dN(16, 0) = -_1my2t1m3y * _1mz, + dN(16, 1) = _m3m9y2m2y * _1mxt1mz, + dN(16, 2) = -_1my2t1m3y * _1mx; + dN(17, 0) = -_1my2t1p3y * _1mz, + dN(17, 1) = _p3m9y2m2y * _1mxt1mz, + dN(17, 2) = -_1my2t1p3y * _1mx; + dN(18, 0) = _1my2t1m3y * _1mz, + dN(18, 1) = _m3m9y2m2y * _1pxt1mz, + dN(18, 2) = -_1my2t1m3y * _1px; + dN(19, 0) = _1my2t1p3y * _1mz, + dN(19, 1) = _p3m9y2m2y * _1pxt1mz, + dN(19, 2) = -_1my2t1p3y * _1px; + dN(20, 0) = -_1my2t1m3y * _1pz, + dN(20, 1) = _m3m9y2m2y * _1mxt1pz, + dN(20, 2) = _1my2t1m3y * _1mx; + dN(21, 0) = -_1my2t1p3y * _1pz, + dN(21, 1) = _p3m9y2m2y * _1mxt1pz, + dN(21, 2) = _1my2t1p3y * _1mx; + dN(22, 0) = _1my2t1m3y * _1pz, + dN(22, 1) = _m3m9y2m2y * _1pxt1pz, + dN(22, 2) = _1my2t1m3y * _1px; + dN(23, 0) = _1my2t1p3y * _1pz, + dN(23, 1) = _p3m9y2m2y * _1pxt1pz, + dN(23, 2) = _1my2t1p3y * _1px; btScalar _m3m9z2m2z = -_3m9z2 - _2z; - btScalar _p3m9z2m2z = _3m9z2 - _2z; + btScalar _p3m9z2m2z = _3m9z2 - _2z; btScalar _1mz2t1m3z = _1mz2 * _1m3z; btScalar _1mz2t1p3z = _1mz2 * _1p3z; - dN(24,0) = -_1mz2t1m3z * _1my, - dN(24,1) = -_1mz2t1m3z * _1mx, - dN(24,2) = _m3m9z2m2z * _1mxt1my; - dN(25,0) = -_1mz2t1p3z * _1my, - dN(25,1) = -_1mz2t1p3z * _1mx, - dN(25,2) = _p3m9z2m2z * _1mxt1my; - dN(26,0) = -_1mz2t1m3z * _1py, - dN(26,1) = _1mz2t1m3z * _1mx, - dN(26,2) = _m3m9z2m2z * _1mxt1py; - dN(27,0) = -_1mz2t1p3z * _1py, - dN(27,1) = _1mz2t1p3z * _1mx, - dN(27,2) = _p3m9z2m2z * _1mxt1py; - dN(28,0) = _1mz2t1m3z * _1my, - dN(28,1) = -_1mz2t1m3z * _1px, - dN(28,2) = _m3m9z2m2z * _1pxt1my; - dN(29,0) = _1mz2t1p3z * _1my, - dN(29,1) = -_1mz2t1p3z * _1px, - dN(29,2) = _p3m9z2m2z * _1pxt1my; - dN(30,0) = _1mz2t1m3z * _1py, - dN(30,1) = _1mz2t1m3z * _1px, - dN(30,2) = _m3m9z2m2z * _1pxt1py; - dN(31,0) = _1mz2t1p3z * _1py, - dN(31,1) = _1mz2t1p3z * _1px, - dN(31,2) = _p3m9z2m2z * _1pxt1py; + dN(24, 0) = -_1mz2t1m3z * _1my, + dN(24, 1) = -_1mz2t1m3z * _1mx, + dN(24, 2) = _m3m9z2m2z * _1mxt1my; + dN(25, 0) = -_1mz2t1p3z * _1my, + dN(25, 1) = -_1mz2t1p3z * _1mx, + dN(25, 2) = _p3m9z2m2z * _1mxt1my; + dN(26, 0) = -_1mz2t1m3z * _1py, + dN(26, 1) = _1mz2t1m3z * _1mx, + dN(26, 2) = _m3m9z2m2z * _1mxt1py; + dN(27, 0) = -_1mz2t1p3z * _1py, + dN(27, 1) = _1mz2t1p3z * _1mx, + dN(27, 2) = _p3m9z2m2z * _1mxt1py; + dN(28, 0) = _1mz2t1m3z * _1my, + dN(28, 1) = -_1mz2t1m3z * _1px, + dN(28, 2) = _m3m9z2m2z * _1pxt1my; + dN(29, 0) = _1mz2t1p3z * _1my, + dN(29, 1) = -_1mz2t1p3z * _1px, + dN(29, 2) = _p3m9z2m2z * _1pxt1my; + dN(30, 0) = _1mz2t1m3z * _1py, + dN(30, 1) = _1mz2t1m3z * _1px, + dN(30, 2) = _m3m9z2m2z * _1pxt1py; + dN(31, 0) = _1mz2t1p3z * _1py, + dN(31, 1) = _1mz2t1p3z * _1px, + dN(31, 2) = _p3m9z2m2z * _1pxt1py; dN.bottomRowsMul(32u - 8u, 9.0 / 64.0); - } return res; } - - bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const& x, - btVector3* gradient) const + btVector3* gradient) const { btAssert(m_isValid); if (!m_isValid) @@ -459,15 +449,15 @@ bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const if (!m_domain.contains(x)) return false; - btVector3 tmpmi = ((x - m_domain.min())*(m_inv_cell_size));//.cast<unsigned int>().eval(); - unsigned int mi[3] = {(unsigned int )tmpmi[0],(unsigned int )tmpmi[1],(unsigned int )tmpmi[2]}; + btVector3 tmpmi = ((x - m_domain.min()) * (m_inv_cell_size)); //.cast<unsigned int>().eval(); + unsigned int mi[3] = {(unsigned int)tmpmi[0], (unsigned int)tmpmi[1], (unsigned int)tmpmi[2]}; if (mi[0] >= m_resolution[0]) - mi[0] = m_resolution[0]-1; + mi[0] = m_resolution[0] - 1; if (mi[1] >= m_resolution[1]) - mi[1] = m_resolution[1]-1; + mi[1] = m_resolution[1] - 1; if (mi[2] >= m_resolution[2]) - mi[2] = m_resolution[2]-1; - btMultiIndex mui; + mi[2] = m_resolution[2] - 1; + btMultiIndex mui; mui.ijk[0] = mi[0]; mui.ijk[1] = mi[1]; mui.ijk[2] = mi[2]; @@ -478,12 +468,12 @@ bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const btAlignedBox3d sd = subdomain(i); i = i_; - btVector3 d = sd.m_max-sd.m_min;//.diagonal().eval(); + btVector3 d = sd.m_max - sd.m_min; //.diagonal().eval(); btVector3 denom = (sd.max() - sd.min()); - btVector3 c0 = btVector3(2.0,2.0,2.0)/denom; - btVector3 c1 = (sd.max() + sd.min())/denom; - btVector3 xi = (c0*x - c1); + btVector3 c0 = btVector3(2.0, 2.0, 2.0) / denom; + btVector3 c1 = (sd.max() + sd.min()) / denom; + btVector3 xi = (c0 * x - c1); btCell32 const& cell = m_cells[field_id][i]; if (!gradient) @@ -497,7 +487,8 @@ bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const double c = m_nodes[field_id][v]; if (c == DBL_MAX) { - return false;; + return false; + ; } phi += c * N[j]; } @@ -529,4 +520,3 @@ bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const dist = phi; return true; } - |