Fix T49617: Grease Pencil Stroke Placement regression
authorAntonio Vazquez <blendergit@gmail.com>
Sun, 16 Apr 2017 15:52:39 +0000 (17:52 +0200)
committerAntonio Vazquez <blendergit@gmail.com>
Sun, 16 Apr 2017 15:52:39 +0000 (17:52 +0200)
When moved the options to toolsetting, this part was missing. The problem was not the pointer as suggested in D2629.

Thanks ArvÄ«ds Kokins for his help fixing this bug

source/blender/editors/gpencil/gpencil_paint.c

index 5879306b06cab11ff209dc69f52d6da9c72f17ea..d6e40377e633047b0ed566b06168501206d117d8 100644 (file)
@@ -484,7 +484,8 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
        bGPdata *gpd = p->gpd;
        bGPDbrush *brush = p->brush;
        tGPspoint *pt;
-       
+       ToolSettings *ts = p->scene->toolsettings;
+
        /* check painting mode */
        if (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT) {
                /* straight lines only - i.e. only store start and end point in buffer */
@@ -636,7 +637,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                                View3D *v3d = p->sa->spacedata.first;
                                
                                view3d_region_operator_needs_opengl(p->win, p->ar);
-                               ED_view3d_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1 : 0);
+                               ED_view3d_autodist_init(p->scene, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
                        }
                        
                        /* convert screen-coordinates to appropriate coordinates (and store them) */
@@ -756,7 +757,7 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
        
        int i, totelem;
        /* since strokes are so fine, when using their depth we need a margin otherwise they might get missed */
-       int depth_margin = (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 4 : 0;
+       int depth_margin = (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 4 : 0;
        
        /* get total number of points to allocate space for
         *      - drawing straight-lines only requires the endpoints
@@ -910,7 +911,7 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
                                        depth_arr[i] = 0.9999f;
                        }
                        else {
-                               if (p->gpd->flag & GP_DATA_DEPTH_STROKE_ENDPOINTS) {
+                               if (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE_ENDPOINTS) {
                                        /* remove all info between the valid endpoints */
                                        int first_valid = 0;
                                        int last_valid = 0;
@@ -1794,6 +1795,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode)
 /* finish off a stroke (clears buffer, but doesn't finish the paint operation) */
 static void gp_paint_strokeend(tGPsdata *p)
 {
+       ToolSettings *ts = p->scene->toolsettings;
        /* for surface sketching, need to set the right OpenGL context stuff so that
         * the conversions will project the values correctly...
         */
@@ -1802,7 +1804,7 @@ static void gp_paint_strokeend(tGPsdata *p)
                
                /* need to restore the original projection settings before packing up */
                view3d_region_operator_needs_opengl(p->win, p->ar);
-               ED_view3d_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1 : 0);
+               ED_view3d_autodist_init(p->scene, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
        }
        
        /* check if doing eraser or not */