[Bf-blender-cvs] [c2ec2affd1f] soc-2019-npr: Gpencil: Stroke split function.
YimingWu
noreply at git.blender.org
Wed Jul 3 05:10:23 CEST 2019
Commit: c2ec2affd1f66aa39e594bb06857fa14a631611a
Author: YimingWu
Date: Wed Jul 3 11:09:58 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBc2ec2affd1f66aa39e594bb06857fa14a631611a
Gpencil: Stroke split function.
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index b2d2f2762f2..1bbf79f91d7 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -217,7 +217,12 @@ void BKE_gpencil_transform(struct bGPdata *gpd, float mat[4][4]);
bool BKE_gpencil_sample_stroke(struct bGPDstroke *gps, float dist);
bool BKE_gpencil_stretch_stroke(struct bGPDstroke *gps, float dist);
+bool BKE_gpencil_trim_stroke_points(bGPDstroke *gps, int index_from, int index_to);
bool BKE_gpencil_shrink_stroke(struct bGPDstroke *gps, float dist);
+bool BKE_gpencil_split_stroke(bGPDframe *gpf,
+ bGPDstroke *gps,
+ int before_index,
+ bGPDstroke **remaining_gps);
bool BKE_gpencil_smooth_stroke(struct bGPDstroke *gps, int i, float inf);
bool BKE_gpencil_smooth_stroke_strength(struct bGPDstroke *gps, int point_index, float influence);
bool BKE_gpencil_smooth_stroke_thickness(struct bGPDstroke *gps, int point_index, float influence);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 9c8273d7542..af7e04e7561 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1790,6 +1790,59 @@ bool BKE_gpencil_trim_stroke_points(bGPDstroke *gps, int index_from, int index_t
return true;
}
+bool BKE_gpencil_split_stroke(bGPDframe *gpf,
+ bGPDstroke *gps,
+ int before_index,
+ bGPDstroke **remaining_gps)
+{
+ bGPDstroke *new_gps;
+ bGPDspoint *pt = gps->points, *new_pt;
+ MDeformVert *dv, *new_dv;
+
+ if (before_index >= gps->totpoints || before_index == 0) {
+ return false;
+ }
+
+ int new_count = gps->totpoints - before_index + 1;
+ int old_count = before_index;
+
+ /* Handle remaining segments first. */
+
+ new_gps = BKE_gpencil_add_stroke(gpf, gps->mat_nr, new_count, gps->thickness);
+
+ new_pt = MEM_callocN(sizeof(bGPDspoint) * new_count, "gp_stroke_points_remaining");
+
+ for (int i = 0; i < new_count; i++) {
+ memcpy(&new_pt[i], &pt[i + before_index], sizeof(bGPDspoint));
+ }
+
+ new_gps->points = new_pt;
+
+ if (gps->dvert) {
+ new_dv = MEM_callocN(sizeof(MDeformVert) * new_count, "gp_stroke_dverts_remaining");
+ for (int i = 0; i < new_count; i++) {
+ dv = &gps->dvert[i + before_index];
+ new_dv[i].flag = dv->flag;
+ new_dv[i].totweight = dv->totweight;
+ new_dv[i].dw = MEM_callocN(sizeof(MDeformWeight) * dv->totweight,
+ "gp_stroke_dverts_dw_remaining");
+ for (int j = 0; j < dv->totweight; j++) {
+ new_dv[i].dw[j].weight = dv->dw[j].weight;
+ new_dv[i].dw[j].def_nr = dv->dw[j].def_nr;
+ }
+ }
+ new_gps->dvert = new_dv;
+ }
+
+ *remaining_gps = new_gps;
+
+ /* trim the original stroke into a shorter one */
+
+ BKE_gpencil_trim_stroke_points(gps, 0, new_count - 1);
+
+ return true;
+}
+
/**
* Shrink the stroke by length.
* \param gps: Stroke to shrink
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
index 967b7a351f5..c138551434f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
@@ -76,6 +76,14 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
BKE_gpencil_modifier_copyData_generic(md, target);
}
+static void splitStroke(bGPDstroke *gps, float angle)
+{
+}
+
+static void duplicateStroke(bGPDstroke *gps, int count, float dist, float offsset)
+{
+}
+
static void bakeModifier(Main *UNUSED(bmain),
Depsgraph *depsgraph,
GpencilModifierData *md,
More information about the Bf-blender-cvs
mailing list