[Bf-blender-cvs] [708f375f767] soc-2021-uv-editor-improvements: Cleanup: Refactor reusable code into functions

Siddhartha Jejurkar noreply at git.blender.org
Sun Jul 4 17:03:32 CEST 2021


Commit: 708f375f767f25ed2a0ada54b652d2c776e415ea
Author: Siddhartha Jejurkar
Date:   Sun Jul 4 20:19:58 2021 +0530
Branches: soc-2021-uv-editor-improvements
https://developer.blender.org/rB708f375f767f25ed2a0ada54b652d2c776e415ea

Cleanup: Refactor reusable code into functions

New functions for :
* Calculating current zoom factor used for determining the grid
  resolution in UV/Image editor
* Calculating grid steps for determining the grid spacings in UV/Image
  editor

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

M	source/blender/draw/engines/overlay/overlay_grid.c
M	source/blender/editors/include/ED_image.h
M	source/blender/editors/space_image/image_draw.c

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

diff --git a/source/blender/draw/engines/overlay/overlay_grid.c b/source/blender/draw/engines/overlay/overlay_grid.c
index ca4065c72ad..3077ddd4ee3 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.c
+++ b/source/blender/draw/engines/overlay/overlay_grid.c
@@ -70,29 +70,18 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
     copy_v3_fl3(
         shd->grid_size, (float)sima->tile_grid_shape[0], (float)sima->tile_grid_shape[1], 1.0f);
 
-    /* For a NxN grid */
+    /* For a NxN grid. Keep insync with value in initSnapSpatial() inside transform.c */
     int N = 4;
-    float xzoom = (v2d->cur.xmax - v2d->cur.xmin) / ((float)(v2d->mask.xmax - v2d->mask.xmin));
-    float yzoom = (v2d->cur.ymax - v2d->cur.ymin) / ((float)(v2d->mask.ymax - v2d->mask.ymin));
-    /* Calculating average of xzoom and yzoom for accuracy. Using only xzoom or yzoom would have
-     * been sufficient */
-    shd->zoom_factor = (xzoom + yzoom) / 2.0f;
-    /* grid begins to appear when the length of one grid unit is at least
-     * (N^2) pixels in the UV/Image editor */
-    shd->zoom_factor *= (N * N);
+    shd->zoom_factor = ED_space_image_zoom_level(v2d, N);
 
     if (sima->flag & SI_DYNAMIC_GRID) {
       shd->grid_flag |= DYNAMIC_GRID;
-      for (int step = 0; step < 8; step++) {
-        /* Temporary fix : dynamic_grid_size is not using the default value (=1) assignd in RNA */
-        sima->dynamic_grid_size = (sima->dynamic_grid_size == 0) ? 1 : sima->dynamic_grid_size;
-        shd->grid_steps[step] = powf(1, step) * (1.0f / ((float)sima->dynamic_grid_size));
-      }
+      /* Temporary fix : dynamic_grid_size is not using the default value (=1) assignd in RNA */
+      sima->dynamic_grid_size = (sima->dynamic_grid_size == 0) ? 1 : sima->dynamic_grid_size;
+      ED_space_image_grid_steps(sima->dynamic_grid_size, shd->grid_steps, true);
     }
     else {
-      for (int step = 0; step < 8; step++) {
-        shd->grid_steps[step] = powf(N, step) * (1.0f / (powf(N, 8)));
-      }
+      ED_space_image_grid_steps(N, shd->grid_steps, false);
     }
     return;
   }
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h
index ec525806b81..aa923bcf245 100644
--- a/source/blender/editors/include/ED_image.h
+++ b/source/blender/editors/include/ED_image.h
@@ -41,6 +41,13 @@ struct SpaceImage;
 struct bContext;
 struct wmOperator;
 struct wmWindowManager;
+struct View2D;
+
+/* image_draw.c */
+float ED_space_image_zoom_level(const struct View2D *v2d, const int grid_dimension);
+void ED_space_image_grid_steps(const int grid_dimension,
+                               float grid_steps[8],
+                               const bool is_dynamic_grid);
 
 /* image_edit.c, exported for transform */
 struct Image *ED_space_image(struct SpaceImage *sima);
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index dc693b25107..5b5ec236890 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -34,6 +34,7 @@
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
+#include "DNA_view2d_types.h"
 
 #include "PIL_time.h"
 
@@ -1049,3 +1050,32 @@ void draw_image_cache(const bContext *C, ARegion *region)
     ED_mask_draw_frames(mask, region, cfra, sfra, efra);
   }
 }
+
+float ED_space_image_zoom_level(const View2D *v2d, const int grid_dimension)
+{
+  float xzoom = (v2d->cur.xmax - v2d->cur.xmin) / ((float)(v2d->mask.xmax - v2d->mask.xmin));
+  float yzoom = (v2d->cur.ymax - v2d->cur.ymin) / ((float)(v2d->mask.ymax - v2d->mask.ymin));
+  /* Calculating average of xzoom and yzoom for accuracy. Using only xzoom or yzoom would have
+   * been sufficient */
+  float zoom_factor = (xzoom + yzoom) / 2.0f;
+  /* grid begins to appear when the length of one grid unit is at least (N^2) pixels in the
+   * UV/Image editor for a (NxN grid) */
+  zoom_factor *= (grid_dimension * grid_dimension);
+  return zoom_factor;
+}
+
+void ED_space_image_grid_steps(const int grid_dimension,
+                               float grid_steps[8],
+                               const bool is_dynamic_grid)
+{
+  if (is_dynamic_grid) {
+    for (int step = 0; step < 8; step++) {
+      grid_steps[step] = powf(1, step) * (1.0f / ((float)grid_dimension));
+    }
+  }
+  else {
+    for (int step = 0; step < 8; step++) {
+      grid_steps[step] = powf(grid_dimension, step) * (1.0f / (powf(grid_dimension, 8)));
+    }
+  }
+}
\ No newline at end of file



More information about the Bf-blender-cvs mailing list