[Bf-blender-cvs] [7155130911e] greasepencil-object: GPencil: New function to get derived array

Antonioya noreply at git.blender.org
Tue May 21 20:26:06 CEST 2019


Commit: 7155130911e3e761bd7e3ae6444d0beea361137a
Author: Antonioya
Date:   Tue May 21 19:52:59 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7155130911e3e761bd7e3ae6444d0beea361137a

GPencil: New function to get derived array

This utility is used to get the difference between original point and derived point

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 3c84c991019..643355f92bb 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -299,4 +299,7 @@ float BKE_gpencil_multiframe_falloff_calc(
 extern void (*BKE_gpencil_batch_cache_dirty_tag_cb)(struct bGPdata *gpd);
 extern void (*BKE_gpencil_batch_cache_free_cb)(struct bGPdata *gpd);
 
+/** Get matrix for transformation between original and derived point */
+void BKE_gpencil_derived_matrix_get(struct bGPDspoint *pt, float r_mat[4][4]);
+
 #endif /*  __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 439005ca1b4..96847fda80b 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1971,3 +1971,34 @@ bool BKE_gpencil_trim_stroke(bGPDstroke *gps)
   }
   return intersect;
 }
+
+void BKE_gpencil_derived_matrix_get(bGPDspoint *pt, float r_mat[4][4])
+{
+  float loc[3], scale[3];
+  float v1o[2], v2o[2], v3o[2];
+  float v1d[2], v2d[2], v3d[2];
+  float angle[3];
+
+  if (pt->runtime.pt_orig == NULL) {
+    unit_m4(r_mat);
+    return;
+  }
+
+  bGPDspoint *pt_orig = pt->runtime.pt_orig;
+
+  ARRAY_SET_ITEMS(loc, pt_orig->x - pt->x, pt_orig->y - pt->y, pt_orig->z - pt->z);
+  ARRAY_SET_ITEMS(scale, 1.0f, 1.0f, 1.0f);
+
+  ARRAY_SET_ITEMS(v1d, pt->y, pt->z); /* X axis */
+  ARRAY_SET_ITEMS(v2d, pt->x, pt->z); /* Y axis */
+  ARRAY_SET_ITEMS(v3d, pt->x, pt->y); /* Z axis */
+
+  ARRAY_SET_ITEMS(v1o, pt_orig->y, pt_orig->z); /* X axis */
+  ARRAY_SET_ITEMS(v2o, pt_orig->x, pt_orig->z); /* Y axis */
+  ARRAY_SET_ITEMS(v3o, pt_orig->x, pt_orig->y); /* Z axis */
+
+  angle[0] = angle_signed_v2v2(v1d, v1o);
+  angle[1] = angle_signed_v2v2(v2d, v2o);
+  angle[2] = angle_signed_v2v2(v3d, v3o);
+  loc_eul_size_to_mat4(r_mat, loc, angle, scale);
+}



More information about the Bf-blender-cvs mailing list