#ifndef PROEDGE_H
#define PROEDGE_H
#include <ProObjects.h>
#include <ProGeomitem.h>
/*
Function declarations for ProEdge.
*/
PRO_BEGIN_C_DECLS
typedef enum
{
PRO_EDGE_SAME_DIRECTION =1,
PRO_EDGE_OPPOSITE_DIRECTION =-1
} ProEdgeDirection;
/*===========================================================================*/
extern ProError ProEdgeInit (ProSolid owner_handle,
int edge_id,
ProEdge *p_handle);
/*
Purpose: Initializes the <i>ProEdge</i> handle.
Input Arguments:
owner_handle - The solid owner of the edge
edge_id - The edge identifier
Output Arguments:
p_handle - The handle being initialized
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 ProEdgeIdGet (ProEdge edge,
int* p_id);
/*
Purpose: Retrieves the identifier of the edge.
Input Arguments:
edge - The edge handle
Output Arguments:
p_id - The returned identifier of the edge
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
#define ProEdgeDatatypeGet() (PRO_EDGE)
extern ProError ProEdgeDataGet (ProEdge edge,
ProGeomitemdata **p_data_ptr);
/*
Purpose: Retrieves the geometric representation data for the specified
edge.
Input Arguments:
edge - The edge handle.
Output Arguments:
p_data_ptr - The edge 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.
See Also:
ProGeomitemdataFree()
*/
extern ProError ProEdgeXyzdataEval (ProEdge edge,
double edge_param,
ProVector xyz_point,
ProVector deriv1,
ProVector deriv2,
ProVector direction);
/*
Purpose: Evaluates the edge at the specified parameter.
Input Arguments:
edge - The edge handle
edge_param - The normalized parameter on the edge
Output Arguments:
xyz_point - The resulting XYZ point
deriv1 - The first derivative
deriv2 - The second derivative
direction - The edge direction
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProEdgeUvdataEval (ProEdge edge,
double edge_param,
ProUvParam uv_point[2],
ProUvParam deriv1[2],
ProUvParam deriv2[2]);
/*
Purpose: Evaluates the edge in the UV-space.
Input Arguments:
edge - The edge handle
edge_param - The normalized parameter on the edge
Output Arguments:
uv_point - The resulting UV point
deriv1 - The first UV derivative
deriv2 - The second UV derivative
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProEdgeParamEval (ProEdge edge,
ProVector xyz_point,
double *p_param);
/*
Purpose: Finds a corresponding normalized parameter on the edge, given the
XYZ point. <B>Note:</B> The function is intended to be used when
the point is on, or very nearly on, the edge.
Input Arguments:
edge - The edge handle.
xyz_point - The XYZ point. The point does not necessarily have to lie
on the edge. If the point is not on the edge, the function
finds the closest edge point.
Output Arguments:
p_param - The corresponding normalized parameter on the edge.
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProEdgeDirGet (ProEdge edge,
ProSurface face_handle,
int *p_direction);
/*
Purpose: Finds the edge direction in the specified surface.
Input Arguments:
edge - The edge handle
face_handle - The surface handle (adjacent to the edge)
Output Arguments:
p_direction - The direction
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the direction.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
*/
extern ProError ProEdgeLengthEval (ProEdge edge,
double *p_length);
/*
Purpose: Finds the length of the specified edge.
Input Arguments:
edge - The edge handle
Output Arguments:
p_length - The edge length
Return Values:
PRO_TK_NO_ERROR - The function successfully evaluated the edge length.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProEdgeNeighborsGet (ProEdge edge,
ProEdge *p_edge1,
ProEdge *p_edge2,
ProSurface *p_face1,
ProSurface *p_face2);
/*
Purpose: Retrieves information about the neighboring surfaces and edges of
the specified edge.
Input Arguments:
edge - The edge handle
Output Arguments:
p_edge1 - The next edge in the contour on <i>p_face1</i>
p_edge2 - The next edge in the contour on <i>p_face2</i>
p_face1 - The first adjacent surface
p_face2 - The second adjacent surface
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProEdgeVertexdataGet (ProEdge edge_end,
ProType param_type,
ProEdgelist *p_vertex_arr,
ProType **p_end_type_arr,
ProSurflist *p_surf_arr,
int *p_count);
/*
Purpose: Finds the neighbors of the edge at the specified end.
Input Arguments:
edge_end - The edge "end" handle.
param_type - PRO_EDGE_START or PRO_EDGE_END.
Output Arguments:
p_vertex_arr - The array of edges meeting at the specified edge end.
Use the function <b>ProArrayFree()</b> to free the
memory for this argument. If not required, this argument
can be NULL.
p_end_type_arr - An array of end types of the neighboring edges given
by <i>p_vertex_arr</i>. Each end type can either be
PRO_EDGE_START or PRO_EDGE_END. Use the function
<b>ProArrayFree()</b> to free the memory for this
argument. If not required, this argument can be NULL.
p_surf_arr - The array of surface adjacent to the edges. Use the
function <b>ProArrayFree()</b> to free the memory for this
argument. If not required, this argument can be NULL.
p_count - The size of the <i>p_vertex_arr</i>, <i>p_end_type_arr</i>,
and <i>p_surf_arr</i> arrays. If not required, this argument
can be NULL.
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the data.
PRO_TK_BAD_INPUTS - The input argument is invalid.
PRO_TK_INVALID_TYPE - The edge is not in visible geometry.
See Also:
ProArrayFree()
*/
extern ProError ProEdgeTessellationGet (ProEdge edge,
Pro3dPnt** p_points,
ProSurface adj_srfs[2],
ProUvParam** p_uv_arr1,
ProUvParam** p_uv_arr2,
int* p_count);
/*
Purpose: Retrieves the edge tessellation for the specified edge.
Input Arguments:
edge - The edge handle.
Output Arguments:
p_points - The list of tessellation points (to be released by
<b>ProArrayFree()</b>). If not required, this argument may
be NULL.
adj_srfs - The adjacent surfaces. If not required, this argument may be
NULL. This will contain only 1 surface if the edge is a
1-sided edge.
p_uv_arr1 - The first array of UV points (to be released by
<b>ProArrayFree()</b>). If not required, this argument may
be NULL.
p_uv_arr2 - The second array of UV points (to be released by
<b>ProArrayFree()</b>). If not required, this argument may
be NULL.
p_count - The size of the <i>p_points</i> array. If not required, this
argument may be NULL.
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
See Also:
ProArrayFree()
*/
extern ProError ProEdgeTypeGet (ProEdge edge,
ProEnttype *p_edge_type);
/*
Purpose: Retrieves the type of the specified edge.
Input Arguments:
edge - The edge handle
Output Arguments:
p_edge_type - The edge type
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
*/
extern ProError ProEdgeToNURBS (ProEdge edge,
ProCurvedata** p_curve_data);
/*
Purpose: Generates the NURBS curve representation, given the edge handle.
Input Arguments:
edge - The edge handle.
Output Arguments:
p_curve_data - The curve data. The function allocates the memory for
this argument, but you must free it by calling the
function <b>ProCurvedataFree()</b>.
Return Values:
PRO_TK_NO_ERROR - The function successfully retrieved the information.
PRO_TK_BAD_INPUTS - The input argument is invalid.
See Also:
ProCurvedataFree()
*/
extern ProError ProEdgeLengthT1T2Eval (ProEdge p_handle, double t1, double t2,
double *p_length);
/*
Purpose: Finds the length of the specified edge between two given
parameters.
Input Arguments:
p_handle - The edge handle
t1 - The start parameter
t2 - The end parameter
Output Arguments:
p_length - The edge 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 ProEdgeParamByLengthEval
(
ProEdge p_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_handle - The edge 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.
*/
/*===========================================================================*/
PRO_END_C_DECLS
#endif /* PROEDGE_H */