Example #1
0
bool test_cube() {
	LEVELSET<GRID<TV> >* implicit_object = createTriMeshAndLevelSet("/Users/jingweihuang/Desktop/projects/levelset/Resources/models/cube.obj");
    for (int i = 1; i <= implicit_object->phi.dim(1); ++i) {
        for (int j = 1; j <= implicit_object->phi.dim(2); ++j) {
            for (int k = 1; k <= implicit_object->phi.dim(3); ++k) {
				double min_dis = 2;
                TV x = implicit_object->grid.X(TV_INT(i,j,k));
                if (x(1) < -0.95 || x(1) > 0.95 || x(2) < -0.95 || x(2) > 0.95 || x(3) < -0.95 || x(3) > 0.95)
                    continue;
				TV normal = TV(0,0,0);
				if (min_dis > x(1) + 1) {
					min_dis = x(1) + 1;
					normal = TV(-1,0,0);
				}
				if (min_dis > 1 - x(1)) {
					min_dis = 1 - x(1);
					normal = TV(1, 0, 0);
				}
				if (min_dis > x(2) + 1) {
					min_dis = x(2) + 1;
					normal = TV(0, -1, 0);
				}
				if (min_dis > 1 - x(2)) {
					min_dis = 1 - x(2);
					normal = TV(0, 1, 0);
				}
				if (min_dis > x(3) + 1) {
					min_dis = x(3) + 1;
					normal = TV(0, 0, -1);
				}
				if (min_dis > 1 - x(3)) {
					min_dis = 1 - x(3);
					normal = TV(0, 0, 1);
				}
				pair<float, TV> intersection = implicit_object->Intersect(x);
                double angle = acos(normal.Dot_Product(intersection.second)) / 3.141502654 * 180.0;
				if (angle > 5 && fabs(fabs(x(1)) - fabs(x(2))) > 1e-4 && fabs(fabs(x(1)) - fabs(x(3))) > 1e-4 && fabs(fabs(x(2)) - fabs(x(3))) > 1e-4) {
                    return false;
				}
			}
		}
	}
    return true;
}