Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2021-07-31 04:51:47 +0300
committerHans Goudey <h.goudey@me.com>2021-07-31 04:51:47 +0300
commit524908146cab94892dcfd355cfc42e0cc47a3dec (patch)
treeeb13fd1d94e049e801ebd9c37638eebe7804f0c2
parentd91c266986ded678bdc3ef83d69fbe456a23ef80 (diff)
Cleanup: Reorder functions
The Quadriflow remeshing was in the middle of the voxel remesh code.
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.cc184
1 files changed, 92 insertions, 92 deletions
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
index 059094090f2..9cb33bc17cb 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
@@ -63,98 +63,6 @@ using blender::Array;
using blender::float3;
using blender::IndexRange;
-#ifdef WITH_OPENVDB
-struct OpenVDBLevelSet *BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(
- Mesh *mesh, struct OpenVDBTransform *transform)
-{
- BKE_mesh_runtime_looptri_recalc(mesh);
- const MLoopTri *looptri = BKE_mesh_runtime_looptri_ensure(mesh);
- MVertTri *verttri = (MVertTri *)MEM_callocN(
- sizeof(*verttri) * BKE_mesh_runtime_looptri_len(mesh), "remesh_looptri");
- BKE_mesh_runtime_verttri_from_looptri(
- verttri, mesh->mloop, looptri, BKE_mesh_runtime_looptri_len(mesh));
-
- const int totfaces = BKE_mesh_runtime_looptri_len(mesh);
- const int totverts = mesh->totvert;
- Array<float3> verts(totverts);
- Array<int> faces(totfaces * 3);
-
- for (const int i : IndexRange(totverts)) {
- verts[i] = mesh->mvert[i].co;
- }
-
- for (const int i : IndexRange(totfaces)) {
- MVertTri &vt = verttri[i];
- faces[i * 3] = vt.tri[0];
- faces[i * 3 + 1] = vt.tri[1];
- faces[i * 3 + 2] = vt.tri[2];
- }
-
- struct OpenVDBLevelSet *level_set = OpenVDBLevelSet_create(false, nullptr);
- OpenVDBLevelSet_mesh_to_level_set(
- level_set, (const float *)verts.data(), faces.data(), totverts, totfaces, transform);
-
- MEM_freeN(verttri);
-
- return level_set;
-}
-
-Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLevelSet *level_set,
- double isovalue,
- double adaptivity,
- bool relax_disoriented_triangles)
-{
- struct OpenVDBVolumeToMeshData output_mesh;
- OpenVDBLevelSet_volume_to_mesh(
- level_set, &output_mesh, isovalue, adaptivity, relax_disoriented_triangles);
-
- Mesh *mesh = BKE_mesh_new_nomain(output_mesh.totvertices,
- 0,
- 0,
- (output_mesh.totquads * 4) + (output_mesh.tottriangles * 3),
- output_mesh.totquads + output_mesh.tottriangles);
-
- for (const int i : IndexRange(output_mesh.totvertices)) {
- copy_v3_v3(mesh->mvert[i].co, &output_mesh.vertices[i * 3]);
- }
-
- for (const int i : IndexRange(output_mesh.totquads)) {
- MPoly &poly = mesh->mpoly[i];
- const int loopstart = i * 4;
- poly.loopstart = loopstart;
- poly.totloop = 4;
- mesh->mloop[loopstart].v = output_mesh.quads[loopstart];
- mesh->mloop[loopstart + 1].v = output_mesh.quads[loopstart + 1];
- mesh->mloop[loopstart + 2].v = output_mesh.quads[loopstart + 2];
- mesh->mloop[loopstart + 3].v = output_mesh.quads[loopstart + 3];
- }
-
- const int triangle_poly_start = output_mesh.totquads;
- const int triangle_loop_start = output_mesh.totquads * 4;
- for (const int i : IndexRange(output_mesh.tottriangles)) {
- MPoly &poly = mesh->mpoly[triangle_poly_start + i];
- const int loopstart = triangle_loop_start + i * 3;
- poly.loopstart = loopstart;
- poly.totloop = 3;
- mesh->mloop[loopstart].v = output_mesh.triangles[i * 3 + 2];
- mesh->mloop[loopstart + 1].v = output_mesh.triangles[i * 3 + 1];
- mesh->mloop[loopstart + 2].v = output_mesh.triangles[i * 3];
- }
-
- BKE_mesh_calc_edges(mesh, false, false);
- BKE_mesh_calc_normals(mesh);
-
- MEM_freeN(output_mesh.quads);
- MEM_freeN(output_mesh.vertices);
-
- if (output_mesh.tottriangles > 0) {
- MEM_freeN(output_mesh.triangles);
- }
-
- return mesh;
-}
-#endif
-
#ifdef WITH_QUADRIFLOW
static Mesh *BKE_mesh_remesh_quadriflow(Mesh *input_mesh,
int target_faces,
@@ -291,6 +199,98 @@ Mesh *BKE_mesh_remesh_quadriflow_to_mesh_nomain(Mesh *mesh,
return new_mesh;
}
+#ifdef WITH_OPENVDB
+struct OpenVDBLevelSet *BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(
+ Mesh *mesh, struct OpenVDBTransform *transform)
+{
+ BKE_mesh_runtime_looptri_recalc(mesh);
+ const MLoopTri *looptri = BKE_mesh_runtime_looptri_ensure(mesh);
+ MVertTri *verttri = (MVertTri *)MEM_callocN(
+ sizeof(*verttri) * BKE_mesh_runtime_looptri_len(mesh), "remesh_looptri");
+ BKE_mesh_runtime_verttri_from_looptri(
+ verttri, mesh->mloop, looptri, BKE_mesh_runtime_looptri_len(mesh));
+
+ const int totfaces = BKE_mesh_runtime_looptri_len(mesh);
+ const int totverts = mesh->totvert;
+ Array<float3> verts(totverts);
+ Array<int> faces(totfaces * 3);
+
+ for (const int i : IndexRange(totverts)) {
+ verts[i] = mesh->mvert[i].co;
+ }
+
+ for (const int i : IndexRange(totfaces)) {
+ MVertTri &vt = verttri[i];
+ faces[i * 3] = vt.tri[0];
+ faces[i * 3 + 1] = vt.tri[1];
+ faces[i * 3 + 2] = vt.tri[2];
+ }
+
+ struct OpenVDBLevelSet *level_set = OpenVDBLevelSet_create(false, nullptr);
+ OpenVDBLevelSet_mesh_to_level_set(
+ level_set, (const float *)verts.data(), faces.data(), totverts, totfaces, transform);
+
+ MEM_freeN(verttri);
+
+ return level_set;
+}
+
+Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLevelSet *level_set,
+ double isovalue,
+ double adaptivity,
+ bool relax_disoriented_triangles)
+{
+ struct OpenVDBVolumeToMeshData output_mesh;
+ OpenVDBLevelSet_volume_to_mesh(
+ level_set, &output_mesh, isovalue, adaptivity, relax_disoriented_triangles);
+
+ Mesh *mesh = BKE_mesh_new_nomain(output_mesh.totvertices,
+ 0,
+ 0,
+ (output_mesh.totquads * 4) + (output_mesh.tottriangles * 3),
+ output_mesh.totquads + output_mesh.tottriangles);
+
+ for (const int i : IndexRange(output_mesh.totvertices)) {
+ copy_v3_v3(mesh->mvert[i].co, &output_mesh.vertices[i * 3]);
+ }
+
+ for (const int i : IndexRange(output_mesh.totquads)) {
+ MPoly &poly = mesh->mpoly[i];
+ const int loopstart = i * 4;
+ poly.loopstart = loopstart;
+ poly.totloop = 4;
+ mesh->mloop[loopstart].v = output_mesh.quads[loopstart];
+ mesh->mloop[loopstart + 1].v = output_mesh.quads[loopstart + 1];
+ mesh->mloop[loopstart + 2].v = output_mesh.quads[loopstart + 2];
+ mesh->mloop[loopstart + 3].v = output_mesh.quads[loopstart + 3];
+ }
+
+ const int triangle_poly_start = output_mesh.totquads;
+ const int triangle_loop_start = output_mesh.totquads * 4;
+ for (const int i : IndexRange(output_mesh.tottriangles)) {
+ MPoly &poly = mesh->mpoly[triangle_poly_start + i];
+ const int loopstart = triangle_loop_start + i * 3;
+ poly.loopstart = loopstart;
+ poly.totloop = 3;
+ mesh->mloop[loopstart].v = output_mesh.triangles[i * 3 + 2];
+ mesh->mloop[loopstart + 1].v = output_mesh.triangles[i * 3 + 1];
+ mesh->mloop[loopstart + 2].v = output_mesh.triangles[i * 3];
+ }
+
+ BKE_mesh_calc_edges(mesh, false, false);
+ BKE_mesh_calc_normals(mesh);
+
+ MEM_freeN(output_mesh.quads);
+ MEM_freeN(output_mesh.vertices);
+
+ if (output_mesh.tottriangles > 0) {
+ MEM_freeN(output_mesh.triangles);
+ }
+
+ return mesh;
+}
+#endif
+
Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh,
float voxel_size,
float adaptivity,