/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_MODEL_NRBZ_API_H
#define _FORMZ_MODEL_NRBZ_API_H


#include "fz_model_core_api.h"
#include "fz_nsrf_api.h"
#include "fz_ncrv_api.h"

#ifdef __cplusplus
extern "C" {
#endif



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

	Nurbz Object


	Description
		This module contains functions to construct and manipulate Nurbz, and Trimmed Nurbz	objects in formZ.
 ****************************************************************/

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

	Curve On Surface


	Description
		This module contains functions to construct and manipulate Curve On Surface objects in formZ.
 ****************************************************************/

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

	FZ_OBJT_TYPE_NRBZ


	Description
		Identifier for the Nurbz object type.
 ****************************************************************/


#define FZ_OBJT_TYPE_NRBZ		"\x8e\xf1\x70\xc7\xdf\xc2\x41\x07\x91\x4f\x63\xc7\xb8\xe5\x67\x20"

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

	FZ_OBJT_TYPE_NCOS


	Description
		Identifier for the Curve On Nurbz object type.
 ****************************************************************/


#define FZ_OBJT_TYPE_NCOS		"\xdc\xb6\xa2\x98\x54\x97\x47\xed\x80\x61\x60\xc6\xf3\xf5\xfb\x7d"



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

	FZ_NURBS_MAX_DEGREE


	Description
		Maximum degree allowed for NURBS curves/surfaces in formZ

	Availability	6.1.1.0

 ****************************************************************/
	#define	FZ_NURBS_MAX_DEGREE			20


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

	fz_objt_nrbz_cnstr_opts_ptr


	Description
		Data structure to hold options for the construction of a nurbz object. 
		The individual fields of this type can be accessed and set via 
		fz_objt_cnstr_nrbz_opts_get and fz_objt_cnstr_nrbz_opts_set.

	Availability	5.0.0.0


	See Also
		fz_objt_cnstr_nrbz_opts_init,fz_objt_cnstr_nrbz_opts_finit_func, 
		fz_objt_cnstr_nrbz_opts_get,fz_objt_cnstr_nrbz_opts_set, 
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_nrbz_from_bndry_curves, 
		fz_objt_cnstr_nrbz_through_curves,fz_objt_cnstr_nrbz_from_uv_curves, 
		fz_objt_cnstr_nrbz_through_points

 ****************************************************************/
typedef struct nurbs_cnstr_opts_td		*fz_objt_nrbz_cnstr_opts_ptr;

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

	fz_objt_nrbz_opts_enum


	Description
		Parameter identifiers for nurbz construction options. Used for the 
		"which" argument of fz_objt_cnstr_nrbz_opts_get and fz_objt_cnstr_nrbz_opts_set.

	Members
		FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_START
			Construction - nurbz cap start. 
			Type: fzrt_boolean
			Default Value: FALSE
		FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_END
			Construction - nurbz cap end. 
			Type: fzrt_boolean
			Default Value: FALSE
		FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_SRATIO
			Construction - nurbz cap start ratio. 
			Type: double 
			Range: 0.0
			Default Value: 1.0
		FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_ERATIO
			Construction - nurbz cap end ratio. 
			Type: double
			Range: 0.0
			Default Value: 1.0
		FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_START
			Construction - nurbz round start. 
			Type: fzrt_boolean
			Default Value: FALSE
		FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_END
			Construction - nurbz round start. 
			Type: fzrt_boolean
			Default Value: FALSE
		FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_SRATIO
			Construction - nurbz round start ratio. 
			Type: double
			Range: 0.0
			Default Value: 0.5
		FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_ERATIO
			Construction - nurbz round end ratio. 
			Type: double
			Range: 0.0
			Default Value: 0.5

	Availability	5.0.0.0


	See Also
		fz_objt_cnstr_nrbz_opts_get,fz_objt_cnstr_nrbz_opts_set

 ****************************************************************/
typedef enum fz_objt_nrbz_opts_enum
{
	
	FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_START = MODEL_PARM_CSTR_START,
	FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_END,
	FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_SRATIO,
	FZ_OBJT_NRBZ_CNSTR_OPTS_CAP_ERATIO,
	FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_START,
	FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_END,
	FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_SRATIO,
	FZ_OBJT_NRBZ_CNSTR_OPTS_ROUND_ERATIO,
	
	FZ_OBJT_NRBZ_CNSTR_OPTS_MAX
} fz_objt_nrbz_opts_enum;



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

	fz_objt_nrbz_algn_type_enum


	Description
		Identifier of an alignment type. Used to identify one of the 
		four types of alignments available (CO,G1,C1,C2).

	Members
		FZ_OBJT_NRBZ_ALGN_C0
			CO alignment type
		FZ_OBJT_NRBZ_ALGN_G1
			G1 alignment type
		FZ_OBJT_NRBZ_ALGN_C1
			C1 alignment type
		FZ_OBJT_NRBZ_ALGN_C2
			C2 alignment type

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_nrbz_algn_type_enum
{
	FZ_OBJT_NRBZ_ALGN_C0 = 0,
	FZ_OBJT_NRBZ_ALGN_G1,
	FZ_OBJT_NRBZ_ALGN_C1,
	FZ_OBJT_NRBZ_ALGN_C2
	
} fz_objt_nrbz_algn_type_enum;


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

	fz_objt_nrbz_extend_type_enum


	Description
		Identifier of the direction of a surface extension. Used to identify one of the 
		three types of directions available (surface edge, control points, reference plane).

	Members
		FZ_OBJT_NRBZ_EXTND_EDGE
			Surface edge
		FZ_OBJT_NRBZ_EXTND_CTRL
			Control Points
		FZ_OBJT_NRBZ_EXTND_RFPL
			Reference Plane

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_nrbz_extend_type_enum
{
	FZ_OBJT_NRBZ_EXTND_EDGE = 0,
	FZ_OBJT_NRBZ_EXTND_CTRL,
	FZ_OBJT_NRBZ_EXTND_RFPL
	
} fz_objt_nrbz_extend_type_enum;

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

	fz_objt_cnstr_nrbz_from_nsrf



	Description
		Creates a formZ object from the given NURBS surface

	Parameters
		windex  [Input]
			project window index
		srf  [Input]
			nurbz surface
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			formZ object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_objt_from_nsrfs,fz_nsrf_create_nurbs_srf

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_nsrf_func)(
	fzrt_int					windex,
	fz_nurbs_srf_ptr			srf,
	fz_attr_refn_ptr		refn_opts,
	fz_objt_ptr			*obj
);

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

	fz_objt_cnstr_objt_from_nsrfs



	Description
		Creates a smooth object from the given array of NURBS surfaces (fz_nurbs_srf_ptr*). 
		If ignore_discont is FALSE, the NURBS surfaces are split at G1 discontinuities. 
		If stitch is FALSE, an object with multiple disjoint faces is returned. 
		This function is similar to fz_objt_cnstr_nrbz_from_nsrf, but takes 
		an array of NURBS surfaces. The resulting object is a plain object.

	Parameters
		windex  [Input]
			project window index
		srfs  [Input]
			array with NURBS surfaces
		n_srfs  [Input]
			number of NURBS surfaces in the array
			Range: 1
		ignore_discont  [Input]
			if TRUE, discontinuities in the surfaces are ignored.
		stitch  [Input]
			if TRUE, an attempt is made to stitch all faces, resulting 
			from the NURBS surfaces into a single object.
		refn_opts  [Input, Optional]
			display resolution options. For defaults see see fz_attr_refn_parm_enum.
		obj  [Result]
			formZ object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_nrbz_from_nsrf,fz_nsrf_create_nurbs_srf

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_objt_from_nsrfs_func)(
	fzrt_int 				windex,
	fz_nurbs_srf_ptr		*srfs,
	fzrt_int				n_srfs,
	fzrt_boolean		ignore_discont,
	fzrt_boolean		stitch,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_opts_init



	Description
		Allocates nurbz construction (capping and rounding) options. 
		Fills all options with default values.

	Parameters
		windex  [Input]
			project window index
		opts  [Result]
			construction options

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_opts_finit,fz_objt_cnstr_nrbz_opts_get,fz_objt_cnstr_nrbz_opts_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_nrbz_opts_init_func) (
	fzrt_int				windex,
	fz_objt_nrbz_cnstr_opts_ptr	*opts
	);

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

	fz_objt_cnstr_nrbz_opts_get



	Description
		Gets the value of a nurbz construction option. Note that 
		only those values in fz_objt_nrbz_opts_enum are accepted 
		which are tagged for the construction options. See 
		fz_objt_nrbz_opts_enum for details.

	Parameters
		windex  [Input]
			project window index
		opts  [Input]
			construction options
		which  [Input]
			parameter identifier
		data  [Result]
			parameter data

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_objt_cnstr_nrbz_opts_finit,fz_objt_cnstr_nrbz_opts_init,fz_objt_cnstr_nrbz_opts_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_nrbz_opts_get_func) (
	fzrt_int					windex,
	fz_objt_nrbz_cnstr_opts_ptr		opts,
	fz_objt_nrbz_opts_enum	which,
	fz_type_td				*data
	);

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

	fz_objt_cnstr_nrbz_opts_set



	Description
		Sets the value of a nurbz construction option. Note that 
		only those values in fz_objt_nrbz_opts_enum are accepted 
		which are tagged for the construction options. See 
		fz_objt_nrbz_opts_enum for details.

	Parameters
		windex  [Input]
			project window index
		opts  [Input]
			construction options
		which  [Input]
			parameter identifier
		data  [Input]
			parameter data

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_objt_cnstr_nrbz_opts_finit,fz_objt_cnstr_nrbz_opts_init,fz_objt_cnstr_nrbz_opts_set

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_nrbz_opts_set_func) (
	fzrt_int					windex,
	fz_objt_nrbz_cnstr_opts_ptr		opts,
	fz_objt_nrbz_opts_enum	which,
	fz_type_td				*data
	);

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

	fz_objt_cnstr_nrbz_opts_finit



	Description
		Frees nurbz construction options. The opts pointer 
		is deallocated and returned back as NULL.

	Parameters
		windex  [Input]
			project window index
		opts  [Input, Result]
			construction options (will become NULL)

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_objt_cnstr_nrbz_opts_init,fz_objt_cnstr_nrbz_opts_init,fz_objt_cnstr_nrbz_opts_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_nrbz_opts_finit_func) (
	fzrt_int				windex,
	fz_objt_nrbz_cnstr_opts_ptr	*opts
	);

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

	fz_objt_cnstr_nrbz_from_cpts



	Description
		Creates a nurbz object from the given control points. The control points 
		must be arranged in a grid format. Weights, knots, u and v degrees, 
		closure information can also be specified. 

		The control points are contained in an array of fz_xyz_td. The v index varies first. 
		That is, a row of v control points for the first u value is found first. Then, the row of 
		v control points for the next u value. If the surface is rational in either parameter, 
		it is considered a rational surface and the associated weights are in the array of doubles. 
		The values in this array are in the same sequential order as the control points. 

		U degree must be greater than zero and must be less than the number of U control points. 
		V degree must be greater than zero and must be less than the number of V control points.

	Parameters
		windex  [Input]
			project window index
		cpts  [Input]
			array of control points
		weights  [Input, Optional]
			array of weights
		u_npts  [Input]
			# of pts in the u direction
		u_degree  [Input]
			degree in the u direction
		u_closed  [Input]
			is the surface closed in the u direction
		u_knots  [Input, Optional]
			knots in the u direction 
			If specified, this array must contain 
			(u_npts+u_degree+1) values
		v_npts  [Input]
			# of pts in the v direction
		v_degree  [Input]
			degree in the v direction
		v_closed  [Input]
			is the surface closed in the v direction
		v_knots  [Input, Optional]
			knots in the v direction 
			If specified, this array must contain 
			(v_npts+v_degree+1) values
		nrbz_opts  [Input, Optional]
			capping and rounding options
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_bndry_curves,fz_objt_cnstr_nrbz_through_curves,fz_objt_cnstr_nrbz_from_uv_curves,fz_objt_cnstr_nrbz_through_points, 
		fz_nsrf_create_nurbs_srf

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_cpts_func)(
	fzrt_int 				windex,
	fz_xyz_td				*cpts,
	double				*weights,
	fzrt_int				u_npts,
	fzrt_int				u_degree,
	fzrt_boolean		u_closed,
	double				*u_knots,
	fzrt_int				v_npts,
	fzrt_int				v_degree,
	fzrt_boolean		v_closed,
	double				*v_knots,
	fz_objt_nrbz_cnstr_opts_ptr	nrbz_opts,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_bndry_curves



	Description
		Creates a nurbz object from the given boundary curves. The number of 
		boundary curves must be 2 or 3 or 4. When it is 2, a ruled surface 
		is created between the two curves. When it is 3 or 4, a surface is created 
		that covers the space bounded by the curves. Curves do not have to 
		intersect.

	Parameters
		windex  [Input]
			project window index
		bndry_crvs  [Input]
			array of boundary curve objects
		n_crvs  [Input]
			number of curves
			Range: 2
		is_deg_from_src  [Input]
			if TRUE, the surface will inherit 
			the degree from the boundary curves. 
			If FALSE, the surface's degrees must be specified in 
			the next two parameters.
		u_degree  [Input]
			degree in the u direction
		v_degree  [Input]
			degree in the v direction
		nrbz_opts  [Input, Optional]
			capping and rounding options
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_nrbz_through_curves,fz_objt_cnstr_nrbz_from_uv_curves,fz_objt_cnstr_nrbz_through_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_bndry_curves_func)(
	fzrt_int 				windex,
	fz_objt_ptr		*bndry_crvs,
	fzrt_int				n_crvs,
	fzrt_boolean		is_deg_from_src,
	fzrt_int				u_degree,
	fzrt_int				v_degree,
	fz_objt_nrbz_cnstr_opts_ptr nrbz_opts,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_through_curves



	Description
		Creates a nurbz object by lofting the given curves. There are 
		two types of lofting. Loose lofting gets the control points 
		from the curves to build the surface and the surface may not 
		pass through all the curves. Tight lofting calculates the control 
		points of the surface so that the surface passes through all 
		the curves. The type of lofting can be specified in the is_tight parameter.

	Parameters
		windex  [Input]
			project window index
		loft_crvs  [Input]
			array of curve objects
		n_crvs  [Input]
			number of curves
			Range: 2
		is_tight  [Input]
			if TRUE, tight lofting is done 
			if FALSE, loose lofting is done
		is_deg_from_src  [Input]
			if TRUE, the surface will 
			inherit the degree from the input curves. 
			If FALSE, the surface's degrees must be 
			specified in the next two parameters.
		u_degree  [Input]
			degree in the u direction
		v_degree  [Input]
			degree in the v direction
		is_depth_closed  [Input]
			if TRUE, a closed surface is 
			created from the curves
		adjust_dir  [Input]
			if TRUE, curves will be aligned 
			to avoid creating a twisted surface
		nrbz_opts  [Input, Optional]
			capping and rounding options
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_nrbz_from_bndry_curves,fz_objt_cnstr_nrbz_from_uv_curves,fz_objt_cnstr_nrbz_through_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_through_curves_func)(
	fzrt_int 				windex,
	fz_objt_ptr		*loft_crvs,
	fzrt_int				n_crvs,
	fzrt_boolean		is_tight,
	fzrt_boolean		is_deg_from_src,
	fzrt_int				u_degree,
	fzrt_int				v_degree,
	fzrt_boolean		is_depth_closed,
	fzrt_boolean		adjust_dir,
	fz_objt_nrbz_cnstr_opts_ptr nrbz_opts,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_uv_curves



	Description
		Creates a nurbz object that interpolates the bidirectional network of curves. The 
		resulting surface may have lot of control points which could be reduced by 
		using lower values for the accuracy parameter.

	Parameters
		windex  [Input]
			project window index
		u_crvs  [Input]
			array of curve objects in the u direction
		n_ucrvs  [Input]
			number of curves in the u direction
		v_crvs  [Input]
			array of curve objects in the v direction
		n_vcrvs  [Input]
			number of curves in the v direction
		accuracy  [Input]
			value between 0.0 and 1.0. Higher values 
			produce surfaces that passes through the curves more 
			closely and produce more control points.
		is_deg_from_src  [Input]
			if TRUE, the surface will inherit the 
			degree from the input curves. 
			If FALSE, the surface's degrees must be specified in the 
			next two parameters.
		u_degree  [Input]
			degree in the u direction
		v_degree  [Input]
			degree in the v direction
		nrbz_opts  [Input, Optional]
			capping and rounding options
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cpts,fz_objt_cnstr_nrbz_from_bndry_curves,fz_objt_cnstr_nrbz_through_curves,fz_objt_cnstr_nrbz_through_points

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_uv_curves_func)(
	fzrt_int 				windex,
	fz_objt_ptr		*u_crvs,
	fzrt_int				n_ucrvs,
	fz_objt_ptr		*v_crvs,
	fzrt_int				n_vcrvs,
	double				accuracy,
	fzrt_boolean		is_deg_from_src,
	fzrt_int				u_degree,
	fzrt_int				v_degree,
	fz_objt_nrbz_cnstr_opts_ptr nrbz_opts,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_through_points



	Description
		Creates a nurbz object that passes through the given points that are 
		arranged in a grid format.

		The 3D points are contained in an array of fz_xyz_td. The v index varies first. 
		That is, a row of v points for the first u value is found first. Then, the row of 
		v points for the next u value.

		U degree must be greater than zero and must be less than the number of U points. 
		V degree must be greater than zero and must be less than the number of V points.

	Parameters
		windex  [Input]
			project window index
		points  [Input]
			array of 3D grid points
		u_npts  [Input]
			number of points in the u direction
			Range: 1
		u_degree  [Input]
			degree in the u direction
			Range: 1
		u_closed  [Input]
			is the surface closed in the u direction
		v_npts  [Input]
			number of points in the v direction
			Range: 1
		v_degree  [Input]
			degree in the v direction
			Range: 1
		v_closed  [Input]
			is the surface closed in the v direction
		nrbz_opts  [Input, Optional]
			capping and rounding options
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_bndry_curves,fz_objt_cnstr_nrbz_through_curves,fz_objt_cnstr_nrbz_from_uv_curves,fz_objt_cnstr_nrbz_from_cpts

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_through_points_func)(
	fzrt_int 				windex,
	fz_xyz_td				*points,
	fzrt_int				u_npts,
	fzrt_int				u_degree,
	fzrt_boolean		u_closed,
	fzrt_int				v_npts,
	fzrt_int				v_degree,
	fzrt_boolean		v_closed,
	fz_objt_nrbz_cnstr_opts_ptr nrbz_opts,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_cube



	Description
		Creates a nurbz object from a cube primitive object.

	Parameters
		windex  [Input]
			project window index
		cube_obj  [Input]
			Cube object
		refn_opts  [Input, Optional]
			refinement options
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_from_cyln,fz_objt_cnstr_nrbz_from_cone,fz_objt_cnstr_nrbz_from_sphr, fz_objt_cnstr_nrbz_from_tors

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_cube_func)(
	fzrt_int				windex,
	fz_objt_ptr		cube_obj,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj);

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

	fz_objt_cnstr_nrbz_from_cone



	Description
		Creates a nurbz object from a cone primitive object.

	Parameters
		windex  [Input]
			project window index
		cone_obj  [Input]
			Cone object
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz.fsl
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz_prim.fsl

	See Also
		fz_objt_cnstr_nrbz_from_cyln,fz_objt_cnstr_nrbz_from_cube,fz_objt_cnstr_nrbz_from_sphr, fz_objt_cnstr_nrbz_from_tors

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_cone_func)(
	fzrt_int		 		windex,
	fz_objt_ptr		cone_obj,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_cyln



	Description
		Creates a nurbz object from a cylinder primitive object.

	Parameters
		windex  [Input]
			project window index
		cyln_obj  [Input]
			Cylinder object
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz.fsl
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz_prim.fsl

	See Also
		fz_objt_cnstr_nrbz_from_cone,fz_objt_cnstr_nrbz_from_cube,fz_objt_cnstr_nrbz_from_sphr, fz_objt_cnstr_nrbz_from_tors

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_cyln_func)(
	fzrt_int		 		windex,
	fz_objt_ptr		cyln_obj,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_sphr



	Description
		Creates a nurbz object from a sphere primitive object.

	Parameters
		windex  [Input]
			project window index
		sphr_obj  [Input]
			Sphere object
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz.fsl
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz_prim.fsl

	See Also
		fz_objt_cnstr_nrbz_from_cone,fz_objt_cnstr_nrbz_from_cube,fz_objt_cnstr_nrbz_from_cyln, fz_objt_cnstr_nrbz_from_tors

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_sphr_func)(
	fzrt_int				windex,
	fz_objt_ptr		sphr_obj,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_nrbz_from_tors



	Description
		Creates a nurbz object from a torus primitive object.

	Parameters
		windex  [Input]
			project window index
		tors_obj  [Input]
			Torus object
		obj  [Result]
			nurbz object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz.fsl
		../../../../Scripts/Samples/Utilities/util_objt_cnstr_nrbz_prim.fsl

	See Also
		fz_objt_cnstr_nrbz_from_cone,fz_objt_cnstr_nrbz_from_cube,fz_objt_cnstr_nrbz_from_cyln, fz_objt_cnstr_nrbz_from_sphr

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_from_tors_func)(
	fzrt_int				windex,
	fz_objt_ptr		tors_obj,
	fz_objt_ptr		*obj
	);

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

	fz_objt_edit_nrbz_change_degree



	Description
		Changes the degree of a nurbz surface object. 
		If keep_shape is TRUE, the shape of surface is preserved by changing 
		the number of control points, if necessary. 
		If -1 is passed for the new degree, then the degree in the corresponding 
		direction is left unchanged.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz surface object
		new_degree_u  [Input]
			new degree in U
		new_degree_v  [Input]
			new 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_objt_edit_nrbz.fsl

	See Also
		fz_objt_edit_nrbz_change_ctrlpts_by_number,fz_objt_edit_nrbz_change_ctrlpts_by_curvature

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_change_degree_func)(
	fzrt_int				windex,
	fz_objt_ptr		srf_obj,
	fzrt_int				new_degree_u,
	fzrt_int				new_degree_v,
	fzrt_boolean		keep_shape
	);

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

	fz_objt_edit_nrbz_change_ctrlpts_by_number



	Description
		Rebuilds a nurbz surface object with the requested number of control points. 
		If -1 is passed for the new number of control points, then the number of control points 
		in the corresponding direction is left unchanged.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz surface object
		num_cpts_u  [Input]
			new number of control points in U
		num_cpts_v  [Input]
			new number of control points in V

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_change_degree,fz_objt_edit_nrbz_change_ctrlpts_by_curvature

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_change_ctrlpts_by_number_func)(
	fzrt_int				windex,
	fz_objt_ptr		srf_obj,
	fzrt_int				num_cpts_u,
	fzrt_int				num_cpts_v
	);

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

	fz_objt_edit_nrbz_change_ctrlpts_by_curvature



	Description
		Rebuilds a nurbz surface object with the requested maximum normal deviation.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz surface object
		max_norm_tol  [Input]
			Maximum normal deviation requested

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_change_degree,fz_objt_edit_nrbz_change_ctrlpts_by_number

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_change_ctrlpts_by_curvature_func)(
	fzrt_int				windex,
	fz_objt_ptr		srf_obj,
	double				max_norm_tol
	);

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

	fz_objt_edit_nrbz_swap_uv



	Description
		Swaps the U and V directions of  a nurbz surface.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz surface object

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_objt_edit_nrbz_change_degree,fz_objt_edit_nrbz_change_ctrlpts_by_number

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_swap_uv_func)(
	fzrt_int				windex,
	fz_objt_ptr		srf_obj
	);

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

	fz_objt_edit_nrbz_trim_minimise



	Description
		Minimizes the control extents of a Trimmed nurbz surface object.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz surface object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_change_degree,fz_objt_edit_nrbz_change_ctrlpts_by_number

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_trim_minimise_func)(
	fzrt_int				windex,
	fz_objt_ptr		srf_obj
	);

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

	fz_objt_edit_nrbz_blend



	Description
		Blends two nurbz surface objects along two specified edges. 
		The objects passed in must be nurbz objects without any trimming. 
		returns a new nurbz surface object.

	Parameters
		windex  [Input]
			project window index
		srf_obj1  [Input]
			nurbz object #1
		srf_obj2  [Input]
			nurbz object #2
		which_edge1  [Input]
			edge identifier of source object #1
		which_edge2  [Input]
			edge identifier of source object #2
		align_type  [Input]
			alignment type  (C0, G1, C1, C2)
		degree  [Input]
			degree of the new nurbz surface
		new_obj  [Result]
			new object

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- source objects passed in are not 
		nurbz objects or are nurbz objects but are trimmed


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_attach,fz_objt_edit_nrbz_extend_by_distance

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_blend_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj1,
	fz_objt_ptr				srf_obj2,
	fz_nsrf_which_edge_enum		which_edge1,
	fz_nsrf_which_edge_enum		which_edge2,
	fz_objt_nrbz_algn_type_enum	align_type,
	fzrt_int						degree,
	fz_objt_ptr				*new_obj
);



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

	fz_nsrf_attach_point_enum


	Description
		Identifier of a nurbz surface match point. Used to identify which point of the edges 
		to use when matching surfaces.

	Members
		FZ_NSRF_ATTACH_START
			attach with first point of edge
		FZ_NSRF_ATTACH_END
			attach with last point of edge
		FZ_NSRF_ATTACH_MID
			attach with mid point of edge
		FZ_NSRF_ATTACH_CUSTOM
			attach with custom point provided by user

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_nsrf_attach_point_enum
{
	FZ_NSRF_ATTACH_START = 0,
	FZ_NSRF_ATTACH_END,
	FZ_NSRF_ATTACH_MID,
	FZ_NSRF_ATTACH_CUSTOM
	
}fz_nsrf_attach_point_enum;

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

	fz_objt_edit_nrbz_attach



	Description
		Attaches 2 nurbz surface objects. The attachment takes place from an edge of the first surface 
		to an edge of the second surface, either by moving the first surface or by stretching it. 
		The objects passed in must be nurbz objects without any trimming. 
		Returns the updated first surface object.

	Parameters
		windex  [Input]
			project window index
		srf_obj1  [Input, Result] nurbz object #1
			
		srf_obj2  [Input]
			nurbz object #2
		which_edge1  [Input]
			edge identifier of source object #1
		which_edge2  [Input]
			edge identifier of source object #2
		match_pont1  [Input]
			match point identifier of which_edge1
		match_pont2  [Input]
			match point identifier of which_edge2
		custm_pnt1  [Input]
			custom point for which_edge1
		custm_pnt2  [Input]
			custom point for which_edge2
		align_type  [Input]
			alignment type  (C0, G1, C1, C2)
		do_move  [Input]
			attachment type  (move = TRUE, stretch = FALSE)

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- source objects passed in are not 
		nurbz objects or are nurbz objects but are trimmed


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_blend,fz_objt_edit_nrbz_extend_by_distance

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_attach_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj1,
	fz_objt_ptr				srf_obj2,
	fz_nsrf_which_edge_enum		which_edge1,
	fz_nsrf_which_edge_enum		which_edge2,
	fz_nsrf_attach_point_enum		match_pont1,
	fz_nsrf_attach_point_enum		match_pont2,
	fz_xyz_td						*custm_pnt1,
	fz_xyz_td						*custm_pnt2,
	fz_objt_nrbz_algn_type_enum	align_type,
	fzrt_boolean				do_move
);
	

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

	fz_objt_edit_nrbz_extend_by_distance



	Description
		Extends a nurbz surface object by a specified distance in the direction 
		specified : Surface edge, Control Points or  plane. When the  plane 
		option is active, a normal to a plane is expected. This normal is NULL for the other options. 
		The object passed in must be a nurbz object without any trimming. 
		Returns a new nurbz surface object.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		which_edge  [Input]
			edge identifier of source object
		align_type  [Input]
			alignment type  (C0, G1, C1, C2)
		distance  [Input]
			extension distance
		direction  [Input]
			extension direction
		norm_2_plane  [Input]
			normal to  plane
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_blend,fz_objt_edit_nrbz_attach

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_extend_by_distance_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fz_nsrf_which_edge_enum			which_edge,
	fz_objt_nrbz_algn_type_enum		align_type,
	double							distance,
	fz_objt_nrbz_extend_type_enum		direction,
	fz_xyz_td							*norm_2_plane,
	fz_objt_ptr					*new_obj
);


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

	fz_objt_edit_nrbz_merge_align



	Description
		Merges two nurbz surface objects that have a matched edge into a single new nurbz object. 
		The object passed in must be a nurbz object without any trimming. 
		Returns a new nurbz surface object. 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
		windex  [Input]
			project window index
		srf_obj1  [Input]
			nurbz object #1
		srf_obj2  [Input]
			nurbz object #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
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_merge_smooth

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_merge_align_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj1,
	fz_objt_ptr				srf_obj2,
	fz_objt_nrbz_algn_type_enum	align_type,
	fzrt_boolean				is_symmetric,
	fzrt_boolean				use_edge,
	fz_xyz_td						*norm_2_plane,
	fz_objt_ptr				*new_obj
);


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

	fz_objt_edit_nrbz_merge_smooth



	Description
		Merges two nurbz surface objects that have a matched edge into a single new nurbz object. 
		The object passed in must be a nurbz object without any trimming. 
		Returns a new nurbz surface object. Smoothes the merged edge by manipulating the knots at the edge. 
		The Smoothness value controls the amount of smoothness applied.

	Parameters
		windex  [Input]
			project window index
		srf_obj1  [Input]
			nurbz object #1
		srf_obj2  [Input]
			nurbz object #2
		smoothness  [Input]
			amount of smoothness
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_merge_align

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_merge_smooth_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj1,
	fz_objt_ptr				srf_obj2,
	double						smoothness,
	fz_objt_ptr				*new_obj
);

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

	fz_objt_cnstr_nrbz_trimmed_map



	Description
		Creates a Trimmed nurbz object by mapping an array of curve objects onto the 
		parameter space of a nurbz object. 
		plane_rot is a zyx rotation of the work coordinate system which orients all the 
		curves with reference to the nurbz surface

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		n_crv_obj  [Input]
			number of trim curve objects
		crv_obj  [Input]
			array of trim curve objects
		map_size  [Input]
			Maximum parameter space size %
			Range: 0.0
		make_holes  [Input]
			TRUE: trim curves enclose holes 
			FALSE: trim curves enclose surface
		plane_rot  [Input]
			zyx rotation of plane (Optional)
		absolute_uv  [Input]
			switch to use absolute parameter values
		new_obj  [Result]
			new object

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- source objects passed in are not 
		nurbz objects or are nurbz objects but are trimmed


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_trimmed_map

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_trimmed_map_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fzrt_int							n_crv_obj,
	fz_objt_ptr					*crv_obj,
	double							map_size,
	fzrt_boolean					make_holes,
	fz_xyz_td							*plane_rot,
	fzrt_boolean				absolute_uv,
	fz_objt_ptr					*new_obj
	);

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

	fz_objt_cnstr_nrbz_trimmed_sketch



	Description
		Creates a Trimmed nurbz object by sketching an array of points 
		in parameter space on a nurbz object.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		n_pcrv_pts  [Input]
			number of parameter space points
		pcrv_pts  [Input]
			array of parameter space points
		closed  [Input]
			closed TRUE/FALSE
		vline  [Input]
			TRUE: sketch vector line 
			FALSE: sketch spline curve
		make_holes  [Input]
			TRUE: trim curves enclose holes 
			FALSE: trim curves enclose surface
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_trimmed_sketch

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_trimmed_sketch_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fzrt_int							n_pcrv_pts,
	fz_xy_td							*pcrv_pts,
	fzrt_boolean					closed,
	fzrt_boolean					vline,
	fzrt_boolean					make_holes,
	fz_objt_ptr					*new_obj
	);

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

	fz_objt_cnstr_nrbz_curve_on_surf_map



	Description
		Creates a Curve On nurbz object by mapping a curve object onto the 
		parameter space of a nurbz object. 
		plane_rot is a zyx rotation of the work coordinate system which orients the 
		curve with reference to the nurbz surface

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		n_crv_obj  [Input]
			number of trim curve objects
		crv_obj  [Input]
			array of trim curve objects
		map_size  [Input]
			Maximum parameter space size %
			Range: 0.0
		plane_rot  [Input]
			zyx rotation of plane (Optional)
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_curve_on_surf_sketch

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_curve_on_surf_map_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fzrt_int							n_crv_obj,
	fz_objt_ptr					*crv_obj,
	double							map_size,
	fz_xyz_td							*plane_rot,
	fz_objt_ptr					*new_obj
	);

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

	fz_objt_cnstr_nrbz_curve_on_surf_sketch



	Description
		Creates a Curve On nurbz object by sketching an array of points 
		in parameter space on a nurbz object.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		n_pcrv_pts  [Input]
			number of parameter space points
		pcrv_pts  [Input]
			array of parameter space points
		closed  [Input]
			closed TRUE/FALSE
		vline  [Input]
			TRUE: sketch vector line 
			FALSE: sketch spline curve
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_cnstr_nrbz_curve_on_surf_map

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_curve_on_surf_sketch_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fzrt_int							n_pcrv_pts,
	fz_xy_td							*pcrv_pts,
	fzrt_boolean					closed,
	fzrt_boolean					vline,
	fz_objt_ptr					*new_obj
	);

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

	fz_objt_edit_nrbz_untrim



	Description
		Untrims a trimming curve of a Trimmed nurbz object. 
		If the trimming curve to be untrimmed is an outer trimming curve, 
		the parameter 'remove_outer' if TRUE removes it else restores the 
		control extents of the underlying nurbz surface.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		n_crv  [Input]
			number of curve indices
		crv_indx  [Input]
			array of curve indices
		remov_outer  [Input]
			TRUE: remove outer trimming curve 
			FALSE: restore control extents
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_untrim_all

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_untrim_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fzrt_int							n_crv,
	fzrt_int							*crv_indx,
	fzrt_boolean					remov_outer,
	fz_objt_ptr					*new_obj
	);
	
/****************************************************************

	fz_objt_edit_nrbz_untrim_all



	Description
		Untrims all the trimming curves of a Trimmed nurbz object. 
		The resulting object is a nurbz object.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_untrim

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_untrim_all_func)(
	fzrt_int 							windex,
	fz_objt_ptr					srf_obj,
	fz_objt_ptr					*new_obj
	);

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

	fz_objt_edit_nrbz_split_at_point



	Description
		Splits a surface in either U or V or in both U and V simultaneously at the split point. The 
		resulting surfaces will have the same degree as the original surface in both U and V.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		split_pnt  [Input]
			xyz split point
		u_dir  [Input]
			split in U if TRUE
		v_dir  [Input]
			split in V if TRUE
		ent_list  [Result]
			list of nurbz object pointers

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_split_at_interval

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_split_at_point_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj,
	fz_xyz_td						*split_pnt,
	fzrt_boolean				u_dir,
	fzrt_boolean				v_dir,
	fz_enty_list_ptr 			ent_list
	);

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

	fz_objt_edit_nrbz_split_at_interval



	Description
		Splits a surface in either U or V or in both U and V simultaneously at intervals. The 
		resulting surfaces will have the same degree as the original surface in both U and V.

	Parameters
		windex  [Input]
			project window index
		srf_obj  [Input]
			nurbz object
		nu_interval  [Input]
			intervals number in U
		nv_interval  [Input]
			intervals number in V
		ent_list  [Result]
			list of nurbz object pointers

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_edit_nrbz_split_at_point

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_nrbz_split_at_interval_func)(
	fzrt_int 						windex,
	fz_objt_ptr				srf_obj,
	fzrt_int						nu_interval,
	fzrt_int						nv_interval,
	fz_enty_list_ptr 			ent_list
	);


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

	fz_objt_get_nsrf



	Description
		Allocates and sets the NURBS surface from a formZ nurbz object. 
		This is the opposite of fz_objt_set_nsrf. Both functions 
		can be used to modify a nurbZ object. First the generic 
		NURBS is created and extracted with fz_objt_get_nsrf. 
		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 object with fz_objt_set_nsrf and is deleted 
		with fz_nsrf_delete.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			formZ object
		srf  [Result]
			NURBS surface

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_nsrf_create_nurbs_srf,fz_objt_set_nsrf

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_get_nsrf_func)(
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fz_nurbs_srf_ptr	*srf
	);

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

	fz_objt_set_nsrf



	Description
		Uses the given nurbs surface as the underlying NURBS of the 
		nurbz object passed in. The object must be a formZ 
		"nurbZ" object type. 
		This is the opposite of fz_objt_get_nsrf. Both functions 
		can be used to modify a nurbZ object. First the generic 
		NURBS is created and extracted with fz_objt_get_nsrf. 
		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 object with fz_objt_set_nsrf and is deleted 
		with fz_nsrf_delete.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			formZ object
		srf  [Input]
			NURBS surface

	Returns
		Error codes


	Availability	6.0.0.0


	See Also
		fz_nsrf_create_nurbs_srf,fz_objt_get_nsrf

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_set_nsrf_func)(
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fz_nurbs_srf_ptr	srf
	);

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

	fz_objt_cnstr_nrbz_trimmed_curves



	Description
		Creates a nurbz object from given NURBS surface and trims by 
		given parameter space curves.

	Parameters
		windex  [Input]
			project window index
		srf  [Input]
			nurbz surface
		n_trim_crvs  [Input]
			number of trim curves
		trim_crvs  [Input]
			array of trim curves
		first_is_periphery  [Input]
			indicates first trim curve is periphery
		refn_opts  [Input, Optional]
			refinement options
		new_obj  [Result]
			new object

	Returns
		Error codes


	Availability	8.5.3.0

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

	See Also
		fz_objt_cnstr_nrbz_trimmed_curves

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_nrbz_trimmed_curves_func)(
	fzrt_int 				windex,
	fz_nurbs_srf_ptr		srf,
	fzrt_int				n_trim_crvs,
	fz_nurbs_cur_ptr		*trim_crvs,
	fzrt_boolean			first_is_periphery,
	fz_attr_refn_ptr		refn_opts,
	fz_objt_ptr				*new_obj
	);


#ifdef __cplusplus
}

#endif

#endif
