[Bf-blender-cvs] [06314f5f643] soc-2021-knife-tools: Knife: Replaced object bases array with object array

Cian Jinks noreply at git.blender.org
Tue Sep 21 01:42:54 CEST 2021


Commit: 06314f5f6431364bab101ea7025188578bc17e71
Author: Cian Jinks
Date:   Tue Sep 21 00:41:40 2021 +0100
Branches: soc-2021-knife-tools
https://developer.blender.org/rB06314f5f6431364bab101ea7025188578bc17e71

Knife: Replaced object bases array with object array

The Base structs were only ever used to retrieve the Object struct and so could be replaced.

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

M	source/blender/editors/mesh/editmesh_knife.c

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

diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index 093d0d19ffa..eee4aec7459 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -218,8 +218,8 @@ typedef struct KnifeTool_OpData {
   Scene *scene;
 
   /* Used for swapping current object when in multi-object edit mode. */
-  Base **bases;
-  uint bases_len;
+  Object **objects;
+  uint objects_len;
 
   MemArena *arena;
 
@@ -1195,9 +1195,9 @@ static void knife_bvh_init(KnifeTool_OpData *kcd)
   bool test_fn_ret = false;
 
   /* Calculate tottri. */
-  for (uint b = 0; b < kcd->bases_len; b++) {
+  for (uint b = 0; b < kcd->objects_len; b++) {
     ob_tottri = 0;
-    ob = kcd->bases[b]->object;
+    ob = kcd->objects[b];
     em = BKE_editmesh_from_object(ob);
 
     for (int i = 0; i < em->tottri; i++) {
@@ -1227,8 +1227,8 @@ static void knife_bvh_init(KnifeTool_OpData *kcd)
    * Don't forget to update #knife_bvh_intersect_plane!
    */
   tottri = 0;
-  for (uint b = 0; b < kcd->bases_len; b++) {
-    ob = kcd->bases[b]->object;
+  for (uint b = 0; b < kcd->objects_len; b++) {
+    ob = kcd->objects[b];
     em = BKE_editmesh_from_object(ob);
     looptris = em->looptris;
 
@@ -1289,9 +1289,9 @@ static void knife_bvh_raycast_cb(void *userdata,
   if (index != -1) {
     tottri = 0;
     uint b = 0;
-    for (; b < kcd->bases_len; b++) {
+    for (; b < kcd->objects_len; b++) {
       index -= tottri;
-      ob = kcd->bases[b]->object;
+      ob = kcd->objects[b];
       em = BKE_editmesh_from_object(ob);
       tottri = em->tottri;
       if (index < tottri) {
@@ -2620,8 +2620,8 @@ static void calc_ortho_extent(KnifeTool_OpData *kcd)
   float min[3], max[3];
   INIT_MINMAX(min, max);
 
-  for (uint b = 0; b < kcd->bases_len; b++) {
-    ob = kcd->bases[b]->object;
+  for (uint b = 0; b < kcd->objects_len; b++) {
+    ob = kcd->objects[b];
     em = BKE_editmesh_from_object(ob);
 
     if (kcd->cagecos[b]) {
@@ -2895,12 +2895,8 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
   uint b = 0;
 
   for (i = 0, result = results; i < tot; i++, result++) {
-    if (*result == -1) {
-      continue;
-    }
-
-    for (b = 0; b < kcd->bases_len; b++) {
-      ob = kcd->bases[b]->object;
+    for (b = 0; b < kcd->objects_len; b++) {
+      ob = kcd->objects[b];
       em = BKE_editmesh_from_object(ob);
       if (*result >= 0 && *result < em->tottri) {
         ls = (BMLoop **)em->looptris[*result];
@@ -3090,7 +3086,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
       float p[3], p_cage[3];
 
       uint base_index = (uint)(uintptr_t)BLI_smallhash_lookup(&fobs, (uintptr_t)f);
-      ob = kcd->bases[base_index]->object;
+      ob = kcd->objects[base_index];
 
       if (use_hit_prev &&
           knife_ray_intersect_face(kcd, s1, v1, v3, ob, base_index, f, face_tol_sq, p, p_cage)) {
@@ -3192,7 +3188,7 @@ static BMFace *knife_find_closest_face(KnifeTool_OpData *kcd,
   }
 
   if (f) {
-    *r_ob = kcd->bases[*r_base_index]->object;
+    *r_ob = kcd->objects[*r_base_index];
   }
   else {
     if (kcd->is_interactive) {
@@ -4039,16 +4035,16 @@ static void knifetool_init(bContext *C,
   kcd->scene = scene;
   kcd->region = vc->region;
 
-  kcd->bases = BKE_view_layer_array_from_bases_in_edit_mode(
-      CTX_data_view_layer(C), CTX_wm_view3d(C), &kcd->bases_len);
+  kcd->objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(
+      CTX_data_view_layer(C), CTX_wm_view3d(C), &kcd->objects_len);
 
   Object *ob;
   BMEditMesh *em;
-  kcd->cagecos = MEM_callocN(sizeof(*kcd->cagecos) * kcd->bases_len, "knife cagecos");
-  for (int i = 0; i < kcd->bases_len; i++) {
-    ob = kcd->bases[i]->object;
+  kcd->cagecos = MEM_callocN(sizeof(*kcd->cagecos) * kcd->objects_len, "knife cagecos");
+  for (uint b = 0; b < kcd->objects_len; b++) {
+    ob = kcd->objects[b];
     em = BKE_editmesh_from_object(ob);
-    knifetool_init_cagecos(kcd, ob, i);
+    knifetool_init_cagecos(kcd, ob, b);
 
     /* Can't usefully select resulting edges in face mode. */
     kcd->select_result = (em->selectmode != SCE_SELECT_FACE);
@@ -4149,7 +4145,7 @@ static void knifetool_exit_ex(KnifeTool_OpData *kcd)
   ED_region_tag_redraw(kcd->region);
 
   /* Knife BVH cleanup. */
-  for (int i = 0; i < kcd->bases_len; i++) {
+  for (int i = 0; i < kcd->objects_len; i++) {
     knifetool_free_cagecos(kcd, i);
   }
   MEM_freeN(kcd->cagecos);
@@ -4161,7 +4157,7 @@ static void knifetool_exit_ex(KnifeTool_OpData *kcd)
   }
 
   /* Free object bases. */
-  MEM_freeN(kcd->bases);
+  MEM_freeN(kcd->objects);
 
   /* Destroy kcd itself. */
   MEM_freeN(kcd);
@@ -4235,8 +4231,8 @@ static void knifetool_finish_ex(KnifeTool_OpData *kcd)
 {
   Object *ob;
   BMEditMesh *em;
-  for (uint b = 0; b < kcd->bases_len; b++) {
-    ob = kcd->bases[b]->object;
+  for (uint b = 0; b < kcd->objects_len; b++) {
+    ob = kcd->objects[b];
     em = BKE_editmesh_from_object(ob);
 
     knife_make_cuts(kcd, ob);
@@ -4718,8 +4714,8 @@ static int knifetool_invoke(bContext *C, wmOperator *op, const wmEvent *event)
     BMEditMesh *em;
     bool faces_selected = false;
 
-    for (uint b = 0; b < kcd->bases_len; b++) {
-      obedit = kcd->bases[b]->object;
+    for (uint b = 0; b < kcd->objects_len; b++) {
+      obedit = kcd->objects[b];
       em = BKE_editmesh_from_object(obedit);
       if (em->bm->totfacesel != 0) {
         faces_selected = true;
@@ -4921,9 +4917,9 @@ void EDBM_mesh_knife(bContext *C, ViewContext *vc, LinkNode *polys, bool use_tag
   {
     Object *ob;
     BMEditMesh *em;
-    for (uint b = 0; b < kcd->bases_len; b++) {
+    for (uint b = 0; b < kcd->objects_len; b++) {
 
-      ob = kcd->bases[b]->object;
+      ob = kcd->objects[b];
       em = BKE_editmesh_from_object(ob);
 
       if (use_tag) {



More information about the Bf-blender-cvs mailing list