Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/mesh_remesh_voxel.c
| Show First 20 Lines • Show All 289 Lines • ▼ Show 20 Lines | UNUSED_VARS(mesh, | ||||
| preserve_boundary, | preserve_boundary, | ||||
| adaptive_scale, | adaptive_scale, | ||||
| update_cb, | update_cb, | ||||
| update_cb_data); | update_cb_data); | ||||
| #endif | #endif | ||||
| return new_mesh; | return new_mesh; | ||||
| } | } | ||||
| Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size, float adaptivity) | Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, | ||||
| float voxel_size, | |||||
| float adaptivity, | |||||
| float isovalue) | |||||
| { | { | ||||
| Mesh *new_mesh = NULL; | Mesh *new_mesh = NULL; | ||||
| #ifdef WITH_OPENVDB | #ifdef WITH_OPENVDB | ||||
| struct OpenVDBLevelSet *level_set; | struct OpenVDBLevelSet *level_set; | ||||
| struct OpenVDBTransform *xform = OpenVDBTransform_create(); | struct OpenVDBTransform *xform = OpenVDBTransform_create(); | ||||
| OpenVDBTransform_create_linear_transform(xform, (double)voxel_size); | OpenVDBTransform_create_linear_transform(xform, (double)voxel_size); | ||||
| level_set = BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(mesh, xform); | level_set = BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(mesh, xform); | ||||
| new_mesh = BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain( | new_mesh = BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain( | ||||
| level_set, 0.0, (float)adaptivity, false); | level_set, (double)isovalue, (double)adaptivity, false); | ||||
zeddb: Shouldn't `isovalue` and `adaptivity` be case to double rather than float? | |||||
Done Inline Actions*cast zeddb: *cast | |||||
| OpenVDBLevelSet_free(level_set); | OpenVDBLevelSet_free(level_set); | ||||
| OpenVDBTransform_free(xform); | OpenVDBTransform_free(xform); | ||||
| #else | #else | ||||
| UNUSED_VARS(mesh, voxel_size, adaptivity); | UNUSED_VARS(mesh, voxel_size, adaptivity); | ||||
| #endif | #endif | ||||
| return new_mesh; | return new_mesh; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 123 Lines • ▼ Show 20 Lines | BM_ITER_MESH (v, &iter_a, bm, BM_VERTS_OF_MESH) { | ||||
| add_v3_v3(co, vert->co); | add_v3_v3(co, vert->co); | ||||
| } | } | ||||
| mul_v3_fl(co, 1.0f / (float)BM_vert_edge_count(v)); | mul_v3_fl(co, 1.0f / (float)BM_vert_edge_count(v)); | ||||
| mid_v3_v3v3(v->co, v->co, co); | mid_v3_v3v3(v->co, v->co, co); | ||||
| } | } | ||||
| } | } | ||||
| BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); | BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); | ||||
| BM_mesh_elem_hflag_enable_all(bm, BM_FACE, BM_ELEM_TAG, false); | |||||
| BMO_op_callf(bm, | |||||
| (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE), | |||||
| "recalc_face_normals faces=%hf", | |||||
| BM_ELEM_TAG); | |||||
| BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_TAG, false); | |||||
| Mesh *result = BKE_mesh_from_bmesh_nomain(bm, | Mesh *result = BKE_mesh_from_bmesh_nomain(bm, | ||||
| (&(struct BMeshToMeshParams){ | (&(struct BMeshToMeshParams){ | ||||
| .calc_object_remap = false, | .calc_object_remap = false, | ||||
| }), | }), | ||||
| mesh); | mesh); | ||||
| BKE_id_free(NULL, mesh); | BKE_id_free(NULL, mesh); | ||||
| BM_mesh_free(bm); | BM_mesh_free(bm); | ||||
| return result; | return result; | ||||
| } | } | ||||
Shouldn't isovalue and adaptivity be case to double rather than float?