summaryrefslogtreecommitdiff
path: root/support/dktools/dk3xsp.h
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk3xsp.h')
-rw-r--r--support/dktools/dk3xsp.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/support/dktools/dk3xsp.h b/support/dktools/dk3xsp.h
new file mode 100644
index 0000000000..0b87888137
--- /dev/null
+++ b/support/dktools/dk3xsp.h
@@ -0,0 +1,297 @@
+/*
+ WARNING: This file was generated by dkct.
+ Changes you make here will be lost if dkct is run again!
+ You should modify the original source and run dkct on it.
+ Original source: dk3xsp.ctr
+*/
+
+/*
+Copyright (C) 2012-2017, Dirk Krause
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above opyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of the author nor the names of contributors may be used
+ to endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/** @file dk3xsp.h Header file for the dk3xsp module.
+*/
+
+#ifndef DK3XSP_H_INCLUDED
+/** Avoid multiple inclusions. */
+#define DK3XSP_H_INCLUDED 1
+
+
+#line 8 "dk3xsp.ctr"
+
+#include "dk3all.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Reset spline segment data.
+ All components - including cb - are reset.
+ @param pseg Spline segment data to reset.
+*/
+void
+dk3xsp_reset(dk3_xspline_segment_t *pseg);
+
+/** Set compatility bug flag.
+ @param pseg Spline segment data to modify.
+ @param v New flag value (1 or 0).
+*/
+void
+dk3xsp_set_cb(dk3_xspline_segment_t *pseg, int v);
+
+/** Set control points.
+ @param pseg Spline segment data to modify.
+ @param a Control point A (may be NULL).
+ @param b Control point B.
+ @param c Control point C.
+ @param d Control point D (may be NULL).
+*/
+void
+dk3xsp_set(
+ dk3_xspline_segment_t *pseg,
+ dk3_fig_spline_point_t const *a,
+ dk3_fig_spline_point_t const *b,
+ dk3_fig_spline_point_t const *c,
+ dk3_fig_spline_point_t const *d
+);
+
+/** Run calculation for a given t.
+ @param pseg Spline segment.
+ @param t The t parameter.
+ @param fder Flag: Calculate derivatives (1=yes, 0=no).
+ @return 1 on success, 0 on error.
+*/
+int
+dk3xsp_calculate(
+ dk3_xspline_segment_t *pseg,
+ double t,
+ int fder
+);
+
+/** Retrieve calculation result.
+ @param pseg Spline segment.
+ @return Calculation result: x value.
+*/
+double
+dk3xsp_get_x(dk3_xspline_segment_t const *pseg);
+
+/** Retrieve calculation result.
+ @param pseg Spline segment.
+ @return Calculation result: y value.
+*/
+double
+dk3xsp_get_y(dk3_xspline_segment_t const *pseg);
+
+/** Retrieve calculation result.
+ @param pseg Spline segment.
+ @return Calculation result: dx/dt value.
+*/
+double
+dk3xsp_get_dxdt(dk3_xspline_segment_t const *pseg);
+
+/** Retrieve calculation result.
+ @param pseg Spline segment.
+ @return Calculation result: dy/dt value.
+*/
+double
+dk3xsp_get_dydt(dk3_xspline_segment_t const *pseg);
+
+/** Calculate X-spline segment interval length.
+ @param pseg Segment to calculate the length for.
+ @param prec Precision.
+ @param ec Pointer to error code variable, may be NULL.
+ @return Length (positive value) on success, negative value on error.
+*/
+double
+dk3xsp_segment_length(
+ dk3_xspline_segment_t *pseg,
+ double prec,
+ int *ec
+);
+
+/** Calculate X-spline partial segment length.
+ @param pseg Segment to calculate the length for.
+ @param tstart Parameter t for start.
+ @param dir Direction (0=forward t to 1, 1=backward 0 to t).
+ @param prec Precision.
+ @param ec Pointer to error code variable, may be NULL.
+ @return Length (positive value) on success, negative value on error.
+*/
+double
+dk3xsp_segment_partial_length(
+ dk3_xspline_segment_t *pseg,
+ double tstart,
+ int dir,
+ double prec,
+ int *ec
+);
+
+/** Check whether an s value is very close to 0.
+ @param s Value to check.
+ @return 1 if s==0, 0 otherwise.
+*/
+int
+dk3xsp_is_null(double s);
+
+/** Calculate length of open X-spline.
+ @param points Array of spline points.
+ @param np Number of points in array.
+ @param prec Numeric precision.
+ @param fslc Full segment length cache (np - 1) elements.
+ @param cb Flag: Compatibility bug.
+ @param ec Pointer to error code variable, may be NULL.
+ @return Length (positive value) on success, negative value on error.
+*/
+double
+dk3xsp_open_spline_length(
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double prec,
+ double *fslc,
+ int cb,
+ int *ec
+);
+
+/** Calculate length of open X-spline.
+ @param points Array of spline points.
+ @param np Number of points in array.
+ @param prec Numeric precision.
+ @param tstart Start/end t parameter.
+ @param fslc Full segment length cache, (np-1) elements.
+ @param dir Direction (0=forward t to 1, 1=backward 0 to t).
+ @param cb Flag: Compatibility bug.
+ @param ec Pointer to error code variable, may be NULL.
+ @return Length (positive value) on success, negative value on error.
+*/
+double
+dk3xsp_open_spline_partial_length(
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double prec,
+ double tstart,
+ double *fslc,
+ int dir,
+ int cb,
+ int *ec
+);
+
+/** Calculate t value for given distance to end point.
+ @param points X-spline points.
+ @param np Number of x-spline points.
+ @param dist Distance to endpoint.
+ @param prec Precision.
+ @param fslc Cache for full segment lengths.
+ @param dir End-point type: 0=end of spline, 1=start of spline.
+ @param cb Flag: Compatibility with spline bug.
+ @param ec Pointer to error code variable.
+ @return Non-negative value on success, negative value on error.
+*/
+double
+dk3xsp_get_t_for_distance(
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double dist,
+ double prec,
+ double *fslc,
+ int dir,
+ int cb,
+ int *ec
+);
+
+/** Run calculations for a given t value in the range 0<=t<=(np-1).
+ @param pseg Segment to use for calculation.
+ @param points Spline points.
+ @param np Number of points.
+ @param t Parameter t.
+ @param cb Flag: Compatibility for spline bug.
+ @param der Flag: Calculate derivatives dx/dt and dy/dt too.
+ @param ec Pointer to error code variable.
+ @return 1 on success, 0 on error.
+*/
+int
+dk3xsp_calculate_position(
+ dk3_xspline_segment_t *pseg,
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double t,
+ int cb,
+ int der,
+ int *ec
+);
+
+/** Find movement direction for a specified t value.
+ @param points X-spline points.
+ @param np Number of points.
+ @param t The t parameter 0<=t<=(np-1).
+ @param cb Flag: Compatibility for spline bug.
+ @param ec Pointer to error code variable.
+ @return Non-negative value 0<=res<=2*pi on success,
+ negative value on error.
+*/
+double
+dk3xsp_direction(
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double t,
+ int cb,
+ int *ec
+);
+
+/** Find position and movement direction for a specified t value.
+ @param xpos Pointer to variable for x position.
+ @param ypos Pointer to variable for y position.
+ @param points X-spline points.
+ @param np Number of points.
+ @param t The t parameter 0<=t<=(np-1).
+ @param cb Flag: Compatibility for spline bug.
+ @param ec Pointer to error code variable.
+ @return Non-negative value 0<=res<=2*pi on success,
+ negative value on error.
+*/
+double
+dk3xsp_direction_and_position(
+ double *xpos,
+ double *ypos,
+ dk3_fig_spline_point_t const *points,
+ size_t np,
+ double t,
+ int cb,
+ int *ec
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef DK3XSP_MAX_ITERATION_SEGMENTS
+/** Maximum number of sub-segments in segment length iteration.
+*/
+#define DK3XSP_MAX_ITERATION_SEGMENTS 1073741824L
+#endif
+
+
+#endif