[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50223] trunk/blender/source/blender/ blenkernel: code cleanup: split out mask spline evaluation into its own file.

Campbell Barton ideasman42 at gmail.com
Sun Aug 26 15:41:40 CEST 2012


Revision: 50223
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50223
Author:   campbellbarton
Date:     2012-08-26 13:41:40 +0000 (Sun, 26 Aug 2012)
Log Message:
-----------
code cleanup: split out mask spline evaluation into its own file.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mask.h
    trunk/blender/source/blender/blenkernel/CMakeLists.txt
    trunk/blender/source/blender/blenkernel/intern/mask.c

Added Paths:
-----------
    trunk/blender/source/blender/blenkernel/intern/mask_evaluate.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mask.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-08-26 13:34:17 UTC (rev 50222)
+++ trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-08-26 13:41:40 UTC (rev 50223)
@@ -19,7 +19,8 @@
  * All rights reserved.
  *
  * Contributor(s): Blender Foundation,
- *                 Sergey Sharybin
+ *                 Sergey Sharybin,
+ *                 Campbell Barton
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -63,29 +64,12 @@
 
 /* splines */
 struct MaskSpline *BKE_mask_spline_add(struct MaskLayer *masklay);
-
-unsigned int BKE_mask_spline_resolution(struct MaskSpline *spline, int width, int height);
-unsigned int BKE_mask_spline_feather_resolution(struct MaskSpline *spline, int width, int height);
-
-int BKE_mask_spline_differentiate_calc_total(const struct MaskSpline *spline, const unsigned int resol);
-
-float (*BKE_mask_spline_differentiate(struct MaskSpline *spline, int *tot_diff_point))[2];
-float (*BKE_mask_spline_feather_differentiated_points(struct MaskSpline *spline, int *tot_feather_point))[2];
-
-float (*BKE_mask_spline_differentiate_with_resolution_ex(struct MaskSpline *spline, int *tot_diff_point,
-                                                         const unsigned int resol))[2];
-void    BKE_mask_spline_feather_collapse_inner_loops(struct MaskSpline *spline, float (*feather_points)[2], const int tot_feather_point);
-float (*BKE_mask_spline_differentiate_with_resolution(struct MaskSpline *spline, int width, int height, int *tot_diff_point))[2];
-float (*BKE_mask_spline_feather_differentiated_points_with_resolution_ex(struct MaskSpline *spline, int *tot_feather_point,
-                                                                         const unsigned int resol, const int do_feather_isect))[2];
-float (*BKE_mask_spline_feather_differentiated_points_with_resolution(struct MaskSpline *spline, int width, int height,
-                                                                      int *tot_feather_point, const int do_feather_isect))[2];
-
-float (*BKE_mask_spline_feather_points(struct MaskSpline *spline, int *tot_feather_point))[2];
-
 void BKE_mask_point_direction_switch(struct MaskSplinePoint *point);
 void BKE_mask_spline_direction_switch(struct MaskLayer *masklay, struct MaskSpline *spline);
 
+struct BezTriple *BKE_mask_spline_point_next_bezt(struct MaskSpline *spline, struct MaskSplinePoint *points_array,
+                                                  struct MaskSplinePoint *point);
+
 typedef enum {
 	MASK_PROJ_NEG = -1,
 	MASK_PROJ_ANY = 0,
@@ -205,6 +189,26 @@
 
 #define MASK_RESOL_MAX 128
 
+/* mask_evaluate.c */
+unsigned int BKE_mask_spline_resolution(struct MaskSpline *spline, int width, int height);
+unsigned int BKE_mask_spline_feather_resolution(struct MaskSpline *spline, int width, int height);
+int          BKE_mask_spline_differentiate_calc_total(const struct MaskSpline *spline, const unsigned int resol);
+
+float (*BKE_mask_spline_differentiate(struct MaskSpline *spline, int *tot_diff_point))[2];
+float (*BKE_mask_spline_feather_differentiated_points(struct MaskSpline *spline, int *tot_feather_point))[2];
+
+float (*BKE_mask_spline_differentiate_with_resolution_ex(struct MaskSpline *spline, int *tot_diff_point,
+                                                         const unsigned int resol))[2];
+void    BKE_mask_spline_feather_collapse_inner_loops(struct MaskSpline *spline, float (*feather_points)[2], const int tot_feather_point);
+float (*BKE_mask_spline_differentiate_with_resolution(struct MaskSpline *spline, int width, int height, int *tot_diff_point))[2];
+float (*BKE_mask_spline_feather_differentiated_points_with_resolution_ex(struct MaskSpline *spline, int *tot_feather_point,
+                                                                         const unsigned int resol, const int do_feather_isect))[2];
+float (*BKE_mask_spline_feather_differentiated_points_with_resolution(struct MaskSpline *spline, int width, int height,
+                                                                      int *tot_feather_point, const int do_feather_isect))[2];
+
+float (*BKE_mask_spline_feather_points(struct MaskSpline *spline, int *tot_feather_point))[2];
+
+
 /* mask_rasterize.c */
 struct MaskRasterHandle;
 typedef struct MaskRasterHandle MaskRasterHandle;

Modified: trunk/blender/source/blender/blenkernel/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenkernel/CMakeLists.txt	2012-08-26 13:34:17 UTC (rev 50222)
+++ trunk/blender/source/blender/blenkernel/CMakeLists.txt	2012-08-26 13:41:40 UTC (rev 50223)
@@ -101,6 +101,7 @@
 	intern/lamp.c
 	intern/lattice.c
 	intern/library.c
+	intern/mask_evaluate.c
 	intern/mask_rasterize.c
 	intern/mask.c
 	intern/material.c

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-08-26 13:34:17 UTC (rev 50222)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-08-26 13:41:40 UTC (rev 50223)
@@ -19,7 +19,8 @@
  * All rights reserved.
  *
  * Contributor(s): Blender Foundation,
- *                 Sergey Sharybin
+ *                 Sergey Sharybin,
+ *                 Campbell Barton
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -41,12 +42,8 @@
 
 #include "DNA_mask_types.h"
 #include "DNA_node_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
-#include "DNA_movieclip_types.h"
-#include "DNA_tracking_types.h"
 #include "DNA_sequence_types.h"
 
 #include "BKE_curve.h"
@@ -58,7 +55,6 @@
 #include "BKE_sequencer.h"
 #include "BKE_tracking.h"
 #include "BKE_movieclip.h"
-#include "BKE_utildefines.h"
 
 static MaskSplinePoint *mask_spline_point_next(MaskSpline *spline, MaskSplinePoint *points_array, MaskSplinePoint *point)
 {
@@ -90,7 +86,7 @@
 	}
 }
 
-static BezTriple *mask_spline_point_next_bezt(MaskSpline *spline, MaskSplinePoint *points_array, MaskSplinePoint *point)
+BezTriple *BKE_mask_spline_point_next_bezt(MaskSpline *spline, MaskSplinePoint *points_array, MaskSplinePoint *point)
 {
 	if (point == &points_array[spline->tot_point - 1]) {
 		if (spline->flag & MASK_SPLINE_CYCLIC) {
@@ -269,588 +265,6 @@
 	return spline;
 }
 
-unsigned int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
-{
-	float max_segment = 0.01f;
-	unsigned int i, resol = 1;
-
-	if (width != 0 && height != 0) {
-		if (width >= height)
-			max_segment = 1.0f / (float) width;
-		else
-			max_segment = 1.0f / (float) height;
-	}
-
-	for (i = 0; i < spline->tot_point; i++) {
-		MaskSplinePoint *point = &spline->points[i];
-		BezTriple *bezt, *bezt_next;
-		float a, b, c, len;
-		unsigned int cur_resol;
-
-		bezt = &point->bezt;
-		bezt_next = mask_spline_point_next_bezt(spline, spline->points, point);
-
-		if (bezt_next == NULL) {
-			break;
-		}
-
-		a = len_v3v3(bezt->vec[1], bezt->vec[2]);
-		b = len_v3v3(bezt->vec[2], bezt_next->vec[0]);
-		c = len_v3v3(bezt_next->vec[0], bezt_next->vec[1]);
-
-		len = a + b + c;
-		cur_resol = len / max_segment;
-
-		resol = MAX2(resol, cur_resol);
-
-		if (resol >= MASK_RESOL_MAX) {
-			break;
-		}
-	}
-
-	return CLAMPIS(resol, 1, MASK_RESOL_MAX);
-}
-
-unsigned int BKE_mask_spline_feather_resolution(MaskSpline *spline, int width, int height)
-{
-	const float max_segment = 0.005;
-	unsigned int resol = BKE_mask_spline_resolution(spline, width, height);
-	float max_jump = 0.0f;
-	int i;
-
-	/* avoid checking the featrher if we already hit the maximum value */
-	if (resol >= MASK_RESOL_MAX) {
-		return MASK_RESOL_MAX;
-	}
-
-	for (i = 0; i < spline->tot_point; i++) {
-		MaskSplinePoint *point = &spline->points[i];
-		float prev_u, prev_w;
-		int j;
-
-		prev_u = 0.0f;
-		prev_w = point->bezt.weight;
-
-		for (j = 0; j < point->tot_uw; j++) {
-			const float w_diff = (point->uw[j].w - prev_w);
-			const float u_diff = (point->uw[j].u - prev_u);
-
-			/* avoid divide by zero and very high values,
-			 * though these get clamped eventually */
-			if (u_diff > FLT_EPSILON) {
-				float jump = fabsf(w_diff / u_diff);
-
-				max_jump = MAX2(max_jump, jump);
-			}
-
-			prev_u = point->uw[j].u;
-			prev_w = point->uw[j].w;
-		}
-	}
-
-	resol += max_jump / max_segment;
-
-	return CLAMPIS(resol, 1, MASK_RESOL_MAX);
-}
-
-int BKE_mask_spline_differentiate_calc_total(const MaskSpline *spline, const unsigned int resol)
-{
-	if (spline->flag & MASK_SPLINE_CYCLIC) {
-		return spline->tot_point * resol;
-	}
-	else {
-		return ((spline->tot_point - 1) * resol) + 1;
-	}
-}
-
-float (*BKE_mask_spline_differentiate_with_resolution_ex(MaskSpline *spline,
-                                                         int *tot_diff_point,
-                                                         const unsigned int resol
-                                                         ))[2]
-{
-	MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline);
-
-	MaskSplinePoint *point, *prev;
-	float (*diff_points)[2], (*fp)[2];
-	const int tot = BKE_mask_spline_differentiate_calc_total(spline, resol);
-	int a;
-
-	if (spline->tot_point <= 1) {
-		/* nothing to differentiate */
-		*tot_diff_point = 0;
-		return NULL;
-	}
-
-	/* len+1 because of 'forward_diff_bezier' function */
-	*tot_diff_point = tot;
-	diff_points = fp = MEM_mallocN((tot + 1) * sizeof(*diff_points), "mask spline vets");
-
-	a = spline->tot_point - 1;
-	if (spline->flag & MASK_SPLINE_CYCLIC)
-		a++;
-
-	prev = points_array;
-	point = prev + 1;
-
-	while (a--) {
-		BezTriple *prevbezt;
-		BezTriple *bezt;
-		int j;
-
-		if (a == 0 && (spline->flag & MASK_SPLINE_CYCLIC))
-			point = points_array;
-
-		prevbezt = &prev->bezt;
-		bezt = &point->bezt;
-
-		for (j = 0; j < 2; j++) {
-			BKE_curve_forward_diff_bezier(prevbezt->vec[1][j], prevbezt->vec[2][j],
-			                              bezt->vec[0][j], bezt->vec[1][j],
-			                              &(*fp)[j], resol, 2 * sizeof(float));
-		}
-
-		fp += resol;
-
-		if (a == 0 && (spline->flag & MASK_SPLINE_CYCLIC) == 0) {
-			copy_v2_v2(*fp, bezt->vec[1]);
-		}
-
-		prev = point;
-		point++;
-	}
-
-	return diff_points;
-}
-
-float (*BKE_mask_spline_differentiate_with_resolution(MaskSpline *spline, int width, int height,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list