grease pencil stroke depth option, rather then snapping to geometry you can draw over existing grease pencil lines. makes it easuer to draw 3D shapes with grease pencil.
This commit is contained in:
@@ -254,16 +254,18 @@ static void draw_gpencil_panel (bContext *C, uiLayout *layout, bGPdata *gpd, Poi
|
||||
}
|
||||
|
||||
/* draw gpd drawing settings first ------------------------------------- */
|
||||
col= uiLayoutColumn(layout, 0);
|
||||
col= uiLayoutColumn(layout, 1);
|
||||
/* label */
|
||||
uiItemL(col, "Drawing Settings:", 0);
|
||||
|
||||
/* 'stick to view' option */
|
||||
//uiItemR(col, NULL, 0, &gpd_ptr, "draw_mode", 0);
|
||||
row= uiLayoutRow(layout, 1);
|
||||
row= uiLayoutRow(col, 1);
|
||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "VIEW");
|
||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "CURSOR");
|
||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "DEPTH");
|
||||
row= uiLayoutRow(col, 1);
|
||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "SURFACE");
|
||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "STROKE");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ static int gpencil_draw_poll (bContext *C)
|
||||
static int gpencil_project_check (tGPsdata *p)
|
||||
{
|
||||
bGPdata *gpd= p->gpd;
|
||||
return ((gpd->sbuffer_sflag & GP_STROKE_3DSPACE) && (p->gpd->flag & GP_DATA_VIEWDEPTH)) ? 1:0;
|
||||
return ((gpd->sbuffer_sflag & GP_STROKE_3DSPACE) && (p->gpd->flag & (GP_DATA_DEPTH_VIEW | GP_DATA_DEPTH_STROKE))) ? 1:0;
|
||||
}
|
||||
|
||||
/* ******************************************* */
|
||||
@@ -1165,7 +1165,7 @@ static void gpencil_draw_exit (bContext *C, wmOperator *op)
|
||||
|
||||
/* need to restore the original projection settings before packing up */
|
||||
view3d_operator_needs_opengl(C);
|
||||
view_autodist_init(p->scene, p->ar, v3d);
|
||||
view_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1:0);
|
||||
}
|
||||
|
||||
gp_paint_cleanup(p);
|
||||
|
||||
@@ -127,7 +127,7 @@ unsigned int view3d_sample_backbuf(struct ViewContext *vc, int x, int y);
|
||||
int view_autodist(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, short *mval, float mouse_worldloc[3]);
|
||||
|
||||
/* only draw so view_autodist_simple can be called many times after */
|
||||
int view_autodist_init(struct Scene *scene, struct ARegion *ar, struct View3D *v3d);
|
||||
int view_autodist_init(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, int mode);
|
||||
int view_autodist_simple(struct ARegion *ar, short *mval, float mouse_worldloc[3], float *force_depth);
|
||||
int view_autodist_depth(struct ARegion *ar, short *mval, float *depth);
|
||||
|
||||
|
||||
@@ -1643,6 +1643,29 @@ void view3d_update_depths(ARegion *ar, View3D *v3d)
|
||||
}
|
||||
}
|
||||
|
||||
void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
Scene *sce;
|
||||
|
||||
setwinmatrixview3d(ar, v3d, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(scene, v3d, rv3d); /* note: calls where_is_object for camera... */
|
||||
|
||||
mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat);
|
||||
invert_m4_m4(rv3d->persinv, rv3d->persmat);
|
||||
invert_m4_m4(rv3d->viewinv, rv3d->viewmat);
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
wmLoadMatrix(rv3d->viewmat);
|
||||
|
||||
v3d->zbuf= TRUE;
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
draw_gpencil_3dview_ext(scene, ar, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
@@ -2265,12 +2265,19 @@ int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mou
|
||||
return 1;
|
||||
}
|
||||
|
||||
int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d) //, float *autodist )
|
||||
int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode) //, float *autodist )
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
|
||||
/* Get Z Depths, needed for perspective, nice for ortho */
|
||||
draw_depth(scene, ar, v3d, NULL);
|
||||
switch(mode) {
|
||||
case 0:
|
||||
draw_depth(scene, ar, v3d, NULL);
|
||||
break;
|
||||
case 1:
|
||||
draw_depth_gpencil(scene, ar, v3d);
|
||||
break;
|
||||
}
|
||||
|
||||
/* force updating */
|
||||
if (rv3d->depths) {
|
||||
|
||||
@@ -116,6 +116,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o
|
||||
/* view3d_draw.c */
|
||||
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
|
||||
void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void *));
|
||||
void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d);
|
||||
void view3d_clr_clipping(void);
|
||||
void view3d_set_clipping(RegionView3D *rv3d);
|
||||
void add_view3d_after(View3D *v3d, Base *base, int type, int flag);
|
||||
|
||||
@@ -147,6 +147,7 @@ typedef struct bGPdata {
|
||||
/* new strokes are added in viewport space */
|
||||
#define GP_DATA_VIEWALIGN (1<<4)
|
||||
/* Project into the screens Z values */
|
||||
#define GP_DATA_VIEWDEPTH (1<<5)
|
||||
#define GP_DATA_DEPTH_VIEW (1<<5)
|
||||
#define GP_DATA_DEPTH_STROKE (1<<6)
|
||||
|
||||
#endif /* DNA_GPENCIL_TYPES_H */
|
||||
|
||||
@@ -223,7 +223,8 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
|
||||
static EnumPropertyItem draw_mode_items[] = {
|
||||
{GP_DATA_VIEWALIGN, "CURSOR", 0, "Cursor", ""},
|
||||
{0, "VIEW", 0, "View", ""}, /* weired, GP_DATA_VIEWALIGN is inverted */
|
||||
{GP_DATA_VIEWALIGN|GP_DATA_VIEWDEPTH, "DEPTH", 0, "Depth", ""},
|
||||
{GP_DATA_VIEWALIGN|GP_DATA_DEPTH_VIEW, "SURFACE", 0, "Surface", ""},
|
||||
{GP_DATA_VIEWALIGN|GP_DATA_DEPTH_STROKE, "STROKE", 0, "Stroke", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
srna= RNA_def_struct(brna, "GreasePencil", "ID");
|
||||
|
||||
Reference in New Issue
Block a user