#ifndef PROCURVE_H
#define PROCURVE_H
/* Function declarations for ProCurve. */
#include <ProObjects.h>
#include <ProGeomitem.h>
#include <ProColor.h>
PRO_BEGIN_C_DECLS
/*===========================================================================*/
extern ProError ProCurveInit(ProSolid owner_handle,
int curve_id,
ProCurve *p_handle);
/*
Purpose: Initializes the <i>ProCurve</i> handle.
Input Arguments:
owner_handle - The solid owner of the curve
curve_id - The curve identifier
Output Arguments:
p_handle - The handle to initialize
Return Values:
PRO_TK_NO_ERROR - The function successfully initialized the handle.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProCurveIdGet(ProCurve curve,
int *p_id);
/*
Purpose: Retrieves the identifier of the curve object.
<p> NOTE:
<p> Although the pointer can be reallocated, the identifier will
not change.
Input Arguments:
curve - The curve handle
Output Arguments:
p_id - The returned identifier of the curve
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
#define ProCurveDatatypeGet() (PRO_CURVE)
extern ProError ProCurveDataGet(ProCurve curve,
ProGeomitemdata **p_data_ptr);
/*
Purpose: Retrieves the geometric representation data for the specified
curve.
<p> Note that this function is not implemented for composite
curves.
Input Arguments:
curve - The curve handle.
Output Arguments:
p_data_ptr - The curve data. The function allocates the memory for this
argument. Use the function <b>ProGeomitemdataFree()</b> to
free the memory.
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
PRO_TK_NOT_IMPLEMENTED - You passed a composite curve in <i>curve</i>.
See Also:
ProGeomitemdataFree()
*/
extern ProError ProCurveXyzdataEval(ProCurve p_curve,
double curve_param,
ProVector xyz_point,
ProVector deriv1,
ProVector deriv2);
/*
Purpose: Evaluates the specified curve at the parameter. If you pass a
composite curve in <i>p_curve</i>, both <i>deriv1</i> and
<i>deriv2</i> should be NULL.
Input Arguments:
p_curve - The curve handle
curve_param - The normalized parameter on the curve
Output Arguments:
xyz_point - The resulting XYZ point
deriv1 - The first derivative
deriv2 - The second derivative
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the curve.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
PRO_TK_NOT_IMPLEMENTED - The argument <i>p_curve</i> represents a
composite curve, while <i>deriv1</i> or
<i>deriv2</i> is not NULL.
*/
extern ProError ProCurveParamEval(ProCurve p_curve,
ProVector xyz_point,
double *p_param);
/*
Purpose: Finds the corresponding normalized parameter on the curve, given
the XYZ point.
Input Arguments:
p_curve - The curve handle.
xyz_point - The XYZ point. The point does not necessarily have to lie
on the curve. If the point is off the curve, the function
finds the closest curve point.
Output Arguments:
p_param - The corresponding normalized parameter on the curve.
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the point.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProCurveLengthEval(ProCurve p_curve,
double *p_length);
/*
Purpose: Finds the length of the specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_length - The length of the curve
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the curve.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProCurveTypeGet(ProCurve p_curve,
ProEnttype *p_curve_type);
/*
Purpose: Finds the type of the specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_curve_type - The curve type
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the curve type.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
typedef ProError (*ProCurveCompFilter)(ProCurve p_curve,
ProCurve p_comp,
int comp_idx,
ProBoolean comp_flip,
ProAppData app_data);
/*
Purpose: This is the filter function for <b>ProCurveCompVisit()</b>.
Input Arguments:
p_curve - The composite curve being processed.
p_comp - The current component being visited.
comp_idx - The index of the current component in the curve.
comp_flip - This is PRO_TK_TRUE if the current component is flipped.
app_data - The data being passed to <b>ProCurveCompVisit()</b> by the
caller.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - Call the visit action.
PRO_TK_CONTINUE - Skip to the next curve.
PRO_TK_GENERAL_ERROR - Stop visiting.
*/
/*===========================================================================*/
typedef ProError (*ProCurveCompAction)(ProCurve p_curve,
ProCurve p_comp,
int comp_idx,
ProBoolean comp_flip,
ProError status,
ProAppData app_data);
/*
Purpose: This is the visiting function for <b>ProCurveCompVisit()</b>.
Input Arguments:
p_curve - The composite curve being processed.
p_comp - The current component being visited.
comp_idx - The index of the current component in the curve.
comp_flip - This is PRO_TK_TRUE if the current component is flipped.
status - The status returned by the filter, or PRO_TK_NO_ERROR if the
filter is not specified.
app_data - The data being passed to <b>ProCurveCompVisit()</b> by the
caller.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - Continue visiting the next curve.
PRO_TK_GENERAL_ERROR - Stop visiting.
*/
/*===========================================================================*/
extern ProError ProCurveCompVisit(ProCurve p_curve,
ProCurveCompAction action,
ProCurveCompFilter filter,
ProAppData app_data);
/*
Purpose: Visits the components of the specified composite curve.
Input Arguments:
p_curve - The curve handle.
action - The action function to be called for each component. If the
function returns anything other than PRO_TK_NO_ERROR, visiting
stops. This can be NULL, which will cause only the filter
function to be called for each curve.
filter - The filter function. If NULL, all components are visited using
the action function.
app_data - The application data passed to the filter and visiting
functions.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function successfully visited the components.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
PRO_TK_NOT_IMPLEMENTED - The <i>p_curve</i> is a valid geometry item,
but not a composite curve.
PRO_TK_E_NOT_FOUND - No components were visited, either because of the
filter or for another reason.
Other - Any other value is the value returned by the action function
(visiting stopped).
*/
extern ProError ProCurveToNURBS(ProCurve curve,
ProCurvedata **p_nurb_curve_data);
/*
Purpose: Generates the NURBS surface representation, given the curve
handle.
Input Arguments:
curve - The curve handle.
Output Arguments:
p_nurb_curve_data - The curve data. The function allocates the memory
for this structure. To free the memory, call the
function <b>ProCurvedataFree()</b>.
Return Values:
PRO_TK_NO_ERROR - The function successfully generated the NURBS surface
representation.
PRO_TK_GENERAL_ERROR - A general error occurred and the function
failed.
See Also:
ProCurvedataFree()
*/
extern ProError ProCurveDataFree(ProCurvedata **p_curve_data);
/*
Purpose: Frees the memory for the specified <i>ProCurvedata</i> structure.
Input Arguments:
p_curve_data - The address to <i>ProCurvedata*</i>, allocated by a
previous call to <b>ProCurveToNURBS()</b>
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function successfully freed the memory.
PRO_TK_BAD_INPUTS - The argument is invalid.
See Also:
ProCurveToNURBS()
*/
extern ProError ProCurveLengthT1T2Eval(ProCurve p_curve_handle,
double t1,
double t2,
double *r_length);
/*
Purpose: Finds the length of the specified curve between two given
parameters.
Input Arguments:
p_curve_handle - The curve handle
t1 - The start parameter
t2 - The end parameter
Output Arguments:
r_length - The curve length
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge length.
PRO_TK_BAD_SRF_CRV - The input argument is invalid.
*/
extern ProError ProCurveParamByLengthEval(ProCurve p_curve_handle,
double t_start,
double length,
double *r_t,
Pro3dPnt r_point);
/*
Purpose: Finds the parameter of the point located at the given length from
the given parameter.
Input Arguments:
p_curve_handle - The curve handle
t_start - The start parameter
length - The given length
Output Arguments:
r_t - The output parameter
r_point - The point
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge length.
PRO_TK_BAD_SRF_CRV - The input argument is invalid.
*/
extern ProError ProCurveColorGet(ProCurve p_curve,
ProColortype *p_color);
/*
Purpose: <b>NOTE:</b>
<p> This function is <b>deprecated</b>. Use
ProCurvePersistentColorGet() instead. </p> Finds the color of the
specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_color - The retrieved color of the curve
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProCurvePersistentColorGet(ProCurve p_curve,
ProColortype *p_color);
/*
Purpose: Finds the color of the specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_color - The retrieved color of the curve
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProCurveColorSet(ProCurve p_curve,
ProColortype new_color,
ProColortype *p_old_color);
/*
Purpose: <b>NOTE:</b>
<p> This function is <b>deprecated</b>. Use
ProCurvePersistentColorSet() instead. </p> Sets the color of the
specified curve, and returns the original color. <B>Note:</B>
<P> In order to see the change made to the color, use the function
ProDisplistInvalidate() on the owner model.</P>
Input Arguments:
p_curve - The curve handle
new_color - The new color for the curve
Output Arguments:
p_old_color - The color of the curve before the change
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - Invalid input argument(s).
*/
extern ProError ProCurvePersistentColorSet(ProSolid p_solid,
ProCurve p_curve,
ProColortype new_color);
/*
Purpose: Sets the color of the specified curve. <B>Note:</B>
<P> In order to see the change made to the color, use the function
ProDisplistInvalidate() on the owner model.</P>
Input Arguments:
p_solid - The solid owner of the curve
p_curve - The curve handle
new_color - The new color for the curve
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
PRO_TK_GENERAL_ERROR - There was a general error and the function
failed.
*/
extern ProError ProCurveLinestyleGet(ProCurve p_curve,
ProLinestyle *p_linestyle);
/*
Purpose: <b>NOTE:</b>
<p> This function is <b>deprecated</b>. Use
ProCurvePersistentLinestyleGet() instead. </p> Finds the linestyle
of the specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_linestyle - The retrieved linestyle of the curve
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProCurvePersistentLinestyleGet(ProCurve p_curve,
ProLinestyle *p_linestyle);
/*
Purpose: Finds the linestyle of the specified curve.
Input Arguments:
p_curve - The curve handle
Output Arguments:
p_linestyle - The retrieved linestyle of the curve
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProCurveLinestyleSet(ProCurve p_curve,
ProLinestyle new_linestyle,
ProLinestyle *p_old_linestyle);
/*
Purpose: <b>NOTE:</b>
<p> This function is <b>deprecated</b>. Use
ProCurvePersistentLinestyleSet() instead. </p> Sets the linestyle
of the specified curve, and returns the original linestyle.
<B>Note:</B>
<P>In order to see the change made to the linestyle, use the
function ProDisplistInvalidate() on the owner model.</P>
Input Arguments:
p_curve - The curve handle
new_linestyle - The new linestyle for the curve
Output Arguments:
p_old_linestyle - The linestyle of the curve before the change
Return Values:
PRO_TK_NO_ERROR - The function completed successfully.
PRO_TK_BAD_INPUTS - Invalid input argument(s).
*/
extern ProError ProCurvePersistentLinestyleSet(ProSolid p_solid,
ProCurve p_curve,
ProLinestyle new_linestyle);
/*
Purpose: Sets the linestyle of the specified curve. <B>Note:</B>
<P> In order to see the change made to the linestyle, use the
function ProDisplistInvalidate() on the owner model.</P>
Input Arguments:
p_solid - The solid owner of the curve
p_curve - The curve handle
new_linestyle - The new linestyle for the curve
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
PRO_TK_GENERAL_ERROR - There was a general error and the function
failed.
*/
extern ProError ProCurveTessellationGet(ProCurve p_curve_handle,
double tolerance,
Pro3dPnt **p_points,
int *p_count);
/*
Purpose: Retrieves the curve tessellation for the specified datum curve.
Input Arguments:
p_curve_handle - The curve handle
tolerance - The maximum distance between the tessellation polyline and
the curve.
Output Arguments:
p_points - The list of tessellation points (to be released by
ProArrayFree(). If not required, this argument can be NULL.
p_count - The number of tessellation points.
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more input argument was invalid.
*/
PRO_END_C_DECLS
#endif /* PROCURVE_H */