[Bf-blender-cvs] [04819900440] greasepencil-object: GP "Add Monkey" - Primitive geometry can now have arbitrary transforms applied to it when created

Joshua Leung noreply at git.blender.org
Fri Mar 16 07:23:11 CET 2018


Commit: 0481990044088b35eb7ce94390aa5bbc004be900
Author: Joshua Leung
Date:   Fri Mar 16 03:02:45 2018 +1300
Branches: greasepencil-object
https://developer.blender.org/rB0481990044088b35eb7ce94390aa5bbc004be900

GP "Add Monkey" - Primitive geometry can now have arbitrary transforms applied to it when created

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/editors/gpencil/gpencil_add_monkey.c
M	source/blender/editors/include/ED_gpencil.h
M	source/blender/editors/object/object_add.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 83a97c0a0df..5a919fb0327 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -98,7 +98,10 @@ void BKE_gpencil_frame_delete_laststroke(struct bGPDlayer *gpl, struct bGPDframe
  */
 #define GP_PRIM_DATABUF_SIZE  5
 
-void BKE_gpencil_stroke_add_points(struct bGPDstroke *gps, const float *array, const int totpoints);
+void BKE_gpencil_stroke_add_points(
+        struct bGPDstroke *gps,
+        const float *array, const int totpoints,
+        const float mat[4][4]);
 
 struct bGPDstroke *BKE_gpencil_add_stroke(
         struct bGPDframe *gpf, struct Palette *palette, struct PaletteColor *palcolor, int totpoints,
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 66d85ccb06a..50063a6be4b 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -521,8 +521,9 @@ bGPdata *BKE_gpencil_data_addnew(Main *bmain, const char name[])
  * Populate stroke with point data from data buffers
  *
  * \param array Flat array of point data values. Each entry has GP_PRIM_DATABUF_SIZE values
+ * \param mat   4x4 transform matrix to transform points into the right coordinate space
  */
-void BKE_gpencil_stroke_add_points(bGPDstroke *gps, const float *array, const int totpoints)
+void BKE_gpencil_stroke_add_points(bGPDstroke *gps, const float *array, const int totpoints, const float mat[4][4])
 {
 	for (int i = 0; i < totpoints; i++) {
 		bGPDspoint *pt = &gps->points[i];
@@ -531,6 +532,8 @@ void BKE_gpencil_stroke_add_points(bGPDstroke *gps, const float *array, const in
 		pt->x = array[x];
 		pt->y = array[x + 1];
 		pt->z = array[x + 2];
+		mul_m4_v3(mat, &pt->x);
+		
 		pt->pressure = array[x + 3];
 		pt->strength = array[x + 4];
 	}
diff --git a/source/blender/editors/gpencil/gpencil_add_monkey.c b/source/blender/editors/gpencil/gpencil_add_monkey.c
index 6f32ea50970..5ad151bd960 100644
--- a/source/blender/editors/gpencil/gpencil_add_monkey.c
+++ b/source/blender/editors/gpencil/gpencil_add_monkey.c
@@ -1347,7 +1347,7 @@ static const float data35[261 * GP_PRIM_DATABUF_SIZE] = {
 /* Monkey API */
 
 /* add a 2D Suzanne (original model created by Matias Mendiola) */
-void ED_gpencil_create_monkey(bContext *C, bGPdata *gpd)
+void ED_gpencil_create_monkey(bContext *C, bGPdata *gpd, float mat[4][4])
 {
 	Scene *scene = CTX_data_scene(C);
 	Main *bmain = CTX_data_main(C);
@@ -1377,120 +1377,123 @@ void ED_gpencil_create_monkey(bContext *C, bGPdata *gpd)
 	ARRAY_SET_ITEMS(color_Pupils->fill, 0.153f, 0.057f, 0.063f, 1.0f);
 
 	/* layers */
+	// TODO: validate existence
 	bGPDlayer *Colors = BKE_gpencil_layer_addnew(gpd, "Colors", false);
 	bGPDlayer *Lines = BKE_gpencil_layer_addnew(gpd, "Lines", true);
 
 	/* frames */
+	// TODO: validate existence
 	bGPDframe *frameColor = BKE_gpencil_frame_addnew(Colors, CFRA);
 	bGPDframe *frameLines = BKE_gpencil_frame_addnew(Lines, CFRA);
 
+	/* generate strokes */
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin, 538, "Skin", 3);
-	BKE_gpencil_stroke_add_points(gps, data0, 538);
+	BKE_gpencil_stroke_add_points(gps, data0, 538, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Eyes, 136, "Eyes", 3);
-	BKE_gpencil_stroke_add_points(gps, data1, 136);
+	BKE_gpencil_stroke_add_points(gps, data1, 136, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin, 2, "Skin", 3);
-	BKE_gpencil_stroke_add_points(gps, data2, 2);
+	BKE_gpencil_stroke_add_points(gps, data2, 2, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 1, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data3, 1);
+	BKE_gpencil_stroke_add_points(gps, data3, 1, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 1, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data4, 1);
+	BKE_gpencil_stroke_add_points(gps, data4, 1, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 48, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data5, 48);
+	BKE_gpencil_stroke_add_points(gps, data5, 48, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 47, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data6, 47);
+	BKE_gpencil_stroke_add_points(gps, data6, 47, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 162, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data7, 162);
+	BKE_gpencil_stroke_add_points(gps, data7, 162, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 55, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data8, 55);
+	BKE_gpencil_stroke_add_points(gps, data8, 55, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 70, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data9, 70);
+	BKE_gpencil_stroke_add_points(gps, data9, 70, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Light, 227, "Skin_Light", 3);
-	BKE_gpencil_stroke_add_points(gps, data10, 227);
+	BKE_gpencil_stroke_add_points(gps, data10, 227, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 1, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data11, 1);
+	BKE_gpencil_stroke_add_points(gps, data11, 1, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 123, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data12, 123);
+	BKE_gpencil_stroke_add_points(gps, data12, 123, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 125, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data13, 125);
+	BKE_gpencil_stroke_add_points(gps, data13, 125, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 45, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data14, 45);
+	BKE_gpencil_stroke_add_points(gps, data14, 45, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 44, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data15, 44);
+	BKE_gpencil_stroke_add_points(gps, data15, 44, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 84, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data16, 84);
+	BKE_gpencil_stroke_add_points(gps, data16, 84, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 56, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data17, 56);
+	BKE_gpencil_stroke_add_points(gps, data17, 56, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 59, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data18, 59);
+	BKE_gpencil_stroke_add_points(gps, data18, 59, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Skin_Shadow, 100, "Skin_Shadow", 3);
-	BKE_gpencil_stroke_add_points(gps, data19, 100);
+	BKE_gpencil_stroke_add_points(gps, data19, 100, mat);
 
 	gps = BKE_gpencil_add_stroke(frameColor, palette, color_Eyes, 136, "Eyes", 3);
-	BKE_gpencil_stroke_add_points(gps, data20, 136);
+	BKE_gpencil_stroke_add_points(gps, data20, 136, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 353, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data21, 353);
+	BKE_gpencil_stroke_add_points(gps, data21, 353, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 309, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data22, 309);
+	BKE_gpencil_stroke_add_points(gps, data22, 309, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 209, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data23, 209);
+	BKE_gpencil_stroke_add_points(gps, data23, 209, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 133, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data24, 133);
+	BKE_gpencil_stroke_add_points(gps, data24, 133, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 389, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data25, 389);
+	BKE_gpencil_stroke_add_points(gps, data25, 389, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 41, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data26, 41);
+	BKE_gpencil_stroke_add_points(gps, data26, 41, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 77, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data27, 77);
+	BKE_gpencil_stroke_add_points(gps, data27, 77, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 257, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data28, 257);
+	BKE_gpencil_stroke_add_points(gps, data28, 257, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 205, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data29, 205);
+	BKE_gpencil_stroke_add_points(gps, data29, 205, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 33, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data30, 33);
+	BKE_gpencil_stroke_add_points(gps, data30, 33, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 37, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data31, 37);
+	BKE_gpencil_stroke_add_points(gps, data31, 37, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 201, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data32, 201);
+	BKE_gpencil_stroke_add_points(gps, data32, 201, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Pupils, 69, "Pupils", 3);
-	BKE_gpencil_stroke_add_points(gps, data33, 69);
+	BKE_gpencil_stroke_add_points(gps, data33, 69, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Pupils, 57, "Pupils", 3);
-	BKE_gpencil_stroke_add_points(gps, data34, 57);
+	BKE_gpencil_stroke_add_points(gps, data34, 57, mat);
 
 	gps = BKE_gpencil_add_stroke(frameLines, palette, color_Black, 261, "Black", 3);
-	BKE_gpencil_stroke_add_points(gps, data35, 261);
+	BKE_gpencil_stroke_add_points(gps, data35, 261, mat);
 }
 
 
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index ac9d875a9d3..8efbfc627c7 100644


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list