diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-15 08:06:14 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-15 08:06:14 (GMT) |
commit | 2586b55dffeb6608e15b3092771d71b974d50854 (patch) | |
tree | 5e885747c24f1f3e8757b19794c698e556bc8d0c | |
parent | e8f2d9c36d5f723ca1ff08829801db89c4836062 (diff) |
Clifford Wolf:
Now using int64 for the fixed point logic in Grid[23]d<T>
git-svn-id: http://svn.clifford.at/openscad/trunk@306 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r-- | openscad.h | 64 |
1 files changed, 32 insertions, 32 deletions
@@ -78,7 +78,7 @@ class Grid2d { public: double res; - QHash<QPair<int,int>, T> db; + QHash<QPair<int64_t,int64_t>, T> db; Grid2d(double resolution) { res = resolution; @@ -89,13 +89,13 @@ public: if not. */ T &align(double &x, double &y) { - int ix = (int)round(x / res); - int iy = (int)round(y / res); - if (!db.contains(QPair<int,int>(ix, iy))) { + int64_t ix = (int64_t)round(x / res); + int64_t iy = (int64_t)round(y / res); + if (!db.contains(QPair<int64_t,int64_t>(ix, iy))) { int dist = 10; - for (int jx = ix - 1; jx <= ix + 1; jx++) { - for (int jy = iy - 1; jy <= iy + 1; jy++) { - if (!db.contains(QPair<int,int>(jx, jy))) + for (int64_t jx = ix - 1; jx <= ix + 1; jx++) { + for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { + if (!db.contains(QPair<int64_t,int64_t>(jx, jy))) continue; if (abs(ix-jx) + abs(iy-jy) < dist) { dist = abs(ix-jx) + abs(iy-jy); @@ -106,16 +106,16 @@ public: } } x = ix * res, y = iy * res; - return db[QPair<int,int>(ix, iy)]; + return db[QPair<int64_t,int64_t>(ix, iy)]; } bool has(double x, double y) const { - int ix = (int)round(x / res); - int iy = (int)round(y / res); - if (db.contains(QPair<int,int>(ix, iy))) + int64_t ix = (int64_t)round(x / res); + int64_t iy = (int64_t)round(y / res); + if (db.contains(QPair<int64_t,int64_t>(ix, iy))) return true; - for (int jx = ix - 1; jx <= ix + 1; jx++) - for (int jy = iy - 1; jy <= iy + 1; jy++) { - if (db.contains(QPair<int,int>(jx, jy))) + for (int64_t jx = ix - 1; jx <= ix + 1; jx++) + for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { + if (db.contains(QPair<int64_t,int64_t>(jx, jy))) return true; } return false; @@ -140,21 +140,21 @@ class Grid3d { public: double res; - QHash<QPair<QPair<int,int>,int>, T> db; + QHash<QPair<QPair<int64_t,int64_t>,int64_t>, T> db; Grid3d(double resolution) { res = resolution; } T &align(double &x, double &y, double &z) { - int ix = (int)round(x / res); - int iy = (int)round(y / res); - int iz = (int)round(z / res); - if (!db.contains(QPair<QPair<int,int>,int>(QPair<int,int>(ix, iy), iz))) { + int64_t ix = (int64_t)round(x / res); + int64_t iy = (int64_t)round(y / res); + int64_t iz = (int64_t)round(z / res); + if (!db.contains(QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(ix, iy), iz))) { int dist = 10; - for (int jx = ix - 1; jx <= ix + 1; jx++) { - for (int jy = iy - 1; jy <= iy + 1; jy++) { - for (int jz = iz - 1; jz <= iz + 1; jz++) { - if (!db.contains(QPair<QPair<int,int>,int>(QPair<int,int>(jx, jy), jz))) + for (int64_t jx = ix - 1; jx <= ix + 1; jx++) { + for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { + for (int64_t jz = iz - 1; jz <= iz + 1; jz++) { + if (!db.contains(QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(jx, jy), jz))) continue; if (abs(ix-jx) + abs(iy-jy) + abs(iz-jz) < dist) { dist = abs(ix-jx) + abs(iy-jy) + abs(iz-jz); @@ -167,18 +167,18 @@ public: } } x = ix * res, y = iy * res, z = iz * res; - return db[QPair<QPair<int,int>,int>(QPair<int,int>(ix, iy), iz)]; + return db[QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(ix, iy), iz)]; } bool has(double x, double y, double z) { - int ix = (int)round(x / res); - int iy = (int)round(y / res); - int iz = (int)round(z / res); - if (db.contains(QPair<QPair<int,int>,int>(QPair<int,int>(ix, iy), iz))) + int64_t ix = (int64_t)round(x / res); + int64_t iy = (int64_t)round(y / res); + int64_t iz = (int64_t)round(z / res); + if (db.contains(QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(ix, iy), iz))) return true; - for (int jx = ix - 1; jx <= ix + 1; jx++) - for (int jy = iy - 1; jy <= iy + 1; jy++) - for (int jz = iz - 1; jz <= iz + 1; jz++) { - if (db.contains(QPair<QPair<int,int>,int>(QPair<int,int>(jx, jy), jz))) + for (int64_t jx = ix - 1; jx <= ix + 1; jx++) + for (int64_t jy = iy - 1; jy <= iy + 1; jy++) + for (int64_t jz = iz - 1; jz <= iz + 1; jz++) { + if (db.contains(QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(jx, jy), jz))) return true; } return false; |