[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