#ifndef PROSECDIMDOTH
#define PROSECDIMDOTH

#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProSelection.h>
#include <ProSection.h>
#include <ProItemerr.h>
#include <Pro2dEntdef.h>
#include <ProSecdimType.h>

PRO_BEGIN_C_DECLS

extern ProError ProSecdimCreate  (ProSection handle,
                                 int           entity_ids[],
                                 ProSectionPointType point_types[],
                                 int           num_ids,
                                 ProSecdimType dim_type,
                                 Pro2dPnt      place_pnt,
                                 int          *r_dim_id);
/*
    Purpose: Dimensions the entities in the specified section to each other.

    Input Arguments:
        handle - The section handle
        entity_ids - An array of entity identifiers
        point_types - An array of point types (PRO_ENT_...)
        num_ids - The length of the <i>entity_ids</i> array
        dim_type - The dimension type (linear, angular, length, and so on)
        place_pnt - The placement point

    Output Arguments:
        r_dim_id - The identifier of the section dimension

    Return Values:
        PRO_TK_NO_ERROR - The function successfully dimensioned the entities.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
        PRO_TK_MEMORY_ERROR - There was a memory error.

*/

extern ProError ProSecdimValueSet (ProSection handle,
                                   int dim_id,
                                   double value);
/*
    Purpose: Changes the value of the specified dimension in the section.

    Input Arguments:
        handle - The section handle
        dim_id - The identifier of the dimension to be modified
        value - The new value of the dimension

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the new value.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.

*/



extern ProError ProSecdimDelete (ProSection handle,
                                 int        dim_id);
/*
    Purpose: Deletes a dimension from the specified section.

    Input Arguments:
        handle - The section handle
        dim_id - The identifier of the dimension

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully deleted the dimension.
        PRO_TK_GENERAL_ERROR - One or more of the arguments are invalid.

*/

extern ProError ProSecdimValueGet (ProSection handle,
                                   int        dim_id,
                                   double    *r_value);
/*
    Purpose: Retrieves the value of the specified dimension in the section.

    Input Arguments:
        handle - The section handle
        dim_id - The identifier of the dimension

    Output Arguments:
        r_value - The value of the dimension

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.

*/

extern ProError ProSecdimTypeGet (ProSection     section,
                                  int            dim_id,
                                  ProSecdimType *r_type);
/*
    Purpose: Retrieves the type of the specified dimension in the section.

    Input Arguments:
        section - The section handle
        dim_id - The identifier of the dimension

    Output Arguments:
        r_type - The type of the dimension

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.

*/

extern ProError ProSecdimLocationGet (
                                     ProSection handle,
                                     int        dim_id,
                                     Pro2dPnt   location);
/*
    Purpose: Retrieves the location of the specified dimension in the section.

    Input Arguments:
        handle - The section handle
        dim_id - The identifier of the dimension

    Output Arguments:
        location - The location of the dimension in section coordinates

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.

*/

extern ProError ProSecdimReferencesGet (
                                       ProSection handle,
                                       int        dim_id,
                                       int                 **entity_ids,
                                       ProSectionPointType **point_types,
                                       int *p_num_refs);
/*
    Purpose: Retrieves the references of the specified dimension in the 
             section.

    Input Arguments:
        handle - The section handle.
        dim_id - The identifier of the dimension.

    Output Arguments:
        entity_ids - An array of entity identifiers referenced by the section 
                     dimension. Free this memory using <b>ProArrayFree()</b>.
        point_types - The corresponding array of <i>point_types</i> for each 
                      entity. Free this memory using <b>ProArrayFree()</b>.
        p_num_refs - The returned size of the arrays.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.

    See Also:
        ProArrayFree()
*/

extern ProError ProSecdimIdsGet (ProSection  handle,
                                 ProIntlist *p_id_list,
                                 int        *p_num_ids );
/*
    Purpose: Returns an array of valid dimension identifiers for the specified 
             section.

    Input Arguments:
        handle - The section handle.

    Output Arguments:
        p_id_list - The array of identifiers. The function allocates the memory 
                    for this array. Call the function <b>ProArrayFree()</b>to 
                    release the memory.
        p_num_ids - The size of the <i>p_id_list</i> array.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - A general error occurred and the function 
                               failed.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProArrayFree()
*/

extern ProError ProSecdimDiameterSet (ProSection handle, 
                                      int dim_id);
/*
    Purpose: Converts section dimension between a centerline and another entity 
             into a "diameter dimension".

    Input Arguments:
        handle - The section handle.
        dim_id - ID of a dimension to convert

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The dimension was successfully converted.
        PRO_TK_BAD_INPUTS - The input arguments are invalid. ( invalid handle, 
                            invalid dimension ID, or dimension doesn't 
                            reference exactly one centerline )

*/

extern ProError ProSecdimDiameterClear (ProSection handle, 
                                        int dim_id);
/*
    Purpose: Converts a "diameter" section dimension (between a centerline and 
             another entity) into a regular one.

    Input Arguments:
        handle - The section handle.
        dim_id - ID of a dimension to convert

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The dimension was successfully converted.
        PRO_TK_BAD_INPUTS - The input arguments are invalid. ( invalid handle, 
                            invalid dimension ID, or or the dimension doesn't 
                            reference exactly one centerline )

*/


extern ProError ProSecdimDiameterInquire (ProSection handle, 
                                          int dim_id,
                                          ProBoolean *dim_is_diameter);
/*
    Purpose: To determine whether a dimension has the "diameter" property.

    Input Arguments:
        handle - The section handle.
        dim_id - ID of a dimension to get info about

    Output Arguments:
        dim_is_diameter - TRUE, if the dimension is a "diameter" one. FALSE, 
                          otherwise.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input arguments are invalid. ( invalid handle, 
                            or invalid dimension ID )

*/

extern ProError ProSecdimStrengthen ( ProSection section,
                                      int dim_id );
/*
    Purpose: Make a strong dimension.

    Input Arguments:
        section - The section
        dim_id - The dimension identifier

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully strengthen the entity.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
        PRO_TK_INVALID_TYPE - Dimension can not be made strong.
        PRO_TK_E_FOUND - Dimension is already a strong dimension.

*/


extern ProError ProSecdimLockSet( ProSection section,
                                  int dim_id,
                                  ProBoolean is_locked );
/*
    Purpose: Lock or unlock the dimension entity.

    Input Arguments:
        section - The section
        dim_id - The dimension identifier
        is_locked - PRO_B_TRUE, means lock the dimension.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully locked/ unlocked the 
                          entity.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
        PRO_TK_INVALID_TYPE - Dimension can not be locked or unlocked.

*/


extern ProError ProSecdimIsLocked( ProSection section,
                                   int dim_id,
                                   ProBoolean *is_locked );
/*
    Purpose: Determine whether or not the dimension is locked.

    Input Arguments:
        section - The section
        dim_id - The dimension identifier

    Output Arguments:
        is_locked - PRO_B_TRUE, means locked dimension status.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully executed.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.

*/

PRO_END_C_DECLS

#endif