[Bf-blender-cvs] [0362987c0a7] greasepencil-object: Copy Vertexgroup when join

Antonio Vazquez noreply at git.blender.org
Thu Dec 21 16:29:56 CET 2017


Commit: 0362987c0a776d941e62164aa2cc617df8afbd4f
Author: Antonio Vazquez
Date:   Thu Dec 21 16:29:38 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rB0362987c0a776d941e62164aa2cc617df8afbd4f

Copy Vertexgroup when join

The vertex groups were not included in the join.

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

M	source/blender/editors/gpencil/gpencil_data.c

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

diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 6bdc51c2d8e..a888e4e06fa 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -66,6 +66,7 @@
 #include "BKE_scene.h"
 #include "BKE_screen.h"
 #include "BKE_colortools.h"
+#include "BKE_deform.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -1882,6 +1883,8 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
 	Object  *obact = CTX_data_active_object(C);
 	bGPdata *gpd_act = NULL;
 	bool ok = false;
+	int i;
+	bGPDspoint *pt;
 
 	/* Ensure we're in right mode and that the active object is correct */
 	if (!obact || obact->type != OB_GPENCIL)
@@ -1934,6 +1937,30 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
 
 				/* TODO: Apply all modifiers */
 
+				/* copy vertex groups to the base one's */
+				int old_idx = 0;
+				for (bDeformGroup *dg = base->object->defbase.first; dg; dg = dg->next) {
+					bDeformGroup *vgroup = MEM_dupallocN(dg);
+					int idx = BLI_listbase_count(&obact->defbase);
+					defgroup_unique_name(vgroup, obact);
+					BLI_addtail(&obact->defbase, vgroup);
+					/* update vertex groups in strokes in original data */
+					for (bGPDlayer *gpl_src = gpd->layers.first; gpl_src; gpl_src = gpl_src->next) {
+						for (bGPDframe *gpf = gpl_src->frames.first; gpf; gpf = gpf->next) {
+							for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+								for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+									if ((pt->weights) && (pt->weights->index == old_idx)) {
+										pt->weights->index = idx;
+									}
+								}
+							}
+						}
+					}
+					old_idx++;
+				}
+				if (obact->defbase.first && obact->actdef == 0)
+					obact->actdef = 1;
+
 				/* add missing paletteslots */
 				bGPDpaletteref *palslot;
 				for (palslot = gpd->palette_slots.first; palslot; palslot = palslot->next) {
@@ -1943,11 +1970,9 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
 				}
 
 				/* duplicate layers */
-				bGPDspoint *pt;
 				float imat[3][3], bmat[3][3];
 				float offset_global[3];
 				float offset_local[3];
-				int i;
 
 				sub_v3_v3v3(offset_global, obact->loc, base->object->obmat[3]);
 				copy_m3_m4(bmat, obact->obmat);
@@ -1964,7 +1989,7 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
 					ED_gpencil_parent_location(base->object, gpd, gpl_src, diff_mat);
 					/* undo matrix */
 					invert_m4_m4(inverse_diff_mat, diff_mat);
-					
+
 					for (bGPDframe *gpf = gpl_new->frames.first; gpf; gpf = gpf->next) {
 						for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
 							for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {



More information about the Bf-blender-cvs mailing list