/*
 
uf_sf_curve.h
*****************************************************************************************************/


#ifndef UF_SF_CURVE_INCLUDED
#define UF_SF_CURVE_INCLUDED

#include <uf_defs.h>
#include <uf_curve.h>
#include <libufun_cae_exports.h>



/******************************************************************************
Create a smart/dumb line/arc in fem/sim part. You input a UF_CURVE_line_arc_t data structure,
which specified the data needed for the line/arc to be created. Output is the
object identifier of the smart/dumb line/arc. An error is returned if
line/arc cannot be created with the specified data.

Return: error code

Environment: Internal  and  External

History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_line_arc
(
   UF_CURVE_line_arc_t  *line_arc_data, /* <I> Pointer to line/arc data structure */
   tag_t * curve_id  /* <O> Object identifier of new associative line/arc in fem/sim.
                            if is_asso == TRUE - smart line/arc.
                            if is_asso == FALSE - dumb line/arc  */

);

/******************************************************************************
Create a smart/dumb line through two points in fem/sim part.

Return: error code

Environment: Internal  and  External

History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_line_point_point
(
   tag_t point1, /* <I> tag of start point */
   tag_t point2, /* <I> tag of end point */
   UF_CURVE_limit_p_t limit_p[2], /* <I> extension limits */
   tag_t support_plane, /* <I> tag of support plane of the line */
   logical is_asso, /* <I> true - if associative, false - if not associative */
   tag_p_t line_feature_id /* <O> if is_asso == TRUE - object identifier of new smart line
                                  if is_asso == FALSE - object identifier of new dumb line */

);
/******************************************************************************
Create a smart/dumb arc through three points in fem/sim part.

Return: error code

Environment: Internal  and  External

History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_arc_3point
(
   tag_t point1, /* <I> tag of start point */
   tag_t point2, /* <I> tag of end point */
   tag_t point3, /* <I> tag of middle point */
   UF_CURVE_limit_p_t limit_p[2], /* <I> extension limits */
   tag_t support_plane, /* <I> tag of support plane of the arc */
   logical is_asso, /* <I> true - if associative, false - if not associative */
   tag_p_t arc_id /* <O> if is_asso == TRUE - smart arc
                         if is_asso == FALSE - dumb arc arc */

);
/******************************************************************************
Create a smart/dumb arc through two points and of specific radius in fem/sim part.

Return: error code

Environment: Internal  and  External

History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_arc_point_point_radius
(
   tag_t point1, /* <I> tag of start point */
   tag_t point2, /* <I> tag of end point */
   double radius, /* <I> value of radius */
   UF_CURVE_limit_p_t limit_p[2], /* <I> extension limits */
   tag_t support_plane, /* <I> tag of support plane of the arc */
   logical is_asso, /* <I> true - if associative, false - if not associative */
   tag_p_t arc_feature_id/* <O> if is_asso == TRUE - object identifier of new smart arc feature
                                if is_asso == FALSE - object identifier of new dumb arc */

);
/******************************************************************************
Create a smart/dumb arc through a start point and specific center in fem/sim part.

Return: error code

Environment: Internal  and  External
History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_arc_point_center
(
   tag_t point, /* <I> tag of start point */
   tag_t center, /* <I> tag of center */
   UF_CURVE_limit_p_t limit_p[2], /* <I> extension limits */
   tag_t support_plane, /* <I> tag of support plane of the arc */
   logical is_asso, /* <I> true - if associative, false - if not associative */
   tag_p_t arc_id /* <O> if is_asso == TRUE - object identifier of new smart arc
                         if is_asso == FALSE - object identifier of new dumb arc */

);
/******************************************************************************
Create a smart/dumb arc of given radius and specific center in fem/sim part.

Return: error code

Environment: Internal  and  External

History:
******************************************************************************/

extern UFUN_CAEEXPORT int UF_SF_CURVE_create_arc_center_radius
(
   tag_t center, /* <I> tag of center */
   double radius, /* <I> value of radius */
   tag_t help_point, /* <I> point to define the start orientation */
   UF_CURVE_limit_p_t limit_p[2], /* <I> extension limits */
   tag_t support_plane, /* <I> tag of support plane of the arc */
   logical is_asso, /* <I> true - if associative, false - if not associative */
   tag_p_t arc_id /* <O> if is_asso == TRUE - object identifier of new smart arc
                         if is_asso == FALSE - object identifier of new dumb arc */

);



#undef EXPORTLIBRARY

#include <uf_sf_retiring.h>

#endif    /*  END UF_CURVE_INCLUDED  */