Browse Source

upload for holiday

master
lab pc 3 years ago
parent
commit
a73b3703cb
  1. 2
      CMakeLists.txt
  2. 1
      tests/2d_broken_test/.gitignore
  3. 8
      tests/2d_broken_test/CMakeLists.txt
  4. 548
      tests/2d_broken_test/data/broken.vtk
  5. 101
      tests/2d_broken_test/main.cpp
  6. 18
      tests/2d_broken_test/test-path.h.in
  7. 90
      tests/aabb_tree_test/main.cpp

2
CMakeLists.txt

@ -39,6 +39,7 @@ if(Octree_BUILD_TEST)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests/udf_test)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests/search_assign_test)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests/aabb_tree_test)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests/2d_broken_test)
endif()
enable_testing()
@ -48,4 +49,5 @@ if(Octree_BUILD_TEST)
add_test(NAME udf_test COMMAND $<TARGET_FILE:udf_test>)
add_test(NAME search_assign_test COMMAND $<TARGET_FILE:search_assign_test>)
add_test(NAME aabb_tree_test COMMAND $<TARGET_FILE:aabb_tree_test>)
add_test(NAME 2d_broken_test COMMAND $<TARGET_FILE:2d_broken_test>)
endif()

1
tests/2d_broken_test/.gitignore

@ -0,0 +1 @@
test-path.h

8
tests/2d_broken_test/CMakeLists.txt

@ -0,0 +1,8 @@
set(LOCAL_TEST_DATA_BASE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/data)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/test-path.h.in"
"${CMAKE_CURRENT_SOURCE_DIR}/test-path.h"
)
add_executable(2d_broken_test main.cpp)
target_link_libraries(2d_broken_test Octree pMesh)

548
tests/2d_broken_test/data/broken.vtk

@ -0,0 +1,548 @@
# vtk DataFile Version 3.0
Volume Mesh
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 181 float
0 2 0
0.0349048 1.9997 0
0.069799 1.99878 0
0.104672 1.99726 0
0.139513 1.99513 0
0.174311 1.99239 0
0.209057 1.98904 0
0.243739 1.98509 0
0.278346 1.98054 0
0.312869 1.97538 0
0.347296 1.96962 0
0.381618 1.96325 0
0.415823 1.9563 0
0.449902 1.94874 0
0.483844 1.94059 0
0.517638 1.93185 0
0.551275 1.92252 0
0.584743 1.91261 0
0.618034 1.90211 0
0.651136 1.89104 0
0.68404 1.87939 0
0.716736 1.86716 0
0.749213 1.85437 0
0.781462 1.84101 0
0.813473 1.82709 0
0.845237 1.81262 0
0.876742 1.79759 0
0.907981 1.78201 0
0.938943 1.7659 0
0.969619 1.74924 0
1 1.73205 0
1.03008 1.71433 0
1.05984 1.6961 0
1.08928 1.67734 0
1.11839 1.65808 0
1.14715 1.6383 0
1.17557 1.61803 0
1.20363 1.59727 0
1.23132 1.57602 0
1.25864 1.55429 0
1.28558 1.53209 0
1.31212 1.50942 0
1.33826 1.48629 0
1.364 1.46271 0
1.38932 1.43868 0
1.41421 1.41421 0
1.43868 1.38932 0
1.46271 1.364 0
1.48629 1.33826 0
1.50942 1.31212 0
1.53209 1.28558 0
1.55429 1.25864 0
1.57602 1.23132 0
1.59727 1.20363 0
1.61803 1.17557 0
1.6383 1.14715 0
1.65808 1.11839 0
1.67734 1.08928 0
1.6961 1.05984 0
1.71433 1.03008 0
1.73205 1 0
1.74924 0.969619 0
1.7659 0.938943 0
1.78201 0.907981 0
1.79759 0.876742 0
1.81262 0.845237 0
1.82709 0.813473 0
1.84101 0.781462 0
1.85437 0.749213 0
1.86716 0.716736 0
1.87939 0.68404 0
1.89104 0.651136 0
1.90211 0.618034 0
1.91261 0.584743 0
1.92252 0.551275 0
1.93185 0.517638 0
1.94059 0.483844 0
1.94874 0.449902 0
1.9563 0.415823 0
1.96325 0.381618 0
1.96962 0.347296 0
1.97538 0.312869 0
1.98054 0.278346 0
1.98509 0.243739 0
1.98904 0.209057 0
1.99239 0.174311 0
1.99513 0.139513 0
1.99726 0.104672 0
1.99878 0.069799 0
1.9997 0.0349048 0
2 0 0
1.9997 -0.0349048 0
1.99878 -0.069799 0
1.99726 -0.104672 0
1.99513 -0.139513 0
1.99239 -0.174311 0
1.98904 -0.209057 0
1.98509 -0.243739 0
1.98054 -0.278346 0
1.97538 -0.312869 0
1.96962 -0.347296 0
1.96325 -0.381618 0
1.9563 -0.415823 0
1.94874 -0.449902 0
1.94059 -0.483844 0
1.93185 -0.517638 0
1.92252 -0.551275 0
1.91261 -0.584743 0
1.90211 -0.618034 0
1.89104 -0.651136 0
1.87939 -0.68404 0
1.86716 -0.716736 0
1.85437 -0.749213 0
1.84101 -0.781462 0
1.82709 -0.813473 0
1.81262 -0.845237 0
1.79759 -0.876742 0
1.78201 -0.907981 0
1.7659 -0.938943 0
1.74924 -0.969619 0
1.73205 -1 0
1.71433 -1.03008 0
1.6961 -1.05984 0
1.67734 -1.08928 0
1.65808 -1.11839 0
1.6383 -1.14715 0
1.61803 -1.17557 0
1.59727 -1.20363 0
1.57602 -1.23132 0
1.55429 -1.25864 0
1.53209 -1.28558 0
1.50942 -1.31212 0
1.48629 -1.33826 0
1.46271 -1.364 0
1.43868 -1.38932 0
1.41421 -1.41421 0
1.38932 -1.43868 0
1.364 -1.46271 0
1.33826 -1.48629 0
1.31212 -1.50942 0
1.28558 -1.53209 0
1.25864 -1.55429 0
1.23132 -1.57602 0
1.20363 -1.59727 0
1.17557 -1.61803 0
1.14715 -1.6383 0
1.11839 -1.65808 0
1.08928 -1.67734 0
1.05984 -1.6961 0
1.03008 -1.71433 0
1 -1.73205 0
0.969619 -1.74924 0
0.938943 -1.7659 0
0.907981 -1.78201 0
0.876742 -1.79759 0
0.845237 -1.81262 0
0.813473 -1.82709 0
0.781462 -1.84101 0
0.749213 -1.85437 0
0.716736 -1.86716 0
0.68404 -1.87939 0
0.651136 -1.89104 0
0.618034 -1.90211 0
0.584743 -1.91261 0
0.551275 -1.92252 0
0.517638 -1.93185 0
0.483844 -1.94059 0
0.449902 -1.94874 0
0.415823 -1.9563 0
0.381618 -1.96325 0
0.347296 -1.96962 0
0.312869 -1.97538 0
0.278346 -1.98054 0
0.243739 -1.98509 0
0.209057 -1.98904 0
0.174311 -1.99239 0
0.139513 -1.99513 0
0.104672 -1.99726 0
0.069799 -1.99878 0
0.0349048 -1.9997 0
0 -2 0
CELLS 180 540
2 0 1
2 1 2
2 2 3
2 3 4
2 4 5
2 5 6
2 6 7
2 7 8
2 8 9
2 9 10
2 10 11
2 11 12
2 12 13
2 13 14
2 14 15
2 15 16
2 16 17
2 17 18
2 18 19
2 19 20
2 20 21
2 21 22
2 22 23
2 23 24
2 24 25
2 25 26
2 26 27
2 27 28
2 28 29
2 29 30
2 30 31
2 31 32
2 32 33
2 33 34
2 34 35
2 35 36
2 36 37
2 37 38
2 38 39
2 39 40
2 40 41
2 41 42
2 42 43
2 43 44
2 44 45
2 45 46
2 46 47
2 47 48
2 48 49
2 49 50
2 50 51
2 51 52
2 52 53
2 53 54
2 54 55
2 55 56
2 56 57
2 57 58
2 58 59
2 59 60
2 60 61
2 61 62
2 62 63
2 63 64
2 64 65
2 65 66
2 66 67
2 67 68
2 68 69
2 69 70
2 70 71
2 71 72
2 72 73
2 73 74
2 74 75
2 75 76
2 76 77
2 77 78
2 78 79
2 79 80
2 80 81
2 81 82
2 82 83
2 83 84
2 84 85
2 85 86
2 86 87
2 87 88
2 88 89
2 89 90
2 90 91
2 91 92
2 92 93
2 93 94
2 94 95
2 95 96
2 96 97
2 97 98
2 98 99
2 99 100
2 100 101
2 101 102
2 102 103
2 103 104
2 104 105
2 105 106
2 106 107
2 107 108
2 108 109
2 109 110
2 110 111
2 111 112
2 112 113
2 113 114
2 114 115
2 115 116
2 116 117
2 117 118
2 118 119
2 119 120
2 120 121
2 121 122
2 122 123
2 123 124
2 124 125
2 125 126
2 126 127
2 127 128
2 128 129
2 129 130
2 130 131
2 131 132
2 132 133
2 133 134
2 134 135
2 135 136
2 136 137
2 137 138
2 138 139
2 139 140
2 140 141
2 141 142
2 142 143
2 143 144
2 144 145
2 145 146
2 146 147
2 147 148
2 148 149
2 149 150
2 150 151
2 151 152
2 152 153
2 153 154
2 154 155
2 155 156
2 156 157
2 157 158
2 158 159
2 159 160
2 160 161
2 161 162
2 162 163
2 163 164
2 164 165
2 165 166
2 166 167
2 167 168
2 168 169
2 169 170
2 170 171
2 171 172
2 172 173
2 173 174
2 174 175
2 175 176
2 176 177
2 177 178
2 178 179
2 179 180
CELL_TYPES 180
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3

101
tests/2d_broken_test/main.cpp

@ -0,0 +1,101 @@
/**
* ------------------------------------
* @author: Weipeng Kong
* @date: 2021/11/17
* @email: yjxkwp@foxmail.com
* @site: https://donot.fit
* @description:
* ------------------------------------
**/
#include <iostream>
#include "Octree/sdf/SDFOctree.h"
#include "Octree/OctreeBuilder.h"
#include "Octree/OctreeTraverser.h"
#include "Octree/sdf/SDFTraversalSampler.h"
#include <igl/marching_cubes.h>
#include <igl/voxel_grid.h>
#include <igl/writeOBJ.h>
#include <igl/signed_distance.h>
#include <pMesh/mesh/TriangleMesh.h>
#include <pMesh/mesh/HexahedronMesh.h>
#include <pMesh/io/reader/OBJReader.h>
#include <pMesh/io/reader/VTKReader.h>
#include <pMesh/io/writer/VTKWriter.h>
#include <pMesh/io/adapter/DefaultReadAdapter.h>
#include <pMesh/io/adapter/DefaultWriteAdapter.h>
#include <boost/timer.hpp>
#include <boost/log/trivial.hpp>
#include <pMesh/io/reader/BaseReader.h>
#include <pMesh/io/adapter/DefaultReadAdapter.h>
#include "test-path.h"
int main(){
auto out_sphere_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "broken.vtk";
auto inside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "inside_output_point.vtk";
auto outside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "outside_output_point.vtk";
double radius = 2;
Eigen::MatrixXd V;
Eigen::MatrixXi F;
std::vector<Eigen::Vector2i> mesh;
pMesh::SurfaceMesh half_sphere;
pMesh::SurfaceMesh debug_point_cloud;
for (int i = 0; i <= 180; ++i) {
double rad = i * M_PI / 180;
double x = radius * std::sin(rad);
double y = radius * std::cos(rad);
half_sphere.push_vertex(Eigen::Vector3d{x, y, 0});
if(i != 0)
half_sphere.push_face({i - 1, i});
}
pMesh::io::VTKWriter(3, out_sphere_path) << pMesh::io::DefaultSurfaceWriteAdapter(half_sphere)();
V.resize(half_sphere.v_size(), 3);
F.resize(half_sphere.f_size(), 2);
for (int i = 0; i < half_sphere.v_size(); ++i) {
V.row(i) = half_sphere.vertices[i].attr.coordinate;
}
for (int i = 0; i < half_sphere.f_size(); ++i) {
F.row(i) << half_sphere.faces[i].attr.vertices[0].id(), half_sphere.faces[i].attr.vertices[1].id();
}
Eigen::MatrixXd GV;
Eigen::RowVector3i res;
const int s = 10;
igl::voxel_grid(V, 0, s, 0, GV, res);
Eigen::MatrixXd S;
Eigen::MatrixXi I;
Eigen::MatrixXd C;
Eigen::MatrixXd N;
igl::signed_distance(GV, V, F, igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL, S, I, C, N);
// pMesh::SurfaceMesh inside_mesh;
// pMesh::SurfaceMesh outside_mesh;
//
// for (int i = 0; i < GV.rows(); ++i) {
// auto p = GV.row(i);
// if (S(i) < 0) {
//// std::cout << hier3.winding_number(p) << std::endl;
// auto v = pMesh::Surface::Vertex(inside_mesh.v_size(), GV.row(i));
// auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(inside_mesh.v_size())}});
// inside_mesh.vertices.emplace_back(v);
// inside_mesh.faces.emplace_back(f);
//
// } else {
// auto v = pMesh::Surface::Vertex(outside_mesh.v_size(), GV.row(i));
// auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(outside_mesh.v_size())}});
// outside_mesh.vertices.emplace_back(v);
// outside_mesh.faces.emplace_back(f);
// }
// }
// pMesh::io::VTKWriter(1, inside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(inside_mesh)();
// pMesh::io::VTKWriter(1, outside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(outside_mesh)();
}

18
tests/2d_broken_test/test-path.h.in

@ -0,0 +1,18 @@
/**
* ------------------------------------
* @author: Weipeng Kong
* @date: 2021/12/1
* @email: yjxkwp@foxmail.com
* @site: https://donot.fit
* @description:
* ------------------------------------
**/
#ifndef OCTREE_SDF_TEST_PATH_H
#define OCTREE_SDF_TEST_PATH_H
#define TEST_DATA_BASE_PATH "@TEST_DATA_BASE_PATH@"
#define LOCAL_TEST_DATA_BASE_PATH "@LOCAL_TEST_DATA_BASE_PATH@"
#endif //OCTREE_SDF_TEST_PATH_H

90
tests/aabb_tree_test/main.cpp

@ -1,89 +1 @@
/**
* ------------------------------------
* @author: Weipeng Kong
* @date: 2021/11/17
* @email: yjxkwp@foxmail.com
* @site: https://donot.fit
* @description:
* ------------------------------------
**/
#include <igl/WindingNumberTree.h>
#include <igl/WindingNumberAABB.h>
#include <iostream>
#include <igl/marching_cubes.h>
#include <igl/voxel_grid.h>
#include <igl/writeOBJ.h>
#include <igl/readOBJ.h>
#include <igl/read_triangle_mesh.h>
#include <igl/in_element.h>
#include <igl/signed_distance.h>
#include <boost/log/trivial.hpp>
#include <boost/filesystem.hpp>
#include <Eigen/Core>
#include <pMesh/io/writer/VTKWriter.h>
#include <pMesh/mesh/TriangleMesh.h>
#include <pMesh/io/adapter/DefaultWriteAdapter.h>
#include "test-path.h"
int main() {
auto mesh_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "hole_quarter_sphere.obj";
auto inside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "inside_output_point.vtk";
auto outside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "outside_output_point.vtk";
auto mc_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "hole_quarter_sphere_mc.obj";
Eigen::MatrixXd V;
Eigen::MatrixXi F;
igl::read_triangle_mesh(mesh_path.string(), V, F);
// typedef Eigen::Matrix<double, 1, 3> RowVector3S;
// igl::WindingNumberAABB<RowVector3S, Eigen::MatrixXd, Eigen::MatrixXi> hier3;
// hier3.set_mesh(V, F);
// hier3.grow();
// igl::AABB<Eigen::MatrixXd, 3> aabb;
// igl::signed_distance_pseudonormal(aabb,)
Eigen::MatrixXd GV;
Eigen::RowVector3i res;
const int s = 10;
igl::voxel_grid(V, 0, s, 1, GV, res);
Eigen::MatrixXd S;
Eigen::MatrixXi I;
Eigen::MatrixXd C;
Eigen::MatrixXd N;
igl::signed_distance(GV, V, F, igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL, S, I, C, N);
pMesh::SurfaceMesh inside_mesh;
pMesh::SurfaceMesh outside_mesh;
for (int i = 0; i < GV.rows(); ++i) {
auto p = GV.row(i);
if (S(i) < 0) {
// std::cout << hier3.winding_number(p) << std::endl;
auto v = pMesh::Surface::Vertex(inside_mesh.v_size(), GV.row(i));
auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(inside_mesh.v_size())}});
inside_mesh.vertices.emplace_back(v);
inside_mesh.faces.emplace_back(f);
} else {
auto v = pMesh::Surface::Vertex(outside_mesh.v_size(), GV.row(i));
auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(outside_mesh.v_size())}});
outside_mesh.vertices.emplace_back(v);
outside_mesh.faces.emplace_back(f);
}
}
pMesh::io::VTKWriter(1, inside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(inside_mesh)();
pMesh::io::VTKWriter(1, outside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(outside_mesh)();
Eigen::MatrixXd SV, BV;
Eigen::MatrixXi SF, BF;
igl::marching_cubes(S, GV, res(0), res(1), res(2), 0, SV, SF);
igl::writeOBJ(mc_out_point_path.string(), SV, SF);
return 0;
}
/** * ------------------------------------ * @author: Weipeng Kong * @date: 2021/11/17 * @email: yjxkwp@foxmail.com * @site: https://donot.fit * @description: * ------------------------------------ **/ #include <igl/WindingNumberTree.h> #include <igl/WindingNumberAABB.h> #include <iostream> #include <igl/marching_cubes.h> #include <igl/voxel_grid.h> #include <igl/writeOBJ.h> #include <igl/readOBJ.h> #include <igl/read_triangle_mesh.h> #include <igl/in_element.h> #include <igl/signed_distance.h> #include <boost/log/trivial.hpp> #include <boost/filesystem.hpp> #include <Eigen/Core> #include <pMesh/io/writer/VTKWriter.h> #include <pMesh/mesh/TriangleMesh.h> #include <pMesh/io/adapter/DefaultWriteAdapter.h> #include "test-path.h" int main() { auto mesh_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "dup_quarter_sphere.obj"; auto inside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "inside_output_point.vtk"; auto outside_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "outside_output_point.vtk"; auto mc_out_point_path = boost::filesystem::path(LOCAL_TEST_DATA_BASE_PATH) / "dup_quarter_sphere_mc.obj"; Eigen::MatrixXd V; Eigen::MatrixXi F; igl::read_triangle_mesh(mesh_path.string(), V, F); // typedef Eigen::Matrix<double, 1, 3> RowVector3S; // igl::WindingNumberAABB<RowVector3S, Eigen::MatrixXd, Eigen::MatrixXi> hier3; // hier3.set_mesh(V, F); // hier3.grow(); // igl::AABB<Eigen::MatrixXd, 3> aabb; // igl::signed_distance_pseudonormal(aabb,) Eigen::MatrixXd GV; Eigen::RowVector3i res; const int s = 30; igl::voxel_grid(V, 0, s, 0, GV, res); Eigen::MatrixXd S; Eigen::MatrixXi I; Eigen::MatrixXd C; Eigen::MatrixXd N; igl::signed_distance(GV, V, F, igl::SIGNED_DISTANCE_TYPE_PSEUDONORMAL, S, I, C, N); pMesh::SurfaceMesh inside_mesh; pMesh::SurfaceMesh outside_mesh; for (int i = 0; i < GV.rows(); ++i) { auto p = GV.row(i); if (S(i) < 0) { // std::cout << hier3.winding_number(p) << std::endl; auto v = pMesh::Surface::Vertex(inside_mesh.v_size(), GV.row(i)); auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(inside_mesh.v_size())}}); inside_mesh.vertices.emplace_back(v); inside_mesh.faces.emplace_back(f); } else { auto v = pMesh::Surface::Vertex(outside_mesh.v_size(), GV.row(i)); auto f = pMesh::Surface::Face({.vertices={pMesh::Surface::VertexHandle(outside_mesh.v_size())}}); outside_mesh.vertices.emplace_back(v); outside_mesh.faces.emplace_back(f); } } pMesh::io::VTKWriter(1, inside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(inside_mesh)(); pMesh::io::VTKWriter(1, outside_out_point_path.string()) << pMesh::io::DefaultSurfaceWriteAdapter(outside_mesh)(); Eigen::MatrixXd SV, BV; Eigen::MatrixXi SF, BF; igl::marching_cubes(S, GV, res(0), res(1), res(2), 0, SV, SF); igl::writeOBJ(mc_out_point_path.string(), SV, SF); return 0; }
Loading…
Cancel
Save