Fix T60022: Crash when adding grease pencil object to a collection disabled in viewport.
authorAntonioya <blendergit@gmail.com>
Thu, 3 Jan 2019 17:10:39 +0000 (18:10 +0100)
committerAntonioya <blendergit@gmail.com>
Thu, 3 Jan 2019 17:12:25 +0000 (18:12 +0100)
See D4163

Thanks to Habib Gahbiche (@zazizizou) for the fix.

source/blender/editors/gpencil/gpencil_add_monkey.c
source/blender/editors/gpencil/gpencil_add_stroke.c
source/blender/editors/gpencil/gpencil_data.c
source/blender/editors/gpencil/gpencil_utils.c
source/blender/editors/include/ED_gpencil.h
source/blender/editors/object/object_add.c

index ce5d765ada472afb9a9aace8a0d3d95213bc74b4..21697995b9c02db420f84875e1a883d1a2940e45 100644 (file)
@@ -535,10 +535,9 @@ static const ColorTemplate gp_monkey_pct_pupils = {
 /* Monkey API */
 
 /* add a 2D Suzanne (original model created by Matias Mendiola) */
 /* Monkey API */
 
 /* add a 2D Suzanne (original model created by Matias Mendiola) */
-void ED_gpencil_create_monkey(bContext *C, float mat[4][4])
+void ED_gpencil_create_monkey(bContext *C, Object *ob, float mat[4][4])
 {
        Main *bmain = CTX_data_main(C);
 {
        Main *bmain = CTX_data_main(C);
-       Object *ob = CTX_data_active_object(C);
        Depsgraph *depsgraph = CTX_data_depsgraph(C);
        int cfra_eval = (int)DEG_get_ctime(depsgraph);
        bGPdata *gpd = (bGPdata *)ob->data;
        Depsgraph *depsgraph = CTX_data_depsgraph(C);
        int cfra_eval = (int)DEG_get_ctime(depsgraph);
        bGPdata *gpd = (bGPdata *)ob->data;
index 330f7a69e098380c5f49a728468a69f099127965..6df3638d8593841582f9fba21ebeeb64d9a57cbd 100644 (file)
@@ -213,10 +213,9 @@ static const ColorTemplate gp_stroke_material_grey = {
 /* Stroke API */
 
 /* add a Simple stroke with colors (original design created by Daniel M. Lara and Matias Mendiola) */
 /* Stroke API */
 
 /* add a Simple stroke with colors (original design created by Daniel M. Lara and Matias Mendiola) */
-void ED_gpencil_create_stroke(bContext *C, float mat[4][4])
+void ED_gpencil_create_stroke(bContext *C, Object *ob, float mat[4][4])
 {
        Main *bmain = CTX_data_main(C);
 {
        Main *bmain = CTX_data_main(C);
-       Object *ob = CTX_data_active_object(C);
        Depsgraph *depsgraph = CTX_data_depsgraph(C);
        int cfra_eval = (int)DEG_get_ctime(depsgraph);
        bGPdata *gpd = (bGPdata *)ob->data;
        Depsgraph *depsgraph = CTX_data_depsgraph(C);
        int cfra_eval = (int)DEG_get_ctime(depsgraph);
        bGPdata *gpd = (bGPdata *)ob->data;
index a8cfe91740cdd5610217e93d922b5ec8e27ec9e8..8afb0cafeb9a7a605d6d61d4d3c04e28c25f868d 100644 (file)
@@ -137,7 +137,8 @@ static int gp_data_add_exec(bContext *C, wmOperator *op)
                        *gpd_ptr = BKE_gpencil_data_addnew(bmain, DATA_("GPencil"));
 
                        /* add default sets of colors and brushes */
                        *gpd_ptr = BKE_gpencil_data_addnew(bmain, DATA_("GPencil"));
 
                        /* add default sets of colors and brushes */
-                       ED_gpencil_add_defaults(C);
+                       Object *ob = CTX_data_active_object(C);
+                       ED_gpencil_add_defaults(C, ob);
 
                        /* add new layer */
                        BKE_gpencil_layer_addnew(*gpd_ptr, DATA_("GP_Layer"), true);
 
                        /* add new layer */
                        BKE_gpencil_layer_addnew(*gpd_ptr, DATA_("GP_Layer"), true);
@@ -245,7 +246,8 @@ static int gp_layer_add_exec(bContext *C, wmOperator *op)
                        *gpd_ptr = BKE_gpencil_data_addnew(bmain, DATA_("GPencil"));
 
                        /* add default sets of colors and brushes */
                        *gpd_ptr = BKE_gpencil_data_addnew(bmain, DATA_("GPencil"));
 
                        /* add default sets of colors and brushes */
-                       ED_gpencil_add_defaults(C);
+                       Object *ob = CTX_data_active_object(C);
+                       ED_gpencil_add_defaults(C, ob);
                }
        }
 
                }
        }
 
index 4d6a7b547c647803f404c003e204f60834aa3341..f7fafb56d3a004c4056305fad6cdd5a82b1b0044 100644 (file)
@@ -1221,16 +1221,15 @@ Object *ED_gpencil_add_object(bContext *C, Scene *UNUSED(scene), const float loc
        /* define size */
        BKE_object_obdata_size_init(ob, GP_OBGPENCIL_DEFAULT_SIZE);
        /* create default brushes and colors */
        /* define size */
        BKE_object_obdata_size_init(ob, GP_OBGPENCIL_DEFAULT_SIZE);
        /* create default brushes and colors */
-       ED_gpencil_add_defaults(C);
+       ED_gpencil_add_defaults(C, ob);
 
        return ob;
 }
 
 /* Helper function to create default colors and drawing brushes */
 
        return ob;
 }
 
 /* Helper function to create default colors and drawing brushes */
-void ED_gpencil_add_defaults(bContext *C)
+void ED_gpencil_add_defaults(bContext *C, Object *ob)
 {
        Main *bmain = CTX_data_main(C);
 {
        Main *bmain = CTX_data_main(C);
-       Object *ob = CTX_data_active_object(C);
        ToolSettings *ts = CTX_data_tool_settings(C);
 
        /* first try to reuse default material */
        ToolSettings *ts = CTX_data_tool_settings(C);
 
        /* first try to reuse default material */
index fb216a8c9a985b65ad18b8b60a449cae42e4bb77..c231d0dc355d865a6b809b0f37f65d55bda02ae9 100644 (file)
@@ -220,13 +220,13 @@ void ED_gpencil_brush_draw_eraser(struct Brush *brush, int x, int y);
 
 /* ----------- Add Primitive Utilities -------------- */
 
 
 /* ----------- Add Primitive Utilities -------------- */
 
-void ED_gpencil_create_monkey(struct bContext *C, float mat[4][4]);
-void ED_gpencil_create_stroke(struct bContext *C, float mat[4][4]);
+void ED_gpencil_create_monkey(struct bContext *C, struct Object *ob, float mat[4][4]);
+void ED_gpencil_create_stroke(struct bContext *C, struct Object *ob, float mat[4][4]);
 
 /* ------------ Object Utilities ------------ */
 struct Object *ED_gpencil_add_object(
         struct bContext *C, struct Scene *scene, const float loc[3], unsigned short local_view_bits);
 
 /* ------------ Object Utilities ------------ */
 struct Object *ED_gpencil_add_object(
         struct bContext *C, struct Scene *scene, const float loc[3], unsigned short local_view_bits);
-void ED_gpencil_add_defaults(struct bContext *C);
+void ED_gpencil_add_defaults(struct bContext *C, struct Object *ob);
 /* set object modes */
 void ED_gpencil_setup_modes(struct bContext *C, struct bGPdata *gpd, int newmode);
 
 /* set object modes */
 void ED_gpencil_setup_modes(struct bContext *C, struct bGPdata *gpd, int newmode);
 
index 316d581870d1ba9def028f80d483876c1fd05622..6be1afdcb2a20eb5f173971d382ef8da3bc3402b 100644 (file)
@@ -1030,7 +1030,7 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
                        mul_v3_fl(mat[1], radius);
                        mul_v3_fl(mat[2], radius);
 
                        mul_v3_fl(mat[1], radius);
                        mul_v3_fl(mat[2], radius);
 
-                       ED_gpencil_create_stroke(C, mat);
+                       ED_gpencil_create_stroke(C, ob, mat);
                        break;
                }
                case GP_MONKEY:
                        break;
                }
                case GP_MONKEY:
@@ -1043,7 +1043,7 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
                        mul_v3_fl(mat[1], radius);
                        mul_v3_fl(mat[2], radius);
 
                        mul_v3_fl(mat[1], radius);
                        mul_v3_fl(mat[2], radius);
 
-                       ED_gpencil_create_monkey(C, mat);
+                       ED_gpencil_create_monkey(C, ob, mat);
                        break;
                }
                case GP_EMPTY:
                        break;
                }
                case GP_EMPTY:
@@ -1057,7 +1057,7 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
 
        /* if this is a new object, initialise default stuff (colors, etc.) */
        if (newob) {
 
        /* if this is a new object, initialise default stuff (colors, etc.) */
        if (newob) {
-               ED_gpencil_add_defaults(C);
+               ED_gpencil_add_defaults(C, ob);
        }
 
        return OPERATOR_FINISHED;
        }
 
        return OPERATOR_FINISHED;