[Bf-blender-cvs] [7acb5b91d5d] greasepencil-object: GPencil: More test to apply evaluated rotation in Sculpt

Antonioya noreply at git.blender.org
Thu May 23 18:54:39 CEST 2019


Commit: 7acb5b91d5d42617d1f3046c62af2345bd12a560
Author: Antonioya
Date:   Thu May 23 12:55:14 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7acb5b91d5d42617d1f3046c62af2345bd12a560

GPencil: More test to apply evaluated rotation in Sculpt

This is an experimental commit

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

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

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 643355f92bb..3c84c991019 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -299,7 +299,4 @@ 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 96847fda80b..439005ca1b4 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1971,34 +1971,3 @@ 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);
-}
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index d2c63b045bc..f214d11232c 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -159,7 +159,7 @@ typedef struct tGP_BrushEditData {
 /* Callback for performing some brush operation on a single point */
 typedef bool (*GP_BrushApplyCb)(tGP_BrushEditData *gso,
                                 bGPDstroke *gps,
-                                bGPDspoint *UNUSED(pt_derived),
+                                float rotation[3],
                                 int pt_index,
                                 const int radius,
                                 const int co[2]);
@@ -311,7 +311,7 @@ static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, c
  * smooth-brush implementation to test the algorithm for stroke smoothing. */
 static bool gp_brush_smooth_apply(tGP_BrushEditData *gso,
                                   bGPDstroke *gps,
-                                  bGPDspoint *UNUSED(pt_derived),
+                                  float UNUSED(rot[3]),
                                   int pt_index,
                                   const int radius,
                                   const int co[2])
@@ -350,7 +350,7 @@ static bool gp_brush_smooth_apply(tGP_BrushEditData *gso,
 /* Make lines thicker or thinner by the specified amounts */
 static bool gp_brush_thickness_apply(tGP_BrushEditData *gso,
                                      bGPDstroke *gps,
-                                     bGPDspoint *UNUSED(pt_derived),
+                                     float UNUSED(rot[3]),
                                      int pt_index,
                                      const int radius,
                                      const int co[2])
@@ -394,7 +394,7 @@ static bool gp_brush_thickness_apply(tGP_BrushEditData *gso,
 /* Make color more or less transparent by the specified amounts */
 static bool gp_brush_strength_apply(tGP_BrushEditData *gso,
                                     bGPDstroke *gps,
-                                    bGPDspoint *UNUSED(pt_derived),
+                                    float UNUSED(rot[3]),
                                     int pt_index,
                                     const int radius,
                                     const int co[2])
@@ -440,8 +440,10 @@ typedef struct tGPSB_Grab_StrokeData {
   int *points;
   /* array of influence weights for each of the included points */
   float *weights;
-  /* array of derived points to calc transformation */
-  struct bGPDspoint **derived_points;
+  /* angles to calc transformation */
+  float *rot_x;
+  float *rot_y;
+  float *rot_z;
 
   /* capacity of the arrays */
   int capacity;
@@ -469,7 +471,9 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
 
     memset(data->points, 0, sizeof(int) * data->capacity);
     memset(data->weights, 0, sizeof(float) * data->capacity);
-    memset(data->derived_points, 0, sizeof(bGPDspoint *) * data->capacity);
+    memset(data->rot_x, 0, sizeof(float) * data->capacity);
+    memset(data->rot_y, 0, sizeof(float) * data->capacity);
+    memset(data->rot_z, 0, sizeof(float) * data->capacity);
   }
   else {
     /* Create new instance */
@@ -480,8 +484,9 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
 
     data->points = MEM_callocN(sizeof(int) * data->capacity, "GP Stroke Grab Indices");
     data->weights = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab Weights");
-    data->derived_points = MEM_callocN(sizeof(bGPDspoint) * data->capacity,
-                                       "GP Stroke Grab Derived");
+    data->rot_x = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab X");
+    data->rot_y = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab Y");
+    data->rot_z = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab Z");
 
     /* hook up to the cache */
     BLI_ghash_insert(gso->stroke_customdata, gps, data);
@@ -491,7 +496,7 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
 /* store references to stroke points in the initial stage */
 static bool gp_brush_grab_store_points(tGP_BrushEditData *gso,
                                        bGPDstroke *gps,
-                                       bGPDspoint *pt_derived,
+                                       float rot[3],
                                        int pt_index,
                                        const int radius,
                                        const int co[2])
@@ -505,7 +510,9 @@ static bool gp_brush_grab_store_points(tGP_BrushEditData *gso,
   /* insert this point into the set of affected points */
   data->points[data->size] = pt_index;
   data->weights[data->size] = inf;
-  data->derived_points[data->size] = pt_derived;
+  data->rot_x[data->size] = rot[0];
+  data->rot_y[data->size] = rot[1];
+  data->rot_z[data->size] = rot[2];
   data->size++;
 
   /* done */
@@ -547,15 +554,32 @@ static void gp_brush_grab_apply_cached(tGP_BrushEditData *gso,
 {
   tGPSB_Grab_StrokeData *data = BLI_ghash_lookup(gso->stroke_customdata, gps);
   int i;
+  float loc[3], scale[3];
+  float derived_mat[4][4];
+  zero_v3(loc);
+  ARRAY_SET_ITEMS(scale, 1.0f, 1.0f, 1.0f);
 
   /* Apply dvec to all of the stored points */
   for (i = 0; i < data->size; i++) {
     bGPDspoint *pt = &gps->points[data->points[i]];
-    bGPDspoint *pt_derived = data->derived_points[i];
     float delta[3] = {0.0f};
 
+    /* get derived transformation */
+    float rot[3];
+    float transform[3];
+    rot[0] = data->rot_x[i];
+    rot[1] = data->rot_y[i];
+    rot[2] = data->rot_z[i];
+    printf("%f, %f, %f\n", RAD2DEG(rot[0]), RAD2DEG(rot[1]), RAD2DEG(rot[2]));
+
+    loc_eul_size_to_mat4(derived_mat, loc, rot, scale);
+    gp_brush_grab_calc_dvec(gso);
+    mul_v3_mat3_m4v3(transform, derived_mat, gso->dvec);
+    print_v3("Dvec", gso->dvec);
+    print_v3("Transf", transform);
+
     /* adjust the amount of displacement to apply */
-    mul_v3_v3fl(delta, gso->dvec, data->weights[i]);
+    mul_v3_v3fl(delta, transform, data->weights[i]);
 
     float fpt[3];
     float save_pt[3];
@@ -583,7 +607,9 @@ static void gp_brush_grab_stroke_free(void *ptr)
   /* free arrays */
   MEM_SAFE_FREE(data->points);
   MEM_SAFE_FREE(data->weights);
-  MEM_SAFE_FREE(data->derived_points);
+  MEM_SAFE_FREE(data->rot_x);
+  MEM_SAFE_FREE(data->rot_y);
+  MEM_SAFE_FREE(data->rot_z);
 
   /* ... and this item itself, since it was also allocated */
   MEM_freeN(data);
@@ -594,7 +620,7 @@ static void gp_brush_grab_stroke_free(void *ptr)
 /* NOTE: Depends on gp_brush_grab_calc_dvec() */
 static bool gp_brush_push_apply(tGP_BrushEditData *gso,
                                 bGPDstroke *gps,
-                                bGPDspoint *UNUSED(pt_derived),
+                                float UNUSED(rot[3]),
                                 int pt_index,
                                 const int radius,
                                 const int co[2])
@@ -661,7 +687,7 @@ static void gp_brush_calc_midpoint(tGP_BrushEditData *gso)
 /* Shrink distance between midpoint and this point... */
 static bool gp_brush_pinch_apply(tGP_BrushEditData *gso,
                                  bGPDstroke *gps,
-                                 bGPDspoint *UNUSED(pt_derived),
+                                 float UNUSED(rot[3]),
                                  int pt_index,
                                  const int radius,
                                  const int co[2])
@@ -717,7 +743,7 @@ static bool gp_brush_pinch_apply(tGP_BrushEditData *gso,
 
 static bool gp_brush_twist_apply(tGP_BrushEditData *gso,
                                  bGPDstroke *gps,
-                                 bGPDspoint *UNUSED(pt_derived),
+                                 float UNUSED(rot[3]),
                                  int pt_index,
                                  const int radius,
                                  const int co[2])
@@ -799,7 +825,7 @@ static bool gp_brush_twist_apply(tGP_BrushEditData *gso,
 /* Apply some random jitter to the point */
 static bool gp_brush_rando

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list