#ifndef _FORMZ_MODEL_NCRV_API_H
#define _FORMZ_MODEL_NCRV_API_H

#include "fz_model_core_api.h"

#ifdef __cplusplus
extern "C" {
#endif


/* @doc EXTERNAL MODEL */
/********************************************************************************************************

	@module formZ Model Nurbz Curve objects | Basic formZ object types.

	@desc	This module contains functions to construct and manipulate Nurbz Curve objects in formZ.
			
	@toc	modl_otyp_ncrv

*********************************************************************************************************/


/********************************************************************************************************

	@def

	@desc	Unique identifier for the Nurbz Curve object type.

	@toc	modl_otyp_ncrv

*********************************************************************************************************/
/* OBJT_PARM_NCRV */
/* UUID : {1d1dd6fe-016c-4c81-ad6c-443812439199} */
#define FZ_OBJT_TYPE_NCRV		"\x1d\x1d\xd6\xfe\x01\x6c\x4c\x81\xad\x6c\x44\x38\x12\x43\x91\x99"	/* Reference : 100 */

/********************************************************************************************************

	@def

	@desc	Unique identifier for the Tangent Curve object type.

	@toc	modl_otyp_tcrv

*********************************************************************************************************/
/* OBJT_PARM_TCRV */
/* UUID : {89d4ce5c-1f58-4cb5-ad84-21362d03351f} */
#define FZ_OBJT_TYPE_TCRV		"\x89\xd4\xce\x5c\x1f\x58\x4c\xb5\xad\x84\x21\x36\x2d\x03\x35\x1f"	/* Reference : 100 */


/************************************************************************

	@fsfunc_t	Creates a nurbz curve from a given set of points

	@desc		Creates a nurbz curve from a given set of points. If knots is passed
				in, it must be of size "npts + degree + 1". If weights is passed in
				it must be of size npts. If the curve is closed,
				closure can be achieved two different ways, depending on whether the
				first and last control point are identical :<nl>
				<nl>
				<nl>
					Not identical	Closure is achieved by internally duplicating the first 
									degree + 1 control points at the end of the curve. 
									There is no knot multiplicity at the begin and end. 
									The control points passed in do NOT contain the duplicated 
									points.<nl>
				<nl>
					Identical		Closure is achieved by creating knot multiplicity at the 
									begin and end point of the curve. The knot vector, if passed 
									in, must have knot multiplicity. An error is returned if 
									these conditions are not met.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_tang_curve,fz_ncrv_create_nurbs_curve

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_nrbz.fsl
	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	@exfile		<scdir>/Utilities | util_objt_ncos.fsl

	@toc		modl_otyp_ncrv
										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_nrbz_curve_func)(					
	fzrt_int 			windex,			/* @parm <in> |	project window index */
	fz_xyz_td			*pts,			/* @parm <in> |	points array									*/
	fzrt_int			npts,			/* @parm <in> |	number of points in pts array					*/
	fzrt_int			degree,			/* @parm <in> |	degree of nurbz curve							*/
	fzrt_boolean	closed,			/* @parm <in> |	closed curve									*/
	fzrt_boolean	do_smooth,		/* @parm <in> |	smooth curve									*/
	double			*knots,			/* @parm <in_opt> | knot values array.
										must be preallocated to store npts + degree + 1 values		*/
	double			*weights,		/* @parm <in_opt> | weights values array.
										must be preallocated to store npts values					*/
	fz_attr_refn_ptr	refn_opts,	/* @parm <in_opt> | refinement options							*/
	fz_objt_ptr	*obj			/* @parm <out> | nurbz curve object								*/
	);
	
/************************************************************************

	@fsfunc_t	Creates a nurbz curve point spline from a given set of points

	@desc		Creates a nurbz curve point spline from a given set of points. 
				<nl>
				<nl>
				knot type : 0 Uniform
							1 Cord length
							2 centripetal
	@return		Error codes

	@avail		8.6.0.1

	@see		fz_objt_cnstr_tang_curve,fz_ncrv_create_nurbs_curve

	@toc		modl_otyp_ncrv
										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_nrbz_curve_pt_spline_func)(
	fzrt_int				windex,					/* @parm <in> |	project window index */
	fz_xyz_td				*pts,					/* @parm <in> |	points array									*/
	fzrt_int				npts,					/* @parm <in> |	number of points in pts array					*/
	fzrt_int				max_degree,				/* @parm <in> |	degree of nurbz curve							*/
	fzrt_boolean			closed,					/* @parm <in> |	closed curve									*/
	fzrt_int				knot_type,				/* @parm <in> |	knot type										*/
	fz_objt_model_type_enum	model_type,				/* @parm <in> |	model type										*/
	fz_attr_refn_ptr		refn_opts,				/* @parm <in_opt> | refinement options							*/
	fz_objt_ptr				*obj					/* @parm <out> | nurbz curve object								*/
	);

/************************************************************************
	@fsfunc_t	Create a nurbz curve object from a set of profiles 
	
	@desc		Create a nurbz curve object from a set of profile curves. There must
				be at least 3 profiles. All the cross sections generated will be
				closed. If use_plane is TRUE, the normal of the plane is specified
				in the next parameter. The profiles are intersected with the plane
				and the intersection points are used to generate the cross sections.
				If use_plane is FALSE, the cross sections are generated through 
				equally spaced points along the profile curves.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_from_ncur,fz_objt_cnstr_nrbz_curve_extract

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_cnstr_nrbz_curve_sections_func)(
	fzrt_int 				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		*crv_objs,		/* @parm <in> | profile curves						*/
	fzrt_int				nobjs,			/* @parm <in> | number of profiles<nl>
										   @rimin 3 										*/
	fzrt_int				n_sections,		/* @parm <in> | number of cross sections			*/
	fzrt_boolean		use_plane,		/* @parm <in> | TRUE, if plane is specified			*/
	fz_xyz_td				*normal,		/* @parm <in> | normal direction of the plane		*/
	fz_attr_refn_ptr	refn_opts,		/* @parm <in_opt> | Refinement options				*/
	fz_enty_list_ptr 	ent_list		/* @parm <out> | list of nurbz object pointers		*/
	);

/************************************************************************
	
	@fsfunc_t	Creates a formZ Object from the given NURBS curve
	
	@desc		Creates a formZ Object from the given NURBS curve

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_nrbz_curve_extract,fz_objt_edit_nrbz_curve_extend_to_point,
				fz_ncrv_create_nurbs_curve,fz_objt_cnstr_nrbz_curve_pt_spline

	@exfile		<scdir>/Utilities | util_ncrv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_cnstr_objt_from_ncur_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_nurbs_cur_ptr		crv,			/* @parm <in> | NURBS curve						*/
	fz_attr_refn_ptr	refn_opts,		/* @parm <in_opt> | refinement options			*/
	fz_objt_ptr		*obj			/* @parm <out> | formZ object					*/
	);

/************************************************************************
	@fsfunc_t	Create a nurbz curve object at the surface isoline
	
	@desc		Create a nurbz curve object at the surface isoline either in the U
				or V direction at the specified parameter value. More than one curve
				object could be returned in case of a trimmed nurbz surface.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_from_ncur, fz_objt_cnstr_nrbz_curve_sections

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_cnstr_nrbz_curve_extract_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		srf_obj,		/* @parm <in> | nurbz surface						*/
	fzrt_boolean		is_u,			/* @parm <in> | TRUE, if U direction<nl>
											FALSE, if V direction							*/
	double				parm,			/* @parm <in> | parameter value at which 	
											the isoline should be generated					*/
	fz_enty_list_ptr		ent_list		/* @parm <out> | list of nurbz object pointers		*/
	);

/************************************************************************
	@fsfunc_t	Extends a nurbz curve object to a specified point
	
	@desc		Extends a nurbz curve object to a specified point. If is_arc
				is TRUE, an arc is created between the last point of the curve and
				the point. If is_arc is FALSE, a nurbz curve is created between the
				last point of the curve and the point. If is_merge is TRUE, the newly
				created arc or nurbz curve is joined with the original object.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_extend_by_distance, fz_objt_cnstr_objt_from_ncur

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_extend_to_point_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve										*/
	fz_xyz_td				*point,			/* @parm <in> | point to which the curve should be extended		*/
	fzrt_boolean		is_arc,			/* @parm <in> | TRUE, if arc is desired<nl>
											FALSE, if spline is desired									*/
	fzrt_boolean		is_merge,		/* @parm <in> | if TRUE, the two curves are merged into one		*/
	fz_objt_ptr		*new_obj		/* @parm <out> | nurbz curve object								*/
	);

/************************************************************************
	@fsfunc_t	Extends a nurbz curve object by a specified distance
	
	@desc		Extends a nurbz curve object by a specified distance. If is_merge is TRUE, 
				the newly created arc or nurbz curve is joined with the original object.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_extend_to_point, fz_objt_cnstr_objt_from_ncur		

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_extend_by_distance_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve										*/
	double				distance,		/* @parm <in> | extension distance								*/
	fzrt_boolean		is_merge,		/* @parm <in> | if TRUE, the two curves are merged into one		*/
	fz_objt_ptr		*new_obj		/* @parm <out> | nurbz curve object								*/
	);

/************************************************************************
	@fsfunc_t	Splits a nurbz curve into two nurbz curve objects 
	
	@desc		Splits a nurbz curve at the specified parameter value and 
				returns two nurbz curve objects.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_extend_to_point, fz_objt_cnstr_objt_from_ncur	

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_split_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve				*/
	double				tval,			/* @parm <in> | parameter value			*/
	fz_objt_ptr		*lobj,			/* @parm <out> | nurbz curve object		*/
	fz_objt_ptr		*robj			/* @parm <out> | nurbz curve object		*/
	);

/************************************************************************
	@fsfunc_t	Changes the degree of a nurbz curve object.
	
	@desc		Changes the degree of a nurbz curve object. 
				If keep_shape is TRUE, the shape of curve is preserved by changing 
				the number of control points, if necessary.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_change_ctrlpts_by_number,fz_objt_edit_nrbz_curve_change_ctrlpts_by_curvature

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_change_degree_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve										*/
	fzrt_int				new_degree,		/* @parm <in> | new degree										*/
	fzrt_boolean		keep_shape		/* @parm <in> | if TRUE, the shape of curve is preserved		*/
	);

/************************************************************************
	@fsfunc_t	Rebuilds a nurbz curve object with the requested number of control points.
	
	@desc		Rebuilds a nurbz curve object with the requested number of control points.
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_change_degree,fz_objt_edit_nrbz_curve_change_ctrlpts_by_curvature

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_change_ctrlpts_by_number_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve										*/
	fzrt_int				new_num_cpts	/* @parm <in> | new number of control points					*/
	);

/************************************************************************
	@fsfunc_t	Rebuilds a nurbz curve object with the requested maximum normal deviation. 
	
	@desc		Rebuilds a nurbz curve object with the requested maximum normal deviation. 
					
	@return		Error codes
			
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_change_degree,fz_objt_edit_nrbz_curve_change_ctrlpts_by_number

	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv.fsl
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_edit_nrbz_curve_change_ctrlpts_by_curvature_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		crv_obj,		/* @parm <in> | nurbz curve										*/
	double				max_norm_tol	/* @parm <in> | Maximum normal deviation requested				*/
	);

/************************************************************************
	@fsfunc_t	Attaches 2 nurbz curve objects. 
	
	@desc		Attaches 2 nurbz curve objects. The attachment takes place from an end of the first curve 
				to an end of the second curve, either by moving the first curve or by stretching it.
				The objects passed in must be nurbz objects. 
				Returns the updated first curve object.
					
	@return		Error codes<nl>
				MODEL_ERR_WRONG_OBJT_TYPE	- source objects passed in are not
				nurbz objects.
					
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_blend
	
	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv_attach.fsl
 

	@toc		modl_otyp_ncrv

*************************************************************************/
 typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_nrbz_curve_attach_func)(
	fzrt_int 						windex,				/* @parm <in> | project window index */
	fz_objt_ptr				crv_obj1,			/* @parm <in> | nurbz object  					*/	
	fz_objt_ptr				crv_obj2,			/* @parm <in> | nurbz object  					*/	
	fz_ncrv_which_end_enum			which_end1,	 		/* @parm <in> | end of first curve to attach  	*/	
	fz_ncrv_which_end_enum			which_end2,			/* @parm <in> | end of second curve to attach  	*/						
 	fz_objt_nrbz_algn_type_enum	align_type,		 	/* @parm <in> | alignment type when smooth surfaces is FALSE (C0, G1, C1, C2)  	*/
	fzrt_boolean				do_move				/* @parm <in> | attachment type  (move = TRUE, stretch = FALSE)					*/
	);	 

/************************************************************************
	@fsfunc_t	Blends two nurbz curve objects at the specified curve edges.
	
	@desc		Blends two nurbz curve objects at the specified edges.
				The objects passed in must be nurbz objects.
				returns a new nurbz curve object.
					
	@return		Error codes<nl>
				MODEL_ERR_WRONG_OBJT_TYPE	- source objects passed in are not
				nurbz objects
					
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_attach
	
	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv_blend.fsl

	@toc		modl_otyp_ncrv
	

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_nrbz_curve_blend_func)(
	fzrt_int 						windex,				/* @parm <in> | project window index */
	fz_objt_ptr				crv_obj1,			/* @parm <in> | curve nurbz object  			*/
	fz_objt_ptr				crv_obj2,			/* @parm <in> | curve nurbz object  			*/								
	fz_ncrv_which_end_enum			which_end1,			/* @parm <in> | end of first curve to blend  	*/	
	fz_ncrv_which_end_enum			which_end2,			/* @parm <in> | end of second curve to blend  	*/	
	fz_objt_nrbz_algn_type_enum	align_type,			/* @parm <in> | alignment type  (C0, G1, C1, C2) */
	fzrt_int						degree,				/* @parm <in> | degree of the new nurbz curve   */
	fz_objt_ptr				*new_obj			/* @parm <out> | new curve object 				*/
	);  

 /************************************************************************
	@fsfunc_t		Merges two nurbz curve objects that have a matched edge into a single new nurbz object.
	 
	
	@desc		Merges two nurbz curve objects that have a matched edge into a single new nurbz object.
 				The object passed in must be a nurbz curve object. 
				Returns a new nurbz curve object. The first curve is aligned to the second at the merged edge 
				according with the alignment indicated.  
				 
 					
	@return		Error codes<nl>
	
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_attach
	
	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv_merge.fsl
 

	@toc		modl_otyp_ncrv
		
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_nrbz_curve_merge_align_func)(
	fzrt_int 						windex,				/* @parm <in> | project window index */
	fz_objt_ptr				crv_obj1,			/* @parm <in> | curve nurbz object  			*/	
	fz_objt_ptr				crv_obj2,			/* @parm <in> | curve nurbz object  			*/		
	fz_objt_nrbz_algn_type_enum	align_type,			/* @parm <in> | alignment type  (C0, G1, C1, C2) */
  	fz_objt_ptr				*new_obj			/* @parm <out> | new curve object 				*/
  	);

 /************************************************************************
	@fsfunc_t		Merges two nurbz curve objects that have a matched edge into a single new nurbz object.
	 
	
	@desc		Merges two nurbz curve objects that have a matched edge into a single new nurbz object.
 				The object passed in must be a nurbz curve object. 
				Returns a new nurbz curve object.
				The Smoothness value controls the amount of smoothness applied.
				 
	@return		Error codes<nl>
	
	@avail		5.0.0.0

	@see		fz_objt_edit_nrbz_curve_merge_align
	
	@exfile		<scdir>/Utilities | util_objt_edit_nrbz_curv_merge.fsl
 
	@toc		modl_otyp_ncrv
		
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_nrbz_curve_merge_smooth_func)(
	fzrt_int 						windex,				/* @parm <in> | project window index */
	fz_objt_ptr				crv_obj1,			/* @parm <in> | curve nurbz object  			*/	
	fz_objt_ptr				crv_obj2,			/* @parm <in> | curve nurbz object  			*/		
	double						smoothness,		 	/* @parm <in> | amount of smoothness			*/
  	fz_objt_ptr				*new_obj			/* @parm <out> | new curve object 				*/
  	);
 
/********************************************************************************************************

	@module formZ Model nurbz curve objects | Basic formZ object types.

	@desc	This module contains functions to construct Tangent Curve objects in formZ.
			
	@toc	modl_otyp_tcrv

*********************************************************************************************************/

/************************************************************************

	@fsfunc_t	Creates a tangent curve through a given set of points

	@desc		Creates a tangent curve through a given set of points. This is a degree 2
				nurbz curve, with 2 additional control points constructed around each input
				point. These additional 2 points and the input point are collinear which
				causes the curve to go through the input point. The distance of the 2
				additional points from the input point is derived from the curvature
				parameter. This is an array of size npts, with one curvature per input
				point. At 0, the 2 points are closer to the input point, causing a
				sharper turn of the curve. At 1.0 they are farther which creates a more bulgy
				curve.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_nrbz_curve

	@exfile		<scdir>/Utilities | util_objt_cnstr_tcrv.fsl

	@toc		modl_otyp_tcrv
										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_tang_curve_func) (					
	fzrt_int 			windex,			/* @parm <in> |	project window index */
	fz_xyz_td			*pts,			/* @parm <in> |	points array						*/
	fzrt_int			npts,			/* @parm <in> |	number of points in pts array<nl>
									   @rimin 3											*/
	double			*curvature,		/* @parm <in> |	curvature							*/
	fzrt_boolean	closed,			/* @parm <in> |	closed curve						*/
	fzrt_boolean	do_smooth,		/* @parm <in> |	smooth curve						*/
	fz_attr_refn_ptr	refn_opts,	/* @parm <in_opt> | refinement options				*/
	fz_objt_ptr	*obj			/* @parm <out> | tangent curve						*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Gets the NURBS curve from a formZ Object.
				This is the opposite of fz_objt_set_ncrv. Both functions
				can be used to modify a nurbZ Curve object. First the generic
				NURBS is created and extracted with fz_objt_get_ncrv. 
				The generic  NURBS is then edited with any of the api functions that
				operate on that type. Finally the NURBS is put back in
				the nurbZ Curve object with fz_objt_set_ncrv and is deleted
				with fz_ncrv_delete.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_nrbz_curve,fz_ncrv_create_nurbs_curve,fz_objt_set_ncrv

	@exfile		
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_get_ncrv_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			obj,			/* @parm <in> | formZ object		*/
	fz_nurbs_cur_ptr	*crv			/* @parm <out> | NURBS curve		*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc	   Uses the given nurbs curve as the underlying NURBS of the
			   nurbz Curve object passed in. The object must be a formZ
			   "nurbZ Curve" object type.
			   This is the opposite of fz_objt_get_ncrv. Both functions
			   can be used to modify a nurbZ Curve object. First the generic
			   NURBS is created and extracted with fz_objt_get_ncrv. 
			   The generic  NURBS is then edited with any of the api functions that
			   operate on that type. Finally the NURBS is put back in
			   the nurbZ Curve object with fz_objt_set_ncrv and is deleted
			   with fz_ncrv_delete.
	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_cnstr_nrbz_curve,fz_ncrv_create_nurbs_curve,fz_objt_get_ncrv

	@exfile		
	
	@toc		modl_otyp_ncrv

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_set_ncrv_func)(
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			obj,			/* @parm <in> | formZ object		*/
	fz_nurbs_cur_ptr	crv				/* @parm <in> | NURBS curve		*/
	);

#ifdef __cplusplus
}
#endif

#endif /* _FORMZ_MODEL_NCRV_API_H */