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:
authorover0219 <over0219@umn.edu>2020-06-09 01:50:36 +0300
committerover0219 <over0219@umn.edu>2020-06-09 01:50:36 +0300
commit5128d86a6f587bd49eaf2207c7b1d5c67b1ff728 (patch)
tree5fcca6ad874b5d7606337636195e3674ab200641
parentb86af3ecb70dd2f38e1f7c84af15a0b82662d81d (diff)
added tetgen
-rw-r--r--intern/tetgen/tetgen_api.h1
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py5
-rw-r--r--source/blender/blenkernel/BKE_mesh_remesh_voxel.h1
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.c18
-rw-r--r--source/blender/editors/object/object_intern.h1
-rw-r--r--source/blender/editors/object/object_ops.c1
-rw-r--r--source/blender/editors/object/object_remesh.c49
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h1
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c1
9 files changed, 76 insertions, 2 deletions
diff --git a/intern/tetgen/tetgen_api.h b/intern/tetgen/tetgen_api.h
index 1757b2d4ce9..6531d48cdb2 100644
--- a/intern/tetgen/tetgen_api.h
+++ b/intern/tetgen/tetgen_api.h
@@ -18,7 +18,6 @@ typedef struct TetGenRemeshData {
int out_totverts;
int out_totfacets;
int out_tottets;
-
} TetGenRemeshData;
void init_tetgenremeshdata(TetGenRemeshData *data);
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 425c94dfdcd..ccf66360ad0 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -484,8 +484,11 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel):
col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask")
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets")
col.operator("object.voxel_remesh", text="Voxel Remesh")
- else:
+ elif mesh.remesh_mode == 'QUAD':
col.operator("object.quadriflow_remesh", text="QuadriFlow Remesh")
+ else:
+ col.operator("object.tetgen_remesh", text="Tetrahedralize")
+
class DATA_PT_customdata(MeshButtonsPanel, Panel):
diff --git a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h
index b63f9a9814b..15569406680 100644
--- a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h
+++ b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h
@@ -57,6 +57,7 @@ struct Mesh *BKE_mesh_remesh_quadriflow_to_mesh_nomain(struct Mesh *mesh,
bool adaptive_scale,
void *update_cb,
void *update_cb_data);
+struct Mesh *BKE_mesh_remesh_tetgen_to_mesh_nomain(struct Mesh *mesh);
/* Data reprojection functions */
void BKE_mesh_remesh_reproject_paint_mask(struct Mesh *target, struct Mesh *source);
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
index 2b279e3d87c..c3423c682c9 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.c
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
@@ -332,6 +332,11 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh)
}
BKE_mesh_calc_edges(mesh, false, false);
BKE_mesh_calc_normals(mesh);
+
+// mesh->tottet = tg.out_tottets;
+// mesh->mtet = (unsigned int *)MEM_malloc_arrayN(tg.out_tottets*4, sizeof(unsigned int), "remesh_output_tets");
+// memcpy(mesh->mtet,tg.out_tets,tg.out_tottets*4*sizeof(unsigned int));
+
} // end success
if (tg.out_verts)
@@ -347,6 +352,19 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh)
}
#endif
+struct Mesh *BKE_mesh_remesh_tetgen_to_mesh_nomain(struct Mesh *mesh)
+{
+ #ifdef WITH_TETGEN
+ Mesh *new_mesh = BKE_mesh_remesh_tetgen(mesh);
+ return new_mesh;
+ #else
+ UNUSED_VARS(mesh,
+ tets,
+ tottets);
+ #endif
+ return NULL;
+}
+
Mesh *BKE_mesh_remesh_quadriflow_to_mesh_nomain(Mesh *mesh,
int target_faces,
int seed,
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index d7a7b4ca110..da89e88193e 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -295,6 +295,7 @@ void TRANSFORM_OT_vertex_random(struct wmOperatorType *ot);
void OBJECT_OT_voxel_remesh(struct wmOperatorType *ot);
void OBJECT_OT_voxel_size_edit(struct wmOperatorType *ot);
void OBJECT_OT_quadriflow_remesh(struct wmOperatorType *ot);
+void OBJECT_OT_tetgen_remesh(struct wmOperatorType *ot);
/* object_transfer_data.c */
void OBJECT_OT_data_transfer(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 819b6c18a44..f1c1cc6997a 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -270,6 +270,7 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_voxel_size_edit);
WM_operatortype_append(OBJECT_OT_quadriflow_remesh);
+ WM_operatortype_append(OBJECT_OT_tetgen_remesh);
}
void ED_operatormacros_object(void)
diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c
index 22869748b22..10e41ebe946 100644
--- a/source/blender/editors/object/object_remesh.c
+++ b/source/blender/editors/object/object_remesh.c
@@ -1181,4 +1181,53 @@ void OBJECT_OT_quadriflow_remesh(wmOperatorType *ot)
255);
}
+static int tetgen_remesh_exec(bContext *C, wmOperator *op)
+{
+ Object *ob = CTX_data_active_object(C);
+
+ Mesh *mesh = ob->data;
+ Mesh *new_mesh = NULL;
+
+ new_mesh = BKE_mesh_remesh_tetgen_to_mesh_nomain(mesh);
+
+ if (!new_mesh) {
+ BKE_report(op->reports, RPT_ERROR, "TetGen remesher failed to create mesh");
+ return OPERATOR_CANCELLED;
+ }
+
+ BKE_mesh_nomain_to_mesh(new_mesh, mesh, ob, &CD_MASK_MESH, true);
+
+ if (mesh->flag & ME_REMESH_SMOOTH_NORMALS) {
+ BKE_mesh_smooth_flag_set(ob->data, true);
+ }
+
+ if (ob->mode == OB_MODE_SCULPT) {
+ ED_sculpt_undo_geometry_end(ob);
+ }
+
+ BKE_mesh_batch_cache_dirty_tag(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_tetgen_remesh(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "TetGen Remesh";
+ ot->description =
+ "Create a new tet mesh using the surface data of the current mesh. All data "
+ "layers will be lost";
+ ot->idname = "OBJECT_OT_tetgen_remesh";
+
+ /* api callbacks */
+ ot->poll = object_remesh_poll;
+ ot->exec = tetgen_remesh_exec;
+
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+
+}
+
/** \} */
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 029352f3d85..28fb22cd508 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -305,6 +305,7 @@ enum {
enum {
REMESH_VOXEL = 0,
REMESH_QUAD = 1,
+ REMESH_TET = 2,
};
/* Subsurf Type */
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index 54539924fde..c0b3a4e4216 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -58,6 +58,7 @@ const EnumPropertyItem rna_enum_mesh_delimit_mode_items[] = {
static const EnumPropertyItem rna_enum_mesh_remesh_mode_items[] = {
{REMESH_VOXEL, "VOXEL", 0, "Voxel", "Use the voxel remesher"},
{REMESH_QUAD, "QUAD", 0, "Quad", "Use the quad remesher"},
+ {REMESH_TET, "TET", 0, "Tet", "Use the tetrahedralize remesher"},
{0, NULL, 0, NULL, NULL},
};