/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   Copyright 1989-2018 by AutoDesSys, Inc.                                                 *
 *                                                                                           *
 *   This software and its associated documentation contains proprietary,                    *
 *   confidential, and trade secret information of AutoDesSys Inc. and may not be            *
 *   disclosed, copied in any form, or used for any purpose except as specifically           *
 *   permitted in writing by AutoDesSys, Inc.                                                *
 *                                                                                           *
 *   AutoDesSys, Inc. grants permission to use the software to those who purchase            *
 *   a license.  Such a usage will be made according to the terms and conditions             *
 *   specified in the license agreement to which a licensee agrees before installing         *
 *   and commencing usage of the software.  The license agreement can be found               *
 *   on the envelop that contains the software CD.                                           *
 *                                                                                           *
 *   AutoDesSys, Inc. also grants permission to licensees to develop extensions to           *
 *   the software, which can be in the form of scripts or plugins.  The permission           *
 *   includes calling the API and call back functions provided by AutoDesSys, Inc.           *
 *   and accessing information relevant to these functions and the general workings          *
 *   of form.Z, but only up to the point to which AutoDesSys, Inc. has chosen to             *
 *   expose, through its form.Z SDK Manual.  All extensions developed by third               *
 *   parties will include a copy of this copyright note in an easily accessible place or     *
 *   a clear instruction to read this original note by AutoDesSys, Inc.                      *
 *                                                                                           *
 *   All the software distributed under a license, either for the purpose of using it or     *
 *   for the purpose of developing extensions, is distributed AS IS, WITHOUT                 *
 *   WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND                                    *
 *   AutoDesSys, Inc. HEREBY DISCLAIMS ALL SUCH WARRANTIES,                                  *
 *   INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF                                         *
 *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.                                    *
 *                                                                                           *
 *   formZ, RenderZone, and RadioZity are registered trademarks of AutoDesSys, Inc.          *
 *                                                                                           *
 *   form.Z SDK, Version 8.6.3, Dec 03, 2018                                                 *
 *                                                                                           *
 *                                                                                           *
 *********************************************************************************************/


#ifndef _FORMZ_NSRF_API_H
#define _FORMZ_NSRF_API_H

#include "fz_ncrv_api.h"

#ifdef __cplusplus
extern "C" {
#endif


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

	Nurbs Surface


	Description
		This module has low-level functionality to model complex free form 
		NURBS (Non Uniform Rational B-Splines) surfaces in formZ. It consists of utility 
		functions to construct, access and manipulate NURBS surfaces.
 ****************************************************************/

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

	fz_nurbs_srf_ptr


	Description
		Data structure to hold NURBS surface.

	Availability	5.0.0.0


	See Also
		fz_nsrf_are_two_srfs_equal, fz_nsrf_cap, fz_nsrf_copy,  
		fz_nsrf_delete_control_line, fz_nsrf_delete_knot, fz_nsrf_evaluate_derivatives_at_parm,  
		fz_nsrf_evaluate_point_at_parm, fz_nsrf_extract_isoline, fz_nsrf_get_closure,  
		fz_nsrf_get_control_points, fz_nsrf_get_domain, fz_nsrf_get_ij_control_point,  
		fz_nsrf_get_ij_weight, fz_nsrf_get_u_degree, fz_nsrf_get_u_knots,  
		fz_nsrf_get_u_npts, fz_nsrf_get_uv, fz_nsrf_get_v_degree,  
		fz_nsrf_get_v_knots, fz_nsrf_get_v_npts, fz_nsrf_get_weights,  
		fz_nsrf_insert_control_line, fz_nsrf_insert_knot, fz_nsrf_merge_align,  
		fz_nsrf_merge_smooth, fz_nsrf_offset_srf, fz_nsrf_reverse,  
		fz_nsrf_sample_srf_angle_based2, fz_nsrf_sample_srf_arclength_based2, fz_nsrf_sample_srf_parameter_based2,  
		fz_nsrf_set_ij_control_point, fz_nsrf_set_ij_weight, fz_nsrf_set_u_knots,  
		fz_nsrf_set_v_knots, fz_nsrf_split_at_parm, fz_nsrf_swap_uv,  
		fz_objt_cnstr_nrbz_from_nsrf, fz_objt_cnstr_nrbz_trimmed_curves, fz_objt_set_nsrf

 ****************************************************************/
typedef struct nurbs_srf_td				*fz_nurbs_srf_ptr;

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

	fz_nsrf_which_edge_enum


	Description
		Identifier of a NURBS surface boundary edge. Used to identify one of the 
		four edges of an untrimmed NURBS surface.

	Members
		FZ_NSRF_U_MIN_EDGE
			u min edge (u is constant at umin, v varies)
		FZ_NSRF_U_MAX_EDGE
			u max edge (u is constant at umax, v varies)
		FZ_NSRF_V_MIN_EDGE
			v min edge (u varies, v is constant at vmin)
		FZ_NSRF_V_MAX_EDGE
			v max edge (u varies, v is constant at vmax)

	Availability	5.0.0.0


	See Also
		fz_objt_edit_nrbz_attach, fz_objt_edit_nrbz_blend, fz_objt_edit_nrbz_extend_by_distance

 ****************************************************************/
typedef enum fz_nsrf_which_edge_enum
{
	FZ_NSRF_U_MIN_EDGE = 0,
	FZ_NSRF_U_MAX_EDGE,
	FZ_NSRF_V_MIN_EDGE,
	FZ_NSRF_V_MAX_EDGE
	
} fz_nsrf_which_edge_enum;

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

	fz_nsrf_get_u_degree



	Description
		Gets U degree of NURBS surface

	Parameters
		srf  [Input]
			NURBS surface
		u_degree  [Result]
			U degree

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_v_degree

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_u_degree_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			*u_degree
	);

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

	fz_nsrf_get_v_degree



	Description
		Gets V degree of NURBS surface

	Parameters
		srf  [Input]
			NURBS surface
		v_degree  [Result]
			V degree

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_degree

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_v_degree_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			*v_degree
	);

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

	fz_nsrf_get_u_npts



	Description
		Gets the number of U control points of a NURBS surface

	Parameters
		srf  [Input]
			NURBS surface
		u_npts  [Result]
			U number of control points

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_v_npts

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_u_npts_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int *u_npts
	);

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

	fz_nsrf_get_v_npts



	Description
		Gets the number of V control points of a NURBS surface

	Parameters
		srf  [Input]
			NURBS surface
		v_npts  [Result]
			V number of control points

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_v_npts_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			*v_npts
	);

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

	fz_nsrf_get_control_points



	Description
		Gets the control points of a NURBS surface. The control points 
		are returned in a single array. (row major order) 
		The control points array is allocated by the caller and must be 
		of size u_npts*v_npts. u_npts, v_npts are the number of control points 
		in U, V directions obtained from functions fz_nsrf_get_u_npts(), fz_nsrf_get_v_npts().

	Parameters
		srf  [Input]
			NURBS surface
		ctrlpts  [Result]
			control points

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_v_npts, fz_nsrf_get_weights

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_control_points_func)(
	fz_nurbs_srf_ptr	srf,
	fz_xyz_td 			*ctrlpts
	);

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

	fz_nsrf_get_weights



	Description
		Gets the weights of a NURBS surface. The weights are returned in a 
		single array of doubles. (row major order) 
		The weights array is allocated by the caller and must be 
		of size u_npts*v_npts. u_npts, v_npts are the number of control points 
		in U, V directions obtained from functions fz_nsrf_get_u_npts(), fz_nsrf_get_v_npts().

	Parameters
		srf  [Input]
			NURBS surface
		weights  [Result]
			weights

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_v_npts, fz_nsrf_get_control_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_weights_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*weights
	);

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

	fz_nsrf_get_ij_control_point



	Description
		Gets the [i,j]th control point of a NURBS surface. 
		i is the row number or U index. 
		j is the column number or V index.

	Parameters
		srf  [Input]
			NURBS surface
		i  [Input]
			row number
		j  [Input]
			column number
		ctrlpt  [Result]
			control point

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_ij_control_point_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			i,
	fzrt_int 			j,
	fz_xyz_td 			*ctrlpt
	);

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

	fz_nsrf_get_ij_weight



	Description
		Gets the [i,j]th weight of a NURBS surface. 
		i is the row number or U index. 
		j is the column number or V index.

	Parameters
		srf  [Input]
			NURBS surface
		i  [Input]
			row number
		j  [Input]
			column number
		weight  [Result]
			weight

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_ij_weight_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			i,
	fzrt_int 			j,
	double 			*weight
	);

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

	fz_nsrf_get_u_knots



	Description
		Gets the U knots of a NURBS surface. 
		The knots array is allocated by the user and must be 
		of size u_npts+u_degree+1. u_npts is the number of control points in U 
		direction obtained from function fz_nsrf_get_u_npts().	u_degree is the degree 
		in U direction obtained from function fz_nsrf_get_u_degree().

	Parameters
		srf  [Input]
			NURBS surface
		u_knots  [Result]
			U knot array

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_u_degree, fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_u_knots_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*u_knots
	);

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

	fz_nsrf_get_v_knots



	Description
		Gets the V knots of a NURBS surface. 
		The knots array is allocated by the user and must be 
		of size v_npts+v_degree+1. v_npts is the number of control points in V 
		direction obtained from function fz_nsrf_get_v_npts().	v_degree is the degree 
		in V direction obtained from function fz_nsrf_get_v_degree().

	Parameters
		srf  [Input]
			NURBS surface
		v_knots  [Result]
			U knot array

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_v_npts, fz_nsrf_get_v_degree,fz_nsrf_get_u_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_v_knots_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*v_knots
	);

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

	fz_nsrf_get_domain



	Description
		Gets the parameter domain of a NURBS surface.

	Parameters
		srf  [Input]
			NURBS surface
		u_min  [Result]
			min U value
		u_max  [Result]
			max U value
		v_min  [Result]
			min V value
		v_max  [Result]
			max V value

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_v_npts, fz_nsrf_get_control_points, 
		fz_nsrf_get_u_knots, fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_domain_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*u_min,
	double 			*u_max,
	double 			*v_min,
	double 			*v_max
	);

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

	fz_nsrf_get_closure



	Description
		Gets the closure information of NURBS surface.

	Parameters
		srf  [Input]
			NURBS surface
		u_closed  [Result]
			is U dir closed
		v_closed  [Result]
			is V dir closed

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_v_npts, fz_nsrf_get_control_points, 
		fz_nsrf_get_u_knots, fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_closure_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_boolean 	*u_closed,
	fzrt_boolean 	*v_closed
	);


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

	fz_nsrf_set_ij_control_point



	Description
		Sets the [i,j]th control point of a NURBS surface. 
		i is the row number or U index. 
		j is the column number or V index.

	Parameters
		srf  [Input]
			NURBS surface
		i  [Input]
			row number
		j  [Input]
			column number
		ctrlpt  [Input]
			control point

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_set_ij_weight, fz_nsrf_set_u_knots,fz_nsrf_set_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_set_ij_control_point_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			i,
	fzrt_int 			j,
	fz_xyz_td 			*ctrlpt
	);

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

	fz_nsrf_set_ij_weight



	Description
		Sets the [i,j]th weight of a NURBS surface. 
		i is the row number or U index. 
		j is the column number or V index.

	Parameters
		srf  [Input]
			NURBS surface
		i  [Input]
			row number
		j  [Input]
			column number
		weight  [Input]
			weight value

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_set_ij_control_point, fz_nsrf_set_u_knots,fz_nsrf_set_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_set_ij_weight_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			i,
	fzrt_int 			j,
	double 			weight
	);

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

	fz_nsrf_set_u_knots



	Description
		Sets U knots of a NURBS surface. 
		The knots array must be	of size u_npts+u_degree+1.

	Parameters
		srf  [Input]
			NURBS surface
		u_knots  [Input]
			knots in U

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_set_ij_control_point, fz_nsrf_set_ij_weight,fz_nsrf_set_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_set_u_knots_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*u_knots
	);

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

	fz_nsrf_set_v_knots



	Description
		Sets V knots of a NURBS surface. 
		The knots array must be	of size v_npts+v_degree+1.

	Parameters
		srf  [Input]
			NURBS surface
		v_knots  [Input]
			knots in V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_set_ij_control_point, fz_nsrf_set_ij_weight,fz_nsrf_set_u_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_set_v_knots_func)(
	fz_nurbs_srf_ptr	srf,
	double 			*v_knots
	);

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

	fz_nsrf_evaluate_point_at_parm



	Description
		Evaluates a point on a NURBS surface given [u,v].

	Parameters
		srf  [Input]
			NURBS surface
		uu  [Input]
			parameter in U
		vv  [Input]
			parameter in V
		point  [Result]
			Point on surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_evaluate_derivatives_at_parm

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_evaluate_point_at_parm_func)(
	fz_nurbs_srf_ptr	srf,
	double 			uu,
	double 			vv,
	fz_xyz_td 			*point
	);

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

	fz_nsrf_evaluate_derivatives_at_parm



	Description
		Evaluates the position, tangent and normal on a NURBS surface given [u,v].

	Parameters
		srf  [Input]
			NURBS surface
		uu  [Input]
			parameter in U
		vv  [Input]
			parameter in V
		point  [Result]
			Point on surface
		u_tangent  [Result]
			Tangent vector in U
		v_tangent  [Result]
			Tangent vector in V
		normal  [Result]
			Normal on surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_evaluate_point_at_parm

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_evaluate_derivatives_at_parm_func)(
	fz_nurbs_srf_ptr	srf,
	double 			uu,
	double 			vv,
	fz_xyz_td 			*point,
	fz_xyz_td 			*u_tangent,
	fz_xyz_td 			*v_tangent,
	fz_xyz_td 			*normal
	);

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

	fz_nsrf_create_nurbs_srf



	Description
		Creates a NURBS surface from control points, knots and weights. 
		The control points are expected in a single array. (row major order) 
		The weights are expected in a single array of doubles. (row major order) 
		Weights, U knots, V knots are optional and NULL can be specified for defaults.

	Parameters
		cpts  [Input]
			Control points
		weights  [Input, Optional]
			Weights
		u_npts  [Input]
			Number of points in U
		u_degree  [Input]
			Degree in U
		u_knots  [Input, Optional]
			Knots in U
		closed_u  [Input]
			Closed in U
		v_npts  [Input]
			Number of points in V
		v_degree  [Input]
			Degree in V
		v_knots  [Input, Optional]
			Knots in V
		closed_v  [Input]
			Closed in V
		srf  [Result]
			NURBS surface created

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots, 
		fz_objt_cnstr_nrbz_from_cpts

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_create_nurbs_srf_func)(
	fz_xyz_td				*cpts,
	double				*weights,
	fzrt_int				u_npts,
	fzrt_int				u_degree,
	double				*u_knots,
	fzrt_boolean		closed_u,
	fzrt_int				v_npts,
	fzrt_int				v_degree,
	double				*v_knots,
	fzrt_boolean		closed_v,
	fz_nurbs_srf_ptr		*srf
	);

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

	fz_nsrf_insert_control_line



	Description
		Adds a control line to a NURBS surface in the U or V direction after the nth control line. 
		The new control line is added in between the (n)th and (n+1)th lines at a distance interpolated 
		by the specified ratio. For instance, a ratio of 0.5 would add a  control line exactly in between the 
		(n)th and (n+1)th lines. A ratio < 0.5 would make a new control line closer to the (n)th line than 
		the (n+1)th line while a ratio > 0.5 would make it closer to the (n+1)th line.

	Parameters
		srf  [Input]
			NURBS surface
		nline  [Input]
			nth control line
		ratio  [Input]
			ratio
		is_u  [Input]
			Direction- TRUE=U, FALSE=V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_delete_control_line,fz_nsrf_delete_knot,fz_nsrf_insert_knot

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_insert_control_line_func)(
	fz_nurbs_srf_ptr		srf,
	fzrt_int 				nline,
	double				ratio,
	fzrt_boolean 		is_u
	);

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

	fz_nsrf_delete_control_line



	Description
		Deletes a nth control line of a NURBS surface in the U or V direction.

	Parameters
		srf  [Input]
			NURBS surface
		nline  [Input]
			nth control line
		is_u  [Input]
			Direction- TRUE=U, FALSE=V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_insert_control_line,fz_nsrf_insert_knot,fz_nsrf_delete_knot

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_delete_control_line_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int 			nline,
	fzrt_boolean 	is_u
	);

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

	fz_nsrf_insert_knot



	Description
		Inserts a knot to a NURBS surface in the U or V direction.

	Parameters
		srf  [Input]
			NURBS surface
		parm  [Input]
			Parameter value
		is_u  [Input]
			Direction- TRUE=U, FALSE=V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_delete_knot,fz_nsrf_insert_control_line,fz_nsrf_delete_control_line

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_insert_knot_func)(
	fz_nurbs_srf_ptr	srf,
	double 			parm,
	fzrt_boolean 	is_u
	);

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

	fz_nsrf_delete_knot



	Description
		Deletes a knot of a NURBS surface in the U or V direction.

	Parameters
		srf  [Input]
			NURBS surface
		parm  [Input]
			Parameter value
		is_u  [Input]
			Direction- TRUE=U, FALSE=V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_insert_knot,fz_nsrf_insert_control_line,fz_nsrf_delete_control_line

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_delete_knot_func)(
	fz_nurbs_srf_ptr	srf,
	double			parm,
	fzrt_boolean 	is_u
	);

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

	fz_nsrf_change_u_degree



	Description
		Changes the U degree of a NURBS surface. 
		If keep_shape is TRUE, the shape of surface is preserved by changing 
		the number of control points, if necessary.

	Parameters
		srf  [Input]
			NURBS surface
		u_degree  [Input]
			Degree in U
		keep_shape  [Input]
			if TRUE, the shape of surface is preserved

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_change_v_degree,fz_nsrf_change_number_of_ctrlpts_number_based,fz_nsrf_change_number_of_ctrlpts_angle_based

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_change_u_degree_func)(
	fz_nurbs_srf_ptr	*srf,
	fzrt_int 			u_degree,
	fzrt_boolean	keep_shape
	);

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

	fz_nsrf_change_v_degree



	Description
		Changes the V degree of a NURBS surface. 
		If keep_shape is TRUE, the shape of surface is preserved by changing 
		the number of control points, if necessary.

	Parameters
		srf  [Input]
			NURBS surface
		v_degree  [Input]
			Degree in V
		keep_shape  [Input]
			if TRUE, the shape of surface is preserved

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_change_u_degree,fz_nsrf_change_number_of_ctrlpts_number_based,fz_nsrf_change_number_of_ctrlpts_angle_based

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_change_v_degree_func)(
	fz_nurbs_srf_ptr	*srf,
	fzrt_int 			v_degree,
	fzrt_boolean	keep_shape
	);

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

	fz_nsrf_change_number_of_ctrlpts_angle_based



	Description
		Changes the number of control points of a NURBS surface based on angular tolerance.

	Parameters
		srf  [Input]
			NURBS surface
		angtol  [Input]
			Angular tolerance

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_change_number_of_ctrlpts_number_based,fz_nsrf_change_u_degree,fz_nsrf_change_v_degree

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_change_number_of_ctrlpts_angle_based_func)(
	fz_nurbs_srf_ptr	*srf,
	double 			angtol
	);

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

	fz_nsrf_change_number_of_ctrlpts_number_based



	Description
		Changes the number of control points of a NURBS surface based on given number of points.

	Parameters
		srf  [Input]
			NURBS surface
		u_npts  [Input]
			Number of points in U
		v_npts  [Input]
			Number of points in V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_change_number_of_ctrlpts_angle_based,fz_nsrf_change_u_degree,fz_nsrf_change_v_degree

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_change_number_of_ctrlpts_number_based_func)(
	fz_nurbs_srf_ptr	*srf,
	fzrt_int 			u_npts,
	fzrt_int	 		v_npts
	);

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

	fz_nsrf_split_at_parm



	Description
		Splits a NURBS surface in U or V at the given parameter value.

	Parameters
		srf  [Input]
			NURBS surface
		parm  [Input]
			Parameter value
		is_u  [Input]
			Direction- TRUE=U, FALSE=V
		lsrf  [Result]
			NURBS surface 1
		rsrf  [Result]
			NURBS surface 1

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_split_at_parm_func)(
	fz_nurbs_srf_ptr srf,
	double parm,
	fzrt_boolean is_u,
	fz_nurbs_srf_ptr *lsrf,
	fz_nurbs_srf_ptr *rsrf
	);

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

	fz_nsrf_merge_align



	Description
		Merges two NURBS surfaces using alignment type. 
		Returns a new NURBS surface. The first surface is aligned to the second along the merged edge 
		according with the alignment indicated. If is_symmetric is TRUE, then the control points along the edge will be symmetric. 
		When use_edge is TRUE, then the symmetric plane is defined by the edge, 
		otherwise a normal to a plane is expected. This normal is NULL for the other options.

	Parameters
		lsrf  [Input]
			NURBS surface 1
		rsrf  [Input]
			NURBS surface 2
		align_type  [Input]
			alignment type when smooth surfaces is FALSE (C0, G1, C1, C2)
		is_symmetric  [Input]
			alignment of the surfaces is symmetric (TRUE) or not	(FALSE)
		use_edge  [Input]
			for the symmetric alignment use edge (TRUE) or normal to a plane (FALSE) as reference
		norm_2_plane  [Input]
			normal to  plane
		merge_srf  [Result]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_merge_smooth

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_merge_align_func)(
	fz_nurbs_srf_ptr 				lsrf,
	fz_nurbs_srf_ptr 				rsrf,
	fz_nurbs_algn_type_enum		align_type,
	fzrt_boolean				is_symmetric,
	fzrt_boolean				use_edge,
	fz_xyz_td						*norm_2_plane,
	fz_nurbs_srf_ptr 				*merge_srf
	);

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

	fz_nsrf_merge_smooth



	Description
		Merges two NURBS surfaces using smoothness value. 
		Returns a new NURBS surface. Smoothes the merged edge by manipulating the knots at the edge. 
		The Smoothness value controls the amount of smoothness applied.

	Parameters
		lsrf  [Input]
			NURBS surface 1
		rsrf  [Input]
			NURBS surface 2
		smoothness  [Input]
			amount of smoothness
		merge_srf  [Result]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_merge_align

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_merge_smooth_func)(
	fz_nurbs_srf_ptr 				lsrf,
	fz_nurbs_srf_ptr 				rsrf,
	double						smoothness,
	fz_nurbs_srf_ptr 				*merge_srf
	);

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

	fz_nsrf_swap_uv



	Description
		Swaps U and V direction of a NURBS surface.

	Parameters
		srf  [Input]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_reverse

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_swap_uv_func)(
	fz_nurbs_srf_ptr	srf
	);

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

	fz_nsrf_reverse



	Description
		Reverses a NURBS surface.

	Parameters
		srf  [Input]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_swap_uv

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_reverse_func)(
	fz_nurbs_srf_ptr	srf
	);

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

	fz_nsrf_copy



	Description
		Copies NURBS surface into another

	Parameters
		srf  [Input]
			Source NURBS surface
		copy_srf  [Result]
			Copied NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_copy_func)(
	fz_nurbs_srf_ptr	srf,
	fz_nurbs_srf_ptr	*copy_srf
	);

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

	fz_nsrf_cap



	Description
		Caps NURBS surface in the top or bottom

	Parameters
		srf  [Input]
			NURBS surface
		is_cap_start  [Input]
			Cap at start
		is_cap_end  [Input]
			Cap at end
		is_round_start  [Input]
			Round at start
		is_round_end  [Input]
			Round at end
		cap_st_ratio  [Input]
			Cap ratio at start
		cap_end_ratio  [Input]
			Cap ratio at end
		rnd_st_ratio  [Input]
			Round ratio at start
		rnd_end_ratio  [Input]
			Round ratio at end

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_cap_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_boolean	is_cap_start,
	fzrt_boolean	is_cap_end,
	fzrt_boolean	is_round_start,
	fzrt_boolean	is_round_end,
	double			cap_st_ratio,
	double			cap_end_ratio,
	double			rnd_st_ratio,
	double			rnd_end_ratio
	);

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

	fz_nsrf_make_two_srfs_compatible



	Description
		Makes two NURBS surfaces compatible

	Parameters
		srf1  [Input]
			NURBS surface 1
		srf2  [Input]
			NURBS surface 2

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_make_two_srfs_compatible_func)(
	fz_nurbs_srf_ptr	*srf1,
	fz_nurbs_srf_ptr	*srf2
	);

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

	fz_nsrf_delete



	Description
		Deletes a NURBS surface.

	Parameters
		srf  [Input]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_delete_func)(
	fz_nurbs_srf_ptr	*srf
	);

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

	fz_nsrf_sample_srf_parameter_based



	Description
		Samples NURBS surface along the parameter domain to obtain points. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value.

	Parameters
		srf  [Input]
			NURBS surface
		u_npts  [Input]
			Number of points in U
		v_npts  [Input]
			Number of points in V
		plist  [Result]
			Sample points list

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_arclength_based,fz_nsrf_sample_srf_angle_based, 
		fz_type_list_init,fz_type_list_finit,fz_type_list_count, 
		fz_type_list_get_item,fz_type_list_add_item,fz_type_list_delete_item, 
		fz_type_list_pre_allocate,fz_type_list_clear

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_parameter_based_func)(
	fz_nurbs_srf_ptr		srf,
	fzrt_int				u_npts,
	fzrt_int				v_npts,
	fz_type_list_ptr 	plist
	);

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

	fz_nsrf_sample_srf_arclength_based



	Description
		Samples NURBS surface based on arclength to obtain points. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value.

	Parameters
		srf  [Input]
			NURBS surface
		len  [Input]
			Maximum edge length
		plist  [Result]
			Sample points list
		n_upts  [Result]
			Number of points in U
		n_vpts  [Result]
			Number of points in V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_parameter_based,fz_nsrf_sample_srf_angle_based, 
		fz_type_list_init,fz_type_list_finit,fz_type_list_count, 
		fz_type_list_get_item,fz_type_list_add_item,fz_type_list_delete_item, 
		fz_type_list_pre_allocate,fz_type_list_clear

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_arclength_based_func)(
	fz_nurbs_srf_ptr		srf,
	double				len,
	fz_type_list_ptr 	plist,
	fzrt_int				*n_upts,
	fzrt_int				*n_vpts
	);

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

	fz_nsrf_sample_srf_angle_based



	Description
		Samples NURBS surface based on angular tolerance to obtain points. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value.

	Parameters
		srf  [Input]
			NURBS surface
		angtol  [Input]
			Angular tolerance
		plist  [Result]
			Sample points list
		n_upts  [Result]
			Number of points in U
		n_vpts  [Result]
			Number of points in V

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_parameter_based,fz_nsrf_sample_srf_angle_based, 
		fz_type_list_init,fz_type_list_finit,fz_type_list_count, 
		fz_type_list_get_item,fz_type_list_add_item,fz_type_list_delete_item, 
		fz_type_list_pre_allocate,fz_type_list_clear

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_angle_based_func)(
	fz_nurbs_srf_ptr		srf,
	double				angtol,
	fz_type_list_ptr 	plist,
	fzrt_int				*n_upts,
	fzrt_int				*n_vpts
	);

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

	fz_nsrf_offset_srf



	Description
		Offsets NURBS surface by the given distance. 
		The surface is offset outwards i.e. in the direction of surface normal, 
		if the distance is positive else inwards. 
		The number of control points of the offset surface would be the same as that 
		of the original surface, if use_tol is FALSE. 
		If use_tol is TRUE, the number of control points of the offset surface would be 
		calculated using angtol, the maximum normal deviation, specified in radians.

	Parameters
		srf  [Input]
			Source NURBS surface
		distance  [Input]
			Offset distance
		use_tol  [Input]
			Use angular tolerance
		angtol  [Input]
			Angular tolerance
		offset_srf  [Result]
			Offset NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_offset_srf_func)(
	fz_nurbs_srf_ptr	srf,
	double			distance,
	fzrt_boolean	use_tol,
	double			angtol,
	fz_nurbs_srf_ptr	*offset_srf
	);

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

	fz_nsrf_are_two_srfs_equal



	Description
		Checks if two NURBS surfaces are exactly the same.

	Parameters
		srf1  [Input]
			NURBS surface 1
		srf2  [Input]
			NURBS surface 2

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_boolean	 (*fz_nsrf_are_two_srfs_equal_func)(
	fz_nurbs_srf_ptr	srf1,
	fz_nurbs_srf_ptr	srf2
	);

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

	fz_nsrf_get_uv



	Description
		Returns the u,v parameters of a 3D point lying on NURBS surface within specified tolerance.

	Parameters
		srf  [Input]
			NURBS surface 1
		pt  [Input]
			Test point
		tol  [Input]
			Tolerance
		u  [Result]
			U parameter
		v  [Result]
			V parameter

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_get_uv_func)(
	fz_nurbs_srf_ptr	srf,
	fz_xyz_td			*pt,
	double 			tol,
	double			*u,
	double			*v
	);

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

	fz_nsrf_extract_isoline



	Description
		Extracts an isoline from NURBS surface in U or V at the given parameter value

	Parameters
		srf  [Input]
			NURBS surface
		parm  [Input]
			Parameter value
		is_u  [Input]
			Direction- TRUE=U, FALSE=V
		isocrv  [Result]
			NURBS curve isoline

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_get_u_npts, fz_nsrf_get_control_points,fz_nsrf_get_u_knots,fz_nsrf_get_v_knots

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_extract_isoline_func)(
	fz_nurbs_srf_ptr	srf,
	double 			parm,
	fzrt_boolean 	is_u,
	fz_nurbs_cur_ptr 	*isocrv
	);

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

	fz_nsrf_sample_srf_parameter_based2



	Description
		Samples NURBS surface along the parameter domain to obtain points. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value. 
		Optionally, the [u,v]s corresponding to the sample points are returned in the uv list, 
		which is parallel to the point list and also needs to be intialised.

	Parameters
		srf  [Input]
			NURBS surface
		n_upts  [Input]
			Number of points in U
		n_vpts  [Input]
			Number of points in V
		pt_list  [Result]
			Sample points list
		uv_list  [Result, Optional]
			Parameters[u,v] list

	Returns
		Error codes


	Availability	6.5.7.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_arclength_based2,fz_nsrf_sample_srf_angle_based2

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_parameter_based2_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int				n_upts,
	fzrt_int				n_vpts,
	fz_type_list_ptr 	pt_list,
	fz_type_list_ptr 	uv_list
	);

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

	fz_nsrf_sample_srf_arclength_based2



	Description
		Samples NURBS surface based on arclength to obtain points. 
		The points are spaced evenly along the middle of the surface in both the directions. 
		The rest of the sample points are generated based on this grid of parameter values. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value. 
		Optionally, the [u,v]s corresponding to the sample points are returned in the uv list, 
		which is parallel to the point list and also needs to be intialised.

	Parameters
		srf  [Input]
			NURBS surface
		n_upts  [Input]
			Number of points in U
		n_vpts  [Input]
			Number of points in V
		pt_list  [Result]
			Sample points list
		uv_list  [Result, Optional]
			Parameters[u,v] list

	Returns
		Error codes


	Availability	6.5.7.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_parameter_based2,fz_nsrf_sample_srf_angle_based2

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_arclength_based2_func)(
	fz_nurbs_srf_ptr	srf,
	fzrt_int				n_upts,
	fzrt_int				n_vpts,
	fz_type_list_ptr 	pt_list,
	fz_type_list_ptr 	uv_list
	);

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

	fz_nsrf_sample_srf_angle_based2



	Description
		Samples NURBS surface based on angular tolerance to obtain points. 
		The list (fz_type_list_ptr) passed in needs to be initialized before calling this function. 
		The sample points are returned in the given list row-wise. 
		That is, a row of v control points for the first u value is returned first. 
		Then, the row of v control points for the next u value. 
		Optionally, the [u,v]s corresponding to the sample points are returned in the uv list, 
		which is parallel to the point list and also needs to be intialised.

	Parameters
		srf  [Input]
			NURBS surface
		angtol  [Input]
			Angular tolerance
		pt_list  [Result]
			Sample points list
		n_upts  [Result]
			Number of points in U
		n_vpts  [Result]
			Number of points in V
		uv_list  [Result, Optional]
			Parameters[u,v] list

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_nsrf.fsl

	See Also
		fz_nsrf_sample_srf_parameter_based2,fz_nsrf_sample_srf_angle_based2

 ****************************************************************/
typedef fzrt_error_td	 (*fz_nsrf_sample_srf_angle_based2_func)(
	fz_nurbs_srf_ptr	srf,
	double				angtol,
	fz_type_list_ptr 	pt_list,
	fzrt_int				*n_upts,
	fzrt_int				*n_vpts,
	fz_type_list_ptr 	uv_list
	);

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

	fz_nsrf_fset


	FZ_NSRF_FSET_TYPE
		NURBS Surface function set UUID.

	FZ_NSRF_FSET_NAME
		NURBS Surface function set name.

	FZ_NSRF_FSET_VERSION
		NURBS Surface function set version.

	Description
		NURBS Surface Function Set

	Availability	5.0.0.0

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


#define FZ_NSRF_FSET_TYPE		"\x1b\x9a\xd3\xf0\x0e\xa1\x43\x7c\xb6\xf4\xfe\xa1\x3b\x48\x5a\xbe"


#define FZ_NSRF_FSET_NAME		"NURBS Surface functions"
#define FZ_NSRF_FSET_VERSION	FZPL_VERS_MAKE(5,0,0,0)

typedef struct
{
	fzpl_fset_prvt_data_td				prvt_data;

	fz_nsrf_get_u_degree_func								fz_nsrf_get_u_degree;
	fz_nsrf_get_v_degree_func								fz_nsrf_get_v_degree;
	fz_nsrf_get_u_npts_func								fz_nsrf_get_u_npts;
	fz_nsrf_get_v_npts_func								fz_nsrf_get_v_npts;
	fz_nsrf_get_control_points_func						fz_nsrf_get_control_points;
	fz_nsrf_get_weights_func								fz_nsrf_get_weights;
	fz_nsrf_get_ij_control_point_func						fz_nsrf_get_ij_control_point;
	fz_nsrf_get_ij_weight_func								fz_nsrf_get_ij_weight;
	fz_nsrf_get_u_knots_func								fz_nsrf_get_u_knots;
	fz_nsrf_get_v_knots_func								fz_nsrf_get_v_knots;
	fz_nsrf_get_domain_func								fz_nsrf_get_domain;
	fz_nsrf_get_closure_func								fz_nsrf_get_closure;
	fz_nsrf_set_ij_control_point_func						fz_nsrf_set_ij_control_point;
	fz_nsrf_set_ij_weight_func								fz_nsrf_set_ij_weight;
	fz_nsrf_set_u_knots_func								fz_nsrf_set_u_knots;
	fz_nsrf_set_v_knots_func								fz_nsrf_set_v_knots;
	fz_nsrf_evaluate_point_at_parm_func					fz_nsrf_evaluate_point_at_parm;
	fz_nsrf_evaluate_derivatives_at_parm_func				fz_nsrf_evaluate_derivatives_at_parm;
	fz_nsrf_create_nurbs_srf_func							fz_nsrf_create_nurbs_srf;
	fz_nsrf_insert_control_line_func						fz_nsrf_insert_control_line;
	fz_nsrf_delete_control_line_func						fz_nsrf_delete_control_line;
	fz_nsrf_insert_knot_func								fz_nsrf_insert_knot;
	fz_nsrf_delete_knot_func								fz_nsrf_delete_knot;
	fz_nsrf_change_u_degree_func							fz_nsrf_change_u_degree;
	fz_nsrf_change_v_degree_func							fz_nsrf_change_v_degree;
	fz_nsrf_change_number_of_ctrlpts_angle_based_func		fz_nsrf_change_number_of_ctrlpts_angle_based;
	fz_nsrf_change_number_of_ctrlpts_number_based_func		fz_nsrf_change_number_of_ctrlpts_number_based;
	fz_nsrf_split_at_parm_func								fz_nsrf_split_at_parm;
	fz_nsrf_swap_uv_func									fz_nsrf_swap_uv;
	fz_nsrf_reverse_func									fz_nsrf_reverse;
	fz_nsrf_copy_func										fz_nsrf_copy;
	fz_nsrf_cap_func										fz_nsrf_cap;
	fz_nsrf_make_two_srfs_compatible_func					fz_nsrf_make_two_srfs_compatible;
	fz_nsrf_delete_func									fz_nsrf_delete;
	fz_nsrf_sample_srf_parameter_based_func				fz_nsrf_sample_srf_parameter_based;
	fz_nsrf_sample_srf_arclength_based_func				fz_nsrf_sample_srf_arclength_based;
	fz_nsrf_sample_srf_angle_based_func					fz_nsrf_sample_srf_angle_based;
	fz_nsrf_offset_srf_func								fz_nsrf_offset_srf;
	fz_nsrf_are_two_srfs_equal_func						fz_nsrf_are_two_srfs_equal;
	fz_nsrf_merge_align_func								fz_nsrf_merge_align;
	fz_nsrf_merge_smooth_func								fz_nsrf_merge_smooth;
	fz_nsrf_get_uv_func									fz_nsrf_get_uv;
	fz_nsrf_extract_isoline_func							fz_nsrf_extract_isoline;
	
	

	fz_nsrf_sample_srf_parameter_based2_func			fz_nsrf_sample_srf_parameter_based2;
	fz_nsrf_sample_srf_arclength_based2_func			fz_nsrf_sample_srf_arclength_based2;
	fz_nsrf_sample_srf_angle_based2_func				fz_nsrf_sample_srf_angle_based2;

}  fz_nsrf_fset;

#ifdef __cplusplus
}
#endif

#endif
