#ifndef PROPOINT_H
#define PROPOINT_H


#include   <ProObjects.h>
#include   <ProGeomitem.h>

/*
   Function declarations for ProPoint.
*/




PRO_BEGIN_C_DECLS

typedef enum pro_point_type
{

  PRO_POINT_TYP_END1 =		1,
  PRO_POINT_TYP_END2 =		2,
  PRO_POINT_TYP_CENTER = 	3,  /* for arcs/circles only */
  PRO_POINT_TYP_NONE =		4,  
  PRO_POINT_TYP_MIDPT = 	5

} ProPointType;

/*===========================================================================*/

extern ProError ProPointInit  (ProSolid   owner_handle,
                               int        point_id,
                               ProPoint  *p_handle);
/*
    Purpose: Initializes the <i>ProPoint</i> handle.

    Input Arguments:
        owner_handle - The solid owner of the point
        point_id - The point 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 ProPointIdGet (ProPoint   point,
                               int       *p_id
			      );
/*
    Purpose: Gets the identifier of the point object.
             <p> <b> NOTE:</b> 
             <p> Although the pointer can be reallocated, the identifier will 
             not change.

    Input Arguments:
        point - The point handle

    Output Arguments:
        p_id - The returned identifier of the coordinate system object

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/

#define ProPointDatatypeGet   (PRO_POINT)

extern ProError ProPointCoordGet (ProPoint    point,
				  ProVector   xyz_point);
/*
    Purpose: Retrieves the XYZ coordinates of the specified point.

    Input Arguments:
        point - The point handle

    Output Arguments:
        xyz_point - The XYZ coordinates of the point

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/

extern ProError ProPoint3dOnsurfaceFind(
        ProPoint3d      xyz,        
        ProSurface      surface,   
        ProBoolean     *on_surf,  
        ProPoint3d      closest_pt);
/*
    Purpose: Determines if distance between the specified point and the 
             specified surface is less than the Creo Parametric model accuracy 
             set in the active Creo Parametric session. You can also set 
             accuracy with function ProSolidAccuracySet().
             <p> For more details on setting accuracy, refer to Technical 
             Documents "Detailed Information Regarding Model Accuracy", number 
             32869, and "New Config.pro Option "Enable_Assembly_Accuracy" is 
             Available in Release 20 9823 or Later", number 22077. These 
             documents are available at HTTP://WWW.PTC.COM.

    Input Arguments:
        xyz - Handle for specified point, must not be NULL.
        surface - Handle for specified surface, must not be NULL.

    Output Arguments:
        on_surf - The point is ON (PRO_B_TRUE) or OFF (PRO_B_FALSE) the 
                  surface; must not be NULL.
        closest_pt - Handle for location of closest point to surface; may be 
                     NULL.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - An input argument is invalid.

*/

extern ProBoolean ProPoint3dIntoleranceFind(
        ProPoint3d      xyz_1,  
        ProPoint3d      xyz_2, 
        double         *exceed_tol);
/*
    Purpose: Determines if two points are co-incident, that is, if the distance 
             between two points is within the Creo Parametric tolerances as set 
             in ProSolidToleranceGet().

    Input Arguments:
        xyz_1 - Handle for the first specified point; must not be NULL.
        xyz_2 - Handle for second specified point; must not be NULL.

    Output Arguments:
        exceed_tol - Amount by which the distance between the points exceeds 
                     tolerance; can be NULL.

    Return Values:
        PRO_B_TRUE - Points are within tolerance.
        PRO_B_FALSE - Points are not within tolerance.

*/

/*===========================================================================*/
				   
PRO_END_C_DECLS
#endif /* PROPOINT_H */