[Bf-blender-cvs] [184ab749c38] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Tue Nov 13 04:27:00 CET 2018


Commit: 184ab749c38a6e90744022a030bec6a6ee584a0a
Author: Campbell Barton
Date:   Tue Nov 13 14:24:41 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB184ab749c38a6e90744022a030bec6a6ee584a0a

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/blenkernel/BKE_gpencil.h
index 14c4e8fec32,92e16f02e25..3b8df66668a
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@@ -139,44 -103,20 +139,44 @@@ struct bGPDlayer *BKE_gpencil_layer_get
  void BKE_gpencil_layer_setactive(struct bGPdata *gpd, struct bGPDlayer *active);
  void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl);
  
 -struct bGPDbrush *BKE_gpencil_brush_getactive(struct ToolSettings *ts);
 -void BKE_gpencil_brush_setactive(struct ToolSettings *ts, struct bGPDbrush *active);
 -void BKE_gpencil_brush_delete(struct ToolSettings *ts, struct bGPDbrush *brush);
 -
 -struct bGPDpalette *BKE_gpencil_palette_getactive(struct bGPdata *gpd);
 -void BKE_gpencil_palette_setactive(struct bGPdata *gpd, struct bGPDpalette *active);
 -void BKE_gpencil_palette_delete(struct bGPdata *gpd, struct bGPDpalette *palette);
 -void BKE_gpencil_palette_change_strokes(struct bGPdata *gpd);
 -
 -struct bGPDpalettecolor *BKE_gpencil_palettecolor_getactive(struct bGPDpalette *palette);
 -void BKE_gpencil_palettecolor_setactive(struct bGPDpalette *palette, struct bGPDpalettecolor *active);
 -void BKE_gpencil_palettecolor_delete(struct bGPDpalette *palette, struct bGPDpalettecolor *palcolor);
 -struct bGPDpalettecolor *BKE_gpencil_palettecolor_getbyname(struct bGPDpalette *palette, char *name);
 -void BKE_gpencil_palettecolor_changename(struct bGPdata *gpd, char *oldname, const char *newname);
 -void BKE_gpencil_palettecolor_delete_strokes(struct bGPdata *gpd, char *name);
 +struct Material *BKE_gpencil_get_material_from_brush(struct Brush *brush);
 +struct Material *BKE_gpencil_material_ensure(struct Main *bmain, struct Object *ob);
 +
 +/* object boundbox */
 +bool BKE_gpencil_data_minmax(
 +	struct Object *ob, const struct bGPdata *gpd,
 +	float r_min[3], float r_max[3]);
 +bool BKE_gpencil_stroke_minmax(
 +	const struct bGPDstroke *gps, const bool use_select,
 +	float r_min[3], float r_max[3]);
 +bool BKE_gpencil_stroke_select_check(
 +	const struct bGPDstroke *gps);
 +
 +struct BoundBox *BKE_gpencil_boundbox_get(struct Object *ob);
- void BKE_gpencil_centroid_3D(struct bGPdata *gpd, float r_centroid[3]);
++void BKE_gpencil_centroid_3d(struct bGPdata *gpd, float r_centroid[3]);
 +
 +/* vertex groups */
 +void BKE_gpencil_dvert_ensure(struct bGPDstroke *gps);
 +void BKE_gpencil_vgroup_remove(struct Object *ob, struct bDeformGroup *defgroup);
 +void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGPDstroke *gps_dst);
 +
 +/* GPencil geometry evaluation */
 +void BKE_gpencil_eval_geometry(struct Depsgraph *depsgraph, struct bGPdata *gpd);
 +
 +/* stroke geometry utilities */
 +void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3]);
 +void BKE_gpencil_simplify_stroke(struct bGPDstroke *gps, float factor);
 +void BKE_gpencil_simplify_fixed(struct bGPDstroke *gps);
 +void BKE_gpencil_subdivide(struct bGPDstroke *gps, int level, int flag);
 +
 +void BKE_gpencil_transform(struct bGPdata *gpd, float mat[4][4]);
 +
 +bool BKE_gpencil_smooth_stroke(struct bGPDstroke *gps, int i, float inf);
 +bool BKE_gpencil_smooth_stroke_strength(struct bGPDstroke *gps, int point_index, float influence);
 +bool BKE_gpencil_smooth_stroke_thickness(struct bGPDstroke *gps, int point_index, float influence);
 +bool BKE_gpencil_smooth_stroke_uv(struct bGPDstroke *gps, int point_index, float influence);
 +
 +void BKE_gpencil_get_range_selected(struct bGPDlayer *gpl, int *r_initframe, int *r_endframe);
 +float BKE_gpencil_multiframe_falloff_calc(struct bGPDframe *gpf, int actnum, int f_init, int f_end, struct CurveMapping *cur_falloff);
  
  #endif /*  __BKE_GPENCIL_H__ */
diff --cc source/blender/blenkernel/intern/gpencil.c
index ed551b1c109,e89508fd6c0..9c398182bb6
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@@ -1037,227 -1106,138 +1037,227 @@@ void BKE_gpencil_layer_delete(bGPdata *
  	BLI_freelinkN(&gpd->layers, gpl);
  }
  
 -/* ************************************************** */
 -/* get the active gp-brush for editing */
 -bGPDbrush *BKE_gpencil_brush_getactive(ToolSettings *ts)
 +Material *BKE_gpencil_get_material_from_brush(Brush *brush)
  {
 -	bGPDbrush *brush;
 +	Material *ma = NULL;
  
 -	/* error checking */
 -	if (ELEM(NULL, ts, ts->gp_brushes.first)) {
 -		return NULL;
 +	if ((brush != NULL) && (brush->gpencil_settings != NULL) &&
 +	    (brush->gpencil_settings->material != NULL))
 +	{
 +		ma = brush->gpencil_settings->material;
  	}
  
 -	/* loop over brushes until found (assume only one active) */
 -	for (brush = ts->gp_brushes.first; brush; brush = brush->next) {
 -		if (brush->flag & GP_BRUSH_ACTIVE) {
 -			return brush;
 +	return ma;
 +}
 +
 +/* Get active color, and add all default settings if we don't find anything */
 +Material *BKE_gpencil_material_ensure(Main *bmain, Object *ob)
 +{
 +	Material *ma = NULL;
 +
 +	/* sanity checks */
 +	if (ELEM(NULL, bmain, ob))
 +		return NULL;
 +
 +	ma = give_current_material(ob, ob->actcol);
 +	if (ma == NULL) {
 +		if (ob->totcol == 0) {
 +			BKE_object_material_slot_add(bmain, ob);
  		}
 +		ma = BKE_material_add_gpencil(bmain, DATA_("Material"));
 +		assign_material(bmain, ob, ma, ob->totcol, BKE_MAT_ASSIGN_USERPREF);
 +	}
 +	else if (ma->gp_style == NULL) {
 +		BKE_material_init_gpencil_settings(ma);
  	}
  
 -	/* no active brush found */
 -	return NULL;
 +	return ma;
  }
  
 -/* set the active gp-brush */
 -void BKE_gpencil_brush_setactive(ToolSettings *ts, bGPDbrush *active)
 +/* ************************************************** */
 +/* GP Object - Boundbox Support */
 +
 +/**
 + * Get min/max coordinate bounds for single stroke
 + * \return Returns whether we found any selected points
 + */
 +bool BKE_gpencil_stroke_minmax(
 +        const bGPDstroke *gps, const bool use_select,
 +        float r_min[3], float r_max[3])
  {
 -	bGPDbrush *brush;
 +	const bGPDspoint *pt;
 +	int i;
 +	bool changed = false;
  
 -	/* error checking */
 -	if (ELEM(NULL, ts, ts->gp_brushes.first, active)) {
 -		return;
 -	}
 +	if (ELEM(NULL, gps, r_min, r_max))
 +		return false;
  
 -	/* loop over brushes deactivating all */
 -	for (brush = ts->gp_brushes.first; brush; brush = brush->next) {
 -		brush->flag &= ~GP_BRUSH_ACTIVE;
 +	for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
 +		if ((use_select == false) || (pt->flag & GP_SPOINT_SELECT)) {
 +			minmax_v3v3_v3(r_min, r_max, &pt->x);
 +			changed = true;
 +		}
  	}
 -
 -	/* set as active one */
 -	active->flag |= GP_BRUSH_ACTIVE;
 +	return changed;
  }
  
 -/* delete the active gp-brush */
 -void BKE_gpencil_brush_delete(ToolSettings *ts, bGPDbrush *brush)
 +/* get min/max bounds of all strokes in GP datablock */
 +bool BKE_gpencil_data_minmax(Object *ob, const bGPdata *gpd, float r_min[3], float r_max[3])
  {
 -	/* error checking */
 -	if (ELEM(NULL, ts, brush)) {
 -		return;
 -	}
 +	float bmat[3][3];
 +	bool changed = false;
 +
 +	INIT_MINMAX(r_min, r_max);
 +
 +	if (gpd == NULL)
 +		return changed;
 +
 +	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 +		bGPDframe *gpf = gpl->actframe;
  
 -	/* free curves */
 -	if (brush->cur_sensitivity) {
 -		curvemapping_free(brush->cur_sensitivity);
 +		if (gpf != NULL) {
 +			for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
 +				changed = BKE_gpencil_stroke_minmax(gps, false, r_min, r_max);
 +			}
 +		}
  	}
 -	if (brush->cur_strength) {
 -		curvemapping_free(brush->cur_strength);
 +
 +	if ((changed) && (ob)) {
 +		copy_m3_m4(bmat, ob->obmat);
 +		mul_m3_v3(bmat, r_min);
 +		add_v3_v3(r_min, ob->obmat[3]);
 +		mul_m3_v3(bmat, r_max);
 +		add_v3_v3(r_max, ob->obmat[3]);
  	}
 -	if (brush->cur_jitter) {
 -		curvemapping_free(brush->cur_jitter);
 +
 +	return changed;
 +}
 +
 +bool BKE_gpencil_stroke_select_check(
 +        const bGPDstroke *gps)
 +{
 +	const bGPDspoint *pt;
 +	int i;
 +	for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
 +		if (pt->flag & GP_SPOINT_SELECT) {
 +			return true;
 +		}
  	}
 +	return false;
 +}
 +
 +/* compute center of bounding box */
- void BKE_gpencil_centroid_3D(bGPdata *gpd, float r_centroid[3])
++void BKE_gpencil_centroid_3d(bGPdata *gpd, float r_centroid[3])
 +{
 +	float min[3], max[3], tot[3];
 +
 +	BKE_gpencil_data_minmax(NULL, gpd, min, max);
  
 -	/* free */
 -	BLI_freelinkN(&ts->gp_brushes, brush);
 +	add_v3_v3v3(tot, min, max);
 +	mul_v3_v3fl(r_centroid, tot, 0.5f);
  }
  
 -/* ************************************************** */
 -/* get the active gp-palette for editing */
 -bGPDpalette *BKE_gpencil_palette_getactive(bGPdata *gpd)
 +
 +/* create bounding box values */
 +static void boundbox_gpencil(Object *ob)
  {
 -	bGPDpalette *palette;
 +	BoundBox *bb;
 +	bGPdata *gpd;
 +	float min[3], max[3];
  
 -	/* error checking */
 -	if (ELEM(NULL, gpd, gpd->palettes.first)) {
 -		return NULL;
 +	if (ob->bb == NULL) {
 +		ob->bb = MEM_callocN(sizeof(BoundBox), "GPencil boundbox");
  	}
  
 -	/* loop over palettes until found (assume only one active) */
 -	for (palette = gpd->palettes.first; palette; palette = palette->next) {
 -		if (palette->flag & PL_PALETTE_ACTIVE)
 -			return palette;
 -	}
 +	bb  = ob->bb;
 +	gpd = ob->data;
  
 -	/* no active palette found */
 -	return NULL;
 +	BKE_gpencil_data_minmax(NULL, gpd, min, max);
 +	BKE_boundbox_init_from_minmax(bb, min, max);
 +
 +	bb->flag &= ~BOUNDBOX_DIRTY;
  }
  
 -/* set the active gp-palette */
 -void BKE_gpencil_palette_setactive(bGPdata *gpd, bGPDpalette *active)
 +/* get bounding box */
 +BoundBox *BKE_gpencil_boundbox_get(Object *ob)
  {
 -	bGPDpalette *palette;
 +	bGPdata *gpd;
  
 -	/* error checking */
 -	if (ELEM(NULL, gpd, gpd->palettes.first, active)) {
 -		return;
 -	}
 +	if (ELEM(NULL, ob, ob->data))
 +		return NULL;
  
 -	/* loop over palettes deactivating all */
 -	for (palette = gpd->palettes.first; palette; palette = palette->next) {
 -		palette->flag &= ~PL_PALETTE_ACTIVE;
 +	gpd = ob->data;
 +	if ((ob->bb) && ((ob->bb->flag & BOUNDBOX_DIRTY) == 0) &&
 +	    ((gpd->flag & GP_DATA_CACHE_IS_DIRTY) == 0))
 +	{
 +		return ob->bb;
  	}
  
 -	/* set as active one */
 -	active->flag |= PL_PALETTE_ACT

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list