[Bf-blender-cvs] [037f7891115] master: Cleanup: Move transform_snap_object.c to C++
Hans Goudey
noreply at git.blender.org
Mon Mar 28 22:00:00 CEST 2022
Commit: 037f7891115318e60a63ffcb1bf877b0bbc35d0f
Author: Hans Goudey
Date: Mon Mar 28 14:59:42 2022 -0500
Branches: master
https://developer.blender.org/rB037f7891115318e60a63ffcb1bf877b0bbc35d0f
Cleanup: Move transform_snap_object.c to C++
This is meant to allow using C++ data structures in this file
as a performance improvement. Particularly `Vector` instead
of `ListBase` for `duplilist`.
Differential Revision: https://developer.blender.org/D14475
===================================================================
M source/blender/editors/include/ED_transform_snap_object_context.h
M source/blender/editors/transform/CMakeLists.txt
R090 source/blender/editors/transform/transform_snap_object.c source/blender/editors/transform/transform_snap_object.cc
===================================================================
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h
index a8a11cd7dda..2919001c5ce 100644
--- a/source/blender/editors/include/ED_transform_snap_object_context.h
+++ b/source/blender/editors/include/ED_transform_snap_object_context.h
@@ -21,11 +21,11 @@ struct Object;
struct Scene;
struct View3D;
-/* transform_snap_object.c */
+/* transform_snap_object.cc */
/* ED_transform_snap_object_*** API */
-typedef enum {
+typedef enum eSnapSelect {
SNAP_ALL = 0,
SNAP_NOT_SELECTED = 1,
SNAP_NOT_ACTIVE = 2,
@@ -33,7 +33,7 @@ typedef enum {
SNAP_SELECTABLE = 4,
} eSnapSelect;
-typedef enum {
+typedef enum eSnapEditType {
SNAP_GEOM_FINAL = 0,
SNAP_GEOM_CAGE = 1,
SNAP_GEOM_EDIT = 2, /* Bmesh for mesh-type. */
@@ -59,13 +59,13 @@ struct SnapObjectHitDepth {
/** parameters that define which objects will be used to snap. */
struct SnapObjectParams {
/* Special context sensitive handling for the active or selected object. */
- char snap_select;
+ eSnapSelect snap_select;
/* Geometry for snapping in edit mode. */
- char edit_mode_type;
+ eSnapEditType edit_mode_type;
/* snap to the closest element, use when using more than one snap type */
- unsigned int use_occlusion_test : 1;
+ bool use_occlusion_test : true;
/* exclude back facing geometry from snapping */
- unsigned int use_backface_culling : 1;
+ bool use_backface_culling : true;
};
typedef struct SnapObjectContext SnapObjectContext;
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index c8033d9d767..68c4f4e76ca 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -90,7 +90,7 @@ set(SRC
transform_orientations.c
transform_snap.c
transform_snap_animation.c
- transform_snap_object.c
+ transform_snap_object.cc
transform_snap_sequencer.c
transform.h
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.cc
similarity index 90%
rename from source/blender/editors/transform/transform_snap_object.c
rename to source/blender/editors/transform/transform_snap_object.cc
index 329c5104136..1c50b2fcebb 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.cc
@@ -4,7 +4,7 @@
* \ingroup edtransform
*/
-#include <stdlib.h>
+#include <cstdlib>
#include "MEM_guardedalloc.h"
@@ -55,11 +55,12 @@ enum eViewProj {
VIEW_PROJ_PERSP = -1,
};
-typedef struct SnapObjectData {
- enum {
- SNAP_MESH = 1,
- SNAP_EDIT_MESH,
- } type;
+struct SnapObjectData {
+ enum class Type {
+ Mesh,
+ EditMesh,
+ };
+ Type type;
BVHTree *bvhtree[2]; /* MESH: loose edges, loose verts
* EDIT_MESH: verts, edges. */
@@ -67,7 +68,7 @@ typedef struct SnapObjectData {
union {
struct {
- /* SNAP_MESH */
+ /* Type::Mesh */
BVHTreeFromMesh treedata_mesh;
const struct MPoly *poly;
uint has_looptris : 1;
@@ -75,13 +76,13 @@ typedef struct SnapObjectData {
uint has_loose_vert : 1;
};
struct {
- /* SNAP_EDIT_MESH */
+ /* Type::EditMesh */
BVHTreeFromEditMesh treedata_editmesh;
float min[3], max[3];
struct Mesh_Runtime *mesh_runtime;
};
};
-} SnapObjectData;
+};
struct SnapObjectContext {
Scene *scene;
@@ -129,14 +130,14 @@ struct SnapObjectContext {
* \{ */
/* Mesh used for snapping.
- * If NULL the BMesh should be used. */
+ * If nullptr the BMesh should be used. */
static Mesh *mesh_for_snap(Object *ob_eval, eSnapEditType edit_mode_type, bool *r_use_hide)
{
Mesh *me_eval = BKE_object_get_evaluated_mesh(ob_eval);
bool use_hide = false;
if (BKE_object_is_in_editmode(ob_eval)) {
if (edit_mode_type == SNAP_GEOM_EDIT) {
- return NULL;
+ return nullptr;
}
Mesh *editmesh_eval_final = BKE_object_get_editmesh_eval_final(ob_eval);
@@ -144,14 +145,14 @@ static Mesh *mesh_for_snap(Object *ob_eval, eSnapEditType edit_mode_type, bool *
if ((edit_mode_type == SNAP_GEOM_FINAL) && editmesh_eval_final) {
if (editmesh_eval_final->runtime.wrapper_type == ME_WRAPPER_TYPE_BMESH) {
- return NULL;
+ return nullptr;
}
me_eval = editmesh_eval_final;
use_hide = true;
}
else if ((edit_mode_type == SNAP_GEOM_CAGE) && editmesh_eval_cage) {
if (editmesh_eval_cage->runtime.wrapper_type == ME_WRAPPER_TYPE_BMESH) {
- return NULL;
+ return nullptr;
}
me_eval = editmesh_eval_cage;
use_hide = true;
@@ -185,24 +186,24 @@ static void bm_mesh_minmax(BMesh *bm, float r_min[3], float r_max[3])
static void snap_object_data_mesh_clear(SnapObjectData *sod)
{
- BLI_assert(sod->type == SNAP_MESH);
+ BLI_assert(sod->type == SnapObjectData::Type::Mesh);
for (int i = 0; i < ARRAY_SIZE(sod->bvhtree); i++) {
if (!sod->cached[i]) {
BLI_bvhtree_free(sod->bvhtree[i]);
}
- sod->bvhtree[i] = NULL;
+ sod->bvhtree[i] = nullptr;
}
free_bvhtree_from_mesh(&sod->treedata_mesh);
}
static void snap_object_data_editmesh_clear(SnapObjectData *sod)
{
- BLI_assert(sod->type == SNAP_EDIT_MESH);
+ BLI_assert(sod->type == SnapObjectData::Type::EditMesh);
for (int i = 0; i < ARRAY_SIZE(sod->bvhtree); i++) {
if (!sod->cached[i]) {
BLI_bvhtree_free(sod->bvhtree[i]);
}
- sod->bvhtree[i] = NULL;
+ sod->bvhtree[i] = nullptr;
}
free_bvhtree_from_editmesh(&sod->treedata_editmesh);
}
@@ -210,11 +211,11 @@ static void snap_object_data_editmesh_clear(SnapObjectData *sod)
static void snap_object_data_clear(SnapObjectData *sod)
{
switch (sod->type) {
- case SNAP_MESH: {
+ case SnapObjectData::Type::Mesh: {
snap_object_data_mesh_clear(sod);
break;
}
- case SNAP_EDIT_MESH: {
+ case SnapObjectData::Type::EditMesh: {
snap_object_data_editmesh_clear(sod);
break;
}
@@ -224,13 +225,15 @@ static void snap_object_data_clear(SnapObjectData *sod)
static SnapObjectData *snap_object_data_lookup(SnapObjectContext *sctx, Object *ob_eval)
{
- SnapObjectData *sod = BLI_ghash_lookup(sctx->cache.object_map, ob_eval);
- if (sod == NULL) {
- if (sctx->cache.data_to_object_map != NULL) {
- ob_eval = BLI_ghash_lookup(sctx->cache.data_to_object_map, ob_eval->data);
+ SnapObjectData *sod = static_cast<SnapObjectData *>(
+ BLI_ghash_lookup(sctx->cache.object_map, ob_eval));
+ if (sod == nullptr) {
+ if (sctx->cache.data_to_object_map != nullptr) {
+ ob_eval = static_cast<Object *>(
+ BLI_ghash_lookup(sctx->cache.data_to_object_map, ob_eval->data));
/* Could be NULl when mixing edit-mode and non edit-mode objects. */
- if (ob_eval != NULL) {
- sod = BLI_ghash_lookup(sctx->cache.object_map, ob_eval);
+ if (ob_eval != nullptr) {
+ sod = static_cast<SnapObjectData *>(BLI_ghash_lookup(sctx->cache.object_map, ob_eval));
}
}
}
@@ -247,9 +250,9 @@ static SnapObjectData *snap_object_data_mesh_get(SnapObjectContext *sctx,
bool init = false;
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob_eval, &sod_p)) {
- sod = *sod_p;
+ sod = static_cast<SnapObjectData *>(*sod_p);
bool is_dirty = false;
- if (sod->type != SNAP_MESH) {
+ if (sod->type != SnapObjectData::Type::Mesh) {
is_dirty = true;
}
else if (sod->treedata_mesh.tree && sod->treedata_mesh.cached &&
@@ -290,21 +293,22 @@ static SnapObjectData *snap_object_data_mesh_get(SnapObjectContext *sctx,
}
}
else {
- sod = *sod_p = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(*sod));
+ *sod_p = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(*sod));
+ sod = static_cast<SnapObjectData *>(*sod_p);
init = true;
}
if (init) {
- sod->type = SNAP_MESH;
+ sod->type = SnapObjectData::Type::Mesh;
/* The BVHTree from looptris is always required. */
- BLI_assert(sod->treedata_mesh.tree == NULL);
+ BLI_assert(sod->treedata_mesh.tree == nullptr);
BKE_bvhtree_from_mesh_get(&sod->treedata_mesh,
me_eval,
use_hide ? BVHTREE_FROM_LOOPTRI_NO_HIDDEN : BVHTREE_FROM_LOOPTRI,
4);
- if (sod->treedata_mesh.tree == NULL) {
+ if (sod->treedata_mesh.tree == nullptr) {
sod->treedata_mesh.vert = me_eval->mvert;
sod->treedata_mesh.vert_normals = BKE_mesh_vertex_normals_ensure(me_eval);
sod->treedata_mesh.loop = me_eval->mloop;
@@ -312,10 +316,10 @@ static SnapObjectData *snap_object_data_mesh_get(SnapObjectContext *sctx,
BLI_assert(sod->has_looptris == false);
}
else {
- BLI_assert(sod->treedata_mesh.vert != NULL);
- BLI_assert(sod->treedata_mesh.vert_normals != NULL);
- BLI_assert(sod->treedata_mesh.loop != NULL);
- BLI_assert(sod->treedata_mesh.looptri != NULL);
+ BLI_assert(sod->treedata_mesh.vert != nullptr);
+ BLI_assert(sod->treedata_mesh.vert_normals != nullptr);
+ BLI_assert(sod->treedata_mesh.loop != nullptr);
+ BLI_assert(sod->treedata_mesh.looptri != nullptr);
sod->has_looptris = true;
}
@@ -357,12 +361,12 @@ static SnapObjectData *snap_object_data_editmesh_get(SnapObjectContext *sctx,
{
/* Use object-data as the key in ghash since the editmesh
* is used to create bvhtree and is the same for each linked object. */
- if (sctx->cache.data_to_object_map == NULL) {
+ if (sctx->cache.data_to_object_map == nullptr) {
sctx->cache.data_to_object_map = BLI_ghash_ptr_new(__func__);
}
void **ob_p;
if (BLI_ghash_ensure_p(sctx->cache.data_to_object_map, ob_eval->data, &ob_p)) {
- ob_eval = *ob_p;
+ ob_eval = static_cast<Object *>(*ob_p);
}
else {
*ob_p = ob_eval;
@@ -370,10 +374,10 @@ static SnapObjectData *snap_object_data_editmesh_get(SnapObjectContext *sctx,
}
if (BLI_ghash_ensure_p(sctx->cache.object_map, ob_eval, &sod_p)) {
- sod = *sod_p;
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list