Merge branch 'blender2.7'
[blender.git] / extern / curve_fit_nd / curve_fit_nd.h
index 98e6779fd6f6fe8e13183a1b176350cbc81b30f6..18244799b0f485feaa8546fad778e35942a34404 100644 (file)
@@ -25,8 +25,8 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __SPLINE_FIT__
-#define __SPLINE_FIT__
+#ifndef __CURVE_FIT_ND_H__
+#define __CURVE_FIT_ND_H__
 
 /** \file curve_fit_nd.h
  *  \ingroup curve_fit
@@ -36,7 +36,7 @@
 /* curve_fit_cubic.c */
 
 /**
- * Takes a flat array of points and evalues that to calculate a bezier spline.
+ * Takes a flat array of points and evaluates that to calculate a bezier spline.
  *
  * \param points, points_len: The array of points to calculate a cubics from.
  * \param dims: The number of dimensions for for each element in \a points.
@@ -60,6 +60,7 @@ int curve_fit_cubic_to_points_db(
         const unsigned int  points_len,
         const unsigned int  dims,
         const double        error_threshold,
+        const unsigned int  calc_flag,
         const unsigned int *corners,
         unsigned int        corners_len,
 
@@ -72,6 +73,7 @@ int curve_fit_cubic_to_points_fl(
         const unsigned int  points_len,
         const unsigned int  dims,
         const float         error_threshold,
+        const unsigned int  calc_flag,
         const unsigned int *corners,
         const unsigned int  corners_len,
 
@@ -80,10 +82,11 @@ int curve_fit_cubic_to_points_fl(
         unsigned int **r_corners_index_array, unsigned int *r_corners_index_len);
 
 /**
- * Takes a flat array of points and evalues that to calculate handle lengths.
+ * Takes a flat array of points and evaluates that to calculate handle lengths.
  *
  * \param points, points_len: The array of points to calculate a cubics from.
  * \param dims: The number of dimensions for for each element in \a points.
+ * \param points_length_cache: Optional pre-calculated lengths between points.
  * \param error_threshold: the error threshold to allow for,
  * \param tan_l, tan_r: Normalized tangents the handles will be aligned to.
  * Note that tangents must both point along the direction of the \a points,
@@ -94,28 +97,68 @@ int curve_fit_cubic_to_points_fl(
  * \param r_error_sq: The maximum distance  (squared) this curve diverges from \a points.
  */
 int curve_fit_cubic_to_points_single_db(
-        const double *points,
-        const uint    points_len,
-        const uint    dims,
-        const double  error_threshold,
-        const double tan_l[],
-        const double tan_r[],
+        const double      *points,
+        const unsigned int points_len,
+        const double      *points_length_cache,
+        const unsigned int dims,
+        const double       error_threshold,
+        const double       tan_l[],
+        const double       tan_r[],
 
         double  r_handle_l[],
         double  r_handle_r[],
-        double *r_error_sq);
+        double *r_error_sq,
+        unsigned int *r_error_index);
 
 int curve_fit_cubic_to_points_single_fl(
-        const float  *points,
-        const uint    points_len,
-        const uint    dims,
-        const float   error_threshold,
-        const float   tan_l[],
-        const float   tan_r[],
+        const float       *points,
+        const unsigned int points_len,
+        const float       *points_length_cache,
+        const unsigned int dims,
+        const float        error_threshold,
+        const float        tan_l[],
+        const float        tan_r[],
 
         float   r_handle_l[],
         float   r_handle_r[],
-        float  *r_error_sq);
+        float  *r_error_sq,
+        unsigned int *r_error_index);
+
+enum {
+       CURVE_FIT_CALC_HIGH_QUALIY          = (1 << 0),
+       CURVE_FIT_CALC_CYCLIC               = (1 << 1),
+};
+
+
+/* curve_fit_cubic_refit.c */
+
+int curve_fit_cubic_to_points_refit_db(
+        const double         *points,
+        const unsigned int    points_len,
+        const unsigned int    dims,
+        const double          error_threshold,
+        const unsigned int    calc_flag,
+        const unsigned int   *corners,
+        const unsigned int    corners_len,
+        const double          corner_angle,
+
+        double **r_cubic_array, unsigned int *r_cubic_array_len,
+        unsigned int   **r_cubic_orig_index,
+        unsigned int   **r_corner_index_array, unsigned int *r_corner_index_len);
+
+int curve_fit_cubic_to_points_refit_fl(
+        const float          *points,
+        const unsigned int    points_len,
+        const unsigned int    dims,
+        const float           error_threshold,
+        const unsigned int    calc_flag,
+        const unsigned int   *corners,
+        unsigned int          corners_len,
+        const float           corner_angle,
+
+        float **r_cubic_array, unsigned int *r_cubic_array_len,
+        unsigned int   **r_cubic_orig_index,
+        unsigned int   **r_corner_index_array, unsigned int *r_corner_index_len);
 
 /* curve_fit_corners_detect.c */
 
@@ -159,4 +202,4 @@ int curve_fit_corners_detect_fl(
         unsigned int **r_corners,
         unsigned int  *r_corners_len);
 
-#endif  /* __SPLINE_FIT__ */
+#endif  /* __CURVE_FIT_ND_H__ */