Fix [#33962] Grease Pencil crashing blender
authorBastien Montagne <montagne29@wanadoo.fr>
Tue, 22 Jan 2013 15:22:46 +0000 (15:22 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Tue, 22 Jan 2013 15:22:46 +0000 (15:22 +0000)
Own fault from grease pencil to curve enhacement. Fixed the bug itself, and made poll of convert operator more strict (no only active when there is something to convert, i.e. at least one stroke!).

source/blender/editors/gpencil/gpencil_edit.c

index e4e640eeefc125497a3471e4a37a07d81bb46600..671adfb8d1ecefcbe184b61654e0e2b551bb456e 100644 (file)
@@ -1387,12 +1387,15 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
 static int gp_convert_check_has_valid_timing(bContext *C, bGPDlayer *gpl, wmOperator *op)
 {
        Scene *scene = CTX_data_scene(C);
 static int gp_convert_check_has_valid_timing(bContext *C, bGPDlayer *gpl, wmOperator *op)
 {
        Scene *scene = CTX_data_scene(C);
-       bGPDframe *gpf = gpencil_layer_getframe(gpl, CFRA, 0);
-       bGPDstroke *gps = gpf->strokes.first;
+       bGPDframe *gpf = NULL;
+       bGPDstroke *gps = NULL;
        bGPDspoint *pt;
        double base_time, cur_time, prev_time = -1.0;
        int i, valid = TRUE;
        
        bGPDspoint *pt;
        double base_time, cur_time, prev_time = -1.0;
        int i, valid = TRUE;
        
+       if (!gpl || !(gpf = gpencil_layer_getframe(gpl, CFRA, 0)) || !(gps = gpf->strokes.first))
+               return FALSE;
+       
        do {
                base_time = cur_time = gps->inittime;
                if (cur_time <= prev_time) {
        do {
                base_time = cur_time = gps->inittime;
                if (cur_time <= prev_time) {
@@ -1438,11 +1441,19 @@ static void gp_convert_set_end_frame(struct Main *UNUSED(main), struct Scene *UN
 static int gp_convert_poll(bContext *C)
 {
        bGPdata *gpd = gpencil_data_get_active(C);
 static int gp_convert_poll(bContext *C)
 {
        bGPdata *gpd = gpencil_data_get_active(C);
+       bGPDlayer *gpl = NULL;
+       bGPDframe *gpf = NULL;
        ScrArea *sa = CTX_wm_area(C);
        Scene *scene = CTX_data_scene(C);
 
        ScrArea *sa = CTX_wm_area(C);
        Scene *scene = CTX_data_scene(C);
 
-       /* only if there's valid data, and the current view is 3D View */
-       return ((sa && sa->spacetype == SPACE_VIEW3D) && gpencil_layer_getactive(gpd) && (scene->obedit == NULL));
+       /* only if the current view is 3D View, if there's valid data (i.e. at least one stroke!),
+        * and if we are not in edit mode!
+        */
+       return ((sa && sa->spacetype == SPACE_VIEW3D) &&
+               (gpl = gpencil_layer_getactive(gpd)) &&
+               (gpf = gpencil_layer_getframe(gpl, CFRA, 0)) &&
+               (gpf->strokes.first) &&
+               (scene->obedit == NULL));
 }
 
 static int gp_convert_layer_exec(bContext *C, wmOperator *op)
 }
 
 static int gp_convert_layer_exec(bContext *C, wmOperator *op)