[Bf-blender-cvs] [3105dde8b3a] greasepencil-refactor: GPencil: Move parent matrix function to BKE module

Antonio Vazquez noreply at git.blender.org
Tue Jan 28 22:59:58 CET 2020


Commit: 3105dde8b3a114e8828f5b2652d53192054f436c
Author: Antonio Vazquez
Date:   Tue Jan 28 10:13:27 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB3105dde8b3a114e8828f5b2652d53192054f436c

GPencil: Move parent matrix function to BKE module

Also, the function has been renamed to use a better naming.

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/editors/gpencil/drawgpencil.c
M	source/blender/editors/gpencil/gpencil_convert.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_edit.c
M	source/blender/editors/gpencil/gpencil_fill.c
M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_sculpt_paint.c
M	source/blender/editors/gpencil/gpencil_utils.c
M	source/blender/editors/gpencil/gpencil_vertex_paint.c
M	source/blender/editors/gpencil/gpencil_weight_paint.c
M	source/blender/editors/include/ED_gpencil.h
M	source/blender/editors/object/object_transform.c
M	source/blender/editors/transform/transform_convert_gpencil.c
M	source/blender/editors/transform/transform_gizmo_3d.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index c0425709c0b..79fd26677d6 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -324,6 +324,11 @@ void BKE_gpencil_frame_original_pointers_update(const struct bGPDframe *gpf_orig
                                                 const struct bGPDframe *gpf_eval);
 void BKE_gpencil_update_orig_pointers(const struct Object *ob_orig, const struct Object *ob_eval);
 
+void BKE_gpencil_parent_matrix_get(const struct Depsgraph *depsgraph,
+                                   struct Object *obact,
+                                   struct bGPDlayer *gpl,
+                                   float diff_mat[4][4]);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index a2333224415..efc8fc886fd 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -69,6 +69,7 @@
 #include "BLI_math_color.h"
 
 #include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
 
 static CLG_LogRef LOG = {"bke.gpencil"};
 
@@ -3842,4 +3843,54 @@ void BKE_gpencil_update_orig_pointers(const Object *ob_orig, const Object *ob_ev
     }
   }
 }
+
+void BKE_gpencil_parent_matrix_get(const Depsgraph *depsgraph,
+                                   Object *obact,
+                                   bGPDlayer *gpl,
+                                   float diff_mat[4][4])
+{
+  Object *ob_eval = depsgraph != NULL ? DEG_get_evaluated_object(depsgraph, obact) : obact;
+  Object *obparent = gpl->parent;
+  Object *obparent_eval = depsgraph != NULL ? DEG_get_evaluated_object(depsgraph, obparent) :
+                                              obparent;
+
+  /* if not layer parented, try with object parented */
+  if (obparent_eval == NULL) {
+    if (ob_eval != NULL) {
+      if (ob_eval->type == OB_GPENCIL) {
+        copy_m4_m4(diff_mat, ob_eval->obmat);
+        return;
+      }
+    }
+    /* not gpencil object */
+    unit_m4(diff_mat);
+    return;
+  }
+  else {
+    if ((gpl->partype == PAROBJECT) || (gpl->partype == PARSKEL)) {
+      mul_m4_m4m4(diff_mat, obparent_eval->obmat, gpl->inverse);
+      add_v3_v3(diff_mat[3], ob_eval->obmat[3]);
+      return;
+    }
+    else if (gpl->partype == PARBONE) {
+      bPoseChannel *pchan = BKE_pose_channel_find_name(obparent_eval->pose, gpl->parsubstr);
+      if (pchan) {
+        float tmp_mat[4][4];
+        mul_m4_m4m4(tmp_mat, obparent_eval->obmat, pchan->pose_mat);
+        mul_m4_m4m4(diff_mat, tmp_mat, gpl->inverse);
+        add_v3_v3(diff_mat[3], ob_eval->obmat[3]);
+      }
+      else {
+        /* if bone not found use object (armature) */
+        mul_m4_m4m4(diff_mat, obparent_eval->obmat, gpl->inverse);
+        add_v3_v3(diff_mat[3], ob_eval->obmat[3]);
+      }
+      return;
+    }
+    else {
+      unit_m4(diff_mat); /* not defined type */
+    }
+  }
+}
+
 /** \} */
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 1e4af425813..3954da51719 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -1029,7 +1029,7 @@ void ED_gp_draw_interpolation(const bContext *C, tGPDinterpolate *tgpi, const in
   GPU_blend(true);
   for (tgpil = tgpi->ilayers.first; tgpil; tgpil = tgpil->next) {
     /* calculate parent position */
-    ED_gpencil_parent_location(depsgraph, obact, tgpi->gpd, tgpil->gpl, tgpw.diff_mat);
+    BKE_gpencil_parent_matrix_get(depsgraph, obact, tgpil->gpl, tgpw.diff_mat);
     if (tgpil->interFrame) {
       tgpw.gpl = tgpil->gpl;
       tgpw.gpf = tgpil->interFrame;
diff --git a/source/blender/editors/gpencil/gpencil_convert.c b/source/blender/editors/gpencil/gpencil_convert.c
index f178a046c1b..0c11f79293b 100644
--- a/source/blender/editors/gpencil/gpencil_convert.c
+++ b/source/blender/editors/gpencil/gpencil_convert.c
@@ -174,7 +174,7 @@ static void gp_strokepoint_convertcoords(bContext *C,
 
   /* apply parent transform */
   float fpt[3];
-  ED_gpencil_parent_location(depsgraph, obact, gpd, gpl, diff_mat);
+  BKE_gpencil_parent_matrix_get(depsgraph, obact, gpl, diff_mat);
   mul_v3_m4v3(fpt, diff_mat, &source_pt->x);
   copy_v3_v3(&pt->x, fpt);
 
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 0e17b8745c3..156cd017531 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -2580,7 +2580,7 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
           float inverse_diff_mat[4][4];
 
           /* recalculate all stroke points */
-          ED_gpencil_parent_location(depsgraph, ob_iter, gpd_src, gpl_src, diff_mat);
+          BKE_gpencil_parent_matrix_get(depsgraph, ob_iter, gpl_src, diff_mat);
           invert_m4_m4(inverse_diff_mat, diff_mat);
 
           Material *ma_src = NULL;
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 4c814ec861b..41fbbbebe1e 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -2646,7 +2646,7 @@ static int gp_snap_to_grid(bContext *C, wmOperator *UNUSED(op))
       float diff_mat[4][4];
 
       /* calculate difference matrix object */
-      ED_gpencil_parent_location(depsgraph, obact, gpd, gpl, diff_mat);
+      BKE_gpencil_parent_matrix_get(depsgraph, obact, gpl, diff_mat);
 
       LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
         bGPDspoint *pt;
@@ -2723,7 +2723,7 @@ static int gp_snap_to_cursor(bContext *C, wmOperator *op)
       float diff_mat[4][4];
 
       /* calculate difference matrix */
-      ED_gpencil_parent_location(depsgraph, obact, gpd, gpl, diff_mat);
+      BKE_gpencil_parent_matrix_get(depsgraph, obact, gpl, diff_mat);
 
       LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
         bGPDspoint *pt;
@@ -2821,7 +2821,7 @@ static int gp_snap_cursor_to_sel(bContext *C, wmOperator *UNUSED(op))
       float diff_mat[4][4];
 
       /* calculate difference matrix */
-      ED_gpencil_parent_location(depsgraph, obact, gpd, gpl, diff_mat);
+      BKE_gpencil_parent_matrix_get(depsgraph, obact, gpl, diff_mat);
 
       LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
         bGPDspoint *pt;
diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c
index 6696641ce8c..4f382791e5a 100644
--- a/source/blender/editors/gpencil/gpencil_fill.c
+++ b/source/blender/editors/gpencil/gpencil_fill.c
@@ -249,7 +249,7 @@ static void gp_draw_datablock(tGPDfill *tgpf, const float ink[4])
 
   LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
     /* calculate parent position */
-    ED_gpencil_parent_location(tgpw.depsgraph, ob, gpd, gpl, tgpw.diff_mat);
+    BKE_gpencil_parent_matrix_get(tgpw.depsgraph, ob, gpl, tgpw.diff_mat);
 
     /* do not draw layer if hidden */
     if (gpl->flag & GP_LAYER_HIDE) {
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 84f1483da2d..9c64d091972 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -636,7 +636,7 @@ struct GP_EditableStrokes_Iter {
       bGPDframe *init_gpf_ = (is_multiedit_) ? gpl->frames.first : gpl->actframe; \
       for (bGPDframe *gpf_ = init_gpf_; gpf_; gpf_ = gpf_->next) { \
         if ((gpf_ == gpl->actframe) || ((gpf_->flag & GP_FRAME_SELECT) && is_multiedit_)) { \
-          ED_gpencil_parent_location(depsgraph_, obact_, gpd_, gpl, gpstroke_iter.diff_mat); \
+          BKE_gpencil_parent_matrix_get(depsgraph_, obact_, gpl, gpstroke_iter.diff_mat); \
           invert_m4_m4(gpstroke_iter.inverse_diff_mat, gpstroke_iter.diff_mat); \
           /* loop over strokes */ \
           bGPDstroke *gpsn_; \
@@ -688,7 +688,7 @@ struct GP_EditableStrokes_Iter {
         } \
         for (bGPDframe *gpf_ = init_gpf_; gpf_; gpf_ = gpf_->next) { \
           if ((gpf_ == gpl->actframe) || ((gpf_->flag & GP_FRAME_SELECT) && is_multiedit_)) { \
-            ED_gpencil_parent_location(depsgraph_, obact_, gpd, gpl, gpstroke_iter.diff_mat); \
+            BKE_gpencil_parent_matrix_get(depsgraph_, obact_, gpl, gpstroke_iter.diff_mat); \
             invert_m4_m4(gpstroke_iter.inverse_diff_mat, gpstroke_iter.diff_mat); \
             /* loop over strokes */ \
             for (bGPDstroke *gps = gpf_->strokes.first; gps; gps = gps->next) { \
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index c51c5b02e51..8b985988cb6 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1240,7 +1240,7 @@ static bool gp_stroke_eraser_is_occluded(tGPsdata *p,
 
     float diff_mat[4][4];
     /* calculate difference matrix if parent object */
-    ED_gpencil_parent_location(p->depsgraph, obact, p->gpd, gpl, diff_mat);
+    BKE_gpencil_parent_matrix_get(p->depsgraph, obact, gpl, diff_mat);
 
     if (ED_view3d_autodist_simple(p->ar, mval_i, mval_3d, 0, NULL)) {
       const float depth_mval = view3d_point_depth(rv3d, mval_3d);
@@ -1365,7 +1365,7 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p,
   round_v2i_v2fl(mval_i, mval);
 
   /* calculate difference matrix */
-  ED_gpencil_parent_location(depsgraph, obact, p->gpd, gpl, diff_mat);
+  BKE_gpencil_parent_matrix_get(depsgraph, obact, gpl, diff_mat);
 
   if (gps->totpoints == 0) {
     /* just free stroke */
diff --git a/source/blender/editors/gpencil/gpencil_sculpt_paint.c b/source/blender/editors/gpencil/gpencil_sculpt_paint.c
index 3658c02f1b7..53f99df44cf 100644
--- a/source/blender/editors/gpencil/gpencil_sculpt_paint.c
+++ b/source/blender/editors/gpencil/gpencil_sculpt_paint.c
@@ -1786,7 +1786,7 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
 
     /* calculate difference matrix */
     float diff_mat[4][4];
-    ED_gpencil_parent_location(depsgraph, obact, gpd, gpl, diff_mat);
+   

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list