[Bf-blender-cvs] [5128d86a6f5] soc-2020-soft-body: added tetgen

over0219 noreply at git.blender.org
Tue Jun 9 00:50:44 CEST 2020


Commit: 5128d86a6f587bd49eaf2207c7b1d5c67b1ff728
Author: over0219
Date:   Mon Jun 8 17:50:36 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB5128d86a6f587bd49eaf2207c7b1d5c67b1ff728

added tetgen

===================================================================

M	intern/tetgen/tetgen_api.h
M	release/scripts/startup/bl_ui/properties_data_mesh.py
M	source/blender/blenkernel/BKE_mesh_remesh_voxel.h
M	source/blender/blenkernel/intern/mesh_remesh_voxel.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_ops.c
M	source/blender/editors/object/object_remesh.c
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesrna/intern/rna_mesh.c

===================================================================

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},
 };



More information about the Bf-blender-cvs mailing list