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

	formZ by autodessys, Inc.
	Copyright c 1994 autodessys, Inc.  All rights reserved.
	
	
	File :	fz_objt_api.h
	
	By :	David E. Kropp
	
	Created on :  		16 September 1994
	Last Updated on :  	16 September 1994
	
	Description :	
					
***************************************************************************/

#ifndef __FORMZ_MODEL_API_H
#define __FORMZ_MODEL_API_H 1

#ifdef __cplusplus
extern "C" {
#endif

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

	@module

	@desc	formZ object creation, editing and analysis functions.   These functions allow one to
			create objects, manipulate them, edit their parameters, and delete them.  Both Smooth and Facetted objects,
			and parametric, controlled, and plain objects have functions available.


	@toc	modl_cnstr_edit

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

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

	@module

	@desc	formZ plain object construction functions.  These functions provide many different ways
			to construct plain objects in formZ.  For example, one can construct a plain object through
			skinning, or unfolding.

	@toc	modl_cnstr

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

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

	@module

	@desc	formZ object editing functions.  These functions provide many different operations that
			can be performed to edit objects.  For example, boolean operations, deformations, cloning,
			sectioning, and transformations are a few of the editing operations available.

	@toc	modl_edit

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


#include "fz_api.h"					/* TAH 10/24/03 */
#include "fzpl_plugin.h"

#include "fz_layr_api.h"
#include "fz_grup_api.h"
#include "fz_symb_api.h"
#include "fz_math_api.h"
#include "fz_type_api.h"
#include "fz_model_core_api.h"
#include "fz_objt_refn_api.h"
#include "fz_objt_revl_api.h"
#include "fz_objt_helx_api.h"
#include "fz_objt_swep_api.h"
#include "fz_objt_spid_api.h"
#include "fz_objt_scrw_api.h"
#include "fz_objt_prim_api.h"
#include "fz_objt_stair_api.h"
#include "fz_objt_plin_api.h"
#include "fz_objt_ecdb_api.h"
#include "fz_objt_meta_api.h"
#include "fz_objt_text_api.h"
#include "fz_objt_nrbz_api.h"
#include "fz_objt_ncrv_api.h"
#include "fz_objt_qsub_api.h"
#include "fz_objt_tsub_api.h"
#include "fz_objt_dspl_api.h"
#include "fz_objt_frnd_api.h"			/* PVH 10/15/03 */
#include "fz_objt_ptch_api.h"
#include "fz_objt_symb_api.h"
#include "fz_objt_loft_api.h"
#include "fz_objt_alys_api.h"
#include "fz_objt_blend_api.h"
#include "fz_objt_srnd_api.h"
#include "fz_objt_filt_api.h"
#include "fz_objt_otop_api.h"			/* SPG 10/01/03 */
#include "fz_objt_dswp_api.h"
#include "fz_nsrf_api.h"
#include "fz_ncrv_api.h"
#include "fz_objt_surf_api.h"			/* PVH 08/05/04 */
#include "fz_proj_api.h"				/* MJB 10/12/04 */
#include "fz_objt_bend_api.h"			/* PVH 03/15/05 */
#include "fz_objt_morf_api.h"
#include "fz_objt_sloft_api.h"			/* PVH 03/13/06 */
#include "fz_objt_refo_api.h"
#include "fz_rmtl_api.h"
#include "fz_objt_subd_api.h"
#include "fz_objt_poly_api.h"
#include "fz_objt_gend_api.h"			/* JWR 08/27/15 */


/********************************************************************************************************
	@gdef		
	@desc	Unique identifier for the formz Object Data
	@avail	7.0.0.0
*********************************************************************************************************/
#define FZ_OBJT_DATA_UUID "\xaa\x07\x64\x99\xc9\xa5\x4b\xac\x9d\x14\xb8\x4a\xc4\x26\xf4\x75"


/************************************************************************
											
	@fsfunc_t
	
	@desc		Assigns the system default refinement attribute to an object.
	
	@return		Error codes
				FZRT_BAD_PARAM_ERROR				bad parameter
				<any>								passed up from attr manager
	
	@avail		5.0.0.0

	@exfile		

 	@see

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_attr_set_deflt_refn_opt_func) (	
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_ptr		obj		/* @parm <in> | object			*/
	);

/* FINAL MODELING API'S */

/* OBJT_PARM_NONE */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the plain object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_PLAIN		"\x9c\xa7\x4b\x8d\xfc\xb9\x43\x15\xbd\x27\x0f\xa1\xe8\x5c\x7c\x29"	


/************************************************************************
	PROJECT MANAGEMENT
*************************************************************************/


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

	@fsfunc_t
	
	@desc		Adds a new object to the project's object list.
				When first created, all objects are temporary.
				fz_objt_add_objt_to_project needs to be called with
				the new object for it to show up in the Objects palette.
				It will also enable undo's for newly created objects
				and make sure the new objects are drawn properly in the
				project windows.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@exfile		

	@toc		modl_util
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_add_objt_to_project_func) (
	fzrt_int			windex,	/* @parm	<in> | project window index */
	fz_objt_ptr	obj		/* @parm	<in> | object		*/
	);

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

	@type

	@desc	data structure to hold options for meshing an object.
			This type is used to pass additional construction options to the
			function fz_objt_edit_mesh_face,fz_objt_edit_mesh_object and fz_objt_cnstr_terrain. 
			The individual fields of this type can be accessed and set via 
			fz_objt_mesh_opts_get and fz_objt_mesh_opts_set.
			
	@avail	5.0.0.0
	
	@see	<auto>
	
	@exfile	util_objt_meshes.fsl

	@toc	modl_edit

*********************************************************************************************************/
typedef struct	mesh_opts_td	*fz_objt_mesh_opts_ptr;	


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

	@enum

	@desc	Parameter identifiers for the meshing options. Used for the
			"which" argument of fz_objt_mesh_opts_get and fz_objt_mesh_opts_set.

	@avail	5.0.0.0

	@see	fz_objt_mesh_opts_set, fz_objt_mesh_opts_get

	@toc	modl_edit

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

/* MESH OPTIONS */
typedef enum fz_objt_mesh_parm_enum
{	FZ_OBJT_MESH_OPTS_IVAL = 0,		/*  @emem 		meshing interval in x,y and z direction.
										@ptype		fz_xyz_td
										@rmin		0.0
										@default	24.0 | 50.0 */
										
	FZ_OBJT_MESH_OPTS_USE_IVAL_X,		/*  @emem 		use meshing in x direction on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	TRUE	*/
												
	FZ_OBJT_MESH_OPTS_USE_IVAL_Y,		/*  @emem 		use meshing in y direction on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	TRUE	*/
												
	FZ_OBJT_MESH_OPTS_USE_IVAL_Z,		/*  @emem 		use meshing in z direction on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	TRUE	*/
												
	FZ_OBJT_MESH_OPTS_TRIANG,			/*  @emem 		triangulation on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	FALSE	*/
												
	FZ_OBJT_MESH_OPTS_ROTATION,		/*  @emem 		rotation of the meshing coordinate system.
													By default, the meshing coordinate system is
													aligned with the world axes. By specifying three
													angles, this system can be reoriented.<nl>
										@ptype		fz_xyz_td
										@default	{0.0,0.0,0.0} */
												
	FZ_OBJT_MESH_OPTS_ORIGIN,			/*  @emem 		origin of the meshing coordinate system.
													By default, the meshing coordinate system is
													placed at the world origin. By specifying a new
													origin, this system can moved to a different place.
										@ptype		fz_xyz_td
										@default	{0.0,0.0,0.0} */
	
	MODEL_MESH_OPTS_MAX
} fz_objt_mesh_parm_enum;


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

	@fsfunc_t
	
	@desc		Allocates meshing options and fills it with defaults
	
	@return		Error codes
	
	@avail		5.0.0.0

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

 	@see		fz_objt_mesh_opts_get,fz_objt_mesh_opts_set,fz_objt_mesh_opts_finit

	@toc		modl_edit
																						
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_mesh_opts_init_func) (
	fzrt_int			windex,	/* @parm	<in> | project window index */
	fz_objt_mesh_opts_ptr	*opts   /* @parm	<out> | meshing options					*/
	);

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

	@fsfunc_t
	
	@desc		Gets a meshing option
	
	@return		Error codes
	
	@avail		5.0.0.0

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

 	@see		fz_objt_mesh_opts_init,fz_objt_mesh_opts_set,fz_objt_mesh_opts_finit

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_mesh_opts_get_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_mesh_opts_ptr			opts,   /* @parm	<in> | meshing options				*/
	fz_objt_mesh_parm_enum	which,  /* @parm	<in> | parameter identifier		*/
	fz_type_td				*data   /* @parm	<out> | parameter data				*/
	);

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

	@fsfunc_t
	
	@desc		Sets a meshing option
	
	@return		Error codes
	
	@avail		5.0.0.0

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

 	@see		fz_objt_mesh_opts_init,fz_objt_mesh_opts_get,fz_objt_mesh_opts_finit

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_mesh_opts_set_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_mesh_opts_ptr			opts,  	/* @parm	<in> | meshing options				*/
	fz_objt_mesh_parm_enum	which, 	/* @parm	<in> | parameter identifier			*/
	fz_type_td				*data  	/* @parm	<in> | parameter data				*/
	);

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

	@fsfunc_t
	
	@desc		Frees meshing options.
				The opts pointer is deallocated and returned back as NULL.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

 	@see		fz_objt_mesh_opts_init,fz_objt_mesh_opts_get,fz_objt_mesh_opts_set

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_mesh_opts_finit_func) (
	fzrt_int			windex,	/* @parm	<in> | project window index */
	fz_objt_mesh_opts_ptr	*opts	/* @parm	<in_out> | meshing options (will become NULL)	*/
	);

/************************************************************************
	CONSTRUCTION
*************************************************************************/

/************************************************************************
	SIMPLE POLYGONAL
*************************************************************************/

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

	@fsfunc_t

	@desc		Creates a point object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point_cloud,fz_objt_cnstr_line,fz_objt_cnstr_triangle,
				fz_objt_cnstr_rectangle,fz_objt_cnstr_vline

	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_point_func) (
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_xyz_td			*p1,		/* @parm	<in> | point			*/
	fz_objt_ptr	*obj		/* @parm	<out> | point object	*/
	);

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

	@fsfunc_t

	@desc		Creates a point cloud object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point,fz_objt_cnstr_line,fz_objt_cnstr_triangle,
				fz_objt_cnstr_rectangle,fz_objt_cnstr_vline

	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_point_cloud_func) (
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_xyz_td			*pnts,		/* @parm	<in> | array of points				*/
	fzrt_int			npnts,		/* @parm	<in> | number of points in array
								   @rimin	1									*/
	fz_objt_ptr	*obj		/* @parm	<out> | point cloud object			*/
	);

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

	@fsfunc_t

	@desc		Creates a straight line object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point,fz_objt_cnstr_point_cloud,fz_objt_cnstr_triangle,
				fz_objt_cnstr_rectangle,fz_objt_cnstr_vline

	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_line_func) (
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_xyz_td			*p1,		/* @parm	<in> | point 1					*/
	fz_xyz_td			*p2,		/* @parm	<in> | point 2					*/
	fz_objt_ptr	*obj		/* @parm	<out> | straight line object	*/
	);

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

	@fsfunc_t

	@desc		Creates an object with a single triangular face.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point,fz_objt_cnstr_point_cloud,fz_objt_cnstr_line,
				fz_objt_cnstr_rectangle,fz_objt_cnstr_vline

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_triangle_func) (
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_xyz_td			*p1,		/* @parm	<in> | point 1				*/
	fz_xyz_td			*p2,		/* @parm	<in> | point 2				*/
	fz_xyz_td			*p3,		/* @parm	<in> | point 3				*/
	fz_objt_ptr	*obj		/* @parm	<out> | triangle object	*/
	);

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

	@fsfunc_t

	@desc		Creates an object with a single rectangular face.<nl>
				The lower left corner is at 0,0,0. 
				Width is along the positive x axis. 
				Height is along the positive y axis. 
				The optional origin and rotation argments represent the 
				transformation into 3D space.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point,fz_objt_cnstr_point_cloud,fz_objt_cnstr_line,
				fz_objt_cnstr_triangle,fz_objt_cnstr_vline

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_rectangle_func) (
	fzrt_int 			windex,			/* @parm	<in> | project window index */
	double			width,			/* @parm	<in> | width (x axis)<nl>
									   @rmin 	0.0										*/
	double			height,			/* @parm	<in> | height (y axis)<nl>
									   @rmin 	0.0										*/
	fz_xyz_td			*origin,		/* @parm	<in_opt> | origin of the rectagle	*/
	fz_xyz_td			*rotation,		/* @parm	<in_opt> | rotation				*/
	fz_objt_ptr	*obj			/* @parm	<out> | rectangular object				*/
	);

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

	@fsfunc_t

	@desc		Creates an object with a single open or closed face 
				from a set of xyz points (vector line object).<nl>
				closed indicates whether the object is closed or left open.

	@return		Error codes<nl>
				MODEL_ERR_INSUFFICIENT_PNTS - less than 3 unique points in closed case

	@avail		5.0.0.0

	@see		fz_objt_cnstr_point,fz_objt_cnstr_point_cloud,fz_objt_cnstr_line,
				fz_objt_cnstr_triangle,fz_objt_cnstr_rectangle

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_vline_func) (
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_xyz_td			*pnts,		/* @parm	<in> | array of points					*/
	fzrt_int			npts,		/* @parm	<in> | number of points in array 
								   @rimin	1										*/
	fzrt_boolean	closed,		/* @parm	<in> | if TRUE, the object is closed, 
											otherwise the object is open			*/
	fz_objt_ptr	*obj		/* @parm	<out> | vector line object				*/
	);

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

	@type

	@desc	data structure to hold options for the construction of an n-sided polygon (ngon). 
			This type is used to pass additional construction options to the 
			function fz_objt_cnstr_ngon. The individual fields of this type 
			can be accessed and set via fz_objt_cnstr_ngon_opts_get and 
			fz_objt_cnstr_ngon_opts_set.

	@avail	5.0.0.0

	@see	fz_objt_cnstr_ngon,fz_objt_cnstr_ngon_opts_init,fz_objt_cnstr_ngon_opts_finit,
			fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set,<auto>

	@toc	modl_cnstr

*************************************************************************/
typedef struct ngon_cnstr_opts_td *fz_objt_ngon_cnstr_opts_ptr;

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

	@enum

	@desc	Parameter identifiers for an n-sided polygon. 
			Used for the "which" argument of fz_objt_cnstr_ngon_opts_get 
			and fz_objt_cnstr_ngon_opts_set

	@avail	5.0.0.0

 	@see	fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set,<auto>

	@toc	modl_cnstr

*************************************************************************/
typedef enum fz_objt_ngon_cnstr_opts_enum
{	FZ_OBJT_NGON_CNSTR_OPTS_PATTERN_TYPE = 0,		/*  @emem 		Construction and Editing - Pattern type<nl>
											  		@ptype		fz_objt_ngon_pattern_type_enum							
											  		@default	FZ_OBJT_NGON_PATTERN_TYPE_STAR_UP */
											  		
	FZ_OBJT_NGON_CNSTR_OPTS_PATTERN_SIZE,			/*  @emem 		Construction and Editing - Pattern size<nl>
											  		@ptype		double 
											  		@rmin		0.0
											  		@default	24.0 | 50.0 */

	FZ_OBJT_NGON_CNSTR_OPTS_PATTERN_RES,			/*  @emem 		Construction and Editing - Pattern resolution<nl>
											  		@ptype		fzrt_int
											  		@rimin		2
											  		@default	6	*/
	
	MODEL_CNSTR_NGON_OPTS_MAX
} fz_objt_ngon_cnstr_opts_enum;

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

	@enum

	@desc	n-sided polygon (ngon) type identifiers. 
			Used for the FZ_OBJT_NGON_CNSTR_OPTS_PATTERN_TYPE parameter.
			
	@avail	5.0.0.0
			
 	@see	fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set,<auto>

	@toc	modl_cnstr

*************************************************************************/
typedef enum fz_objt_ngon_pattern_type_enum
{	FZ_OBJT_NGON_PATTERN_TYPE_STAR_UP = 0,	/*  @emem 	Star, one side of line with no gaps		*/
	FZ_OBJT_NGON_PATTERN_TYPE_STAR_FULL,		/*  @emem 	Star, both sides of line				*/
	FZ_OBJT_NGON_PATTERN_TYPE_STAR_HALF,		/*  @emem 	Star, one side of line with gaps		*/
	FZ_OBJT_NGON_PATTERN_TYPE_GEAR_UP,		/*  @emem 	Gear, one side of line with no gaps		*/
	FZ_OBJT_NGON_PATTERN_TYPE_GEAR_FULL,		/*  @emem 	Gear, both sides of line				*/
	FZ_OBJT_NGON_PATTERN_TYPE_GEAR_HALF,		/*  @emem 	Gear, one side of line with gaps		*/
	FZ_OBJT_NGON_PATTERN_TYPE_DAISY_UP,		/*  @emem 	Daisy, one side of line with no gaps	*/
	FZ_OBJT_NGON_PATTERN_TYPE_DAISY_FULL,		/*  @emem 	Daisy, both sides of line				*/
	FZ_OBJT_NGON_PATTERN_TYPE_DAISY_HALF,		/*  @emem 	Daisy, one side of line with gaps		*/
	
	MODEL_NGON_PATTERN_TYPE_MAX
} fz_objt_ngon_pattern_type_enum;

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

	@fsfunc_t

	@desc		Creates an object with a single face which is an n-sided polygon (ngon).
				The center of the polyon is at 0,0,0. A corner is placed at the 
				positive x axis at distance radius. 
				The optional origin and rotation argments represent the 
				transformation into 3D space. 
				The optional opts contains options to construct the edge pattern.

	@return		Error codes<nl>
				MODEL_ERR_INSUFFICIENT_PNTS - less than 3 unique points in closed case

	@avail		5.0.0.0

	@see		fz_objt_cnstr_ngon_opts_init,fz_objt_cnstr_ngon_opts_finit,
				fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_ngon_func) (					
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fzrt_int					nsides,			/* @parm	<in> | number of sides
											   @rimin	3										*/
	double					radius,			/* @parm	<in> | radius of object
											   @rmin	0.0										*/
	fz_xyz_td					*origin,		/* @parm	<in_opt> | origin					*/
	fz_xyz_td					*rotation,		/* @parm	<in_opt> | rotation				*/
	fz_objt_ngon_cnstr_opts_ptr		opts,			/* @parm	<in_opt> | construction options	*/
	fz_objt_ptr			*obj			/* @parm	<out> | n-sided polygon object			*/
	);

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

	@fsfunc_t

	@desc		Allocates n-sided polygon (ngon) construction options and fills them with defaults.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_ngon_opts_finit,fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set,<auto>

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_ngon_opts_init_func) (	
	fzrt_int					windex,		/* @parm	<in> | project window index */
	fz_objt_ngon_cnstr_opts_ptr		*opts		/* @parm	<out> | construction options	*/
	);

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

	@fsfunc_t

	@desc		Gets an n-sided polygon (ngon) construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_ngon_opts_init,fz_objt_cnstr_ngon_opts_finit,fz_objt_cnstr_ngon_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_ngon_opts_get_func) (
	fzrt_int					windex,		/* @parm	<in> | project window index */
	fz_objt_ngon_cnstr_opts_ptr		opts,		/* @parm	<in> | construction options	*/
	fz_objt_ngon_cnstr_opts_enum	which,		/* @parm	<in> | parameter identifier	*/
	fz_type_td				*data		/* @parm	<out> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Sets an n-sided polygon (ngon) construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_ngon_opts_init,fz_objt_cnstr_ngon_opts_finit,fz_objt_cnstr_ngon_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_ngon_opts_set_func) (
	fzrt_int					windex,		/* @parm	<in> | project window index */
	fz_objt_ngon_cnstr_opts_ptr		opts,		/* @parm	<in> | construction options	*/
	fz_objt_ngon_cnstr_opts_enum	which,		/* @parm	<in> | parameter identifier	*/
	fz_type_td				*data		/* @parm	<in> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Frees n-sided polygon (ngon) construction options. 
				The opts pointer is deallocated and returned back as NULL.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_ngon_opts_init,fz_objt_cnstr_ngon_opts_get,fz_objt_cnstr_ngon_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_simp_poly.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_simple.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_ngon_opts_finit_func) (	
	fzrt_int					windex,		/* @parm	<in> | project window index */
	fz_objt_ngon_cnstr_opts_ptr		*opts		/* @parm	<in_out> | construction options (will become NULL)	*/
	);


/************************************************************************
	DERIVATIVES
*************************************************************************/

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

	@type

	@desc	data structure to hold options for the constructions of a skin object.
			This type is used to pass additional construction options to the
			function fz_objt_cnstr_skin_along_paths and fz_objt_cnstr_skin_cross. 
			The individual fields of this type can be accessed and set via 
			fz_objt_cnstr_skin_opts_get and fz_objt_cnstr_skin_opts_set.
			
	@avail	5.0.0.0
	
	
	@see	<auto>
	
	@exfile	util_objt_cnstr_skin.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef struct	skin_cnstr_opts_td	*fz_objt_skin_cnstr_opts_ptr;

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

	@enum

	@desc	Parameter identifiers for the skin construction options. Used for the
			"which" argument of fz_objt_cnstr_skin_opts_get and fz_objt_cnstr_skin_opts_set.
			
	@avail	5.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_skin.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_skin_parm_enum
{
	FZ_OBJT_SKIN_CNSTR_OPTS_CAP_START = 0,/*  @emem 		Start cap on (TRUE) or off (FALSE).
											@ptype		fzrt_boolean 
											@default	TRUE		*/
											
	FZ_OBJT_SKIN_CNSTR_OPTS_CAP_END,		/*  @emem 		End cap on (TRUE) or off (FALSE).
											@ptype		fzrt_boolean 
											@default	TRUE		*/
											
	FZ_OBJT_SKIN_CNSTR_OPTS_BNDY_BASED,	/*  @emem 		Boundary based (TRUE) or centroid based (FALSE).
											@ptype		fzrt_boolean 
											@default	FALSE		*/
											
	FZ_OBJT_SKIN_CNSTR_OPTS_CURR_POS,		/*  @emem 		Placement by current position (TRUE) or anchor points (FALSE).
											@ptype		fzrt_boolean 
											@default	TRUE		*/
		
	FZ_OBJT_SKIN_CNSTR_OPTS_TRIANG,		/*  @emem 		Triangulate on (TRUE) or off (FALSE).
											@ptype		fzrt_boolean 
											@default	FALSE		*/
											
	FZ_OBJT_SKIN_CNSTR_OPTS_TOL,			/*  @emem 		Snap tolerance when matching placement points.
											@ptype		double 
											@rmin		0.0	
											@default	0.5	| 1.0	*/
	
	FZ_OBJT_SKIN_CNSTR_OPTS_MAX
	
} fz_objt_skin_parm_enum;

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

	@fsfunc_t

	@desc		Allocates skin construction options and fills them with defaults.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_finit,fz_objt_cnstr_skin_opts_get,fz_objt_cnstr_skin_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_opts_init_func) (
	fzrt_int				windex,		/* @parm <in> | project window index */
	fz_objt_skin_cnstr_opts_ptr	*opts		/* @parm <out> | construction options	*/
	);

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

	@fsfunc_t

	@desc		Gets a skin construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_finit,fz_objt_cnstr_skin_opts_init,fz_objt_cnstr_skin_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr


*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_opts_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_skin_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_skin_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <out> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Sets a skin construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_finit,fz_objt_cnstr_skin_opts_init,fz_objt_cnstr_skin_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_opts_set_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_skin_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_skin_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <in> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Frees skin object construction options. The opts pointer
				is deallocated and returned back as NULL.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_init,fz_objt_cnstr_skin_opts_set,fz_objt_cnstr_skin_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr

										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_opts_finit_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_skin_cnstr_opts_ptr	*opts   /* @parm <in_out> | options (will become NULL)	*/
	);

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

	@fsfunc_t

	@desc		Creates a skin object using sources and paths

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_init,fz_objt_cnstr_skin_opts_set,
				fz_objt_cnstr_skin_opts_get,fz_objt_cnstr_skin_opts_finit

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_along_paths_func) (					
	fzrt_int 					windex,			/* @parm <in> | project window index */
	fz_objt_ptr			*src_objs,		/* @parm <in> | array with source objects	*/
	fzrt_int					n_src,			/* @parm <in> | number of source objects
											   @rimin		1							*/
	fz_objt_ptr			*pth_objs,		/* @parm <in> | array with path objects	*/
	fzrt_int					n_pth,			/* @parm <in> | number of path objects
											   @rimin		3							*/
	fz_objt_model_type_enum			model_type,		/* @parm <in> | model type	*/ 
	fz_objt_smooth_type_enum	smooth_type,    /* @parm <in> | smooth type	*/ 
	fz_objt_skin_cnstr_opts_ptr		skin_opts,		/* @parm <in_opt> | construction options. For defaults see fz_objt_skin_parm_enum. */
	fz_attr_refn_ptr		refn_opts,		/* @parm <in_opt> | display resolution options. For defaults see see fz_attr_refn_parm_enum. */
	fz_objt_ptr			*obj			/* @parm <out> | new object */
	);

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

	@fsfunc_t

	@desc		Creates a cross skin object

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_skin_opts_init,fz_objt_cnstr_skin_opts_set,
				fz_objt_cnstr_skin_opts_get,fz_objt_cnstr_skin_opts_finit

	@exfile		<scdir>/Utilities | util_objt_cnstr_skin.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_skin_cross_func) (
	fzrt_int 					windex,		/* @parm <in> | project window index */
	fz_objt_ptr			*src_objs,  /* @parm <in> | array with source objects	*/
	fzrt_int					n_src,		/* @parm <in> | number of source objects
										   @rimin		1							*/
	fz_objt_ptr			pth_obj,    /* @parm <in> | path object					*/
	fz_objt_model_type_enum			model_type,	/* @parm <in> | model type	*/ 
	fz_objt_skin_cnstr_opts_ptr		skin_opts,	/* @parm <in_opt> | construction options. For defaults see fz_objt_skin_parm_enum. */
	fz_attr_refn_ptr		refn_opts,  /* @parm <in_opt> | display resolution options. For defaults see see fz_attr_refn_parm_enum. */
	fz_objt_ptr			*obj		/* @parm <out> | new object */
	);



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

	@type

	@desc	data structure to hold options for the unfold construction options.
			This type is used to pass additional options to the
			function fz_objt_cnstr_unfold. 
			The individual fields of this type can be accessed and set via 
			fz_objt_cnstr_unfold_opts_get and fz_objt_cnstr_unfold_opts_set.
			
	@avail	5.0.0.0
	
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef struct	unfd_cnstr_opts_td	*fz_objt_unfold_cnstr_opts_ptr;

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

	@enum

	@desc	Identifiers, which determine where a text label is placed on an unfolded object.
			Text labels identify, which segments need to be attached to reconstruct the object.
			
	@avail	6.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_unfold_label_place_enum
{
	FZ_OBJT_UNFOLD_LABEL_PLACE_INSIDE = 0,	/*  @emem 		Text label is placed inside the unfolded face */
	FZ_OBJT_UNFOLD_LABEL_PLACE_OUTSIDE,		/*  @emem 		Text label is placed outsideside the unfolded face */
	FZ_OBJT_UNFOLD_LABEL_PLACE_ON			/*  @emem 		Text label is placed on the segment of the unfolded face */

} fz_objt_unfold_label_place_enum;

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

	@enum

	@desc	Identifiers, which determine what to do, when encountering a smooth object
			with non developable faces.
			
	@avail	6.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_unfold_non_developable_enum
{
	FZ_OBJT_UNFOLD_NON_DEVELOPABLE_SKIP = 0,			/*  @emem 		Don't unfold the entire object */
	FZ_OBJT_UNFOLD_NON_DEVELOPABLE_VALID_ONLY = 2		/*  @emem 		Unfold only those faces, that are developable */

} fz_objt_unfold_non_developable_enum;


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

	@enum

	@desc	Parameter identifiers for the unfold construction options. Used for the
			"which" argument of fz_objt_cnstr_unfold_opts_get and fz_objt_cnstr_unfold_opts_set.
			
	@avail	5.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_unfold_parm_enum
{
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_MARGIN = 0,	/*  @emem 		Margin between parts, for facetted unfold.
											@ptype		double 
											@rmin		0.0	
											@default	48.0 | 100.0	*/
											
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_CON_WIDTH,	/*  @emem 		Connector width, for facetted unfold.
											@ptype		double 
											@rmin		0.0	
											@default	12.0 | 25.0	*/
											
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_CON_SPLIT,	/*  @emem 		Connector type is split (TRUE) or continuous (FALSE), for facetted unfold.
											@ptype		fzrt_boolean 
											@default	TRUE	*/
	
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_SEPARATE,		/*  @emem 		Separate overlapping parts on (TRUE) or off (FALSE), for facetted unfold.
											@ptype		fzrt_boolean 
											@default	TRUE	*/
	
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_TRIANG,		/*  @emem 		Triangulate on (TRUE) or off (FALSE), for facetted unfold.
											@ptype		fzrt_boolean 
											@default	FALSE	*/
											
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_DO_CONS,		/*  @emem 		Generate connectors on (TRUE) or off (FALSE), for facetted unfold.
											@ptype		fzrt_boolean 
											@default	FALSE	*/
	
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_SKIP_CON_INTS,/*  @emem 		Skip overlapping connectors on (TRUE) or off (FALSE), for facetted unfold.
											@ptype		fzrt_boolean 
											@default	TRUE	*/

	FZ_OBJT_UNDFOLD_CNSTR_OPTS_LABELS,				/*  @emem 		Text labels on (TRUE) or off (FALSE), for smooth unfold.
														@ptype		fzrt_boolean 
														@default	0	*/

	FZ_OBJT_UNDFOLD_CNSTR_OPTS_LABEL_SIZE_AUTO,		/*  @emem 		Label size determined automatically (TRUE) or as a fixed size (FALSE), for smooth unfold.
														@ptype		fzrt_boolean 
														@default	1	*/

	FZ_OBJT_UNDFOLD_CNSTR_OPTS_LABEL_PLACEMENT,		/*  @emem 		Label placement for smooth unfold.
														@ptype		fz_objt_unfold_label_place_enum 
														@default	FZ_OBJT_UNFOLD_LABEL_PLACE_INSIDE	*/

	FZ_OBJT_UNDFOLD_CNSTR_OPTS_NON_DEV,				/*  @emem 		What to do when encountering a smooth object with non-developable faces.
														@ptype		fz_objt_unfold_non_developable_enum 
														@default	FZ_OBJT_UNFOLD_NON_DEVELOPABLE_SKIP	*/

	FZ_OBJT_UNDFOLD_CNSTR_OPTS_LABEL_SIZE,			/*  @emem 		Size of labels, for smooth unfold.
														@ptype		double 
														@rmin		0.0	
														@default	6.0 	*/
	
	FZ_OBJT_UNDFOLD_CNSTR_OPTS_MAX
	
} fz_objt_unfold_parm_enum;

/************************************************************************
											
	@fsfunc_t

	@desc		Allocates unfold construction options and fills them with defaults.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_unfold_opts_finit,fz_objt_cnstr_unfold_opts_get,fz_objt_cnstr_unfold_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_opts_init_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_unfold_cnstr_opts_ptr	*opts   /* @parm <out> | construction options	*/
	);

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

	@fsfunc_t

	@desc		Gets a unfold construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_unfold_opts_finit,fz_objt_cnstr_unfold_opts_init,fz_objt_cnstr_unfold_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_opts_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_unfold_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_unfold_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <out> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Sets an unfold construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_unfold_opts_finit,fz_objt_cnstr_unfold_opts_init,fz_objt_cnstr_unfold_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_opts_set_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_unfold_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_unfold_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <in> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Frees unfold object construction options. The opts pointer
				is deallocated and returned back as NULL.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_unfold_opts_init,fz_objt_cnstr_unfold_opts_set,fz_objt_cnstr_unfold_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_opts_finit_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_unfold_cnstr_opts_ptr	*opts   /* @parm <in_out> | options (will become NULL)	*/
	);

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

	@fsfunc_t

	@desc		Constructs an unfolded object from a source.
				origin, xaxis_pt and yaxis_pt specify the plane on which the
				unfolded object is placed. If passed as NULL, the xy plane is used.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_unfold_opts_init,fz_objt_cnstr_unfold_opts_set,
				fz_objt_cnstr_unfold_opts_get,fz_objt_cnstr_unfold_opts_finit

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
										

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_func) (
	fzrt_int 					windex,		/* @parm <in> | project window index */
	fz_objt_ptr			src_obj,	/* @parm <in> | source object										*/
	fzrt_int 					sindx,		/* @parm <in> | The index of the segment where the unfold starts	*/	
	fz_xyz_td					*origin,	/* @parm <in_opt> | The origin of the unfold operation	
										   @default {0.0,0.0,0.0}											*/	
	fz_xyz_td					*xaxis_pt,	/* @parm <in_opt> | The x axis point for the plane of the unfold operation	
										   @default {1.0,0.0,0.0}											*/	
	fz_xyz_td					*yaxis_pt,	/* @parm <in_opt> | The y axis point for the plane of the unfold operation	
										   @default {0.0,1.0,0.0}											*/	
	fz_objt_unfold_cnstr_opts_ptr		opts,		/* @parm <in_opt> | construction options. For defaults see fz_objt_unfold_parm_enum. */
	fz_objt_ptr			*obj		/* @parm <out> | new object */
	);



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

	@fsfunc_t

	@desc		Constructs an unfolded object from a source.
				origin, xaxis_pt and yaxis_pt specify the plane on which the
				unfolded object is placed. If passed as NULL, the xy plane is used.
				Since unfolding a smooth object usually results in several new
				objects, these objects are returned in an object list.
				Likewise, the text object which were created as labels are
				returned in an object list.  

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_cnstr_unfold_opts_init,fz_objt_cnstr_unfold_opts_set,
				fz_objt_cnstr_unfold_opts_get,fz_objt_cnstr_unfold_opts_finit

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
										

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_unfold_smooth_func) (
	fzrt_int 					windex,		/* @parm <in> | project window index */
	fz_objt_ptr				src_obj,	/* @parm <in> | source object										*/
	fz_xyz_td				*origin,	/* @parm <in_opt> | The origin of the unfold operation	
										   @default {0.0,0.0,0.0}											*/	
	fz_xyz_td				*xaxis_pt,	/* @parm <in_opt> | The x axis point for the plane of the unfold operation	
										   @default {1.0,0.0,0.0}											*/	
	fz_xyz_td				*yaxis_pt,	/* @parm <in_opt> | The y axis point for the plane of the unfold operation	
										   @default {0.0,1.0,0.0}											*/	
	fz_objt_unfold_cnstr_opts_ptr		opts,	/* @parm <in_opt> | construction options. For defaults see fz_objt_unfold_parm_enum. */
	fz_enty_list_ptr		obj_list,	/* @parm <out> | a list with the unfolded objects. Note, that a single object usually unfolds into several new objects. */
	fz_enty_list_ptr		text_list	/* @parm <out> | a list with the text objects, which were created as labels, if the label option is used. */
	);

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

	@type

	@desc	data structure to hold options for the terrain construction options.
			This type is used to pass additional options to the
			function fz_objt_cnstr_terrain. 
			The individual fields of this type can be accessed and set via 
			fz_objt_cnstr_terrain_opts_get and fz_objt_cnstr_terrain_opts_set.
			
	@avail	5.0.0.0
	
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef struct	trrn_cnstr_opts_td	*fz_objt_terrain_cnstr_opts_ptr;

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

	@enum

	@desc	Terrain type identifiers. Used by fz_objt_cnstr_terrain_opts_get and fz_objt_cnstr_terrain_opts_set
			when the parameter id is FZ_OBJT_TERRAIN_CNSTR_OPTS_TERRAIN_TYPE
			
	@avail	5.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_trrn_type_enum
{
	FZ_OBJT_TRRN_TYPE_MESHED = 0,	/*  @emem 		Meshed terrain */
	FZ_OBJT_TRRN_TYPE_STEPPED,	/*  @emem 		Stepped terrain */
	FZ_OBJT_TRRN_TYPE_TRIANG,		/*  @emem 		Triangulated contour terrain */
	
	MODEL_TRRN_TYPE_MAX

} fz_objt_trrn_type_enum;

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

	@enum

	@desc	Terrain interpolation type identifiers. Used by fz_objt_cnstr_terrain_opts_get and 
			fz_objt_cnstr_terrain_opts_set when the parameter id is FZ_OBJT_TERRAIN_CNSTR_OPTS_INTERP_TYPE
			
	@avail	5.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_trrn_interp_type_enum
{
	FZ_OBJT_TRRN_INTERP_TYPE_X = 0,			/*  @emem 		X interpolation */
	FZ_OBJT_TRRN_INTERP_TYPE_Y,				/*  @emem 		Y interpolation */
	FZ_OBJT_TRRN_INTERP_TYPE_XY,				/*  @emem 		XY interpolation */
	FZ_TRRN_INTERP_TYPE_FALL_LINES,		/*  @emem 		Fall lines interpolation */
	
	MODEL_TRRN_INTERP_TYPE_MAX

} fz_objt_trrn_interp_type_enum;



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

	@enum

	@desc	Parameter identifiers for the terrain construction options. Used for the
			"which" argument of fz_objt_cnstr_terrain_opts_get and fz_objt_cnstr_terrain_opts_set.
			
	@avail	5.0.0.0
			
			
	@see	<auto>
	
	@exfile	util_objt_cnstr_derv.fsl

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_terrain_parm_enum
{
	FZ_OBJT_TERRAIN_CNSTR_OPTS_TERRAIN_TYPE = 0,	/*  @emem 		Terrain type.
												@ptype		fz_objt_trrn_type_enum 
												@default	FZ_OBJT_TRRN_TYPE_MESHED	*/
												
	FZ_OBJT_TERRAIN_CNSTR_OPTS_USE_NEW_HEIGHT,	/*  @emem 		Use new height (TRUE) or use existing  height of input curves (FALSE).
												@ptype		fzrt_boolean 
												@default	FALSE	*/
												
	FZ_OBJT_TERRAIN_CNSTR_OPTS_INTERP_TYPE,		/*  @emem 		Terrain interpolation type.
												@ptype		fz_objt_trrn_interp_type_enum 
												@default	FZ_OBJT_TRRN_INTERP_TYPE_XY	*/
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_SMOOTH_CONTOURS,	/*  @emem		Smooth contour lines on (TRUE) or off (FALSE).
												@ptype		fzrt_boolean 
												@default	FALSE	*/
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_PRECHECK_INTS,	/*  @emem		Precheck for intersecting contours on (TRUE) or off (FALSE).
												@ptype		fzrt_boolean 
												@default	FALSE	*/
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_TRIANG,			/*  @emem		Triangulate non sloping on (TRUE) or off (FALSE).
												@ptype		fzrt_boolean 
												@default	FALSE	*/
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_START_HEIGHT,		/*  @emem		Site starting height.
												@ptype		double 
												@default	12.0 | 25.0 */
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_HEIGHT_INCR,		/*  @emem		Height increment when FZ_OBJT_TERRAIN_CNSTR_OPTS_USE_NEW_HEIGHT is TRUE.
												@ptype		double 
												@default	48.0 | 100.0 */
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_SMOOTH_IVAL,		/*  @emem		Smooth interval when FZ_OBJT_TERRAIN_CNSTR_OPTS_SMOOTH_CONTOURS is TRUE.
												@ptype		double 
												@default	48.0 | 100.0 */
	
	FZ_OBJT_TERRAIN_CNSTR_OPTS_MAX

} fz_objt_terrain_parm_enum;


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

	@fsfunc_t

	@desc		Allocates terrain construction options and fills them with defaults.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_terrain_opts_finit,fz_objt_cnstr_terrain_opts_get,fz_objt_cnstr_terrain_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_terrain_opts_init_func) (	
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_terrain_cnstr_opts_ptr	*opts   /* @parm <out> | construction options	*/
	);

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

	@fsfunc_t

	@desc		Gets a terrain construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_terrain_opts_finit,fz_objt_cnstr_terrain_opts_init,fz_objt_cnstr_terrain_opts_set

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_terrain_opts_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_terrain_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_terrain_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <out> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Sets a terrain construction option.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_terrain_opts_finit,fz_objt_cnstr_terrain_opts_init,fz_objt_cnstr_terrain_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_terrain_opts_set_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_objt_terrain_cnstr_opts_ptr		opts,   /* @parm <in> | construction options	*/
	fz_objt_terrain_parm_enum	which,  /* @parm <in> | parameter id			*/
	fz_type_td				*data   /* @parm <in> | parameter data			*/
	);

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

	@fsfunc_t

	@desc		Frees terrain object construction options. The opts pointer
				is deallocated and returned back as NULL.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_terrain_opts_init,fz_objt_cnstr_terrain_opts_set,fz_objt_cnstr_terrain_opts_get

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
										
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_terrain_opts_finit_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_objt_terrain_cnstr_opts_ptr	*opts   /* @parm <in_out> | options (will become NULL)	*/
	);

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

	@fsfunc_t

	@desc		Creates a terrain object using one or more contour lines and a site polygon.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_terrain_opts_init,fz_objt_cnstr_terrain_opts_set,
				fz_objt_cnstr_terrain_opts_get,fz_objt_cnstr_terrain_opts_finit

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_terrain_func) (					
	fzrt_int 					windex,			/* @parm <in> | project window index */
	fz_objt_ptr			*contours,		/* @parm <in> | array with contour line objects. Each object must
															be an open or closed wire, or a single face surface object.
															All objects should be planar and parallel to the site object's plane. */
	fzrt_int					ncontours,		/* @parm <in> | number of contour objects
											   @rimin	1										*/
	fz_objt_ptr			site,			/* @parm <in> | site object. It must be a closed wire or a single face surface object.
															It should also be planar. */
	fz_objt_terrain_cnstr_opts_ptr		trrn_opts,		/* @parm <in_opt> | construction options. For defaults see fz_objt_terrain_parm_enum. */
	fz_objt_mesh_opts_ptr			mesh_opts,		/* @parm <in_opt> | meshing options. These options are the same as for the 
																mesh api functions. They determine how densly the terrain
																model is meshed. when the terrain type is set to 
																FZ_OBJT_TRRN_TYPE_MESHED. For defaults see fz_objt_mesh_parm_enum. */
	fz_objt_ptr			*obj			/* @parm <out> | new object */
	);

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

	@fsfunc_t

	@desc		Constructs a new object from a segment of an existing object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_from_curv,fz_objt_cnstr_objt_from_face

	@exfile		<scdir>/Utilities | util_objt_from.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_objt_from_segt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,	/* @parm	<in> | source object	*/
	fzrt_int				sindx,		/* @parm	<in> | segment index	*/
	fz_objt_ptr		*obj		/* @parm	<out> | new object		*/
	);

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

	@fsfunc_t

	@desc		Constructs a new object from a curve of an existing object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_from_segt,fz_objt_cnstr_objt_from_face

	@exfile		<scdir>/Utilities | util_objt_from.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_objt_from_curv_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,	/* @parm	<in> | source object	*/
	fzrt_int				cindx,		/* @parm	<in> | curve index		*/
	fz_objt_ptr		*obj		/* @parm	<out> | new object		*/
	);

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

	@fsfunc_t

	@desc		Constructs a new object from a face of an existing object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_from_segt,fz_objt_cnstr_objt_from_curv

	@exfile		<scdir>/Utilities | util_objt_from.fsl
	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_objt_from_face_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,	/* @parm	<in> | source object	*/
	fzrt_int				findx,		/* @parm	<in> | face index		*/
	fz_objt_ptr		*obj		/* @parm	<in> | new object		*/
	);





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

	@fsfunc_t

	@desc		Creates a single parallel offset object.
				Horizontal faces are all planar faces with an angle of less than 5 degrees
				to the xy plane. These faces are offset with offset_horz.
				All other faces are offset with offset_vert.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_parallel_single_func) (
	fzrt_int 					windex,			/* @parm <in> | project window index */
	fz_objt_ptr			src_obj,		/* @parm <in> | source object		*/
	double					offset_horz,	/* @parm <in> | horizontal offset	*/
	double					offset_vert,	/* @parm <in> | vertical offset		*/
	fz_objt_ptr			*obj			/* @parm <out> | new object 		*/
	);

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

	@fsfunc_t

	@desc		Creates a single offset (parallel) wire object on the same plane.
				The source object must be an open or closed wire and must be planar.
				Positive offset values create an object to the left of the source,
				looking along the direction of the source. Negative values create
				objects on the right of the source.

	@return		Error codes<nl>
				MODEL_ERR_NOT_A_WIRE				object not a wire				

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_parallel_wire_func) (					
	fzrt_int 					windex,		/* @parm <in> | project window index */
	fz_objt_ptr			src_obj,    /* @parm <in> | source object		*/
	double					offset,		/* @parm <in> | offset				*/
	fz_objt_ptr			*obj		/* @parm <out> | new object 		*/
	);
											
/************************************************************************

	@fsfunc_t

	@desc		Creates a double parallel offset object.
				Horizontal faces are all planar faces with an angle of less than 5 degrees
				to the xy plane. These faces are offset with offset_horz_in / offset_horz_out.
				All other faces are offset with offset_vert_in / offset_vert_out.

	@return		Error codes<nl>

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_cnstr_derv.fsl

	@toc		modl_cnstr
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_parallel_double_func) (
	fzrt_int 					windex,				/* @parm <in> | project window index */
	fz_objt_ptr			src_obj,			/* @parm <in> | source object					*/
	double					offset_horz_in,		/* @parm <in> | horizontal offset inwards		*/
	double					offset_horz_out,    /* @parm <in> | horizontal offset outwards		*/
	double					offset_vert_in,		/* @parm <in> | vertical offset inwards			*/
	double					offset_vert_out,    /* @parm <in> | vertical offset outwards		*/
	fz_objt_ptr			*obj				/* @parm <out> | new object 					*/
	);

											
											




/************************************************************************
	LOW LEVEL CONSTRUCTION
*************************************************************************/

/************************************************************************
	@fsfunc_t

	@desc		Creates a new, empty, object. This function should
				not be called just by itself. It is expected, that the
				object is filled with geometry by calling other low level
				construction functions.
				NOTE :  the object is not committed to the project's 
				object list until fz_objt_add_objt_to_project is called.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_cnstr_lowlevel.fsl

	@toc		modl_cnstr

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_cnstr_objt_new_func) (
	fzrt_int			windex,		/* @parm	<in> | project window index */
	fz_objt_ptr	*obj		/* @parm	<out> | object		*/
	);

/************************************************************************
	
	@fsfunc_t

	@desc		Resets the facetted topology and object geometry 
				(i.e. all faces, curves segments and points) to be empty.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_reset_func) (	
	fzrt_int			windex,		/* @parm	<in> | project window index */
	fz_objt_ptr	obj			/* @parm	<in> | object				*/
	);
							 			
/************************************************************************
	@fsfunc_t

	@desc		Adds a number of new points to an object. This function
				should not be called just by itself. Once the points
				have been added, they need to be connected with segments
				to form curves and faces. This can be done with the
				low level api functions fz_objt_fact_create_face.

	@return		Error codes

	@avail		5.0.0.0

	@expl		fz_xyz_td				pts[4];
				fzrt_int				pindx[4];
				fz_objt_ptr		new_obj;
		
				fz_objt_cnstr_objt_new(windex,&new_obj);
				pts[0] = {  0.0,  0.0,  0.0};
				pts[1] = {100.0,  0.0,  0.0};
				pts[2] = {100.0,100.0,  0.0};
				pts[3] = {  0.0,100.0,  0.0};
				pindx[0] = 0;
				pindx[1] = 1;
				pindx[2] = 2;
				pindx[3] = 3;
				fz_objt_fact_add_pnts(windex,new_obj,pts,4);
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);
				
				The sample code above creates a new object and adds 4 points,
				which are connected to form a square face. The face connects
				points number 0,1,2 and 3 in this order.

	@see		fz_objt_fact_create_face

	@exfile		<scdir>/Utilities | util_objt_cnstr_lowlevel.fsl

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_add_pnts_func) (	
	fzrt_int			windex,		/* @parm	<in> | project window index */
	fz_objt_ptr	obj,		/* @parm	<in> | object								*/
	fz_xyz_td			*pts,		/* @parm	<in> | array of points to add to object	*/
	fzrt_int			npts		/* @parm	<in> | number of points in array
								   @rimin	1											*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Sets the coordinate value of a point. This function
				can only be called with facetted object. When a smooth
				object is passed in an error will be returned.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_set_pnt_xyz_func) (	
	fzrt_int			windex,		/* @parm	<in> | project window index */
	fz_objt_ptr	obj,		/* @parm	<in> | object						*/
	fzrt_int			pindx,		/* @parm	<in> | index of point to set		*/
	fz_xyz_td			*pt			/* @parm	<in> | coordinate to set point to	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Creates a new, closed face by connecting the points 
				in a given array.<nl>
				This array holds the indices to the coordinate points of the object. 
				Most likely, the coordinates of the object were previously created 
				with fz_objt_fact_add_pnts().<nl>
				The index of the new face is optionally returned in the findx parameter.

	@return		Error codes

	@avail		5.0.0.0

	@expl		fz_xyz_td				pts[4];
				fzrt_int				pindx[4];
				fz_objt_ptr		new_obj;
		
				fz_objt_cnstr_objt_new(windex,&new_obj);
				pts[0] = {  0.0,  0.0,  0.0};
				pts[1] = {100.0,  0.0,  0.0};
				pts[2] = {100.0,100.0,  0.0};
				pts[3] = {  0.0,100.0,  0.0};
				pindx[0] = 0;
				pindx[1] = 1;
				pindx[2] = 2;
				pindx[3] = 3;
				fz_objt_fact_add_pnts(windex,new_obj,pts,4);
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);
				
				The sample code above creates a new object and adds 4 points,
				which are connected to form a square face. The face connects
				points number 0,1,2 and 3 in this order.
				
	@see		fz_objt_fact_add_pnts,fz_objt_fact_create_wire_face
				
	@exfile		<scdir>/Utilities | util_objt_cnstr_lowlevel.fsl

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_create_face_func) (	
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in> | object								*/
	fzrt_int				*pindx,		/* @parm	<in> | array of point indices to connect	*/
	fzrt_int				npindx,		/* @parm	<in> | number of point indices in array	*/
	fzrt_int				*findx		/* @parm	<out_opt> | index of new face			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Creates a new, open face by connecting the points 
				in a given array.<nl>
				This array holds the indices to the coordinate points of the object. 
				Most likely, the coordinates of the object were previously created 
				with fz_objt_fact_add_pnts().<nl>
				The index of the new face is optionally returned in the findx parameter.

	@return		Error codes

	@avail		5.0.0.0

	@expl		fz_xyz_td				pts[4];
				fzrt_int				pindx[4];
				fz_objt_ptr		new_obj;
		
				fz_objt_cnstr_objt_new(windex,&new_obj);
				pts[0] = {  0.0,  0.0,  0.0};
				pts[1] = {100.0,  0.0,  0.0};
				pts[2] = {100.0,100.0,  0.0};
				pts[3] = {  0.0,100.0,  0.0};
				pindx[0] = 0;
				pindx[1] = 1;
				pindx[2] = 2;
				pindx[3] = 3;
				fz_objt_fact_add_pnts(windex,new_obj,pts,4);
				fz_objt_fact_create_wire_face(windex,new_obj,pindx,4,NULL);
				
				The sample code above creates a new object and adds 4 points,
				which are connected to form a square face. The face connects
				points number 0,1,2 and 3 in this order.
				
	@see		fz_objt_fact_add_pnts,fz_objt_fact_create_face
				
	@exfile		

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_create_wire_face_func) (	
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj,		/* @parm	<in> | object								*/
	fzrt_int				*pindx,		/* @parm	<in> | array of point indices to connect	*/
	fzrt_int				npindx,		/* @parm	<in> | number of point indices in array	*/
	fzrt_int				*findx		/* @parm	<out_opt> | index of new face			*/
	);


/************************************************************************
	@fsfunc_t

	@desc		Creates a new, closed curve in a given face by connecting the points given in the 
				pindx array. The curve delinates a hole in the face and its direction
				must be opposite to the direction of the outer boundary curve of the
				face. The pindx array holds the indices to the coordinate points of the object.
				Most likely, the coordinates of the object were previously created 
				with fz_objt_fact_add_pnts().
				The index of the new curve is optionally returned in the cindx parameter

	@return		Error codes

	@avail		5.0.0.0

	@expl		fz_xyz_td			pts[8];
				fzrt_int				pindx[8];
				fz_objt_ptr			new_obj;
		
				fz_objt_cnstr_objt_new(windex,&new_obj);
				pts[0] = {  0.0,  0.0,  0.0};
				pts[1] = {100.0,  0.0,  0.0};
				pts[2] = {100.0,100.0,  0.0};
				pts[3] = {  0.0,100.0,  0.0};
				pts[4] = { 20.0, 20.0,  0.0};
				pts[5] = { 20.0, 80.0,  0.0};
				pts[6] = { 80.0, 80.0,  0.0};
				pts[7] = { 80.0, 20.0,  0.0};
				fz_objt_fact_add_pnts(windex,new_obj,pts,4);
				pindx[0] = 0;
				pindx[1] = 1;
				pindx[2] = 2;
				pindx[3] = 3;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,&findx);
				pindx[0] = 4;
				pindx[1] = 5;
				pindx[2] = 6;
				pindx[3] = 7;
				fz_objt_fact_create_hole_curv(windex,new_obj,findx,pindx,4,NULL);
				
				The sample code above creates a new object and adds 8 points. The first
				4 points are connected to form a square face. The face connects
				points number 0,1,2 and 3 in this order. Points 5 to 8 are connected
				to form a hole in the face with the api call fz_objt_fact_create_hole_curv.
				Note, that points 5 to 8 are defined in the opposite direction of points
				1 to 4.
				
	@see		fz_objt_fact_add_pnts,fz_objt_fact_create_face
				
	@exfile		<scdir>/Utilities | util_objt_cnstr_lowlevel.fsl

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_create_hole_curv_func) (	
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj,		/* @parm	<in> | object								*/
	fzrt_int				findx,		/* @parm	<in> | the index of the face into which to insert the hole curve	*/
	fzrt_int				*pindx,		/* @parm	<in> | array of point indices to connect	*/
	fzrt_int				npindx,		/* @parm	<in> | number of point indices in array	*/
	fzrt_int				*cindx		/* @parm	<out_opt> | index of new curve			*/
	);


/************************************************************************
	@fsfunc_t

	@desc		Allocates the face, curve, segment and point storage of an object 
				to be at least as large as indicated by the counters passed in.<nl>
				When constructing an object face by face and it is known how many 
				faces will be created, it will be much faster to pre allocate the 
				storage upfront. If this function is not called, fz_objt_fact_create_face
				and fz_objt_fact_add_pnts will allocated storage for faces, curves 
				and segments as needed. However, memory fragmentation will occur 
				and each check whether more storage is needed and possible allocation 
				of more memory when needs is slower than allocating the memory in one shot
				upfront.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_fact_create_face,fz_objt_fact_add_pnts

	@exfile		<scdir>/Tools | tool_star.fsl

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_allocate_func) (
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in> | object										*/
	fzrt_int				nface,		/* @parm	<in> | number of faces to allocate
									   @rimin	1													*/
	fzrt_int				ncurv,		/* @parm	<in> | number of curves to allocate
									   @rimin	1													*/
	fzrt_int				nsegt,		/* @parm	<in> | number of segments to allocate
									   @rimin	1													*/
	fzrt_int				ncord		/* @parm	<in> | number of coordinates(points) to allocate
									   @rimin	1													*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Links faces at their seams.<nl>
				This function is usually called after new faces were 
				created via fz_objt_fact_create_face. 
				Note, that faces are only linked together if their edges 
				are reversely coincident. 
				That is, if the segment of one face goes from pindx 'm' to pindx 'n', 
				the neighboring face's segment must run from pindx 'n' to pindx 'm'.

	@return		Error codes

	@avail		5.0.0.0

	@expl		fz_xyz_td				pts[4];
				fzrt_int				pindx[4];
				fz_objt_ptr		new_obj;
		
				// MAKE A NEW EMPTY OBJECT
				fz_objt_cnstr_objt_new(windex,&new_obj);
				
				// PREALLOCATE STORAGE : 6 FACES, 6 CURVES, 24 SEGMENTS AND 8 POINTS
				fz_objt_fact_allocate(windex,new_obj,6,6,24,8);
				
				// STORE THE 8 POINTS
				pts[0] = {  0.0,  0.0,  0.0};
				pts[1] = {100.0,  0.0,  0.0};
				pts[2] = {100.0,100.0,  0.0};
				pts[3] = {  0.0,100.0,  0.0};
				pts[4] = {  0.0,  0.0,100.0};
				pts[5] = {100.0,  0.0,100.0};
				pts[6] = {100.0,100.0,100.0};
				pts[7] = {  0.0,100.0,100.0};
				fz_objt_fact_add_pnts(windex,new_obj,pts,8);

				// CREATE THE 6 FACES
				pindx[0] = 0;				// BOTTOM
				pindx[1] = 1;
				pindx[2] = 2;
				pindx[3] = 3;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);	
			
				pindx[0] = 7;				// TOP
				pindx[1] = 6;
				pindx[2] = 5;
				pindx[3] = 4;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);	
			
				pindx[0] = 0;				// FRONT
				pindx[1] = 1;
				pindx[2] = 5;
				pindx[3] = 4;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);	
			
				pindx[0] = 1;				// RIGHT
				pindx[1] = 2;
				pindx[2] = 6;
				pindx[3] = 5;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);	
			
				pindx[0] = 2;				// BACK
				pindx[1] = 3;
				pindx[2] = 7;
				pindx[3] = 6;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);	
			
				pindx[0] = 3;				// LEFT
				pindx[1] = 0;
				pindx[2] = 4;
				pindx[3] = 7;
				fz_objt_fact_create_face(windex,new_obj,pindx,4,NULL);
				
				// LINK ALL FAFES TO FORM A SOLID
				fz_objt_fact_link_faces(windex,new_obj);
				
				The sample code above creates a cube shaped object. The last function call,
				fz_objt_fact_link_faces, links all the faces at their seams and creates a
				solid object. If that call were not made, the object would stay a surface
				object with six unlinked faces.

	@see		

	@exfile		<scdir>/Utilities | util_objt_cnstr_lowlevel.fsl
	@exfile		<scdir>/Tools | tool_star.fsl

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_link_faces_func) (	
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in> | object			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Cleans up the facetted topology and geometry of an object :<nl>
				- Removes unreferenced points.<nl>
				- Removes unreferenced segments.<nl>
				- Removes unreferenced curves.<nl>
				- Removes degenerate segments (same point index at start and end).<nl>
				Note : this function also calls fz_objt_fact_link_faces at the end of 
				cleanup.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr,modl_util

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_fact_cleanup_func) (
	fzrt_int				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in> | object			*/
	);


/************************************************************************
	EDITING
*************************************************************************/
	
/************************************************************************
	GENERAL
*************************************************************************/

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

	@fsfunc_t

	@desc		Deletes an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_cnstr_objt_new

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_objt_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in> | object			*/
	);

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

	@fsfunc_t

	@desc		Copies an object in place.<nl>
				If unique_name is TRUE a new unique object name is created. 
				Otherwise the name of the source object is copied.
				If the source object was part of the project's database, 
				fz_objt_add_objt_to_project needs to be called to properly add 
				the new object to the database.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_data,fz_objt_edit_copy_objt_geom,
				fz_objt_edit_copy_objt_to_windex,fz_objt_edit_copy_objt_data_to_windex

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_func) (					
	fzrt_int 				windex,				/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,			/* @parm	<in> | source object									*/
	fzrt_boolean		unique_name,		/* @parm	<in> | if TRUE, a new unique object name is created, 
														otherwise the name of the source object is copied		*/
	fz_objt_ptr		*new_obj			/* @parm	<out> | new object										*/
	);

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

	@fsfunc_t

	@desc		Copies the content (data) of one object (src_obj) to another,
				existing object (dst_obj).If the existing object's content is not empty, 
				the content is deleted first. 
				If unique_name is TRUE an new unique object name is created. 
				Otherwise the name of the source object is copied.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_objt,fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_geom,
				fz_objt_edit_copy_objt_to_windex,fz_objt_edit_copy_objt_data_to_windex

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_data_func) (					
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,		/* @parm	<in> | source object									*/
	fz_objt_ptr		dst_obj,		/* @parm	<in_out> | destination object						*/
	fzrt_boolean		unique_name		/* @parm	<in> | if TRUE, a new unique object name is created, 
													otherwise the name of the source object is copied		*/
	);

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

	@fsfunc_t

	@desc		Copies the geometry (face, curves, segments, points ...) of one object 
				(src_obj) to another, existing object (dst_obj). 
				It does not copy the parametric data of the source object. That is, the
				parameters of the controls of the destination object remain in place, if
				they exist.
				Unlike fz_objt_edit_copy_objt_data, this function does not copy the 
				attributes of the source object, but retains the object level 
				attributes of the destination object. 
				Non object level attributes of the destination object are lost. 
				If the existing object's geometry is not empty, the geometry is deleted first.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_objt,fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_data,
				fz_objt_edit_copy_objt_to_windex,fz_objt_edit_copy_objt_data_to_windex

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_geom_func) (					
	fzrt_int 			windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,		/* @parm	<in> | source object				*/
	fz_objt_ptr		dst_obj			/* @parm	<in_out> | destination object	*/
	);

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

	@fsfunc_t

	@desc		Copies the geometry (face, curves, segments, points ...) of one object 
				(src_obj) to another, existing object (dst_obj). 
				It also copies the parametric data of the source object. If the source
				is not a parametric object but the destination is, the controls of the
				destination are deleted.
				Unlike fz_objt_edit_copy_objt_data, this function does not copy the 
				attributes of the source object, but retains the object level 
				attributes of the destination object. 
				Non object level attributes of the destination object are lost. 
				If the existing object's geometry is not empty, the geometry is deleted first.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_objt,fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_data,
				fz_objt_edit_copy_objt_to_windex,fz_objt_edit_copy_objt_data_to_windex

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_geom_cntl_func) (					
	fzrt_int 			windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		src_obj,		/* @parm	<in> | source object				*/
	fz_objt_ptr		dst_obj			/* @parm	<in_out> | destination object	*/
	);


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

	@fsfunc_t

	@desc		Copies an object from one project (windex) to another.
				Unlike fz_objt_edit_copy_objt, this function copies between different projects. 
				It also makes sure that all the referenced attributes are present 
				in the destination windex. If unique_name is TRUE an new unique object name is created. 
				Otherwise the name of the source object is copied.
				If the source object was part of the project's database, fz_objt_add_objt_to_project needs 
				to be called to properly add the new object to the database.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_objt,fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_data,
				fz_objt_edit_copy_objt_geom,fz_objt_edit_copy_objt_data_to_windex

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_to_windex_func) (					
	fzrt_int 				src_windex,			/* @parm	<in> | source project									*/
	fz_objt_ptr		src_obj,			/* @parm	<in> | source object									*/
	fzrt_int 				dst_windex,			/* @parm	<in> | destination project								*/
	fzrt_boolean		unique_name,		/* @parm	<in> | if TRUE, a new unique object name is created, 
														otherwise the name of the source object is copied		*/
	fz_objt_ptr		*new_obj			/* @parm	<out> | destination object								*/
	);
											
/************************************************************************

	@fsfunc_t

	@desc		Copies the content of one object (src_obj) from one project (src_windex) 
				to another existing object (dst_obj) in another project (dst_windex).
				Unlike fz_objt_edit_copy_objt_data, this function copies between different projects. 
				It also makes sure that all the referenced attributes are present 
				in the destination windex.
				If unique_name is TRUE an new unique object name is created. 
				Otherwise the name of the source object is copied.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_objt,fz_objt_edit_copy_objt,fz_objt_edit_copy_objt_data,
				fz_objt_edit_copy_objt_geom,fz_objt_edit_copy_objt_to_windex

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_copy_objt_data_to_windex_func) (
	fzrt_int 				src_windex,		/* @parm	<in> | source project									*/
	fz_objt_ptr		src_obj,		/* @parm	<in> | source object									*/
	fzrt_int 				dst_windex,		/* @parm	<in> | destnation project								*/
	fz_objt_ptr		dst_obj,		/* @parm	<in_out> | destination object						*/
	fzrt_boolean		unique_name		/* @parm	<in> | if TRUE, a new unique object name is created, 
													otherwise the name of the source object is copied		*/
	);

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

	@fsfunc_t

	@desc		Transforms an object with a matrix.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_uniscale_objt,fz_objt_edit_scale_objt,fz_objt_edit_move_objt,fz_objt_edit_rotate_objt

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_objt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object					*/
	fz_mat4x4_td		*mat		/* @parm	<in> | matrix to transform object by	*/
	);

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

	@fsfunc_t

	@desc		Moves an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_uniscale_objt,fz_objt_edit_scale_objt,fz_objt_edit_transform_objt,fz_objt_edit_rotate_objt

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_move_objt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object		*/
	fz_xyz_td				*trl		/* @parm	<in> | translation vector	*/
	);

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

	@fsfunc_t

	@desc		Rotates an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_uniscale_objt,fz_objt_edit_scale_objt,fz_objt_edit_transform_objt,fz_objt_edit_move_objt

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_rotate_objt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object		*/
	double				angle,		/* @parm	<in> | angle to rotate (in radians)		*/
	fz_axis_enum		axis		/* @parm	<in> | axis of rotation	*/
	);

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

	@fsfunc_t

	@desc		Uniformly scales an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_rotate_objt,fz_objt_edit_scale_objt,fz_objt_edit_transform_objt_func,fz_objt_edit_move_objt

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_uniscale_objt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object			*/
	double				scale		/* @parm	<in> | uniform scale factor. The scale factor
												can be any value except 0.0.	*/
	);

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

	@fsfunc_t

	@desc		Independently scales an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_rotate_objt,fz_objt_edit_uniscale_objt,fz_objt_edit_transform_objt_func,fz_objt_edit_move_objt

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_scale_objt_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object				*/
	fz_xyz_td				*scl		/* @parm	<in> | independent scale factor. The scale factors
												can be any value except 0.0.	*/
	);

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

	@fsfunc_t

	@desc		Projects all the points of an object onto a plane.<nl>
				The plane is defined by 3 points (origin, x axis point and y axis point). 
				This function works on plain facetted objects only. 
				Smooth and controlled objects will be dropped to plain facetted first.

	@return		Error codes<nl>
				math error, if it cannot define a plane with the points

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_project_on_plane_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object (must be plain facetted)	*/
	fz_xyz_td					*origin,		/* @parm	<in> | origin point of plane					*/
	fz_xyz_td					*xaxis_pt,		/* @parm	<in> | x axis point of plane					*/
	fz_xyz_td					*yaxis_pt		/* @parm	<in> | y axis point of plane					*/
	);

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

	@fsfunc_t

	@desc		Regenerates the shape of a parametric (controlled) object.<nl>
				This function needs to be called after changing one or more parameters 
			 	of a controlled object via the respective fz_objt_edit_xxxx_parm_set function of that 
				object type.

	@return		Error codes<nl>
				MODEL_ERR_WRONG_OBJT_TYPE - object passed in is not a parametric object

	@avail		5.0.0.0

	@expl		// CHANGE THE NUMBER OF STEPS OF A REVOLVED OBJECT
				lval = 32;	fz_type_set_int(&lval,data);
				fz_objt_edit_revolve_parm_set(windex,revl_obj,FZ_OBJT_REVOLVE_PARM_FACT_STEPS,&data);
				
				// CHANGE THE ANGLE OF A REVOLVED OBJECT
				dval = PI;	fz_type_set_double(&dval,data);
				fz_objt_edit_revolve_parm_set(windex,revl_obj,FZ_OBJT_REVOLVE_PARM_ANGLE,&data);
				
				// REGENERATE THE SHAPE
				fz_objt_edit_parm_regen(windex,revl_obj);

	@see		

	@exfile		<scdir>/Utilities | util_objt_edit_genr.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_parm_regen_func) (
	fzrt_int					windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj			/* @parm	<in> | parametric object	*/
	);


/************************************************************************
	PLINES
*************************************************************************/

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

	@fsfunc_t

	@desc		Join two open wires. Creates a composite curve, if one of the wires
				is an arc, spline or composite curve. When joining vector lines,
				the result remains a plain object.
				The resulting object is obj1, which contains all the segments from 
				the original obj1 and obj2. obj2 remains unaltered.
				
				If the two wires are of mixed input (smooth / facetted), keep_smooth
				determines what the result is :						<nl>
				keep_smooth == TRUE	 :	The result is smooth		<nl>
				keep_smooth == FALSE :	The result is facetted		<nl>
				
				HINTS : <nl>
					The end points of the wires to be joined must touch (within
					FZ_MATH_TOL_LIN tolerance).<nl>
					This function creates a closed wire, if the two wires
					form a closed loop.

	@return		Error codes  <nl>
				MODEL_ERR_NOT_OPEN_WIRE				one or both objects not an open wire  <nl>
				MODEL_ERR_WIRES_DONT_TOUCH			nothing joined, wires don't touch  <nl>

	@avail		5.0.0.0

	@see		fz_objt_cnstr_spline,fz_objt_cnstr_arc,fz_objt_cnstr_vline,
				fz_objt_cnstr_spline_through_pts,fz_objt_cnstr_cubic_bezier,
				*fz_objt_cnstr_multi_spline,fz_objt_cnstr_multi_spline_through_pts

	@exfile		<scdir>/Utilities | util_objt_cnstr_plin.fsl

	@toc		modl_edit


*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_join_open_wires_func) (					
	fzrt_int 			windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in_out> | first wire object. Will also contain the joined second object after the operation is complete. */
	fz_objt_ptr		obj2,		/* @parm	<in> | second wire object */
	fzrt_boolean	keep_smooth	/* @parm	<in> | If the two wires are of mixed type (smooth/facetted), this argument determines whether the result stays smooth or facetted */
	);

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

	@fsfunc_t

	@desc		Joins two or more open wires. Creates a composite curve, if one of the wires
				is an arc, spline or composite curve. When joining vector lines,
				the result remains a plain object.
				As there may be more than one resulting object from sets of connected
				wires, they are stored in the object list passed in. The source objects
				remain unaltered.
				The end points of the wires to be joined must touch (within
				FZ_MATH_TOL_LIN tolerance). This function creates a closed wire, if 
				the wires form a closed loop.
				
				If the two wires are of mixed input (smooth / facetted), keep_smooth
				determines what the result is :						<nl>
				keep_smooth == TRUE	 :	The result is smooth		<nl>
				keep_smooth == FALSE :	The result is facetted		<nl>
				
	@return		Error codes <nl>
				MODEL_ERR_NOT_OPEN_WIRE				atleast one object is not an open wire <nl>
				MODEL_ERR_WIRES_DONT_TOUCH			nothing joined, wires don't touch <nl>

	@avail		5.0.0.0

	@see		fz_objt_cnstr_spline,fz_objt_cnstr_arc,fz_objt_cnstr_vline,
				fz_objt_cnstr_spline_through_pts,fz_objt_cnstr_cubic_bezier,
				*fz_objt_cnstr_multi_spline,fz_objt_cnstr_multi_spline_through_pts

	@exfile		<scdir>/Utilities | util_objt_cnstr_plin.fsl

	@toc		modl_edit


*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_join_open_wires_multi_func) (					
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			*src_obj,		/* @parm	<in> | array with all open wire object to be joined */
	fzrt_int				nobj,			/* @parm	<in> | the number of objects in the array */
	fzrt_boolean		keep_smooth,	/* @parm	<in> | If the two wires are of mixed type (smooth/facetted), this argument determines whether the result stays smooth or facetted */
	fz_enty_list_ptr 	ent_list		/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Separates a composite curve (pline) into a set of objects, each of which
				corresponds to one of the component curves of the composite curve.
				For example, a composite curve, that was drawn starting with an arc,
				then drawn with a cubic bezier and finished with a straight line is split into
				three objects. The first is an arc object, the second a spline object
				and the third a single segment wire object. The group_lines option indicates,
				whether consecutive straight line segments are constructed as a single
				object (for efficiency purpose) or as separate objects.
				
	@return		Error codes <nl>
				MODEL_ERR_WRONG_OBJT_TYPE	the object passed in is not a composite curve

	@avail		5.5.0.0

	@see		fz_objt_edit_join_open_wires,fz_objt_edit_join_open_wires_multi

	@toc		modl_edit


*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_plin_separate_func) (					
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in> | the composite curve object to be separated */
	fzrt_boolean		group_lines,	/* @parm	<in> | If set to TRUE, multiple conswcutive straight lines are created a one new object.
														   If set to FALSE, they are created as separate objects. */
	fz_enty_list_ptr 	ent_list		/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Applies a fillet or bevel to selected points or all points of a 2D (surface) object.
	
	@return		Error codes

	@avail		8.0.0.0

	@see		fz_objt_edit_join_open_wires,fz_objt_edit_join_open_wires_multi

	@toc		modl_edit


*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_fillet_bevel_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,				/* @parm	<in> | the 2d object to be filleted/beveled  */
	fzrt_int			npindx_list,		/* @parm	<in> | number of entries in the point index list.
															If this is 0 then the operation is applied to the entire object (ie all points). */
	fzrt_int			*pindx_list,		/* @parm	<in> | list of point index's that the operation should be applied to	*/
	fzrt_int			do_bevel,			/* @parm	<in> | if TRUE a bevel is created, if FALSE then a fillet is created	*/
	double				value,				/* @parm	<in> | radius of a fillet or linear offset for a bevel	*/
	fzrt_int			value_is_distance	/* @parm	<in> | when TRUE the value is the length of the bevel or cord length fior a fillet	*/
	);

/************************************************************************
	MESHES
*************************************************************************/


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

	@enum

	@desc	Indicates what type of triangulation to triangulate an object by. 
			These types correspond to the options presented in the Options dialog of 
			the triangulate tool.

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_edit

*********************************************************************************************************/
typedef enum fz_objt_tria_type_enum
{
	FZ_OBJT_TRIANG_TYPE_BOUNDARY = 0,		/*  @emem triangulate by boundary	*/
	FZ_OBJT_TRIANG_TYPE_RADIAL,				/*  @emem triangulate by radial		*/
	FZ_OBJT_TRIANG_TYPE_ZIGZAG,				/*  @emem triangulate by zig zag	*/
	FZ_OBJT_TRIANG_TYPE_CENTER,				/*  @emem triangulate by center		*/

	MODEL_EDIT_TRIANG_TYPE_MAX
} fz_objt_tria_type_enum;



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

	@fsfunc_t

	@desc		Creates triangular faces on an object.
				Optionally, only selected faces can be triangulated. 
				This is specified through the face_list array, which contains 
				the indices of the faces to be triangulated. 
				If face_list is NULL, the whole object is triangulated.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_triangulate_func) (
	fzrt_int 					windex,					/* @parm	<in> | project window index */
	fz_objt_ptr			obj,					/* @parm	<in_out> | object											*/
	fz_objt_tria_type_enum			triang_type,			/* @parm	<in> | type of triangulation									*/
	fzrt_boolean			non_planar_only,		/* @parm	<in> | if TRUE, only the non planar faces are triangulated, 
																otherwise all faces are triangulated							*/
	fzrt_boolean			strict_planarity,		/* @parm	<in> | if TRUE, the triangulation process is more sensitive 
																to smaller disturbances in the planarity of a face				*/
	fzrt_int					*face_list,				/* @parm	<in_opt> | list of faces to triangulate					*/
	fzrt_int					n_face_list				/* @parm	<in_opt> | number of faces in list						*/
	);


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

	@enum

	@desc	Indicates what type of decomposition to use for a simple decomposition
			of an object. Four levels are available.<nl><nl>
				Level 1 : Removing holes. All faces, which have holes
						  connect the holes to the outer boundary of the face.<nl>
				Level 2 : Removing concavities. Same as level 1, plus concave
						  corners are removed.<nl>
				Level 3 : Creating quadrangles. Same as level 2, plus all faces
						  which have more then 4 sides are split into quadrangles
						  and possibly triangles.<nl>
				Level 4 : Creating triangles. Same as level 3, plus all faces
						  are split into triangles.<nl><nl>

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_edit

*********************************************************************************************************/
typedef enum fz_decomp_simple_enum
{
	FZ_DECOMP_SIMPLE_NO_HOLES,		/*  @emem Remove all holes			*/
	FZ_DECOMP_SIMPLE_NO_CONCAVE,	/*  @emem Remove concavities		*/
	FZ_DECOMP_SIMPLE_ALL_QUAD,		/*  @emem Generate all quadrangles. Some triangles may result as well.	*/
	FZ_DECOMP_SIMPLE_ALL_TRIA,		/*  @emem Generate all triangles	*/
	FZ_DECOMP_SIMPLE_MAX

} fz_decomp_simple_enum;

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

	@fsfunc_t

	@desc	Decomposes all faces of an object into simple polygonal faces. 
			Four level of decomposition are available :<nl><nl>

				Level 1 : Removing holes. All faces, which have holes
						  connect the holes to the outer boundary of the face.<nl>
				Level 2 : Removing concavities. Same as level 1, plus concave
						  corners are removed.<nl>
				Level 3 : Creating quadrangles. Same as level 2, plus all faces
						  which have more then 4 sides are split into quadrangles
						  and possibly triangles.<nl>
				Level 4 : Creating triangles. Same as level 3, plus all faces
						  are split into triangles.<nl><nl>
				
				
			Open wire faces that may be part of the object are ignored. The number
			of decomposed faces is returned in the argument num_faces. The face
			topology is returned in the pindx_list argument. It is a list which
			contains integer values. The first value is a counter "n". It indicates
			how many sides the first face has. The next "n" values in the list are point 
			indices which reference the points of the facetted topology of the object.
			The next value in the list is again the counter "n", now for the second
			face. etc. The counter "n" show up exactly num_faces times in the pindx_list
			argument.<nl><nl>
			
					n1<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(n1-1)<nl>
					
					n2<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(n2-1)<nl>
					
					.<nl>
					.<nl>
					.<nl>
					
					nm<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(nm-1)<nl><nl>
				
			When the all triangles level is selected, the counter is obviously  redundant, but
			it is still included in the pindx_list, for consistency purpose.
			The optional findx_list argument contains the index of the original face 
			of the object. Note, that if the object is a smooth object, the face index 
			references a face in the smooth topology, not the facetted topology. (unlike the indices in the 
			pindx_list, which always reference the facetted points).

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_wire_topo.fsl

	@toc		modl_edit
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_decompose_simple_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 	*/
	fz_objt_ptr				obj,			/* @parm	<in> | object								*/
	fz_decomp_simple_enum	decomp_type,	/* @parm	<in> | The type of decomposition requested	*/
	fzrt_int					*num_faces,		/* @parm	<out> | The number of faces resulting from the decomposition */
	fz_type_list_ptr		pindx_list,		/* @parm	<out> | The list with point indices of the facetted topology */
	fz_type_list_ptr		findx_list		/* @parm	<out_opt> | The list with indices of the original face */
	);


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

	@fsfunc_t

	@desc	Decomposes all faces of an object into simple polygonal faces. It also computes
			normal vectors at each point of each face. The direction of the normal
			vector is determined by the smooth shading attribute associated with the object.
			For example, at a corner of a cube, three faces meet. At that corner, three
			point normals will be calculated. If the corner is not smooth shaded, the
			normals will all point in a different direction, which is the direction of the
			face that the point belongs to. If the corner is smooth shaded (the
			user may have selected to smooth shade all faces of that object), all three
			normals will point in the same direction.
			
			Four levels of decomposition are available :<nl><nl>

				Level 1 : Removing holes. All faces, which have holes
						  connect the holes to the outer boundary of the face.<nl>
				Level 2 : Removing concavities. Same as level 1, plus concave
						  corners are removed.<nl>
				Level 3 : Creating quadrangles. Same as level 2, plus all faces
						  which have more then 4 sides are split into quadrangles
						  and possibly triangles.<nl>
				Level 4 : Creating triangles. Same as level 3, plus all faces
						  are split into triangles.<nl><nl>
				
				
			Open wire faces that may be part of the object are ignored. The number
			of decomposed faces is returned in the argument num_faces. The face
			topology is returned in the pindx_list argument. It is a list which
			contains integer values. The first value is a counter "n". It indicates
			how many sides the first face has. The next "n" values in the list are point 
			indices which reference the points of the facetted topology of the object.
			The next value in the list is again the counter "n", now for the second
			face. etc. The counter "n" show up exactly num_faces times in the pindx_list
			argument.<nl><nl>
			
					n1<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(n1-1)<nl>
					
					n2<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(n2-1)<nl>
					
					.<nl>
					.<nl>
					.<nl>
					
					nm<nl>
					pindx(0)<nl>
					pindx(1)<nl>
					...<nl>
					pindx(nm-1)<nl><nl>
				
			When the "Level 4: Creating Triangles" level is selected, the counter is obviously redundant, but
			is included in the pindx_list, for consistency purposes.
			The optional findx_list argument contains the index of the original face 
			of the object. Note, if the object is a smooth object, the face index 
			references a face in the smooth topology, not the facetted topology. (unlike the indices in the 
			pindx_list, which always reference the facetted points).
			
			The normals are returned in the norm_list argument. They are of type fz_xyz_td. This list is structured 
			in the same way as the pindx_list list, but does not have the counter for each face. 
			That is, the normals are stored for each face in the order of the points around the face.<nl><nl>
			
				normal of point 1 of face 1<nl>
				normal of point 2 of face 1<nl>
				...<nl>
				normal of point n1 of face 1<nl>
				normal of point 1 of face 2<nl>
				normal of point 2 of face 2<nl>
				...<nl>
				normal of point n2 of face 2<nl>
					.<nl>
					.<nl>
					.<nl>
				normal of point 1 of face m<nl>
				normal of point 2 of face m<nl>
				...<nl>
				normal of point nm of face m<nl>
				

	@return		Error codes

	@avail		5.5.0.0

	@see		

	@exfile		<scdir>/Utilities | util_wire_topo.fsl

	@toc		modl_edit
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_decompose_simple_with_normals_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 	*/
	fz_objt_ptr				obj,			/* @parm	<in> | object								*/
	fz_decomp_simple_enum	decomp_type,	/* @parm	<in> | The type of decomposition requested	*/
	fzrt_int					*num_faces,		/* @parm	<out> | The number of faces resulting from the decomposition */
	fz_type_list_ptr		pindx_list,		/* @parm	<out> | The list with point indices (as variable fzrt_int) of the facetted topology */
	fz_type_list_ptr		findx_list,		/* @parm	<out_opt> | The list with indices (as variable fzrt_int) of the original face */
	fz_type_list_ptr		norm_list		/* @parm	<out_opt> | The list with normals (as variable fz_xyz_td), one for each point of each face */
	);

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

	@fsfunc_t

	@desc		Meshes an object into a set of rectangular faces.<nl>
				The size and orientation of the meshed faces are determined by the intersection 
				of the object's faces with an imaginary 3D grid. 
				This grid has separate dimensions in x y and z, 
				a rotation in 3D space and an origin. 
				The grid's parameters can be set in the mesh options. 
				In addition meshing can be performed in all 3 grid dimensions, or in any 
				combination of x, y or z dimensions only (for example x direction only, 
				or x and z dimensions only).<nl>
				
				Smooth and controlled objects are converted to plain facetted objects. 
				Objects must be solids of surfaces.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_mesh_face

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_mesh_object_func) (
	fzrt_int 					windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj,		/* @parm	<in_out> | object			*/
	fz_objt_mesh_opts_ptr			opts		/* @parm	<in_opt> | mesh options	*/
	);

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

	@fsfunc_t

	@desc		Meshes a face of an object into a set of rectangular faces. 
				The size and orientation of the meshed faces are determined by a 2D grid. 
				This grid has separate dimensions in x and y. The x direction is determined
				by the faces first segment plus a rotation.
				The mesh options determine the grid x/y dimension 
				(x and y of FZ_OBJT_MESH_OPTS_IVAL with z ignored) and  rotation
				(z angle of FZ_OBJT_MESH_OPTS_ROTATION, with x and y angle ignored).
				The x and y value of FZ_OBJT_MESH_OPTS_ORIGIN determines an additional
				translation of the grid from the face's first point, relative to the
				face's x and y axis.
				Meshing can be performed the in x and y dimensions, or in x and y
				separately. This is again determined by the mesh options
				(FZ_OBJT_MESH_OPTS_USE_IVAL_X and FZ_OBJT_MESH_OPTS_USE_IVAL_Y, with
				 FZ_OBJT_MESH_OPTS_USE_IVAL_Z not used)
				
				Smooth and controlled objects are converted to plain facetted objects.
				Objects must be solids of surfaces.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_mesh_object

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_mesh_face_func) (					
	fzrt_int 					windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj,		/* @parm	<in_out> | object			*/
	fzrt_int						findx,		/* @parm	<in> | face index				*/
	fz_objt_mesh_opts_ptr			opts		/* @parm	<in_opt> | mesh options	*/
	);

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

	@fsfunc_t

	@desc		Reduces the meshing of an object based on the angle of adjacent faces.
				Also reduces the segmentation of face boundaries, based on the angle
				between the segments. 
				If do_color is TRUE, only faces with the same surface style are reduced. 
				Likewise if do_tspace is TRUE, only faces which belong to the same 
				texture space are reduced.
				
				The optional face_list parameters allow for specific faces to be
				reduced.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_meshes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_reduce_mesh_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object							*/
	double					face_angle,		/* @parm	<in> | face angle. If two adjacent face enclose an angle
																less than this value, they are merged together.
																The angle is measured between the normal directions
																(perpendiculars) of the faces. An angle of 0.0 indicates
																that both faces are parallel.
											   @rmin_max	0.0 | PI/4.0 (45 degrees)					*/
	double					edge_angle,		/* @parm	<in> | edge angle.  If two adjacent consecutive edges enclose an angle
																less than this value, they are merged together.
																The angle is measured between the normal directions
																(perpendiculars) of the edges. An angle of 0.0 indicates
																that both edges are collinear.
											   @rmin_max	0.0 | PI/4.0 (45 degrees)					*/
	fzrt_boolean			do_color,		/* @parm	<in> | if TRUE, only faces with the same 
														surface style are reduced, 
														otherwise all faces are reduced					*/
	fzrt_boolean			do_tspace,		/* @parm	<in> | if TRUE, only faces which belong 
														to the same texture space are reduced,
														otherwise all faces are reduced					*/
	fzrt_int					*face_list,		/* @parm	<in_opt> | list of faces to be reduced	*/
	fzrt_int					n_face_list		/* @parm	<in_opt> | number of faces in list		*/
	);

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

	@enum

	@desc	Indicates what part of the object remains fixed during a deformation (pivot point).

	@avail	5.0.0.0

 	@see	fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
 			fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend

	@toc	modl_edit

*********************************************************************************************************/
typedef enum fz_objt_dfrm_center_enum
{
	FZ_OBJT_DEFORM_CENTER_TOP = 0,				/*  @emem top of object remains fixed		*/
	FZ_OBJT_DEFORM_CENTER_MIDDLE,					/*  @emem center of object remains fixed	*/
	FZ_OBJT_DEFORM_CENTER_BOTTOM,					/*  @emem bottom of object remains fixed	*/

	MODEL_DEFORM_CENTER_MAX
} fz_objt_dfrm_center_enum;

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

	@fsfunc_t

	@desc		Applies a shear deformation to an object.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0. 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation. 
				center determines the pivot point of the deformation. 
				dx_dy is the distance of the shear measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to the rotated coordinate system. 
				The shear axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,fz_objt_edit_deform_bulge,
				fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_shear_func) (					
	fzrt_int 					windex,			/* @parm		<in> | project window index */
	fz_objt_ptr			obj,			/* @parm		<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,			/* @parm		<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
															the axis of deformation												*/
	double					min,			/* @parm		<in> | minimum vertical extents of the deform bounding box<nl>
								  			   @rimin_max	0.0	 | max							*/
	double					max,			/* @parm		<in> | maximum vertical extents of the deform bounding box<nl>
								  			   @rmin_imax	min | 1.0							*/
	fz_xy_td					*dx_dy,			/* @parm		<in_opt> | the distance of the shear measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/
	fz_xy_td					*sx_sy				/* @parm		<in_opt> | the scale of the shear measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/									
															
	);

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

	@fsfunc_t

	@desc		Applies a taper deformation to an object. 
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation. 
				center determines the pivot point of the deformation. 
				sx_sy is the scale of the taper measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to the rotated coordinate system. 
				The taper axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_twist,fz_objt_edit_deform_bulge,
				fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_taper_func) (					
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,			/* @parm	<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,		/* @parm	<in> | plane which orients 
														the axis of deformation												*/
	double					min,			/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  			   @rimin_max	0.0	 | max							*/
	double					max,			/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			   @rmin_imax	min | 1.0	
								  			   
								  			   						*/
								  										  			   						
	fz_xy_td					*dx_dy,			/* @parm		<in_opt> | the distance of the taper measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/
	fz_xy_td					*sx_sy				/* @parm		<in_opt> | the scale of the shear measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/	
	
	);

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

	@fsfunc_t

	@desc		Applies a twist deformation to an object.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation. 
				center determines the pivot point of the deformation. 
				angle is the twist angle measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to the rotated coordinate system. 
				The twist axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system. 
				If make_fact_smooth is TRUE, facetted objects are turned into smooth objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_bulge,
				fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_twist_func) (
	fzrt_int 					windex,					/* @parm	<in> | project window index */
	fz_objt_ptr			obj,					/* @parm	<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,					/* @parm	<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
																the axis of deformation												*/
	double					min,					/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  					   @rimin_max	0.0	 | max							*/
	double					max,					/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			 		   @rmin_imax	min | 1.0							*/
	fzrt_boolean			make_fact_smooth,		/* @parm	<in> | if TRUE, facetted objects are turned into smooth objects; 
																otherwise facetted objects are left facetted						*/
	double					angle					/* @parm	<in> | twist angle measured at the extreme of the deform 
																bounding box, opposite the center and is specified relative to 
																the rotated coordinate system										*/
	);

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

	@fsfunc_t

	@desc		Applies a bulge deformation to an object.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation.<nl>
				center determines the pivot point of the deformation.<nl>
				Note: FZ_OBJT_DEFORM_CENTER_TOP and FZ_OBJT_DEFORM_CENTER_BOTTOM will give
				the same results for this deformation type.<nl>
				bx_by is the bulge factor measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to this rotated coordinate system. 
				The bulge axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system. 
				If make_fact_smooth is TRUE, facetted objects are turned into smooth objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_bulge_func) (
	fzrt_int 					windex,					/* @parm	<in> | project window index */
	fz_objt_ptr			obj,					/* @parm	<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,					/* @parm	<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
																	the axis of deformation												*/
	double					min,					/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  					   @rimin_max	0.0	 | max							*/
	double					max,					/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			 		   @rmin_imax	min | 1.0							*/
	fzrt_boolean			make_fact_smooth,		/* @parm	<in> | if TRUE, facetted objects are turned into smooth objects; 
																otherwise facetted objects are left facetted						*/
	fz_xy_td					*bx_by,					/* @parm	<in> | bulge factor measured at the extreme of the deform 
																bounding box, opposite the center and is specified relative to 
																the rotated coordinate system										*/
															
	fz_xy_td					*sx_sy				/* @parm		<in_opt> | the scale of the bulge measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/	
	);

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

	@fsfunc_t

	@desc		Applies a radial shear deformation to an object.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation.<nl>
				center determines the pivot point of the deformation.<nl>
				Note: FZ_OBJT_DEFORM_CENTER_TOP and FZ_OBJT_DEFORM_CENTER_BOTTOM will give 
				the same results for this deformation type.<nl>
				sx_sy is the shear factor measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to this rotated coordinate system. 
				The shear axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system. 
				If make_fact_smooth is TRUE, facetted objects are turned into smooth objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_bend,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_radial_shear_func) (
	fzrt_int 					windex,					/* @parm	<in> | project window index */
	fz_objt_ptr			obj,					/* @parm	<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,					/* @parm	<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
																	the axis of deformation												*/
	double					min,					/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  					   @rimin_max	0.0	 | max							*/
	double					max,					/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			 		   @rmin_imax	min | 1.0							*/
	fzrt_boolean			make_fact_smooth,		/* @parm	<in> | if TRUE, facetted objects are turned into smooth objects; 
																otherwise facetted objects are left facetted						*/																
	fz_xy_td					*dx_dy,			/* @parm		<in_opt> | the distance of the shear measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/
	fz_xy_td					*sx_sy				/* @parm		<in_opt> | the scale of the shear measured at the extreme of the */
					/*											deform bounding box, opposite the center and is specified 
															relative to the rotated coordinate system							*/	
																
																
																
	);

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

	@fsfunc_t

	@desc		Applies a bend deformation to an object.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation. 
				center determines the pivot point of the deformation.
				angle is the bending angle measured at the extreme of the deform bounding box, 
				opposite the center and is specified relative to this rotated coordinate system. 
				The bending axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system. 
				if bend_x is TRUE, the bend occurs along the local x axis. 
				Otherwise the object is bent along the local y axis. 
				If make_fact_smooth is TRUE, facetted objects are turned into smooth objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bezier,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_bend_func) (
	fzrt_int 					windex,					/* @parm	<in> | project window index */
	fz_objt_ptr			obj,					/* @parm	<in_out> | object												*/
	fz_objt_dfrm_center_enum		center,					/* @parm	<in> | pivot point of the deformation								*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 																the axis of deformation												*/
	double					min,					/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  					   @rimin_max	0.0	 | max							*/
	double					max,					/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			 		   @rmin_imax	min | 1.0							*/
	fzrt_boolean			make_fact_smooth,		/* @parm	<in> | if TRUE, facetted objects are turned into smooth objects; 
																otherwise facetted objects are left facetted						*/
	fzrt_boolean			bend_x,					/* @parm	<in> | if TRUE, the bend occurs along the local x axis; 
																otherwise the bend occurs along the local y axis					*/
	double					angle					/* @parm	<in> | bend angle measured at the extreme of the deform 
																bounding box, opposite the center and is specified relative to 
																the rotated coordinate system										*/
	);

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

	@fsfunc_t

	@desc		Applies a deformation to an object, based on the shape of a 4 point 
				cubic bezier curve.<nl>
				min and max are the vertical extents of the bounding box with 0.0 <= min < max <= 1.0 
				plane_rot is a zyx rotation of the work coordinate system which orients the 
				axis of deformation. 
				The four points of the bezier curve are defined 
				as xyz offsets from four equally spaced points on the bending axis 
				(i.e. at 0.0, 1/3, 2/3 and 1.0 along the direction of the axis).<nl>
				<nl>
				The bending axis always runs through the center of the bounding box of the object. 
				The bounding box is aligned with the axes of the rotated coordinate system.<nl>
				<nl>
				Note: This deformation only works on facetted, nurbz or patch objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,
				fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_bezier_func) (
	fzrt_int 					windex,				/* @parm	<in> | project window index */
	fz_objt_ptr			obj,				/* @parm	<in_out> | object
															(must be a facetted, nurbz or patch object)							*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
																the axis of deformation												*/
	double					min,				/* @parm	<in> | minimum vertical extents of the deform bounding box<nl>
								  				   @rimin_max	0.0	 | max							*/
	double					max,				/* @parm	<in> | maximum vertical extents of the deform bounding box<nl>
								  			 	   @rmin_imax	min | 1.0							*/
	fz_xyz_td					pts_offset[4],		/* @parm	<in_opt> | distance to the four points of the bezier curve	that are xyz 
															offsets from four equally spaced points on the bending axis			*/		
	fz_xyz_td					scale_offset[4]		/* @parm	<in_opt> | scale factor from the bounding box for the four points of the bezier curve	that are xyz 
															offsets from four equally spaced points on the bending axis			*/
	);

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

	@fsfunc_t

	@desc		Applies a wave deformation to an object.<nl>
				The wave originates at the origin and expands in the plane specified 
				by plane_rot (three angles in zyx order that rotate the world coordinate 
				system).<nl>
				<nl>
				amplitude is the height of a peak or valley. 
				If amplitude is a positive value, the first extreme of the wave is a peak. 
				If it is negative the first extreme is a valley.<nl>
				<nl>
				frequency is the distance between two wave peaks.<nl>
				<nl>
				If circular is TRUE, the wave expands in a circular fashion from the origin. 
				Otherwise the wave is linear, with the wave peaks and valleys 
				running parallel to the y axis of the rotated coordinate system.<nl>
				<nl>
				If do_cosine is TRUE, the wave is a cosine wave (i.e. at the origin, the 
				wave has a peak or valley). 
				Otherwise the wave is a sine wave (wave is at mid level at the origin).<nl>
				<nl>
				This deformation only works on facetted objects.<nl>
				Objects should be sufficiently meshed as this function simply disturbs 
				the points of an object in a wave like pattern. 
				If the object meshing is too coarse relative to the wave frequency, 
				the wave patterns won't be visible.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,
				fz_objt_edit_deform_bezier,fz_objt_edit_deform_random_xyz,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_wave_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object (must be facetted)							*/
	fz_xyz_td					*origin,		/* @parm	<in> | point where wave originates									*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
														the axis of deformation												*/
	double					amplitude,		/* @parm	<in> | height of a peak or valley									*/
	double					frequency,		/* @parm	<in> | distance between two wave peaks<nl>
											   @rmin	0.0										*/
	fzrt_boolean			circular,		/* @parm	<in> | if TRUE, the wave expands in a 
														circular fashion from the origin, 
														otherwise the wave is linear										*/
	fzrt_boolean			do_cosine		/* @parm	<in> | if TRUE, the wave is a cosine wave, 
														otherwise the wave is a sine wave									*/
	);

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

	@fsfunc_t

	@desc		Applies a random deformation to all points of an object. 
				The random disturbance is applied along the orthogonal directions 
				of a reference plane (defined by the angles applied in zyx order). 
				
				A point is disturbed between mist_dist.x and max_dist.x if do_xyz[0] is TRUE. <nl>
				A point is disturbed between mist_dist.y and max_dist.y if do_xyz[1] is TRUE. <nl> 
				A point is disturbed between mist_dist.z and max_dist.z if do_xyz[2] is TRUE. <nl>

				This deformation only works on facetted objects. 
				Objects should be sufficiently meshed as this 
				function simply disturbs the points of an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,
				fz_objt_edit_deform_bezier,fz_objt_edit_deform_wave,fz_objt_edit_deform_random_norm

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_random_xyz_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object (must be facetted)											*/
	fz_map_plane_td 			*plane,	/* @parm		<in> | coordinate system which orients 
														the axis of deformation																*/
	fz_xyz_td					*min_dist,		/* @parm	<in> | minimum distance to disturb points<nl>
								  			   @rmax	max_dist										*/
	fz_xyz_td					*max_dist,		/* @parm	<in> | maximum distance to disturb points<nl>
								  			   @rmin	main_dist										*/
	fzrt_boolean			do_xyz[3]		/* @parm	<in> | which axes to disturb points<nl>
														if do_xyz[0] is TRUE, disturbance is applied to x coordinates<nl>
														if do_xyz[1] is TRUE, disturbance is applied to y coordinates<nl>
														if do_xyz[1] is TRUE, disturbance is applied to z coordinates<nl>					*/
	);

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

	@fsfunc_t

	@desc		Applies a random deformation to all points of an object. 
				The random disturbance is applied along the average face 
				normal direction at each point.<nl>
				This deformation only works on facetted objects.<nl>
				Objects should be sufficiently meshed as this 
				function simply disturbs the points of an object.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_deform_shear,fz_objt_edit_deform_taper,fz_objt_edit_deform_twist,
				fz_objt_edit_deform_bulge,fz_objt_edit_deform_radial_shear,fz_objt_edit_deform_bend,
				fz_objt_edit_deform_bezier,fz_objt_edit_deform_wave,fz_objt_edit_deform_random_xyz

	@exfile		<scdir>/Utilities | util_objt_deform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_deform_random_norm_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index */
	fz_objt_ptr			obj,			/* @parm	<in_out> | object (must be facetted)		*/
	double					min,			/* @parm	<in> | minimum distance to disturb points<nl>
								   			   @rmax	max									*/
	double					max				/* @parm	<in> | maximum distance to disturb points<nl>
								   			   @rmin	min									*/
	);

/************************************************************************
	BOOLEANS
*************************************************************************/

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

	@fsfunc_t

	@desc		Unions two objects.<nl>
				The two objects must be of compatible types : 
				solid + solid or surface + surface.<nl>
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_union_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1 (must be solid or 
												surface and same type as object 2)		*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 (must be solid or 
												surface and same type as object 1)		*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Intersect two objects.<nl>
				The two objects must be of compatible types : 
				solid + solid or surface + surface.<nl>
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_intersection_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1 (must be solid or 
												surface and same type as object 2)		*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 (must be solid or 
												surface and same type as object 1)		*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Difference two objects (obj1 - obj2).<nl>
				The two objects must be of compatible types : 
				solid + solid or surface + surface.<nl>
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_difference_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1 (must be solid or 
												surface and same type as object 2)		*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 (must be solid or 
												surface and same type as object 1)		*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Splits object 1 with object 2.<nl>
				The two objects must be of compatible types : 
				solid + solid or surface + surface.<nl>
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

				If one_way is TRUE, object 1 is split with object 2. Otherwise both
				objects are split against each other (two way split).

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_split_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1 (must be solid or 
												surface and same type as object 2)					*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 (must be solid or 
												surface and same type as object 1)					*/
	fzrt_boolean		one_way,	/* @parm	<in> | if TRUE, object 1 is split with object 2, 
												otherwise both objects are split against each 
												other (two way split)								*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers				*/
	);

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

	@fsfunc_t

	@desc		Unions multiple objects(obj1 + obj2 + obj3 ...).<nl>
				The objects must all be of compatible types : all solids or all surfaces.
				As it is possible that more than one object is created, the pointers of 
				the resulting objects are stored in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_intersection_multi,fz_objt_edit_bool_difference_multi,fz_objt_edit_bool_union,
				fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_union_multi_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			*objs,		/* @parm	<in> | array of objects (must be all of same type)		*/
	fzrt_int				nobjs,		/* @parm	<in> | number of objects in the array */
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Intersect multiple objects.<nl>
				The objects must all be of compatible types : all solids or all surfaces.
				As it is possible that more than one object is created, the pointers of the
				resulting objects are stored in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union_multi,fz_objt_edit_bool_difference_multi,fz_objt_edit_bool_intersection,
				fz_objt_edit_bool_union,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_intersection_multi_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			*objs,		/* @parm	<in> | array of objects (must be all of same type)		*/
	fzrt_int				nobjs,		/* @parm	<in> | number of objects in the array */
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Difference multiple objects (obj1 - obj2 - obj3 ...).
				The objects must all be of compatible types : all solids or all surfaces.
				As it is possible that more than one object is created, the pointers of the 
				resulting objects are stored in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union_multi,fz_objt_edit_bool_intersection_multi,fz_objt_edit_bool_difference,
				fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_boolean.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_bool_difference_multi_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			*objs,		/* @parm	<in> | array of objects (must be all of same type)		*/
	fzrt_int				nobjs,		/* @parm	<in> | number of objects in the array */
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Trims object 1 with object 2.<nl>
				Object 2 must be a solid or a surface. 
				If keep_positive is TRUE, the part of object 1 which is on 
				the positive side of object 2 is kept. 
				Otherwise the part of object 1 which is on 
				the negative side of object 2 is kept. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_trim_with_surface_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,			/* @parm	<in> | object 1									*/
	fz_objt_ptr		obj2,			/* @parm	<in> | object 2 (must be a solid or surface)		*/
	fzrt_boolean		keep_positive,	/* @parm	<in> | if TRUE, the part of object 1 which 
													is on the positive side of object 2 is kept, 
													otherwise the part of object 1 which 
													is on the negative side of object 2 is kept			*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list		/* @parm	<out> | list with new object pointers				*/
	);

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

	@fsfunc_t

	@desc		Trims object 1 with object 2.<nl>
				Object 2 must be an open or closed planar wire. 
				norm indicates the direction along which the cutting wire is projected. 
				If keep_positive is TRUE, the part of object 1 which is on 
				the positive side (relative to norm) of object 2 is kept. 
				Otherwise the part of object 1 which is on 
				the negative side of object 2 is kept. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_trim_with_line_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index 					*/
	fz_objt_ptr			obj1,			/* @parm	<in> | object 1									*/
	fz_objt_ptr			obj2,			/* @parm	<in> | object 2 
													(must be an open or closed planar wire)			*/
	fz_xyz_td			*norm,			/* @parm	<in> | indicates the direction along which 
													the cutting wire is projected					*/
	fzrt_boolean		keep_positive,	/* @parm	<in> | if TRUE, the part of object 1 which 
													is on the positive side of object 2 is kept, 
													otherwise the part of object 1 which 
													is on the negative side of object 2 is kept		*/
	fzrt_boolean		do_stitch,		/* @parm	<in> | if TRUE, the part of object 1 which 
													is kept, is stitched to the extruded line if the 
													line of intersection between the objects is closed	*/
	fzrt_boolean		join_volumes,	/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list		/* @parm	<out> | list with new object pointers			*/
	);

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

	@fsfunc_t

	@desc		Splits object 1 with object 2.<nl>
				Object 2 must be a solid or a surface. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_split_stitch.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_split_with_surface_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1								*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 (must be a solid or surface)	*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers			*/
	);

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

	@fsfunc_t

	@desc		Splits object 1 with object 2.<nl>
				Object 2 must be an open or closed, planar wire. 
				norm indicates the direction along which the cutting wire is projected. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_split_stitch.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_split_with_line_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1									*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 
												(must be an open or closed planar wire)				*/
	fz_xyz_td				*norm,		/* @parm	<in> | indicates the direction along which 
												the cutting wire is projected						*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers				*/
	);

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

	@fsfunc_t

	@desc		Stitches all the faces in a single object.<nl>
				Stitching looks for faces which have reversely coincident 
				segments, but geometrically duplicate points.<nl>
				Note : currently, stitching will fail, if face 
				segments are coincident but not reversed.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_split_stitch.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_stitch_faces_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in_out> | object	*/
	);

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

	@fsfunc_t

	@desc		Stitches multiple surface objects.<nl>
				Stitching looks for faces which have reversely coincident 
				segments, but geometrically duplicate points. 
				A new object is created from all the stitched objects and 
				returned in the obj parameter.<nl>
				Note : If there are no common reversely coincident segments 
				in the objects, the resulting object contains the faces of 
				all objects in the entity list as if the objects were joined.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_split_stitch.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_stitch_objects_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		*src_obj,	/* @parm	<in> | array of source objects			*/
	fzrt_int				nobj,		/* @parm	<in> | number of source objects<nl>
									   @rimin	2											*/
	fz_objt_ptr		*obj		/* @parm	<out> | stitched object				*/
	);

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

	@fsfunc_t

	@desc		Creates the line of intersection between two objects.<nl>
				The objects must be either solids or surfaces. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_split_stitch.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_line_of_intersection_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj1,		/* @parm	<in> | object 1 
												(must be a solid or a surface)			*/
	fz_objt_ptr		obj2,		/* @parm	<in> | object 2 
												(must be a solid or a surface)			*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Creates a 3d section of an object with a plane.<nl>
				The object must be a solid or surface. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section2d,fz_objt_edit_section3d_optimized,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_section_volumes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_section3d_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in> | object 
												(must be a solid or a surface)			*/
	fz_plane_equ_td				*equ,		/* @parm	<in> | plane							*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Creates a 3d section of an object. The object must be a solid or surface.
				The plane is defined by *equ. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored in the entity list passed in.
				Only those objects, that are truely cut produce new objects in the
				entity list. If an object is completely on one side of the plane,
				no new objects are generated. Note, that unlike fz_objt_edit_section3d,
				this api does not use a join_volumes parameter. Separate objects per volume are
				always created.

	@return		Error codes

	@avail		6.5.6.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section2d,fz_objt_edit_section3d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_section_volumes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_section3d_optimized_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj,		/* @parm	<in> | object (must be a solid or a surface)			*/
	fz_plane_equ_td		*equ,		/* @parm	<in> | plane							*/
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Creates a 2d section of an object with a plane.<nl>
				The object must be a solid or surface. 
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,
				fz_objt_edit_volumes_join,fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_section_volumes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_section2d_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in> | object 
												(must be a solid or a surface)			*/
	fz_plane_equ_td				*equ,		/* @parm	<in> | plane							*/
	fzrt_boolean		join_volumes,/* @parm	<in> | If set to TRUE, all resulting volumes will be
														joined into one object. Otherwise, one object per volume
														will be created. */
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);

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

	@fsfunc_t

	@desc		Joins the volumes (connected sets of faces) of a number of objects into 
				a single, new object<nl>
				Note : Objects of any topological type can be used.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_separate

	@exfile		<scdir>/Utilities | util_objt_section_volumes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_volumes_join_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		objs[],		/* @parm	<in> | array of source objects			*/
	fzrt_int				nobjs,		/* @parm	<in> | number of source objects<nl>
									   @rimin	2										*/
	fz_objt_ptr		*new_obj	/* @parm	<out> | joined object					*/
	);

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

	@fsfunc_t

	@desc		
				Creates a new object for each volume (connected set of faces) in the 
				object passed in.<nl>
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored 
				in the entity list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_bool_union,fz_objt_edit_bool_intersection,fz_objt_edit_bool_difference,fz_objt_edit_bool_split,
				fz_objt_edit_trim_with_surface,fz_objt_edit_trim_with_line,fz_objt_edit_split_with_surface,
				fz_objt_edit_split_with_line,fz_objt_edit_stitch_faces,fz_objt_edit_stitch_objects,
				fz_objt_edit_line_of_intersection,fz_objt_edit_section3d,fz_objt_edit_section2d,
				fz_objt_edit_volumes_join

	@exfile		<scdir>/Utilities | util_objt_section_volumes.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_volumes_separate_func) (					
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in> | source object					*/
	fz_enty_list_ptr 	ent_list	/* @parm	<out> | list with new object pointers	*/
	);


/************************************************************************
	TOPOLOGICAL EDITING
*************************************************************************/

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

	@enum

	@desc	Identifier of a model convert operation.

	@avail	5.0.0.0

 	@see	fz_objt_edit_can_convert_cntrl,fz_objt_edit_convert_cntrl

	@toc	modl_edit

*********************************************************************************************************/
typedef enum fz_objt_cvrt_to_otype_num_enum
{	FZ_OBJT_CNVRT_TO_NURBS_SURF = 0,		/*  @emem	convert to a Nurbz surface object	*/
	FZ_OBJT_CNVRT_TO_PATCH_SURF,			/*  @emem	convert to a Patch surface object	*/
	FZ_OBJT_CNVRT_TO_NURBS_CURV,			/*  @emem	convert to a Nurbz curve object		*/
	FZ_OBJT_CNVRT_TO_SPLINE_CURV,			/*  @emem	convert to a Spline curve object	*/
	
	MODEL_CNVRT_TO_MAX
} fz_objt_cvrt_to_otype_num_enum;

/************************************************************************
	@fsfunc_t

	@desc		Extracts the control objects from a parametric object as new objects.
				As it is possible that more than one object is created, 
				the pointers of the resulting objects are stored in the entity list 
				passed in. 
				The object passed in must be a parametric (control) object and must 
				have nested control objects.
				If the object is a NurbZ object, the do_nurbz_depth and 
				do_nurbz_curves arguments apply. 
				If do_nurbz_depth is TRUE, the control objects extracted connect 
				the control points of the nurbs surface in depth (v) direction. 
				Otherwise they connect in the length (u) direction. 
				If do_nurbz_curves is TRUE, the extracted objects become nurbs 
				curves in the same degree as the surface. 
				Otherwise they are simple vector lines. 
				If the object passed in is not a NurbZ object, the two arguments are ignored.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_extract_cntrl_objs_func) (
	fzrt_int 			windex,					/* @parm	<in> | project window index */
	fz_objt_ptr	obj,					/* @parm	<in> | object												*/
	fzrt_boolean	do_nurbz_depth,			/* @parm	<in> | If TRUE, the control objects extracted connect the 
														control points of the nurbs surface in depth (v) direction, 
														otherwise they connect in the length (u) direction.<nl>
														Note: Only applies to Nurbz objects							*/
	fzrt_boolean	do_nurbz_curves,		/* @parm	<in> | If TRUE, the extracted objects become nurbs curves 
														in the same degree as the surface, 
														otherwise they are simple vector lines.<nl>
														Note: Only applies to Nurbz objects							*/
	fz_enty_list_ptr ent_list				/* @parm	<out> | list of extracted control object pointers			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Checks whether a controlled object of one type can be converted 
				to a controlled object of another type.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_convert_cntrl

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_can_convert_cntrl_func) (
	fzrt_int 				windex,				/* @parm	<in> | project window index */
	fz_objt_ptr		obj,				/* @parm	<in> | object							*/
	fz_objt_cvrt_to_otype_num_enum	cnvrt_to_type,		/* @parm	<in> | type to convert to				*/
	fzrt_boolean		*can_convert		/* @parm	<out> | can the object be converted	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Converts a controlled object of one type to a controlled object 
				of another type. 
				If the object passed in is not a controlled object, or it cannot 
				be converted to the requested control type, an error is returned. 
				The function fz_objt_edit_can_convert_cntrl can be used to find out 
				whether an object can be converted to a given type.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_can_convert_cntrl

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_convert_cntrl_func) (
	fzrt_int 				windex,				/* @parm	<in> | project window index */
	fz_objt_ptr		obj,				/* @parm	<in_out> | object to convert	*/
	fz_objt_cvrt_to_otype_num_enum	cnvrt_to_type		/* @parm	<in> | type to convert to			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Drops a controlled object to a plain (non controlled) object.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_drop_cntrl_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in_out> | object	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Drops a smooth object to a facetted object. 
				Note, that this also drops the object to a plain object, 
				if it is a controlled object. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_drop_smooth_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in_out> | object	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Regenerates the facetting of a smooth object. 
				If opts is passed as NULL, the facetting parameters are taken 
				from the refinement attribute stored with the object. 
				If opts is not NULL, the facetting parameters of opts are used. 
				Note, that the opts passed in do not permanently replace the 
				facetting attribute of the object; opts is simply used for 
				this function call only. This function is similar to
				fz_objt_edit_parm_regen, except that it also works on
				non controlled objects.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_regen_facets_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object							*/
	fz_attr_refn_ptr	opts		/* @parm	<in_opt> | display resolution options		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Sets the start point of an object to a given point index.<nl>
				Note: The object must be a single face surface or closed wire.

	@return		Error codes<nl>
				MODEL_ERR_INVALID_TOPO - invalid topology type for input object

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_set_first_point_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj,		/* @parm	<in_out> | object 
												(must be a single face surface or closed wire)		*/
	fzrt_int				pindx		/* @parm	<in> | point index to set as start point			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Reverses the topology of an object. This will turn a 
				solid object inside out. For open wires, the first point
				will flip from one end to the other. For surfaces, the
				surface normal will point in the opposite direction.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_reverse_topology_func) (					
	fzrt_int 					windex,		/* @parm	<in> | project window index */
	fz_objt_ptr			obj			/* @parm	<in_out> | object	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Uncovers a surface object with a single face. 
				The object will become a closed wire.<nl>
				The object passed in must be a surface object with a single face. 
				The geometry of the face also must be non planar. 
				This is the case only with smooth objects and face types 
				other than plane geometry 
				(i.e. spherical, tori, conical, cylindrical or spline faces).

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | model_loft.fsl
	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_uncover_surface_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in_out> | object 
												(must be a single face surface)		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Covers a closed wire object with a surface. 
				The object will become a surface object with a single face.<nl>
				The object passed in must be a closed wire object.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_cover_closed_wire_func) (
	fzrt_int 				windex,		/* @parm	<in> | project window index */
	fz_objt_ptr		obj			/* @parm	<in_out> | object 
												(must be a closed wire)		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Deletes one or more points from an object.<nl>
				The points are identified by their indices in the pnt_indx array. 
				If do_topo is TRUE, the points are deleted topologically. 
				Otherwise they are deleted geometrically.<nl>
				<nl>
				Note : This function operates on smooth objects only if do_topo is TRUE and
				the object is either a wire or single face surface.
				<nl>
				As it is possible that new objects are created, these objects 
				are stored optionally in the entity_list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_segments,fz_objt_edit_delete_curves,fz_objt_edit_delete_faces,fz_objt_edit_delete_multi

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_points_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				pnt_indx[],		/* @parm	<in> | array of point indices to delete			*/
	fzrt_int				npnts,			/* @parm	<in> | number of points in the array
										   @rimin	1													*/
	fzrt_boolean		do_topo,		/* @parm	<in> | if TRUE, points are deleted topologically, 
													otherwise they are deleted geometrically			*/
	fz_enty_list_ptr 	ent_list		/* @parm	<out_opt> | list with new object pointers		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Deletes one or more segments from an object.<nl>
				The segments are identified by their indices in the segt_indx array. 
				If do_topo is TRUE, the segments are deleted topologically. 
				Otherwise they are deleted geometrically.<nl>
				<nl>
				Note : This function operates on smooth objects only if do_topo is TRUE and
				the object is either a wire or single face surface.
				<nl>
				As it is possible that new objects are created, these objects 
				are stored optionally in the entity_list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_points,fz_objt_edit_delete_curves,fz_objt_edit_delete_faces,fz_objt_edit_delete_multi

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_segments_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				segt_indx[],	/* @parm	<in> | array of segment indices to delete			*/
	fzrt_int				nsegts,			/* @parm	<in> | number of segments in the array	
										   @rimin	1													*/
	fzrt_boolean		do_topo,		/* @parm	<in> | if TRUE, segments are deleted topologically,
													otherwise they are deleted geometrically			*/
	fz_enty_list_ptr		ent_list		/* @parm	<out_opt> | list with new object pointers		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Deletes one or more curves from an object.<nl>
				The curves must be holes. 
				Outer boundary curves cannot be deleted. 
				The curves are identified by their indices in the curv_indx array. 
				If do_topo is TRUE, the curves are deleted topologically. 
				Otherwise they are deleted geometrically.<nl>
				<nl>
				Note : This function operates only on facetted objects.<nl>
				<nl>
				As it is possible that new objects are created, these objects
				are stored optionally in the entity_list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_points,fz_objt_edit_delete_segments,fz_objt_edit_delete_faces,fz_objt_edit_delete_multi

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_curves_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				curv_indx[],	/* @parm	<in> | array of curve indices to delete 
													(curves must be holes)								*/
	fzrt_int				ncurvs,			/* @parm	<in> | number of curves in the array
										   @rimin	1													*/
	fzrt_boolean		do_topo,		/* @parm	<in> | if TRUE, curves are deleted topologically,
													otherwise they are deleted geometrically			*/
	fz_enty_list_ptr 	ent_list		/* @parm	<in_opt> | list with new object pointers		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Deletes one or more faces from an object.<nl>
				The faces are identified by their indices in the face_indx array. 
				If do_topo is TRUE, the faces are deleted topologically. 
				Otherwise they are deleted geometrically.<nl>
				<nl>
				Note : This function operates on smooth objects only if do_topo is TRUE.<nl>
				<nl>
				As it is possible that new objects are created, these objects
				are stored optionally in the entity_list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_points,fz_objt_edit_delete_segments,fz_objt_edit_delete_curves,fz_objt_edit_delete_multi

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_faces_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				face_indx[],	/* @parm	<in> | array of face indices to delete				*/
	fzrt_int				nfaces,			/* @parm	<in> | number of faces in the array
										   @rimin	1													*/
	fzrt_boolean		do_topo,		/* @parm	<in> | if TRUE, faces are deleted topologically,
													otherwise they are deleted geometrically			*/
	fz_enty_list_ptr 	ent_list		/* @parm	<in_opt> | list with new object pointers		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Deletes one or more faces, curves, segments, or points from an object.<nl>
				The faces are identified by their indices in the face_indx array. 
				The curves must be holes. 
				Outer boundary curves cannot be deleted. 
				The curves are identified by their indices in the curv_indx array. 
				The segments are identified by their indices in the segt_indx array. 
				The points are identified by their indices in the pnt_indx array. 
				If do_topo is TRUE, the faces are deleted topologically. 
				Otherwise they are deleted geometrically.<nl>
				<nl>
				Note : This function operates on smooth objects, only if do_topo is TRUE.
				Segments and points can be deleted only if the smooth object is either a wire or single face surface.
				Curves of smooth objects can not be deleted.
				<nl>
				As it is possible that new objects are created, these objects
				are stored optionally in the entity_list passed in.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_delete_points,fz_objt_edit_delete_segments,fz_objt_edit_delete_curves,fz_objt_edit_delete_faces

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_delete_multi_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)				*/
	fzrt_int				face_indx[],	/* @parm	<in_opt> | array of face indices to delete			*/
	fzrt_int				nfaces,			/* @parm	<in_opt> | number of faces in the array				*/
	fzrt_int				curv_indx[],	/* @parm	<in_opt> | array of curve indices to delete 
																(curves must be holes)					*/
	fzrt_int				ncurvs,			/* @parm	<in_opt> | number of curves in the array			*/
	fzrt_int				segt_indx[],	/* @parm	<in_opt> | array of segment indices to delete		*/
	fzrt_int				nsegts,			/* @parm	<in_opt> | number of segments in the array			*/
	fzrt_int				pnt_indx[],		/* @parm	<in_opt> | array of point indices to delete			*/
	fzrt_int				npnts,			/* @parm	<in_opt> | number of points in the array			*/
	fzrt_boolean		do_topo,		/* @parm	<in> | if TRUE, faces are deleted topologically,
													otherwise they are deleted geometrically			*/
	fz_enty_list_ptr 	ent_list		/* @parm	<in_opt> | list with new object pointers			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more points of an object with a matrix. 
				The points are identified by their indices in the pnt_indx array.<nl>
				Note : This function operated only on facetted objects, in versions prior to 6.0

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_points_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				pnt_indx[],		/* @parm	<in> | array of point indices to transform			*/
	fzrt_int				npnts,			/* @parm	<in> | number of points in the array
										   @rimin	1													*/
	fz_mat4x4_td		*mat			/* @parm	<in> | matrix to transform points by				*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more segments of an object with a 4x4 matrix. 
				The segments are identified by their indices in the segt_indx array.<nl>
				Note : This function operated only on facetted objects, in versions prior to 6.0

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_transform_points,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_segments_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				segt_indx[],	/* @parm	<in> | array of segment indices to transform		*/
	fzrt_int				nsegts,			/* @parm	<in> | number of segments in the array
										   @rimin	1													*/
	fz_mat4x4_td		*mat			/* @parm	<in> | 4x4 matrix to transform segments by			*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more curves of an object with a matrix. 
				The curves are identified by their indices in the curv_indx array.<nl>
				Note : This function operated only on facetted objects, in versions prior to 6.0

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_curves_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				curv_indx[],	/* @parm	<in> | array of curve indices to transform			*/
	fzrt_int				ncurvs,			/* @parm	<in> | number of curves in the array
										   @rimin	1													*/
	fz_mat4x4_td		*mat			/* @parm	<in> | matrix to transform curves by				*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more faces of an object with a matrix. 
				The faces are identified by their indices in the face_indx array.<nl>
				Note : This function operated only on facetted objects, in versions prior to 6.0

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_faces_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)			*/
	fzrt_int				face_indx[],	/* @parm	<in> | array of face indices to transform			*/
	fzrt_int				nfaces,			/* @parm	<in> | number of faces in the array
										   @rimin	1													*/
	fz_mat4x4_td		*mat			/* @parm	<in> | matrix to transform faces by				*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more faces, curves, segment and points of an object with a matrix. 
				The faces are identified by their indices in the face_indx array.<nl>
				Note : This function operated only on facetted objects, in versions prior to 6.0

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_multi_func) (
	fzrt_int 				windex,			/* @parm	<in> | project window index */
	fz_objt_ptr		obj,			/* @parm	<in_out> | object (must be facetted)				*/
	fzrt_int				face_indx[],	/* @parm	<in_opt> | array of face indices to transform		*/
	fzrt_int				nfaces,			/* @parm	<in_opt> | number of faces in the array				*/
	fzrt_int				curv_indx[],	/* @parm	<in_opt> | array of curve indices to transform 
																(curves must be holes)					*/
	fzrt_int				ncurvs,			/* @parm	<in_opt> | number of curves in the array			*/
	fzrt_int				segt_indx[],	/* @parm	<in_opt> | array of segment indices to transform	*/
	fzrt_int				nsegts,			/* @parm	<in_opt> | number of segments in the array			*/
	fzrt_int				pnt_indx[],		/* @parm	<in_opt> | array of point indices to transform		*/
	fzrt_int				npnts,			/* @parm	<in_opt> | number of points in the array			*/
	fz_mat4x4_td		*mat			/* @parm	<in> | matrix to transform by				*/
	);

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

	@type

	@desc	Data structure to hold options for transforming topological levels.
			This type is used to pass additional transformation options to the functions
			fz_objt_edit_transform_segments_options,fz_objt_edit_transform_curves_options,fz_objt_edit_transform_faces_options,fz_objt_edit_transform_multi_options
			
			The individual fields of this type can be accessed and set via 
			fz_objt_tform_opts_get and fz_objt_tform_opts_set.
			
	@avail	6.0.0.0
	
	@see	<auto>
	
	@exfile	util_objt_tform.fsl

	@toc	modl_edit

*********************************************************************************************************/
typedef struct	tform_opts_td	*fz_objt_tform_opts_ptr;	


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

	@enum

	@desc	Parameter identifiers for the transform options. Used for the
			"which" argument of fz_objt_tform_opts_get and fz_objt_tform_opts_set.

	@avail	6.0.0.0

	@see	fz_objt_tform_opts_set, fz_objt_tform_opts_get

	@toc	modl_edit

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

/* TFORM OPTIONS */
typedef enum fz_objt_tform_parm_enum
{			
	FZ_OBJT_TFORM_OPTS_MAKE_SMOOTH = 0,	/*  @emem 	Make Facetted objects Smooth - on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	FALSE	*/
												
	FZ_OBJT_TFORM_OPTS_CONSTRAIN,		/*  @emem 	Constrain to boundaries - on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	FALSE	*/
												
	FZ_OBJT_TFORM_OPTS_ARCS_CONVERT,	/*  @emem 	Convert arcs to splines - on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	FALSE	*/
												
	FZ_OBJT_TFORM_OPTS_FACES_EXTEND,	/*  @emem 	Extend adjacent faces - on (TRUE) or off (FALSE)
										@ptype		fzrt_boolean 
										@default	FALSE	*/
												
	
	MODEL_TFORM_OPTS_MAX
} fz_objt_tform_parm_enum;


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

	@fsfunc_t
	
	@desc		Allocates transform options and fills it with defaults
	
	@return		Error codes
	
	@avail		6.0.0.0

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

 	@see		fz_objt_tform_opts_get,fz_objt_tform_opts_set,fz_objt_tform_opts_finit

	@toc		modl_edit
																						
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_tform_opts_init_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_tform_opts_ptr	*opts   /* @parm	<out> | transform options	*/
	);

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

	@fsfunc_t
	
	@desc		Gets a transform option
	
	@return		Error codes
	
	@avail		6.0.0.0

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

 	@see		fz_objt_tform_opts_init,fz_objt_tform_opts_set,fz_objt_tform_opts_finit

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_tform_opts_get_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_tform_opts_ptr	opts,   /* @parm	<in> | transform options	*/
	fz_objt_tform_parm_enum	which,  /* @parm	<in> | parameter identifier	*/
	fz_type_td				*data   /* @parm	<out> | parameter data		*/
	);

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

	@fsfunc_t
	
	@desc		Sets a transform option
	
	@return		Error codes
	
	@avail		6.0.0.0

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

 	@see		fz_objt_tform_opts_init,fz_objt_tform_opts_get,fz_objt_tform_opts_finit

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_tform_opts_set_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_tform_opts_ptr	opts,  	/* @parm	<in> | transform options	*/
	fz_objt_tform_parm_enum	which, 	/* @parm	<in> | parameter identifier	*/
	fz_type_td				*data  	/* @parm	<in> | parameter data		*/
	);

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

	@fsfunc_t
	
	@desc		Frees transform options.
				The opts pointer is deallocated and returned back as NULL.
	
	@return		Error codes
	
	@avail		6.0.0.0

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

 	@see		fz_objt_tform_opts_init,fz_objt_tform_opts_get,fz_objt_tform_opts_set

	@toc		modl_edit
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_tform_opts_finit_func) (
	fzrt_int					windex,	/* @parm	<in> | project window index */
	fz_objt_tform_opts_ptr	*opts	/* @parm	<in_out> | transform options (will become NULL)	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more points of an object with a matrix. 
				The points are identified by their indices in the pnt_indx array.<nl>
				Note that for Smooth objects, the indices are not guaranteed to remain constant.
				The new indices are returned optionally in the user allocated array pnt_indx_out if not NULL.

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_edit_transform_segments_options,fz_objt_edit_transform_curves_options,fz_objt_edit_transform_faces_options,fz_objt_edit_transform_multi_options,
				fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_points_options_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 				*/
	fz_objt_ptr				obj,			/* @parm	<in_out> | object 							*/
	fzrt_int					pnt_indx[],		/* @parm	<in> | array of point indices to transform	*/
	fzrt_int					npnts,			/* @parm	<in> | number of points in the array
											   @rimin	1											*/
	fz_mat4x4_td			*mat,			/* @parm	<in> | matrix to transform points by		*/
	fz_objt_tform_opts_ptr	tform_opts,		/* @parm 	<in_opt> |	Transform options 				*/
	fzrt_int					pnt_indx_out[]	/* @parm	<out_opt> | array of new point indices		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more segments of an object with a 4x4 matrix. 
				The segments are identified by their indices in the segt_indx array.<nl>
				Note that for Smooth objects, the indices are not guaranteed to remain constant.
				The new indices are returned optionally in the user allocated array segt_indx_out if not NULL.

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_edit_transform_points_options,fz_objt_edit_transform_curves_options,fz_objt_edit_transform_faces_options,fz_objt_edit_transform_multi_options,
				fz_objt_edit_transform_points,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_segments_options_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 				*/
	fz_objt_ptr				obj,			/* @parm	<in_out> | object 							*/
	fzrt_int					segt_indx[],	/* @parm	<in> | array of segment indices to transform*/
	fzrt_int					nsegts,			/* @parm	<in> | number of segments in the array
											   @rimin	1											*/
	fz_mat4x4_td			*mat,			/* @parm	<in> | 4x4 matrix to transform segments by	*/
	fz_objt_tform_opts_ptr	tform_opts,		/* @parm 	<in_opt> |	Transform options 				*/
	fzrt_int					segt_indx_out[]	/* @parm	<out_opt> | array of new segment indices	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more curves of an object with a matrix. 
				The curves are identified by their indices in the curv_indx array.<nl>
				Note that for Smooth objects, the indices are not guaranteed to remain constant.
				The new indices are returned optionally in the user allocated array curv_indx_out if not NULL.

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_edit_transform_points_options,fz_objt_edit_transform_segments_options,fz_objt_edit_transform_faces_options,fz_objt_edit_transform_multi_options,
				fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_faces,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_curves_options_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 				*/
	fz_objt_ptr				obj,			/* @parm	<in_out> | object 							*/
	fzrt_int					curv_indx[],	/* @parm	<in> | array of curve indices to transform	*/
	fzrt_int					ncurvs,			/* @parm	<in> | number of curves in the array
											   @rimin	1											*/
	fz_mat4x4_td			*mat,			/* @parm	<in> | matrix to transform curves by		*/
	fz_objt_tform_opts_ptr	tform_opts,		/* @parm 	<in_opt> |	Transform options 				*/
	fzrt_int					curv_indx_out[]	/* @parm	<out_opt> | array of new curve indices 		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more faces of an object with a matrix. 
				The faces are identified by their indices in the face_indx array.<nl>
				Note that for Smooth objects, the indices are not guaranteed to remain constant.
				The new indices are returned optionally in the user allocated array face_indx_out if not NULL.

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_edit_transform_points_options,fz_objt_edit_transform_segments_options,fz_objt_edit_transform_curves_options,fz_objt_edit_transform_multi_options,
				fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_multi

	@exfile		<scdir>/Utilities | util_objt_tform.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_faces_options_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index					*/
	fz_objt_ptr				obj,			/* @parm	<in_out> | object							*/
	fzrt_int					face_indx[],	/* @parm	<in> | array of face indices to transform	*/
	fzrt_int					nfaces,			/* @parm	<in> | number of faces in the array
											   @rimin	1											*/
	fz_mat4x4_td			*mat,			/* @parm	<in> | matrix to transform faces by			*/
	fz_objt_tform_opts_ptr	tform_opts,		/* @parm 	<in_opt> |	Transform options 				*/
	fzrt_int					face_indx_out[]	/* @parm	<out_opt> | array of new face indices 		*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Transforms one or more faces, curves, segment and points of an object with a matrix. 
				The topological entities are identified by their indices in the corresponding arrays.<nl>
				Note that for Smooth objects, the indices are not guaranteed to remain constant.
				The new indices are returned optionally in the user allocated arrays if not NULL.

	@return		Error codes

	@avail		6.0.0.0

	@see		fz_objt_edit_transform_points_options,fz_objt_edit_transform_segments_options,fz_objt_edit_transform_curves_options,fz_objt_edit_transform_faces_options,
				fz_objt_edit_transform_points,fz_objt_edit_transform_segments,fz_objt_edit_transform_curves,fz_objt_edit_transform_faces

	@exfile		

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_transform_multi_options_func) (
	fzrt_int 					windex,			/* @parm	<in> | project window index 					*/
	fz_objt_ptr				obj,			/* @parm	<in_out> | object 								*/
	fzrt_int					face_indx[],	/* @parm	<in_opt> | array of face indices to transform	*/
	fzrt_int					nfaces,			/* @parm	<in_opt> | number of faces in the array			*/
	fzrt_int					curv_indx[],	/* @parm	<in_opt> | array of curve indices to transform 	*/
	fzrt_int					ncurvs,			/* @parm	<in_opt> | number of curves in the array		*/
	fzrt_int					segt_indx[],	/* @parm	<in_opt> | array of segment indices to transform*/
	fzrt_int					nsegts,			/* @parm	<in_opt> | number of segments in the array		*/
	fzrt_int					pnt_indx[],		/* @parm	<in_opt> | array of point indices to transform	*/
	fzrt_int					npnts,			/* @parm	<in_opt> | number of points in the array		*/
	fz_mat4x4_td			*mat,			/* @parm	<in> | matrix to transform by					*/
	fz_objt_tform_opts_ptr	tform_opts,		/* @parm 	<in_opt> |	Transform options 					*/
	fzrt_int					face_indx_out[],/* @parm	<out_opt> | array of new face indices 				*/
	fzrt_int					curv_indx_out[],/* @parm	<out_opt> | array of new curve indices 				*/
	fzrt_int					segt_indx_out[],/* @parm	<out_opt> | array of new segment indices 			*/
	fzrt_int					pnt_indx_out[]	/* @parm	<out_opt> | array of new point indices 				*/
	);


/************************************************************************
	OBJECT PICK BUFFER
*************************************************************************/

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

	@module Selection (Pick)

	@desc	formZ object picking functions.  These functions provide the ability to understand
			what entities are picked and add to or take away from what is currently picked.

	@toc	modl_pick

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


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

	@enum

	@desc	Identifier for pick operation.

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_pick

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

typedef enum fz_model_pick_enum
{	FZ_MODEL_PICK_ACTIVE=-1,		/*  @emem 	Use the currently active pick type				*/
	FZ_MODEL_PICK_PNT,				/*  @emem 	Pick at the Point level (facetted or smooth) only					*/
	FZ_MODEL_PICK_SEGT,			/*  @emem 	Pick at the Segment level only					*/
	FZ_MODEL_PICK_CURV,			/*  @emem 	Pick at the Curve level only					*/
	FZ_MODEL_PICK_FACE,			/*  @emem 	Pick at the Face level only						*/
	FZ_MODEL_PICK_OBJT,			/*  @emem 	Pick at the Object level only					*/
	FZ_MODEL_PICK_GRUP,			/*  @emem 	Pick at the Group level only					*/
	FZ_MODEL_PICK_HOLE,			/*  @emem 	Pick at the Hole level only						*/
	FZ_MODEL_PICK_MAUTO,			/*  @emem 	Pick at the Automatic level only				*/
	MODEL_PICK_MAX				
} fz_model_pick_enum;

/************************************************************************
	@fsfunc_t

	@desc		Picks a modeling entity(ies) at a screen point. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fzrt_point 			*click_pnt, /* @parm <in> | click point (screen space)	*/
	fz_model_pick_enum 	pick_levl	/* @parm <in> | level to pick	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds points to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_pnts_func) (
	fzrt_int 				windex, 			/* @parm <in> | project window index */
	fz_objt_ptr 		obj, 				/* @parm <in> | object picked	*/ 	
	fzrt_int				*pnt_index,			/* @parm <in> | array of index of points to add	*/ 	
	fzrt_int				pnt_index_count		/* @parm <in> | number of points in pnt_index	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds a segments to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_segts_func) (
	fzrt_int 				windex, 			/* @parm <in> | project window index */
	fz_objt_ptr 		obj, 				/* @parm <in> | object to add	*/ 	
	fzrt_int				*segt_index,		/* @parm <in> | array of index of segments to add	*/ 	
	fzrt_int				segt_index_count	/* @parm <in> | number of segments in segt_index	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds curves (outlines) to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_curvs_func) (
	fzrt_int 				windex, 			/* @parm <in> | project window index */
	fz_objt_ptr 		obj, 				/* @parm <in> | object to add	*/ 	
	fzrt_int				*curv_index,		/* @parm <in> | array of index of curve to add	*/ 	
	fzrt_int				curv_index_count	/* @parm <in> | number of curves in curv_index	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds faces to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_faces_func) (
	fzrt_int 				windex, 			/* @parm <in> | project window index */
	fz_objt_ptr 		obj, 				/* @parm <in> | object to add	*/ 	
	fzrt_int				*face_index,		/* @parm <in> | array of index of face to add	*/ 	
	fzrt_int				face_index_count	/* @parm <in> | number of faces in face_index	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds holes to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_holes_func) (
	fzrt_int 				windex, 			/* @parm <in> | project window index */
	fz_objt_ptr 		obj, 				/* @parm <in> | object to add	*/ 	
	fzrt_int				*curv_index,		/* @parm <in> | array of index of a curve which is the outline of the hole	*/ 	
	fzrt_int				curv_index_count	/* @parm <in> | number of curves in curv_index	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds an object to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_objts_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 		*objts, 	/* @parm <in> | array of objects to add	*/ 	
	fzrt_int				objts_count	/* @parm <in> | number of objects in objts	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Adds a group to the modeling pick buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_add_grups_func) (
	fzrt_int 				windex, 		/* @parm <in> | project window index */
	fz_grup_ptr 		*grups, 		/* @parm <in> | array of groups to add	*/ 	
	fzrt_int 				grups_count 	/* @parm <in> | number of objects in groups	*/ 	
	);


/************************************************************************
	@fsfunc_t

	@desc		Removes an item from the modeling pick buffer. The item is identified by
				pick_indx, which must be between 0 and fz_model_pick_get_count() - 1.	

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_remove_func) (	
	fzrt_int					windex, 	/* @parm <in> | project window index */
	fzrt_int 					pick_indx 	/* @parm <in> | index of item in pick buffer.		
											@rimin 	0
											@rmax	fz_model_pick_get_count()			*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Removes all items from the pick buffer. 				

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_clear_func) (	
	fzrt_int					windex 	/* @parm <in> | project	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Searches for a particular item in the pick buffer. This function
				can be used to test, whether a group, object, or any other topological
				entity of an object is picked. The search may be limited to just a portion of the
				pick buffer by specifying the optional start_indx and end_indx 
				arguments. If they are set to NULL, the entire pick buffer is searched.
				To check, whether a particular topological level of an object is
				picked, the kind argument must be used and the object, and entity
				index must be passed in. For example, to check whether the 3rd point
				of a given object is picked the api call would look like this : <nl>
				<nl>
				pindx = 2;<nl>
				fz_model_pick_find(windex,NULL,NULL,FZ_MODEL_PICK_PNT,NULL,obj,pindx,&pick_indx);<nl>
				<nl>
				If the point is found, pick_indx will be returned with the index of the
				entry in the pick buffer. If the point is not picked, pick_indx will be -1.<nl>
				<nl>
				Although the grup and obj arguments are optional, one of them should always be 
				passed in. If the kind argument is passed as NULL and obj is passed in, the 
				first picked topological entity of the given object is found.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_find_func) (	
	fzrt_int					windex, 		/* @parm <in> | project window index */
	fzrt_int 					*start_indx,	/* @parm <in_opt> | start search indx\	
												@rimin 	0
												@rmax	fz_model_pick_get_count()			*/ 	
	fzrt_int 					*end_indx,		/* @parm <in_opt> | end search index	
												@rimin 	0
												@rmax	fz_model_pick_get_count()			*/ 	
	fz_model_pick_enum 		*kind, 			/* @parm <in_opt> | kind of entity to search for	*/ 	
	fz_grup_ptr 			*grup, 			/* @parm <in_opt> | grup picked */ 	
	fz_objt_ptr 			*obj, 			/* @parm <in_opt> | object picked	*/ 	
	fzrt_int 					*indx,			/* @parm <in_opt> | index of object part picked  */ 	
	fzrt_int 					*pick_indx  	/* @parm <out> | index of first found item in pick buffer.		
												@rimin 	0
												@rmax	fz_model_pick_get_count()			*/ 	
	);

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

	@enum

	@desc	Identifier for pick sorting.

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_pick

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

typedef enum fz_model_pick_sort_enum
{	FZ_MODEL_PICK_SORT_ORDER = 0,		/*  @emem 	Sorts the pick buffer by the order selected (Default)								*/
	FZ_MODEL_PICK_SORT_KIND,			/*  @emem 	Sorts the pick buffer by the kind of entries (FZ_MODEL_PICK_PNT to FZ_MODEL_PICK_HOLE)	*/
	FZ_MODEL_PICK_SORT_OBJT,			/*  @emem 	Sorts the pick buffer by object														*/
	MODEL_PICK_SORT_MAX			
} fz_model_pick_sort_enum;				

/************************************************************************
	@fsfunc_t

	@desc		Sorts the model pick buffer by the specified method.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_sort_func) (	
	fzrt_int					windex, 	/* @parm <in> | project window index */
	fz_model_pick_sort_enum	pick_sort	/* @parm <in> | sorting method to be applied 	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Returns the number of items in the Pick Buffer. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_get_count_func) (
	fzrt_int		windex, 	/* @parm <in> | project window index */
	fzrt_int		*count		/* @parm <out> | number of items in the modeling pick buffer 	*/
	);

/************************************************************************
	@fsfunc_t

	@desc		Retrieves pick information for an item in the modeling pick buffer. 				

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_get_data_func) (	
	fzrt_int					windex, 	/* @parm <in> | project window index */
	fzrt_int 					pick_indx, 	/* @parm <in> | index of item in pick buffer.		
											@rimin 	0
											@rmax	fz_model_pick_get_count()			*/ 	
	fz_model_pick_enum 		*kind, 		/* @parm <out_opt> | kind of entity picked	*/ 	
	fz_grup_ptr 			*grup, 		/* @parm <out_opt> | group picked */ 	
	fz_objt_ptr 			*obj, 		/* @parm <out_opt> | object picked	*/ 	
	fzrt_int 					*indx		/* @parm <out_opt> | index of object part picked or -1 if none */ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Retrieves click locations for an item in the modeling Pick Buffer. 
				The click locations are the screen points where the mouse was clicked to picked the entity. 
				If the selection was made using a non graphical pick, then an error is returned. Examples of non graphic 
				picking are the Objects Palette, The Select By dialog, Select All, a plugin function call or an area pick.<nl>
				
				If the pick method uses a single point, then pnt2 will be {-1,-1}. Otherwise it will be a valid screen point.

	@return		MODEL_ERR_PICK_INVALID if non graphical pick.

	@avail		5.0.0.0

	@see		fz_model_pick_get_pnts_world

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_get_pnts_func) (	
	fzrt_int		windex, 	/* @parm <in> | project window index */
	fzrt_int 		pick_indx, 	/* @parm <in> | index of item in pick buffer.		
											@rimin 	0
											@rmax	fz_model_pick_get_count()			*/ 	
	fzrt_point 	*pnt1,		/* @parm <out_opt> | screen point for first click point or {-1,-1} if none */ 	
	fzrt_point 	*pnt2		/* @parm <out_opt> | screen point for second click point or {-1,-1} if none */ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Retrieves world space coordinate of click locations for an item in the modeling Pick Buffer. 
				This is the 3D point on the selected entity at the click point. 
				For example, when a segment is selected, the value will be the 3D coordinate of the clicked location on the segment.
				These values are sensitive to grid and direction snaps. For example, when a segment is selected near the midpoint of the segment,  
				and the midpoint snap is enabled, the point returned will be the midpoint of the segment.<nl>
				If the selection was made using a non graphical pick, then an error is returned. Examples of non graphic 
				picking are the Objects Palette, The Select By dialog, Select All, a plugin function call or an area pick.<nl>
				
				If the pick method uses a single point, then wpt2 will be {0.0,0.0,0.0}. Otherwise it will be a valid 3D point.
				To determine if wpt2 is a valid pick point, use fz_model_pick_get_pnts to get the screen coordiantes of the pick point.
				If they are valid (i.e. not {-1,-1}), then wpt2 is also valid.
					 
	@return		MODEL_ERR_PICK_INVALID if non graphical pick.

	@avail		5.0.0.0

	@see		fz_model_pick_get_pnts

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_get_pnts_world_func) (	
	fzrt_int		windex, 	/* @parm <in> | project window index */
	fzrt_int 		pick_indx, 	/* @parm <in> | index of item in pick buffer.		
											@rimin 	0
											@rmax	fz_model_pick_get_count()			*/ 	
	fz_xyz_td 	*wpt1,		/* @parm <out_opt> | world point for first click point or {0.0,0.0,0.0} if none */ 	
	fz_xyz_td 	*wpt2		/* @parm <out_opt> | world point for second click point or {0.0,0.0,0.0} if none */ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Retrieves pick ownership information for an item in the modeling Pick Buffer. 
				Items in the pick buffer are said to be owned if they are derivatives of a pick, 
				rather than the direct result of a pick. This only occurs when the item is a result 
				of a FZ_MODEL_PICK_GRUP or FZ_MODEL_PICK_HOLE pick. When a group is picked, the group is 
				added to the pick buffer and all of the objects of the group are added as they are 
				derived from the group. When a hole is picked, the curve which defines the hole's 
				boundary is added to the pick buffer and all of the adjacent faces to the hold are 
				derived from the hole.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_get_owner_func) (
	fzrt_int		windex, 	/* @parm <in> | project window index */
	fzrt_int 		pick_indx, 	/* @parm <in> | index of item in pick buffer.		
											@rimin 	0
											@rmax	fz_model_pick_get_count()			*/ 	
	fzrt_int 		*owner_indx	/* @parm <out> | index of item in pick buffer which owns pick_indx, or -1 if not owned 	
											@rimin 	-1
											@rmax	fz_model_pick_get_count()			*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Picks a graphical axis line. Tests to see if the specified click point (screen location) is on an Axis line. 
				This pick is not added to the pick buffer, hence, this function can only be used in post-pick applications.
				When pick_world != NULL, the world axis line are checked.
				When pick_plane != NULL, the reference plane axis line are checked.
				When pick_world != NULL && pick_plane != NULL, both axis lines are checked and the closest to the screen point is chosen.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_axis_func) (
	fzrt_int			windex, 		/* @parm <in> | project window index */
	fzrt_point		*location, 		/* @parm <in> | pick location (screen location) */
	fz_axis_enum	*pick_world, 	/* @parm <out_opt> | Selected world axis or FZ_AXIS_NONE for none picked (if NULL, no check of world axis performed) */
	fz_axis_enum	*pick_plane, 	/* @parm <out_opt> | Selected reference plane axis or FZ_AXIS_NONE for none picked (if NULL, no check of reference plane axis performed) */
	fz_xyz_td		*pick_pt,		/* @parm <out_opt> | picked location on axis line, in WORLD space */
	fz_xyz_td		*axis_pt1,		/* @parm <out_opt> | end point of axis line picked, in WORLD space */
	fz_xyz_td		*axis_pt2		/* @parm <out_opt> | opposite end point of axis line picked, in WORLD space */
	);


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

	@fsfunc_t	

	@desc		Gets the number of objects in a projects object list.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_util	

*********************************************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_get_count_func)(
	fzrt_int			windex,				/* @parm <in> | project window index */
	fzrt_int			*num_objts			/* @parm <out> | number of objects in project */
	);


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

	@fsfunc_t	

	@desc		Gets the object pointer from an object tag.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_ptr_to_tag

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_tag_to_ptr_func)(	
	fzrt_int				windex,		/* @parm <in> | project window index */
	fz_tag_td			*tag,		/* @parm <in> | object tag		*/
	fz_objt_ptr			*obj		/* @parm <out> | object			*/
	);

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

	@fsfunc_t	

	@desc		Gets the object tag from an object pointer.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_tag_to_ptr

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_ptr_to_tag_func)(	
	fzrt_int				windex,		/* @parm <in> | project window index */
	fz_objt_ptr			obj,		/* @parm <in> | object			*/
	fz_tag_td			*tag		/* @parm <out> | object tag		*/
	);

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

	@fsfunc_t	

	@desc		Given an object pointer, get the next object pointer in the project. 
				If objt_in is passed as NULL, the first object in the project is 
				returned.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_get_prev

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_get_next_func)(	
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		obj_in,			/* @parm <in> | object			*/
	fz_objt_ptr		*obj_next		/* @parm <out> | next object		*/
	);

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

	@fsfunc_t	

	@desc		Given an object pointer, get the previous object pointer in the project. 
				If objt_in is passed as NULL, the last object in the project is returned.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_get_next

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_get_prev_func)(	
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr		obj_in,			/* @parm <in> | object				*/
	fz_objt_ptr		*obj_prev		/* @parm <out> | previous object	*/
	);

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

	@fsfunc_t	

	@desc		Find an object with a given name.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_find_func)(	
	fzrt_int				windex,			/* @parm <in> | project window index */
	char				*name,			/* @parm <in> | name of object to find	*/
	fz_objt_ptr		*obj			/* @parm <out> | found object or NULL for NONE	*/
	);

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

	@fsfunc_t	

	@desc		Gets an object's group tag. 

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_get_grup_tag_func) (	
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			obj,			/* @parm <in> | object				*/
	fz_tag_td			*group_tag		/* @parm <out> | object's group tag	*/
	);

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

	@fsfunc_t

	@desc		Gets an object's group tag.

	@return		Error codes

	@avail		8.6.1.0

	@see

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_util,grup

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_get_grup_ptr_func) (
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			obj,			/* @parm <in> | object				*/
	fz_grup_ptr			*group		/* @parm <out> | object's group ptr	*/
	);

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

	@fsfunc_t	

	@desc		Gets the object group table.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl
	@exfile		<scdir>/Utilities | util_objt_transform.fsl

	@toc		modl_util,grup

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_get_table_func) (	
	fzrt_int				windex,		/* @parm <in> | project window index */
	fz_grup_table_ptr		*gtable		/* @parm <out> | object group table	*/
	);


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

	@enum	

	@desc	Model group parameters shared by all objects.
			
	@avail	5.0.0.0
			
	@see	fz_objt_grup_set_parm_data, fz_objt_grup_get_parm_data
	
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc	modl_util,grup

*********************************************************************************************************/
typedef enum fz_grup_parm_enum
{	
																	
	
	FZ_GRUP_PARM_NAME=0,		/*	@emem 		group name (48 characters max).
										@ptype		char* 
									*/
									
	FZ_GRUP_PARM_VISIBLE,		/*	@emem	 	Indicates the group is visible in the project windows.
										@ptype		fzrt_boolean 
										@default	FALSE
									*/	
													
	FZ_GRUP_PARM_GHOST,			/*	@emem	 	Indicates the group is ghosted in the project windows.
										@ptype		fzrt_boolean 
										@default	FALSE
									*/					
		
	FZ_GRUP_PARM_LOCK,			/*	@emem	 	Indicates the group is locked in the project windows.	
										@ptype		fzrt_boolean 
										@default	FALSE
									*/														
	FZ_GRUP_PARM_SNAP,			/*	@emem	 	Indicates the group is snappable in the project windows.	
										@ptype		fzrt_boolean 
										@default	FALSE
									*/														
	MODEL_GROUP_PARM_MAX
} fz_grup_parm_enum;

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

	@fsfunc_t	

	@desc		Gets an object group's parameter.
				For the parameters
				if the return value is -1, the status of the objects in the group is not the same. 
				For example, if there are 3 objects in a group with two objects which have 
				visibility on and one object with visibility off, the FZ_GRUP_PARM_VISIBLE 
				parameter will be returned as -1.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_grup_set_parm_data

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_get_parm_data_func) (	
	fzrt_int					windex,			/* @parm <in> | project window index */
	fz_grup_ptr 				grup,			/* @parm <in> | object group			*/
	fz_grup_parm_enum	which,			/* @parm <in> | parameter identifier	*/
	fz_type_td				*data			/* @parm <out> | parameter data			*/
	);

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

	@fsfunc_t	
	
	@desc		Sets an object group's parameter.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_grup_get_parm_data

	@exfile		<scdir>/Utilities | util_grups.fsl
	@exfile		<scdir>/Utilities | util_grups_tree.fsl

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_set_parm_data_func) (	
	fzrt_int					windex,			/* @parm <in> | project window index */
	fz_grup_ptr 				grup,			/* @parm <in> | object group			*/
	fz_grup_parm_enum	which,			/* @parm <in> | parameter identifier	*/
	fz_type_td				*data			/* @parm <in> | parameter data			*/
	);

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

	@fsfunc_t	
	
	@desc		copys an object group.

	@return		Error codes

	@avail		8.0.2.0

	@see

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_copy_func) (
	fzrt_int					src_windex,			/* @parm <in> | source project window index */
	fz_grup_ptr 				src_grup,			/* @parm <in> | source group			*/
	fzrt_int					dst_windex,			/* @parm <in> | destination project window index */
	fz_grup_ptr 				dst_grup_parent,	/* @parm <in_opt> | destination group's parent or NULL for root			*/
	fz_mat4x4_td				*mat,				/* @parm <in_opt> | transformation to apply to copyied objects and group			*/
	fz_grup_ptr 				*new_grup			/* @parm <out_opt> | new group in dst_windex			*/
	);

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

	@fsfunc_t	
	
	@desc		deletes an object group.

	@return		Error codes

	@avail		8.1.0.0

	@see

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_delete_func) (
	fzrt_int					windex,			/* @parm <in> | source project window index */
	fz_grup_ptr 				*grup			/* @parm <in_out> | source group			*/
	);


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

	@fsfunc_t	
	
	@desc		transforms an object group.

	@return		Error codes

	@avail		8.0.2.0

	@see

	@toc		modl_util,grup	

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_tform_func) (
	fzrt_int					windex,			/* @parm <in> | source project window index */
	fz_grup_ptr 				grup,			/* @parm <in> | source group			*/
	fz_mat4x4_td				*mat			/* @parm <in> | transformation to apply to copyied objects and group			*/
	);

/************************************************************************
 
	@fsfunc_t
 
	@desc		Gets the origin of a group.
 
	@return		Error codes
 
	@avail		8.0.2.0
 
	@see		fz_objt_grup_alys_get_axes
 
	@toc		modl_util,grup	
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_alys_get_origin_func) (
	fzrt_int					windex,			/* @parm <in> | source project window index */
	fz_grup_ptr 				grup,			/* @parm <in> | source group			*/
	fz_xyz_td					*origin			/* @parm <out> | origin of group			*/
	);

/************************************************************************
 
 @fsfunc_t
 
 @desc		Gets the groups's axes.
 
 @return	Error codes
 
 @avail		8.0.2.0
 
 @see		fz_objt_grup_alys_get_origin
 
 @toc		modl_util,grup
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_grup_alys_get_axes_func) (
	fzrt_int					windex,			/* @parm <in> | source project window index */
	fz_grup_ptr 				grup,			/* @parm <in> | source group			*/
	fz_xyz_td					*xaxis,			/* @parm <out_opt> | xaxis of group			*/
	fz_xyz_td					*yaxis,			/* @parm <out_opt> | yaxis of group			*/
	fz_xyz_td					*zaxis			/* @parm <out_opt> | zaxis of group			*/
	);

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

	@fsfunc_t	
	
	@desc		Creates and initializes an object list

	@avail		5.0.0.0

	@see		fz_objt_list_delete,fz_objt_list_count,fz_objt_list_reset,
				fz_objt_list_get_objt,fz_objt_list_add_objt,fz_objt_list_remove_objt

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_create_func)(
	fz_enty_list_ptr 	*ent_list	/* @parm <out> | object list	*/
	);
	
/********************************************************************************************************

	@fsfunc_t	
	
	@desc		Deletes the object list

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_count,fz_objt_list_reset,
				fz_objt_list_get_objt,fz_objt_list_add_objt,fz_objt_list_remove_objt

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_delete_func)(
	fz_enty_list_ptr 	*ent_list	/* @parm <out> | object list	*/
	);

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

	@fsfunc_t	
	
	@desc		Clears all entities and resets the object list. 

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_count,
				fz_objt_list_get_objt,fz_objt_list_add_objt,fz_objt_list_remove_objt
 
	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_reset_func)(
	fz_enty_list_ptr 	ent_list	/* @parm <in> | object list	*/
	);

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

	@fsfunc_t	
	
	@desc		Adds the given entity to the object list.

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_count,
				fz_objt_list_reset,fz_objt_list_get_objt,fz_objt_list_remove_objt

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_add_objt_func)(
	fz_enty_list_ptr 	ent_list, 	/* @parm <in> | object list			*/
	fz_objt_ptr 		objt_ptr, 	/* @parm <in> | object to be added	*/
	fzrt_boolean 		check_dupl, /* @parm <in> | check for duplicate	*/
	fzrt_boolean 		*did_add	/* @parm <out> | TRUE if successful	*/
	);

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

	@fsfunc_t	
	
	@desc		Removes the given entity from the object list.

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_count,
				fz_objt_list_reset,fz_objt_list_get_objt,fz_objt_list_add_objt

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_remove_objt_func)(
	fz_enty_list_ptr 	ent_list, 	/* @parm <in> | object list				*/
	fz_objt_ptr 		objt_ptr, 	/* @parm <in> | object to be removed	*/
	fzrt_boolean 		*did_remove	/* @parm <out> | TRUE if successful		*/
	);

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

	@fsfunc_t	
	
	@desc		Gets total number of items in the object list

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_reset,
				fz_objt_list_get_objt,fz_objt_list_add_objt,fz_objt_list_remove_objt

	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_count_func)(
	fz_enty_list_ptr 	ent_list, 	/* @parm <in> | object list			*/
	fzrt_int 				*n_ents		/* @parm <out> | number of objects	*/
	);

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

	@fsfunc_t	
	
	@desc		Gets the nth entity from the object list

	@avail		5.0.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_count,
				fz_objt_list_reset,fz_objt_list_add_objt,fz_objt_list_remove_objt
 
	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_get_objt_func)(
	fz_enty_list_ptr 	ent_list, 	/* @parm <in> | object list	*/
	fzrt_int 				n, 			/* @parm <in> | index		*/
	fz_objt_ptr 		*objt_ptr	/* @parm <out> | nth entity	*/
	);

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

	@fsfunc_t	
	
	@desc		Fills an object list with object pointers from all valid objects of a
				project. The object list will be reset prior to the operation. That is,
				all pointers stored in the list prior to this call will be removed.

	@avail		6.1.0.0

	@see		fz_objt_list_create,fz_objt_list_delete,fz_objt_list_count,
				fz_objt_list_reset,fz_objt_list_add_objt,fz_objt_list_remove_objt
 
	@exfile		<scdir>/Utilities | util_objt_topo.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_list_from_proj_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fz_enty_list_ptr 	ent_list 			/* @parm <in> | object list	*/
	);

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

	@fsfunc_t	
	
	@desc		Gets the bounds of the project.  The bounds is an axis aligned bounding
				box which contains all visible objects in a project.

	@avail		5.0.0.0
 
	@toc		modl_util,proj

*********************************************************************************************************/
typedef fzrt_error_td	(FZRT_SPEC *fz_model_get_bounds_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fzrt_boolean		include_ghosted,	/* @parm <in> | If TRUE, include ghosted objects in the bounding box computation. */
	fz_xyz_mm_td		*bbox				/* @parm <out> | the bounding box for all objects in the project. */
	);

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

	@enum	

	@desc	How the default object axes and object centroid are placed. 
			Used by fz_syst_get_layer_opts_parm_data and fz_syst_set_layer_opts_parm_data 
			when the parameter id is FZ_OBJT_OPTS_AXES or FZ_OBJT_OPTS_CENTROID.
			
	@avail	5.0.0.0
			
	@see	<auto>

	@toc	modl_util

*********************************************************************************************************/
typedef enum fz_objt_loc_type_enum
{	FZ_OBJT_LOC_PER_OBJECT = 0,		/*	@emem		Per object. 
													The origin and axes are positioned according to the type of object. */

	FZ_OBJT_LOC_COG,				/*	@emem		Center of gravity. 
													The origin of the axes is positioned at the exact center of the object (mass). 
													The axes are aligned to the active reference plane. */

	FZ_OBJT_LOC_AVERAGE,			/*	@emem		Average of points. 
													The origin of the axes is positioned at the average of all the coordinate points of the object. 
													The axes are aligned to the active reference plane. */

	FZ_OBJT_LOC_BOUNDING,			/*	@emem		Center of bounding volume. 
													The centroid is placed at the midpoint between the minimum and maximum of the bounding volume 
													in each of the directions (x, y, and z). 
													The axes are aligned to the active reference plane. */

	FZ_OBJT_LOC_MAX
} fz_objt_loc_type_enum;

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

	@enum	

	@desc	Object setup parameters. 
			Used for the "which" argument of fz_lite_get_opts_parm_data and fz_lite_set_opts_parm_data.
			
	@avail	5.0.0.0
			
	@see	<auto>

	@toc	modl_util

*********************************************************************************************************/
typedef enum fz_objt_opts_parm_enum
{	FZ_OBJT_OPTS_SHOW_COLOR = 0,		/*	@emem		Indicates if the names of the objects will be drawn in the color that 
														was assigned to them in the objects palette. If not set, the names 
														are all drawn the same.
											@ptype		fzrt_boolean
											@default	FALSE
										*/

	FZ_OBJT_OPTS_HIGHLIGHT_PICKED,		/*	@emem		When set, the object name in the lights palette will be highlighted whenever 
														an object is picked.
											@ptype		fzrt_boolean
											@default	FALSE
										*/

	FZ_OBJT_OPTS_OBJECT_NAME,			/*	@emem		The default object name (32 characters max).
											@ptype		char*
										*/

	FZ_OBJT_OPTS_GROUP_NAME,			/*	@emem		The default object group name (32 characters max).
											@ptype		char*
										*/

	FZ_OBJT_OPTS_AXES,					/*	@emem		The default location of an object axes.
											@ptype		fz_objt_loc_type_enum
											@default	FZ_OBJT_LOC_PER_OBJECT
										*/

	FZ_OBJT_OPTS_CENTROID,				/*	@emem		The position of the centroid of an object.
											@ptype		fz_objt_loc_type_enum
											@default	FZ_OBJT_LOC_COG
										*/

	FZ_OBJT_OPTS_MAX
} fz_objt_opts_parm_enum;

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

	@fsfunc_t

	@desc		Gets object setup parameters.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_set_opts_parm_data

	@exfile		<scdir>/Utilities | util_proj_opts.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_objt_get_opts_parm_data_func)(
	fzrt_int						windex,		/* @parm <in> | project window index */
	fz_objt_opts_parm_enum		which,		/* @parm <in> | parameter identifier */
	fz_type_td					*value		/* @parm <out> | parameter data */
	);

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

	@fsfunc_t

	@desc		Sets object setup parameters.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_objt_get_opts_parm_data

	@exfile		<scdir>/Utilities | util_proj_opts.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_objt_set_opts_parm_data_func)(
	fzrt_int						windex,		/* @parm <in> | project window index */
	fz_objt_opts_parm_enum		which,		/* @parm <in> | parameter identifier */
	fz_type_td					*value		/* @parm <in> | parameter data */
	);

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

	@fsfunc_t

	@desc		Sorts the entries in the objects palette list in alphabetical order. 
				Upper case characters precede the lower case.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_proj_opts.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_objt_sort_func)(
	fzrt_int						windex		/* @parm <in> | project window index */
	);

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

	@fsfunc_t

	@desc		Purges all empty groups in the objects palette list.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_proj_opts.fsl

	@toc		modl_util

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_objt_purge_func)(
	fzrt_int						windex		/* @parm <in> | project window index */
	);

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

	@fsfunc_t

	@desc		Turns all destination objects (in array dst_objts) into clones of the source
				object (src_objt). The geometry of the source object is copied to each 
				destination object and transformed by the matrix, which transforms the object axes of
				the source object into the object axes of the destination object. If
				the source object is already a member of another clone family, the 
				destination objects are added to that clone family. If the source object
				is not a clone, a new clone family is created which contains the source
				object and all the destination objects.


	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_edit

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_make_clones_func) (
	fzrt_int		windex,		/* @parm <in> | project window index 	*/
	fz_objt_ptr	src_objt,	/* @parm <in> | source object, from which the geometry is copied */
	fz_objt_ptr	*dst_objts,	/* @parm <in> | an array of destination objects, to which the geometry is copied */
	fzrt_int		n_dst_objts	/* @parm <in> | the number of objects in the dst_objts array 	*/
);

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

	@fsfunc_t

	@desc		If the object passed in is a member of a clone family, the object is
				removed from the family and become a non cloned object. If the
				entire_family is set to TRUE, the entire clone family is dissolved.


	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_edit
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_unclone_func) (
	fzrt_int			windex,			/* @parm <in> | project window index 	*/
	fz_objt_ptr		objt,			/* @parm <in> | object to be uncloned 	*/
	fzrt_boolean	entire_family	/* @parm <in> | set to TRUE if uncloning the entire clone family, FALSE otherwise */
	);

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

	@fsfunc_t

	@desc		For the given object, all members of the clone family to which the
				the object belongs are added to the object list passed in. The object
				is added to the list as well. If the object is not
				a clone, nothing is added to the list. Note, that the object list
				must be created by the calling code via the function call fz_objt_list_create and must
				be disposed of with the function call fz_objt_list_delete

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_edit
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_find_clones_func) (
	fzrt_int				windex,		/* @parm <in>  | project window index 	*/
	fz_objt_ptr			objt,		/* @parm <in>  | object for which to find all clones */
	fz_enty_list_ptr	objt_list	/* @parm <out> | object list, which will contain all clones belonging to the
													 same family as the object passed in. */
	);

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

	@fsfunc_t

	@desc		In a given project, update all the clones. 
				If a plugin or script modifies an object, which is part of a clone family, 
				the plugin or script does not have to do anything special to propagate the 
				change to all the members of the clone family. formZ performs this
				task automatically at the end of each tool or command execution.
				If a plugin or script needs to have the changes applied immediately after
				the clone object was edited, fz_objt_edit_update_clones can be called.
				Right afterwards, all clones will be up to date.
				
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_edit
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_update_clones_func) (
	fzrt_int				windex		/* @parm <in>  | project window index 	*/
	);

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

	@fsfunc_t

	@desc		Checks whether an object is a clone or not
				
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_anly
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_alys_objt_is_clone_func) (
	fzrt_int				windex,			/* @parm <in>   | project window index 	*/
	fz_objt_ptr			objt,			/* @parm <in>   | object to check 	*/
	fzrt_boolean		*is_clone		/* @parm <out>  | TRUE, if the object is a clone, FALSE otherwise */
	);
	
/************************************************************************

	@fsfunc_t

	@desc		Checks whether two objects are clones and whether they belong to the
				same clone family. TRUE is only returned if both objects are clones
				and they are siblings.
				
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_anly
	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_alys_objts_are_clone_siblings_func) (
	fzrt_int				windex,			/* @parm <in>   | project window index 	*/
	fz_objt_ptr			objt1,			/* @parm <in>   | object 1 to check 	*/
	fz_objt_ptr			objt2,			/* @parm <in>   | object 2 to check 	*/
	fzrt_boolean		*are_siblings	/* @parm <out>  | TRUE, if the object 1 and object 2 are member of the same clone family, FALSE otherwise */
	);
	
/************************************************************************

	@fsfunc_t

	@desc		If object 1 and object 2 are clones and belong to the same family,
				the matrix which transforms object 1 into object 2 is returned.
				An error is returned, if the objects are not clones or don't belong
				to the same clone family.
				
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_anly

*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_alys_get_clone_transform_func) (
	fzrt_int				windex,	/* @parm <in>   | project window index 	*/
	fz_objt_ptr			objt1,	/* @parm <in>   | clone object 1 */
	fz_objt_ptr			objt2,	/* @parm <in>   | clone object 2 */
	fz_mat4x4_td		*mat	/* @parm <out>   | matrix, that transforms object 1 into object 2 */
	);

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

	@fsfunc_t

	@desc		Replaces the geometry of all destination objects (in array dst_objts) 
				with the geometry of the source object (src_objt). The geometry of the source object 
				is copied to each destination object and transformed by the matrix, which transforms 
				the object axes of the source object into the object axes of the destination object.
				If the make_clones flag is set to TRUE, the replaced objects become 
				clones of the source object. If the scale flag is TRUE, the copied geometry
				is scaled, so that the bounding box of the source object fits into the
				bounding box of the destination object, as measured before the copy operation.
				if the scale_uniform is also set to TRUE, the scale factor is allowed to be
				non uniform. That is, geometry is scaled so that the two bounding boxes
				match exactly. If scale_uniform is set to FALSE, the smallest scale
				factor is used for x, y and z scale.
	
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		<scdir>/Utilities | util_objt_clones.fsl

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_replace_func) (
	fzrt_int			windex,				/* @parm <in> | project window index 	*/
	fz_objt_ptr		src_objt,			/* @parm <in> | source object, from which the geometry is copied */
	fz_objt_ptr		*dst_objts,			/* @parm <in> | an array of destination objects, to which the geometry is copied */
	fzrt_int			n_dst_objts,		/* @parm <in> | the number of objects in the dst_objts array 	*/
	fzrt_boolean	make_clones,		/* @parm <in> | set to TRUE, if the destination objects and the source object need to be turned into a clone family 	*/
	fzrt_boolean	scale,				/* @parm <in> | set to TRUE if the scale of the destination objects needs to be maintained 	*/
	fzrt_boolean	scale_uniform		/* @parm <in> | set to TRUE if the scale can be non uniform */
);



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

	@fsfunc_t

	@desc		Execute a pick by using a selection set. Objects are selected according
				to the criteria defined in the selection set passed in. The objects
				are added to (or removed from) the project pick buffer, as defined in
				the selection set.
	
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_pick

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_pick_by_criteria_func) (
	fzrt_int				windex,		/* @parm <in> | project window index 	*/
	fz_msel_set_ptr		set_ptr		/* @parm <in> | the selection set, whose crietria will be used to select the objects */
);

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

	@fsfunc_t

	@desc		Handles the Operand functionality in the Status of Objects tab of tools. This function should be called
				by a tool plugin or script, after a new object was created from an existing
				object. The existing object will be deleted, kept or ghosted based on the
				setting in the Status tab of the respective tool options dialog. If the 
				inherit_clone_data option is set to TRUE and the original object was a clone,
				the new object inherits the clone information from the original object. This
				option should only be set to TRUE, if the new object is not radically different
				from the original object (i.e. there is some resemblance left over, so that
				the use can see that the new object is derived from the original object).
				Note, that the tool also needs to initialize its status of objects options in the
				fz_tool_cbak_init callback function by calling the api fz_syst_cmnd_set_status_of_objt
				with the appropriate arguments.
	
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_handle_status_of_opnd_func) (
	fzrt_int				windex,				/* @parm <in> | project window index 	*/
	fz_objt_ptr			org_objt,			/* @parm <in> | the original object 	*/
	fz_objt_ptr			new_objt,			/* @parm <in_opt> | the new object. if inherit_clone_data is set to TRUE, this argument cannot be NULL. */
	fzrt_boolean		inherit_clone_data	/* @parm <in> | TRUE, if clone information needs to be inherited by the new object, FALSE otherwise */
	);
	
/************************************************************************

	@fsfunc_t

	@desc		Handles the New Objects functionality in the Status of Objects tab of tools. 
				This function should be called by a tool plugin or script, after two or more new objects 
				were created. The new objects are left alone, or are joined into a single
				volume, based on the setting in the Status tab of the respective tool options dialog.
				The objects are passed in via the entity_list argument. If the objects
				are joined, the entity list will contain one final object, which is a new object.
				The original objects whose volumes were joined to the new object are deleted. 
				The was_joined argument indicates whether anything was joined.
				Note, that the tool also needs to initialize its status of objects options in the
				fz_tool_cbak_init callback function by calling the api fz_syst_cmnd_set_status_of_objt
				with the appropriate arguments.
	
	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_handle_new_objt_volms_func) (
	fzrt_int				windex,				/* @parm <in> | project window index 	*/
	fz_enty_list_ptr	objt_list,			/* @parm <in_out> | list with the object pointers	*/
	fzrt_boolean		*was_joined			/* @parm <out_opt> | TRUE if anything was joined, FALSE otherwise	*/
	);
	
	
/************************************************************************

	@fsfunc_t

	@desc		Returns the number of parameters of a controlled (parametric) object.
				The cntl_uuid argument is the unique identifier id (UUID) of the object type. 
				For a given object this id can be retrieved with the function fz_objt_alys_get_objt_cntl_uuid.
	
	@return		Error codes

	@avail		6.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_parm_count_func) (
	fzrt_int				windex,				/* @parm <in>  | project window index						*/
	fzrt_UUID_td		cntl_uuid,			/* @parm <in>  | object type UUID							*/
	fzrt_int				*count				/* @parm <out> | number of parameters for the object type.	*/
	);

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

	@fsfunc_t

	@desc		Returns the information about a parameter of a controled (parametric) object.
				The cntl_uuid argument is the unique identifier id (UUID) of the object type. 
				For a given object this id can be retrieved with the function fz_objt_alys_get_objt_cntl_uuid.
				The parm_indx argument identified the nth parameter of the object type. The api
				function fz_objt_edit_parm_count can be used to determine the number of 
				parameters of a controlled object.
				
	
	@return		Error codes

	@avail		6.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_parm_get_info_func) (
	fzrt_int						windex,				/* @parm <in> | project window index */
	fzrt_UUID_td				cntl_uuid,			/* @parm <in>  | object type UUID							*/
	fzrt_int						parm_indx,			/* @parm <in> | parameter index to retrieve */
	fzrt_UUID_td				parm_uuid,			/* @parm <out_opt> | uuid of parameter */
	fz_string_td				parm_name,			/* @parm <out_opt> | name of parameter */
	fz_type_enum				*parm_type,			/* @parm <out_opt> | data type of parameter */
	fz_fuim_format_int_enum		*parm_format_int,	/* @parm <out_opt> | integer format id of data */
	fz_fuim_format_float_enum	*parm_format_float,	/* @parm <out_opt> | float format id of data */
	fz_fuim_item_type_enum		*parm_fuim_item,	/* @parm <out_opt> | The type of dialog item with which to display the parameter. Note,
																		 that only certain dialg items can be used for a given data type.  */
	fzrt_int						*parm_range,		/* @parm <out_opt> | bit encoded range flags of data.  (see fz_fuim_range_enum)  */
	fz_type_td					*parm_range_min,	/* @parm <out_opt> | minimum range value of data */
	fz_type_td					*parm_range_max,	/* @parm <out_opt> | maximum range value of data */
	fzrt_int						*flags				/* @parm <out_opt> | bit encoded flags.  (see fz_otyp_parm_flags_enum). */
	);

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

	@fsfunc_t

	@desc		Returns the value of a given parameter of a controlled (parametric) object.
				If the object is a plain object, and error is returned. The parm_uuid argument is
				the unique identifier id (UUID) of the parameter. The function
				fz_objt_edit_parm_get_info can be used to inquire this id for any of
				the parameters of an object type.
				
	
	@return		Error codes

	@avail		6.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_parm_get_func) (
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			objt,			/* @parm <in> | object */
	fzrt_UUID_td		parm_uuid,		/* @parm <in> | uuid of parameter */
	fz_type_td			*data			/* @parm <out> | data retrieved from the given parameter */
	);

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

	@fsfunc_t

	@desc		Sets the value of a given parameter of a controlled (parametric) object.
				If the object is a plain object, and error is returned. The parm_uuid argument is
				the unique identifier id (UUID) of the parameter. The function
				fz_objt_edit_parm_get_info can be used to inquire this id for any of
				the parameters of an object type.
				
	
	@return		Error codes

	@avail		6.0.0.0

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_parm_set_func) (
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			objt,			/* @parm <in> | object */
	fzrt_UUID_td		parm_uuid,		/* @parm <in> | uuid of parameter */
	fz_type_td			*data			/* @parm <in> | data to be stored into the given parameter */
	);

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

	@fsfunc_t

	@desc		Merges coplanar faces of a facetted object into a single face.
				The optional did argument returns, whether any faces were merged or not.
				
	
	@return		Error codes

	@avail		6.0.0.6

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_remove_coplanar_faces_func) (
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			objt,			/* @parm <in> | object */
	fzrt_boolean		*did			/* @parm <out_opt> | TRUE, if any faces were removed, FALSE otherwise */
	);

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

	@fsfunc_t

	@desc		Merges colinear segments of a facetted object into a single segment.
				The optional did argument returns, whether any segments were merged or not.
				
	
	@return		Error codes

	@avail		6.0.0.6

	@see		

	@exfile		

	@toc		modl_edit

	
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_objt_edit_remove_colinear_segments_func) (
	fzrt_int				windex,			/* @parm <in> | project window index */
	fz_objt_ptr			objt,			/* @parm <in> | object */
	fzrt_boolean		*did			/* @parm <out_opt> | TRUE, if any segments were removed, FALSE otherwise */
	);




/* FZ_OBJT_TYPE_DIML */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the Linear Dimension object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_DIML		"\xb8\x67\xa9\x4a\x9f\xee\x11\xda\x8e\x35\x00\x03\x93\x63\x5d\xbc"

/* FZ_OBJT_TYPE_DIMR */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the Radius/Diameter Dimension object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_DIMR		"\xb8\x67\xaa\x0f\x9f\xee\x11\xda\x8e\x35\x00\x03\x93\x63\x5d\xbc"

/* FZ_OBJT_TYPE_DIMA */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the Angular Dimension object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_DIMA		"\xb8\x67\xaa\xd7\x9f\xee\x11\xda\x8e\x35\x00\x03\x93\x63\x5d\xbc"

/* FZ_OBJT_TYPE_DIMD */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the Leader Line object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_DIMD		"\xb8\x67\xab\x9e\x9f\xee\x11\xda\x8e\x35\x00\x03\x93\x63\x5d\xbc"

/* FZ_OBJT_TYPE_DIMT */
/* UUID : {9ca74b8d-fcb9-4315-bd27-0fa1e85c7c29} *//* Reference : 67 */
/********************************************************************************************************

	@def

	@desc	Unique identifier for the Note object type.

	@toc	modl_cnstr

*********************************************************************************************************/
#define FZ_OBJT_TYPE_DIMT		"\xb8\x67\xb5\x24\x9f\xee\x11\xda\x8e\x35\x00\x03\x93\x63\x5d\xbc"

/* FZ_OBJT_TYPE_DIMC */
/* UUID : {8de9d8b5-e73f-41d7-b554-115d35da62b9} *//* Reference : 67 */
/********************************************************************************************************
 
 @def
 
 @desc	Unique identifier for the CIRCUMFERENCE object type.
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/
#define FZ_OBJT_TYPE_DIMC		"\x8d\xe9\xd8\xb5\xe7\x3f\x41\xd7\xb5\x54\x11\x5d\x35\xda\x62\xb9"
    

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

	@enum	

	@desc	Text alignment options for linear dimensions.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_diml_text_align_enum
{
	FZ_DIML_TEXT_ALIGN_START = 0,		/*	@emem		Text is drawn at the first (start) point */
	FZ_DIML_TEXT_ALIGN_CENTER_IN_OBSOLETE,		/*	@emem		Text is drawn at the center inside. */
	FZ_DIML_TEXT_ALIGN_CENTER_CENTER,			/*	@emem		Text is drawn at the center on top of the dimension line. */
	FZ_DIML_TEXT_ALIGN_CENTER_OUT_OBSOLETE,		/*	@emem		Text is drawn at the center outside. */
	FZ_DIML_TEXT_ALIGN_END,						/*	@emem		Text is drawn at the second (end) point */
	
	FZ_DIML_TEXT_ALIGN_MAX
	
} fz_diml_text_align_enum;

/************************************************************************
	
	@fsfunc_t

	@desc		Constructs a linear dimension, given a plane and two points on the plane.
				The x axis of the plane determines the direction along which the linear dimension
				is measured. The two points can be defined explicitely, via the fz_xyz_td argument
				or through the obj and pindx argments (If the fz_xyz_td* argument is NULL).
				Using obj and pindx also creates an associative diemnsion point.
				The offset parameter determines how far from point1 the dimension line
				is displayed. It is measured along the posituve y axis of the plane. It
				may be negative to make is show up on the offposite side.
				The dimension style is optionally defined by the style_tag argument. If passed
				as NULL, the current style is used.
				If the cust_str is passed as non NULL, it is used as a custom string.It must 
				contain the "<>" characters for the actual dimension value to be displayed
				(as in the user interface).
				user interface).
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
************************************************************************/
typedef fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_linr_func) (
	fzrt_int					windex,		/* @parm <in> | project window index */
	fz_map_plane_td			*plane,		/* @parm <in> | Plane in which the dimension exists. The X axis of the plane is the direction alogn which the dimension is measured
														and therefore the direction in which the dimension line is drawn. The y axis defines the
														positive offset of the dimension line. */
	fz_xyz_td				*p1,		/* @parm <in> | First dimension point, or NULL (in which case obj1 and pindx1 must be defined) */
	fz_objt_ptr				obj1,		/* @parm <in> | Object for first dimension point (Must be non NULL, if p1 is NULL) */		
	fzrt_int					pindx1,		/* @parm <in> | Point index for first dimension point (Must be non NULL, if p1 is NULL) */		
	fz_xyz_td				*p2,		/* @parm <in> | Second dimension point, or NULL (in which case obj2 and pindx2 must be defined) */
	fz_objt_ptr				obj2,		/* @parm <in> | Object for second dimension point (Must be non NULL, if p2 is NULL) */		
	fzrt_int					pindx2,		/* @parm <in> | Point index for second dimension point (Must be non NULL, if p2 is NULL) */		
	double					offset,		/* @parm <in> | Dimension line offset along Y axis of plane */
	fz_diml_text_align_enum	text_align,	/* @parm <in> | Text alignment */
	fz_tag_td				*style_tag,	/* @parm <in_opt> | Tag of the dimension style to be used. If NULL is passed, the default style will be used. */
	fz_string_td			cust_str,	/* @parm <in_opt> | Custom string, as in the user interface. */
	fz_objt_ptr				*new_obj	/* @parm <out> | The new dimension object. */
	);


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

	@enum	

	@desc	Type of linear dimension.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_diml_type_enum
{
	FZ_DIML_TYPE_SINGLE = 0,	/*	@emem		Text is drawn at the first (start) point */
	FZ_DIML_TYPE_CHAIN,			/*	@emem		Text is drawn at the center inside. */
	FZ_DIML_TYPE_STACK,			/*	@emem		Text is drawn at the center on top of the dimension line. */
	FZ_DIML_TYPE_ORDNT,			/*	@emem		Text is drawn at the center outside. */

	FZ_DIML_TYPE_MAX
	
} fz_diml_type_enum;


/************************************************************************
	
	@fsfunc_t

	@desc		Constructs a linear dimension, given a plane and two points on the plane.
				The x axis of the plane determines the direction along which the linear dimension
				is measured. The two points can be defined explicitely, via the fz_xyz_td argument
				or through the obj and pindx argments (If the fz_xyz_td* argument is NULL).
				Using obj and pindx also creates an associative diemnsion point.
				The offset parameter determines how far from point1 the dimension line
				is displayed. It is measured along the posituve y axis of the plane. It
				may be negative to make is show up on the offposite side.
				The dimension style is optionally defined by the style_tag argument. If passed
				as NULL, the current style is used.
				If the cust_str is passed as non NULL, it is used as a custom string.It must 
				contain the "<>" characters for the actual dimension value to be displayed
				(as in the user interface).
				user interface).
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
************************************************************************/
typedef fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_linr_type_func) (
	fzrt_int					windex,		/* @parm <in> | project window index */
	fz_map_plane_td			*plane,		/* @parm <in> | Plane in which the dimension exists. The X axis of the plane is the direction alogn which the dimension is measured
														and therefore the direction in which the dimension line is drawn. The y axis defines the
														positive offset of the dimension line. */
	fz_xyz_td				*p1,		/* @parm <in> | First dimension point, or NULL (in which case obj1 and pindx1 must be defined) */
	fz_objt_ptr				obj1,		/* @parm <in> | Object for first dimension point (Must be non NULL, if p1 is NULL) */		
	fzrt_int					pindx1,		/* @parm <in> | Point index for first dimension point (Must be non NULL, if p1 is NULL) */		
	fz_xyz_td				*p2,		/* @parm <in> | Second dimension point, or NULL (in which case obj2 and pindx2 must be defined) */
	fz_objt_ptr				obj2,		/* @parm <in> | Object for second dimension point (Must be non NULL, if p2 is NULL) */		
	fzrt_int					pindx2,		/* @parm <in> | Point index for second dimension point (Must be non NULL, if p2 is NULL) */		
	double					offset,		/* @parm <in> | Dimension line offset along Y axis of plane */
	fz_diml_text_align_enum	text_align,	/* @parm <in> | Text alignment */
	fz_tag_td				*style_tag,	/* @parm <in_opt> | Tag of the dimension style to be used. If NULL is passed, the default style will be used. */
	fz_string_td			cust_str,	/* @parm <in_opt> | Custom string, as in the user interface. */
	fz_diml_type_enum		type,		/* @parm <in_opt> | Dimension type. */
 	fz_objt_ptr				*new_obj	/* @parm <out> | The new dimension object. */
	);

/************************************************************************
 
 @fsfunc_t
 
 @desc		Constructs a radial dimension, 
 
 @return	Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 ************************************************************************/	
	
typedef fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_rad_func) (
   fzrt_int					windex,
   fz_map_plane_td			*plane,			/* @parm <in> | PLANE IN WHICH DIMENSION EXISTS. X AXIS OF PLANE IS DIRECTION ALONG WHICH DIMENSION IS MEASURED */
   fz_xyz_td				center,			/* @parm <in> | CENTER POINT											*/
   fz_xyz_td				cord_pt,		/* @parm <in> | END POINT												*/
   double					radius,			/* @parm <in> |	RADIUS													*/
   fz_diml_text_align_enum	text_align,		/* @parm <in> | TEXT ALIGNMENT											*/
   fz_tag_td				*style_tag,		/* @parm <in> | OPTIONAL STYLE TAG, IF NULL, CURRENT STYLE IS USED		*/
   fz_string_td				cust_str,		/* @parm <in> | OPTIONAL CUSTOM STRING									*/
   fz_objt_ptr				*new_obj		/* @parm <out>| RESULTING OBJECT										*/
);
	
	
/************************************************************************
 
 @fsfunc_t
 
 @desc		Constructs a diameter dimension, 
 
 @return	Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 ************************************************************************/	

typedef fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_dia_func) (
fzrt_int					windex,
fz_map_plane_td			*plane,			/* @parm <in> | PLANE IN WHICH DIMENSION EXISTS. X AXIS OF PLANE IS DIRECTION ALONG WHICH DIMENSION IS MEASURED */
fz_xyz_td				center,			/* @parm <in> | CENTER POINT											*/
fz_xyz_td				cord_pt,		/* @parm <in> | END POINT												*/
double					radius,			/* @parm <in> |	RADIUS													*/
fz_diml_text_align_enum	text_align,		/* @parm <in> | TEXT ALIGNMENT											*/
fz_tag_td				*style_tag,		/* @parm <in> | OPTIONAL STYLE TAG, IF NULL, CURRENT STYLE IS USED		*/
fz_string_td			cust_str,		/* @parm <in> | OPTIONAL CUSTOM STRING									*/
fz_objt_ptr				*new_obj		/* @parm <out>| RESULTING OBJECT										*/
);
	
	
/************************************************************************
 
 @fsfunc_t
 
 @desc		Constructs a radial dimension, 
 
 @return	Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 ************************************************************************/	
typedef fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_ang_func) (
   fzrt_int						windex,
   fz_map_plane_td			*plane,			/* @parm <in> |PLANE IN WHICH DIMENSION EXISTS. X AXIS OF PLANE IS DIRECTION ALONG WHICH DIMENSION IS MEASURED */
   fz_xyz_td				start_pt,		/* @parm <in> |START POINT											*/
   fz_xyz_td				center_pt,		/* @parm <in> |CENTER POINT											*/
    fz_xyz_td				end_pt,		 	/* @parm <in> |END POINT											*/
   double					line_offset,	/* @parm <in> |LINE OFFSET											*/
   fz_diml_text_align_enum	text_align,		/* @parm <in> |TEXT ALIGNMENT										*/
   fz_tag_td				*style_tag,		/* @parm <in> |OPTIONAL STYLE TAG, IF NULL, CURRENT STYLE IS USED	*/
   fz_string_td				cust_str,		/* @parm <in> |OPTIONAL CUSTOM STRING								*/
   fz_objt_ptr				*new_obj		/* @parm <out>|RESULTING OBJECT										*/
);
/************************************************************************
 
 @fsfunc_t
 
 @desc		Constructs a leader line dimension,
 
 @return	Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 ************************************************************************/	
typedef	fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_leader_func) (

  fzrt_int					windex,
  fz_map_plane_td			*plane,			/*  @parm <in> |PLANE IN WHICH DIMENSION EXISTS. X AXIS OF PLANE IS DIRECTION ALONG WHICH DIMENSION IS MEASURED */
  fz_xyz_td					*pts,			/*  @parm <in> |FIRST DIMN POINT, OR NULL (IN WHICH CASE obj1 AND pindx1 MUST BE DEFINED) */
  fzrt_int					num_pts,		/*  @parm <in> |NUMBER OF POINTS										*/
  double					offset,			/*  @parm <in> |DIM LINE OFFSET ALONG Y AXIS OF plane					*/
  fz_diml_text_align_enum	text_align,		/*  @parm <in> |TEXT ALIGNMENT											*/
  fz_tag_td					*style_tag,		/*  @parm <in> |OPTIONAL STYLE TAG, IF NULL, CURRENT STYLE IS USED		*/
  fz_string_td				cust_str,		/*  @parm <in> |OPTIONAL CUSTOM STRING									*/
  fz_objt_ptr				*new_obj		/*  @parm <in> |RESULTING OBJECT										*/
);

    
/********************************************************************************************************
 
 @enum
 
 @desc	text orientation
 
 @avail	8.5.5.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 *********************************************************************************************************/

    
typedef enum
{
	FZ_DIMN_NOTE_TOP_LEFT=0,
    FZ_DIMN_NOTE_TOP_CENTER,
    FZ_DIMN_NOTE_TOP_RIGHT,
    
    FZ_DIMN_NOTE_MIDDLE_LEFT,
	FZ_DIMN_NOTE_MIDDLE_CENTER,
    FZ_DIMN_NOTE_MIDDLE_RIGHT,
    
    FZ_DIMN_NOTE_BOTTOM_LEFT,
    FZ_DIMN_NOTE_BOTTOM_CENTER,
    FZ_DIMN_NOTE_BOTTOM_RIGHT,
    
    FZ_DIMN_NOTE_DEFAULT=FZ_DIMN_NOTE_BOTTOM_LEFT,
	FZ_DIMN_NOTE_MAX
} fz_dimn_note_placement_enum;
    
/************************************************************************
 
 @fsfunc_t
 
 @desc		Constructs a note,
 
 @return	Error codes
 
 @avail		8.5.5.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 ************************************************************************/	
typedef	fzrt_error_td	(FZRT_SPEC *fz_objt_cnstr_dimn_note_func) (

	fzrt_int				windex,
	fz_map_plane_td			*plane,			/*  @parm <in> |PLANE IN WHICH DIMENSION EXISTS. X AXIS OF PLANE IS DIRECTION ALONG WHICH DIMENSION IS MEASURED */
	fz_xyz_td				*p1,			/*  @parm <in> |FIRST NOTE POINT) */
 	fz_xyz_td				*p2,			/*  @parm <in> |SECOD NOTE POINT) */
	fz_diml_text_align_enum	*text_align,	/*  @parm <in> |TEXT ALIGNMENT */
	fz_dimn_note_placement_enum *placement,	/*  @parm <in> |OPTIONAL PLACEMENT	*/
    fz_tag_td				*style_tag,		/*  @parm <in> |OPTIONAL STYLE TAG, IF NULL, CURRENT STYLE IS USED		*/
	fzrt_uni_char			*string,		/*  @parm <in> |NOTE TEXT STRING									*/
	fzrt_int				string_len,		/*  @parm <in> |NUMBE OF CHARS IN STRING									*/
	fz_objt_ptr				*new_obj		/*  @parm <in> |RESULTING OBJECT										*/
);


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

	@enum	

	@desc	Terminator types for dimension styles.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dimn_style_term_enum
{
	FZ_DIMN_STYLE_TERM_NONE = 0,/*	@emem		Dimension uses no terminator */
	FZ_DIMN_STYLE_TERM_SLASH,	/*	@emem		Dimension uses a slash as terminator */
	FZ_DIMN_STYLE_TERM_FILLED,	/*	@emem		Dimension uses a filled arrow as terminator */
	FZ_DIMN_STYLE_TERM_OPEN,	/*	@emem		Dimension uses a line arrow as terminator */
	FZ_DIMN_STYLE_TERM_DOT,		/*	@emem		Dimension uses a filled dot as terminator */
	FZ_DIMN_STYLE_TERM_DOT_FILLED,	
	FZ_DIMN_STYLE_TERM_BOX,	
	FZ_DIMN_STYLE_TERM_BOX_FILLED,
	FZ_DIMN_STYLE_TERM_OLD_OPEN, /* v6 open style */
	FZ_DIMN_STYLE_TERM_MAX

} fz_dimn_style_term_enum;

/********************************************************************************************************
 
 @enum	
 
 @desc	text orientation
 
 @avail	7.0.0.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 *********************************************************************************************************/
typedef enum fz_dimn_style_orient_enum
{
	FZ_DIMN_STYLE_HORIZONTAL = 0,/*	@emem		Dimension horizontal on screen */
	FZ_DIMN_STYLE_VERTICAL,		/*	@emem		Dimension vertical  on screen */
	FZ_DIMN_STYLE_HORZ_VERT,	/*	@emem		Dimension horizontal/vertical on screen */
	FZ_DIMN_STYLE_ALIGNED,		/*	@emem		Dimension aligned with dimension */
	
	FZ_DIMN_STYLE_ORIENT_MAX
	
} fz_dimn_style_orient_enum;
	
/********************************************************************************************************
 
 @enum	
 
 @desc	text orientation
 
 @avail	7.0.0.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 *********************************************************************************************************/

typedef enum dimn_style_plcmnt_enum
{
	DIMN_STYLE_PLCMNT_ABOVE = 0,	/*	@emem		above Dimension  line	*/
	DIMN_STYLE_PLCMNT_ON,			/*	@emem		on	Dimension line		*/
	DIMN_STYLE_PLCMNT_BELLOW,		/*	@emem		bellow Dimension line	*/
	
	DIMN_STYLE_PLCMNT_MAX
	
} dimn_style_plcmnt_enum;

/********************************************************************************************************
 
 @enum	
 
 @desc	text orientation
 
 @avail	7.0.0.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 *********************************************************************************************************/

typedef enum dimn_style_type_enum
{
	DIMN_STYLE_TYPE_SCREEN = 0,		/*	@emem		world					*/
	DIMN_STYLE_TYPE_WORLD,			/*	@emem		screen					*/
	
	DIMN_STYLE_TYPE_MAX				 
	
} dimn_style_type_enum;

/********************************************************************************************************
 
 @enum
 
 @desc	text orientation
 
 @avail	8.5.5.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 *********************************************************************************************************/
typedef enum
{
	DIMN_STYLE_JUSTIFY_LEFT=0,
	DIMN_STYLE_JUSTIFY_CENTER,
	DIMN_STYLE_JUSTIFY_RIGHT,
	DIMN_STYLE_JUSTIFY_MAX
} dimn_style_justify_enum;
	
/********************************************************************************************************

	@enum	

	@desc	Parameter identifiers for the dimension style parameter. Used for the
			"which" argument of fz_dimn_style_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dimn_style_parm_enum
{
	FZ_DIMN_STYLE_PARM_NAME = 0,		/*	@emem		Dimension style name.
											@ptype		fz_string_td */
	FZ_DIMN_STYLE_PARM_SIZE_3D,			/*	@emem		Style size is specified as world size (TRUE) or screen size (FALSE).
											@ptype		fzrt_boolean
											@default	TRUE */
	FZ_DIMN_STYLE_PARM_ALIGN_VIEW,		/*	@emem		Style is drawn aligned with the view (TRUE) or on the dimension plane (FALSE).
											@ptype		fzrt_boolean
											@default	FALSE */
	FZ_DIMN_STYLE_PARM_SCREEN_SIZE,		/*	@emem		Font size in points, if the size is specified in screen unit 
														(FZ_DIMN_STYLE_PARM_SIZE_3D is FALSE).
											@ptype		fzrt_int
											@rmin		3
											@rmax		48
											@default	18 */
	FZ_DIMN_STYLE_PARM_WORLD_SIZE,		/*	@emem		Font size linear units, if the size is specified in world units 
														(FZ_DIMN_STYLE_PARM_SIZE_3D is TRUE).
											@ptype		double
											@rmin		0.0
											@default	12.0 inches */
	FZ_DIMN_STYLE_PARM_FONT_NAME,		/*	@emem		Dimension style font name.
											@ptype		fz_string_td */
	FZ_DIMN_STYLE_PARM_LINR_ACCURACY,	/*	@emem		Linear accuracy to which the dimension value is rounded.
											@ptype		double
											@rmin		0.0
											@default	1/8 inch */
	FZ_DIMN_STYLE_PARM_ANGL_ACCURACY,	/*	@emem		Angular accuracy to which the dimension value is rounded.
											@ptype		double
											@rmin		0.0
											@default	0.1 degrees */

	FZ_DIMN_STYLE_PARM_TERM_TYPE_OBSOLETE,	/*	@emem		Terminator type
											@ptype		fz_dimn_style_term_enum
											@default	FZ_DIMN_STYLE_TERM_OPEN */
	
	FZ_DIMN_STYLE_PARM_TERM_START_TYPE,	 	/*	@emem		Terminator START type
												@ptype		fz_dimn_style_term_enum
												@default	FZ_DIMN_STYLE_TERM_OPEN */
	

	FZ_DIMN_STYLE_PARM_TERM_END_TYPE,		/*	@emem		Terminator END type
											@ptype		fz_dimn_style_term_enum
											@default	FZ_DIMN_STYLE_TERM_OPEN */
	
	FZ_DIMN_STYLE_PARM_WORLD_TERM_START_HEIGHT,
	FZ_DIMN_STYLE_PARM_WORLD_TERM_START_WIDTH,
	FZ_DIMN_STYLE_PARM_WORLD_TERM_END_HEIGHT,
	FZ_DIMN_STYLE_PARM_WORLD_TERM_END_WIDTH,
	FZ_DIMN_STYLE_PARM_SCREEN_TERM_START_HEIGHT,
	FZ_DIMN_STYLE_PARM_SCREEN_TERM_START_WIDTH,
	FZ_DIMN_STYLE_PARM_SCREEN_TERM_END_HEIGHT,
	FZ_DIMN_STYLE_PARM_SCREEN_TERM_END_WIDTH,
	
	FZ_DIMN_STYLE_PARM_WITNESS_START,
	FZ_DIMN_STYLE_PARM_WITNESS_END,
	FZ_DIMN_STYLE_PARM_SCREEN_WITNESS_OFFSET,
	FZ_DIMN_STYLE_PARM_SCREEN_WITNESS_EXTENSION,
	FZ_DIMN_STYLE_PARM_WORLD_WITNESS_OFFSET,
	FZ_DIMN_STYLE_PARM_WORLD_WITNESS_EXTENSION,
	FZ_DIMN_STYLE_PARM_WORLD_WITNESS_UNIFORM,
	FZ_DIMN_STYLE_PARM_SCREEN_WITNESS_UNIFORM,
	FZ_DIMN_STYLE_PARM_TEXT_ORIENTATION,
	FZ_DIMN_STYLE_PARM_SCREEN_TEXT_GUTTER,
	FZ_DIMN_STYLE_PARM_WORLD_TEXT_GUTTER,
	FZ_DIMN_STYLE_PARM_STYLE_TEXT,
	FZ_DIMN_STYLE_PARM_TEXT_PLCMNT,
	FZ_DIMN_STYLE_PARM_STYLE_TYPE, /* MAB 01/07/13 */
	FZ_DIMN_STYLE_PARM_TEXT_JUSTIFY,
 	FZ_DIMN_STYLE_PARM_MAX

} fz_dimn_style_parm_enum;


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

	@fsfunc_t

	@desc		Creates a dimension style with the given parameters (same as in
				user interface).
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td	(FZRT_SPEC *fz_dimn_style_create_func) (
	fzrt_int					windex,				/* @parm <in> | project window index */
	fz_string_td			name,				/* @parm <in> | name for the style, as it will appear in the user interface */
	fz_string_td			font_name,			/* @parm <in_opt> | font name for the style. If passed as NULL the system default font is used */
	fzrt_boolean			size_as_3d,			/* @parm <in> | If TRUE, the font size is specified in world units. using the world_size argument. If
																FALSE, the font size is specified in screensize units (Points) using the screen_size argument */
	fzrt_boolean			align_with_view,	/* @parm <in> | If TRUE, the dimension text is drawn perpendicular to the view (2d on the screen). If FALSE it
																is drawn in 3d. */
	fzrt_int					screen_size,		/* @parm <in> | The font size in points, if size_as_3d is FALSE */
	double					world_size,			/* @parm <in> | The font size in world units (inches, cm), if size_as_3d is TRUE */
	
	fz_dimn_style_term_enum	term_type,			/* @parm <in> | The dimension terminator type (arrow, slash, dot ...) */
	double					linear_accuracy,	/* @parm <in> | The linear dimension accuracy. If 0 is passed in, the working units accuracy is used. */
	double					angular_accuracy,	/* @parm <in> | The angular dimension accuracy. If 0 is passed in, the working units accuracy is used. */
	
	fz_tag_td				*style_tag			/* @parm <out> | The tag of the new style. */
	);

/************************************************************************
 
 @fsfunc_t
 
 @desc		Creates a dimension style - screen - with the given parameters (same as in
 user interface).
 
 
 @return		Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 *************************************************************************/
typedef	fzrt_error_td	(FZRT_SPEC *fz_dimn_style_create_screen_func) (
	fzrt_int					windex,
	fz_string_td				*name,
	fz_string_td				*font_name,
	fzrt_int					*flags,								/* @parm <in> | BIT FLAGS												*/
	fzrt_int					*screen_size,						/* @parm <in> |IN SCREEN UNITS											*/
	double						*linear_accuracy,					/* @parm <in> | ACCURACY FOR LINEAR/RAD DIMENSIONS						*/
	double						*angular_accuracy,					/* @parm <in> | ACCURACY FOR ANGULAR DIMENSIONS							*/
	fz_dimn_style_term_enum		*term_type_start,					/* @parm <in> |TERMINATOR START TYPE									*/
	fz_dimn_style_term_enum		*term_type_end,						/* @parm <in> |TERMINATOR END TYPE										*/
	double						*term_start_height,					/* @parm <in> | TERMINATOR START HEIGHT									*/
	double						*term_start_width,					/* @parm <in> |TERMINATOR START LENGTH									*/
	double						*term_end_height,					/* @parm <in> | TERMINATOR END HEIGHT									*/
	double						*term_end_width,					/* @parm <in> | TERMINATOR END LENGTH									*/
	double						*witness_offset,					/* @parm <in> | WITNESS OFFSET											*/
	double						*witness_extension,					/* @parm <in> | WITNESS EXTENSION										*/
	double						*witness_uniform,					/* @parm <in> | WITNESS UNIFORM											*/
	fz_dimn_style_orient_enum	*text_orientation,					/* @parm <in> | HORIZONTAL- ALIGNED - HORIZONTAL/VERTICAL ORIENTATION	*/
	dimn_style_plcmnt_enum		*text_plcmnt,						/* @parm <in> |ABOVE - ON - BELLOW										*/
	double						*txt_gutter,						/* @parm <in> | TEXT GUTTER												*/
	dimn_style_type_enum		*style_type,						/* @parm <in> | TEXT TYPE	SCREEN/WORLD								*/
	fz_tag_td					*style_tag							/* @parm <out> | RESULTING TAG											*/
	);
/************************************************************************
 
 @fsfunc_t
 
 @desc		Creates a dimension style - screen - with the given parameters (same as in
 user interface).
 
 
 @return		Error codes
 
 @avail		8.5.5.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 *************************************************************************/
typedef	fzrt_error_td	(FZRT_SPEC *fz_dimn_style_create_screen2_func) (
	fzrt_int					windex,
	fz_string_td				*name,
	fz_string_td				*font_name,
	fzrt_int					*flags,								/* @parm <in> | BIT FLAGS												*/
	fzrt_int					*screen_size,						/* @parm <in> |IN SCREEN UNITS											*/
	double						*linear_accuracy,					/* @parm <in> | ACCURACY FOR LINEAR/RAD DIMENSIONS						*/
	double						*angular_accuracy,					/* @parm <in> | ACCURACY FOR ANGULAR DIMENSIONS							*/
	fz_dimn_style_term_enum		*term_type_start,					/* @parm <in> |TERMINATOR START TYPE									*/
	fz_dimn_style_term_enum		*term_type_end,						/* @parm <in> |TERMINATOR END TYPE										*/
	double						*term_start_height,					/* @parm <in> | TERMINATOR START HEIGHT									*/
	double						*term_start_width,					/* @parm <in> |TERMINATOR START LENGTH									*/
	double						*term_end_height,					/* @parm <in> | TERMINATOR END HEIGHT									*/
	double						*term_end_width,					/* @parm <in> | TERMINATOR END LENGTH									*/
	double						*witness_offset,					/* @parm <in> | WITNESS OFFSET											*/
	double						*witness_extension,					/* @parm <in> | WITNESS EXTENSION										*/
	double						*witness_uniform,					/* @parm <in> | WITNESS UNIFORM											*/
	fz_dimn_style_orient_enum	*text_orientation,					/* @parm <in> | HORIZONTAL- ALIGNED - HORIZONTAL/VERTICAL ORIENTATION	*/
	dimn_style_plcmnt_enum		*text_plcmnt,						/* @parm <in> |ABOVE - ON - BELLOW										*/
	double						*txt_gutter,						/* @parm <in> | TEXT GUTTER												*/
	dimn_style_type_enum		*style_type,						/* @parm <in> | TEXT TYPE	SCREEN/WORLD								*/
	dimn_style_justify_enum		*text_justify,						/* @parm <in> |ABOVE - ON - BELLOW										*/
	fz_tag_td					*style_tag							/* @parm <out> | RESULTING TAG											*/
	);


/************************************************************************
 
 @fsfunc_t
 
 @desc		Creates a dimension style - screen - with the given parameters (same as in
 user interface).
 
 
 @return		Error codes
 
 @avail		7.0.0.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 *************************************************************************/
typedef	fzrt_error_td	(FZRT_SPEC *fz_dimn_style_create_world_func) (
   fzrt_int						windex,
   fz_string_td					*name,
   fz_string_td					*font_name,
   fzrt_int						*flags,								/* @parm <in> | BIT FLAGS												*/
   double						*world_size,						/* @parm <in> |IN SCREEN UNITS											*/
   double						*linear_accuracy,					/* @parm <in> | ACCURACY FOR LINEAR/RAD DIMENSIONS						*/
   double						*angular_accuracy,					/* @parm <in> | ACCURACY FOR ANGULAR DIMENSIONS							*/
   fz_dimn_style_term_enum		*term_type_start,					/* @parm <in> |TERMINATOR START TYPE									*/
   fz_dimn_style_term_enum		*term_type_end,						/* @parm <in> |TERMINATOR END TYPE										*/
   double						*term_start_height,					/* @parm <in> | TERMINATOR START HEIGHT									*/
   double						*term_start_width,					/* @parm <in> |TERMINATOR START LENGTH									*/
   double						*term_end_height,					/* @parm <in> | TERMINATOR END HEIGHT									*/
   double						*term_end_width,					/* @parm <in> | TERMINATOR END LENGTH									*/
   double						*witness_offset,					/* @parm <in> | WITNESS OFFSET											*/
   double						*witness_extension,					/* @parm <in> | WITNESS EXTENSION										*/
   double						*witness_uniform,					/* @parm <in> | WITNESS UNIFORM											*/
   fz_dimn_style_orient_enum	*text_orientation,					/* @parm <in> | HORIZONTAL- ALIGNED - HORIZONTAL/VERTICAL ORIENTATION	*/
   dimn_style_plcmnt_enum		*text_plcmnt,						/* @parm <in> |ABOVE - ON - BELLOW										*/
   double						*txt_gutter,						/* @parm <in> | TEXT GUTTER												*/
   dimn_style_type_enum			*style_type,						/* @parm <in> | TEXT TYPE	SCREEN/WORLD								*/
   fz_tag_td					*style_tag							/* @parm <out> | RESULTING TAG											*/
   );

/************************************************************************
 
 @fsfunc_t
 
 @desc		Creates a dimension style - screen - with the given parameters (same as in
 user interface).
 
 
 @return		Error codes
 
 @avail		8.5.5.0
 
 @see		
 
 @exfile		
 
 @toc		modl_cnstr
 
 
 *************************************************************************/
typedef	fzrt_error_td	(FZRT_SPEC *fz_dimn_style_create_world2_func) (
   fzrt_int						windex,
   fz_string_td					*name,
   fz_string_td					*font_name,
   fzrt_int						*flags,								/* @parm <in> | BIT FLAGS												*/
   double						*world_size,						/* @parm <in> |IN SCREEN UNITS											*/
   double						*linear_accuracy,					/* @parm <in> | ACCURACY FOR LINEAR/RAD DIMENSIONS						*/
   double						*angular_accuracy,					/* @parm <in> | ACCURACY FOR ANGULAR DIMENSIONS							*/
   fz_dimn_style_term_enum		*term_type_start,					/* @parm <in> |TERMINATOR START TYPE									*/
   fz_dimn_style_term_enum		*term_type_end,						/* @parm <in> |TERMINATOR END TYPE										*/
   double						*term_start_height,					/* @parm <in> | TERMINATOR START HEIGHT									*/
   double						*term_start_width,					/* @parm <in> |TERMINATOR START LENGTH									*/
   double						*term_end_height,					/* @parm <in> | TERMINATOR END HEIGHT									*/
   double						*term_end_width,					/* @parm <in> | TERMINATOR END LENGTH									*/
   double						*witness_offset,					/* @parm <in> | WITNESS OFFSET											*/
   double						*witness_extension,					/* @parm <in> | WITNESS EXTENSION										*/
   double						*witness_uniform,					/* @parm <in> | WITNESS UNIFORM											*/
   fz_dimn_style_orient_enum	*text_orientation,					/* @parm <in> | HORIZONTAL- ALIGNED - HORIZONTAL/VERTICAL ORIENTATION	*/
   dimn_style_plcmnt_enum		*text_plcmnt,						/* @parm <in> |ABOVE - ON - BELLOW										*/
   double						*txt_gutter,						/* @parm <in> | TEXT GUTTER												*/
   dimn_style_type_enum			*style_type,						/* @parm <in> | TEXT TYPE	SCREEN/WORLD								*/
   dimn_style_justify_enum		*text_justify,						/* @parm <in> |ABOVE - ON - BELLOW										*/
   fz_tag_td					*style_tag							/* @parm <out> | RESULTING TAG											*/
   );

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

	@type

	@desc	Dimension style
			
	@avail	7.0.0.0
	
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef struct dimn_style_td*	fz_dimn_style_ptr;

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

	@fsfunc_t

	@desc		Gets the parameters of a dimension style
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_dimn_style_parm_get_func) (
	fzrt_int					windex,			/* @parm <in> | project window index 		*/
	fz_dimn_style_ptr		dimn_style,		/* @parm <in> | dimension style pointer 	*/
	fz_dimn_style_parm_enum	which,			/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data  			/* @parm <out> | parameter data				*/
	);


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

	@enum	

	@desc	Parameter identifiers for the a linear dimension object parameter. Used for the
			"which" argument of fz_objt_edit_diml_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_diml_parm_enum
{
	FZ_OBJT_DIML_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
										@ptype		fz_dimn_style_ptr */
	FZ_OBJT_DIML_PARM_MPLANE,		/*	@emem		plane in which the dimension is defined.
										@ptype		fz_map_plane_td */
	FZ_OBJT_DIML_PARM_P1,			/*	@emem		3d point, from which the dimension is measured (1st point).
										@ptype		fz_xyz_td */
	FZ_OBJT_DIML_PARM_P1_OBJ,		/*	@emem		Object to which the 1st 3d point belongs. NULL, if the 1st
													point is non associative.
										@ptype		fz_objt_ptr */
	FZ_OBJT_DIML_PARM_P2,			/*	@emem		3d point, to which the dimension is measured (2nd point).
										@ptype		fz_xyz_td */
	FZ_OBJT_DIML_PARM_P2_OBJ,		/*	@emem		Object to which the 2nd 3d point belongs. NULL, if the 2nd
													point is non associative.
										@ptype		fz_objt_ptr */
	FZ_OBJT_DIML_PARM_CUST_TEXT,	/*	@emem		Custom text for the dimension display.
										@ptype		fz_string_td */
	
	FZ_OBJT_DIML_PARM_LINE_OFFSET,	/*	@emem		Offset of the dimension line from the projection of the 1st point
													on the dimension plane.
										@ptype		double */
	FZ_OBJT_DIML_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
										@ptype		fz_diml_text_align_enum */
	FZ_OBJT_DIML_PARM_TYPE,			/*	@emem		Dimension type
										@ptype		diml_type_enum			*/
	
	FZ_OBJT_DIML_DIM_P1,			/*	@emem		Dimension type
										@ptype		diml_type_enum			*/
	FZ_OBJT_DIML_DIM_P2,			/*	@emem		Dimension type
										@ptype		diml_type_enum			*/

	FZ_OBJT_DIML_PARM_MAX

} fz_objt_diml_parm_enum;

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

	@fsfunc_t

	@desc		Gets the parameters of a linear dimension
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_diml_parm_get_func) (
	fzrt_int					windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> | linear dimension object 	*/
	fz_objt_diml_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data		/* @parm <out> | parameter data				*/
	);
	
/************************************************************************
	 
	 @fsfunc_t
	 
	 @desc		Gets the parameters of a linear dimension
	 
	 
	 @return		Error codes
	 
	 @avail		7.0.0.0
	 
	 @see		
	 
	 @exfile		
	 
	 @toc		modl_cnstr
	 
	 
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_diml_parm_set_func) (
	  fzrt_int						windex,		/* @parm <in> | project window index		*/
	  fz_objt_ptr				obj,		/* @parm <in> | linear dimension object 	*/
	  fz_objt_diml_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	  fz_type_td				*data		/* @parm <out> | parameter data				*/
	  );	
/********************************************************************************************************

	@enum	

	@desc	Text alignment options for angular dimensions.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dima_text_align_enum
{
	FZ_DIMA_TEXT_ALIGN_START = 0,		/*	@emem		Text is drawn at the start point */
	FZ_DIMA_TEXT_ALIGN_CENTER_IN,		/*	@emem		Text is drawn at the center inside. */
	FZ_DIMA_TEXT_ALIGN_CENTER_CENTER,	/*	@emem		Text is drawn at the center on top of the dimension line. */
	FZ_DIMA_TEXT_ALIGN_CENTER_OUT,		/*	@emem		Text is drawn at the center outside. */
	FZ_DIMA_TEXT_ALIGN_END,				/*	@emem		Text is drawn at the end point */
	
	FZ_DIMA_TEXT_ALIGN_MAX
	
} fz_dima_text_align_enum;

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

	@enum	

	@desc	Parameter identifiers for the an angular dimension object parameter. Used for the
			"which" argument of fz_objt_edit_dima_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_dima_parm_enum
{
	FZ_OBJT_DIMA_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
										@ptype		fz_dimn_style_ptr */
	FZ_OBJT_DIMA_PARM_MPLANE,		/*	@emem		plane in which the dimension is defined.
										@ptype		fz_map_plane_td */
	FZ_OBJT_DIMA_PARM_P_CENTER,		/*	@emem		3d center point of dimension angle.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMA_PARM_P_CENTER_OBJ,	/*	@emem		Object to which the 3d center point belongs. NULL, if the center
													point is non associative.
										@ptype		fz_objt_ptr */
	FZ_OBJT_DIMA_PARM_P1,			/*	@emem		3d point, from which the dimension is measured (start point).
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMA_PARM_P1_OBJ,		/*	@emem		Object to which the start point belongs. NULL, if the start
													point is non associative.
										@ptype		fz_objt_ptr */
	FZ_OBJT_DIMA_PARM_P2,			/*	@emem		3d point, to which the dimension is measured (end point).
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMA_PARM_P2_OBJ,		/*	@emem		Object to which the end point belongs. NULL, if the end
													point is non associative.
										@ptype		fz_objt_ptr */
	FZ_OBJT_DIMA_PARM_CUST_TEXT,	/*	@emem		Custom text for the dimension display.
										@ptype		fz_string_td */
	
	FZ_OBJT_DIMA_PARM_LINE_OFFSET,	/*	@emem		Offset of the dimension line from the projection of the start point
													on the dimension plane.
										@ptype		double */
										
	FZ_OBJT_DIMA_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
										@ptype		fz_dima_text_align_enum */
	
	FZ_OBJT_DIMA_PARM_TEXT_MIDPT,	/*	@emem		Point on Arc 
										@ptype		    */

	FZ_OBJT_DIMA_PARM_MAX

} fz_objt_dima_parm_enum;

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

	@fsfunc_t

	@desc		Gets the parameters of an angular dimension
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_dima_parm_get_func) (
	fzrt_int					windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> | angular dimension object 	*/
	fz_objt_dima_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data		/* @parm <out> | parameter data				*/
	);

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

	@enum	

	@desc	Text alignment options for radial/diameter dimensions.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dimr_text_align_enum
{
	FZ_DIMR_TEXT_ALIGN_TOP = 0,		/*	@emem		Text is drawn at above the dimension line */
	FZ_DIMR_TEXT_ALIGN_CENTER,		/*	@emem		Text is drawn at centered on the dimension line. */
	FZ_DIMR_TEXT_ALIGN_BOTTOM,		/*	@emem		Text is drawn at below the dimension line */
	
	FZ_DIMR_TEXT_ALIGN_MAX
	
} fz_dimr_text_align_enum;

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

	@enum	

	@desc	Parameter identifiers for the a radial/diameter dimension object parameter. Used for the
			"which" argument of fz_objt_edit_dimr_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_dimr_parm_enum
{
	FZ_OBJT_DIMR_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
										@ptype		fz_dimn_style_ptr */
	FZ_OBJT_DIMR_PARM_MPLANE,		/*	@emem		plane in which the dimension is defined.
										@ptype		fz_map_plane_td */
	FZ_OBJT_DIMR_PARM_IS_DIAM,		/*	@emem		TRUE if the dimension is a diameter diemsnion, FALSE if it is a radial dimension.
										@ptype		fzrt_boolean */
	FZ_OBJT_DIMR_PARM_CENTER,		/*	@emem		Center point of the arc/circle, which is dimensioned.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMR_PARM_P_END,		/*	@emem		End point of the dimension line.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMR_PARM_RADIUS,		/*	@emem		Radius of the arc/circle, which is dimensioned.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMR_PARM_TEXT_ANGLE,	/*	@emem		The angle of the dimension text relative to the x axis of the dimension plane.
													This is only used, if the dimension text is not view aligned (style parameter).
										@ptype		double */
	FZ_OBJT_DIMR_PARM_CUST_TEXT,	/*	@emem		Custom text for the dimension display.
										@ptype		fz_string_td */
	FZ_OBJT_DIMR_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
										@ptype		fz_dimr_text_align_enum */

	FZ_OBJT_DIMR_PARM_MAX

} fz_objt_dimr_parm_enum;

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

	@fsfunc_t

	@desc		Gets the parameters of a radial/diameter dimension
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_dimr_parm_get_func) (
	fzrt_int					windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> | radial/diameter dimension object 	*/
	fz_objt_dimr_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data		/* @parm <out> | parameter data				*/
	);

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

	@enum	

	@desc	Text alignment options for leader line dimensions.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dimd_text_align_enum
{
	FZ_DIMD_TEXT_ALIGN_TOP = 0,		/*	@emem		Text is drawn at above the dimension line */
	FZ_DIMD_TEXT_ALIGN_CENTER,		/*	@emem		Text is drawn at centered on the dimension line. */
	FZ_DIMD_TEXT_ALIGN_BOTTOM,		/*	@emem		Text is drawn at below the dimension line */
	
	FZ_DIMD_TEXT_ALIGN_MAX
	
} fz_dimd_text_align_enum;

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

	@enum	

	@desc	Parameter identifiers for the a leader line dimension object parameter. Used for the
			"which" argument of fz_objt_edit_dimd_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_dimd_parm_enum
{
	FZ_OBJT_DIMD_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
										@ptype		fz_dimn_style_ptr */
	FZ_OBJT_DIMD_PARM_MPLANE,		/*	@emem		plane in which the dimension is defined.
										@ptype		fz_map_plane_td */
	FZ_OBJT_DIMD_PARM_TEXT_STR,		/*	@emem		Leader line text string.
										@ptype		char * */
	FZ_OBJT_DIMD_PARM_TEXT_NCHAR,	/*	@emem		Number of characters (char array size) in text string.
										@ptype		fzrt_int */
	FZ_OBJT_DIMD_PARM_NPTS,			/*	@emem		Number of points in the leader line.
										@ptype		fzrt_int */
	FZ_OBJT_DIMD_PARM_PTS,			/*	@emem		Array of points in the leader line.
										@ptype		fz_xyz_td * */
	FZ_OBJT_DIMD_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
										@ptype		fz_dimd_text_align_enum */

	FZ_OBJT_DIMD_PARM_MAX

} fz_objt_dimd_parm_enum;

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

	@fsfunc_t

	@desc		Gets the parameters of a leader line dimension
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_dimd_parm_get_func) (
	fzrt_int					windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> | leader line dimension object 	*/
	fz_objt_dimd_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data		/* @parm <out> | parameter data				*/
	);

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

	@enum	

	@desc	Text alignment options for note objects.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_dimt_text_align_enum
{
	FZ_DIMT_TEXT_ALIGN_TOP = 0,		/*	@emem		Text is drawn at above the note point */
	FZ_DIMT_TEXT_ALIGN_CENTER,		/*	@emem		Text is drawn at centered on the note point. */
	FZ_DIMT_TEXT_ALIGN_BOTTOM,		/*	@emem		Text is drawn at below the note point */
	
	FZ_DIMT_TEXT_ALIGN_MAX
	
} fz_dimt_text_align_enum;

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

	@enum	

	@desc	Parameter identifiers for the a note object parameter. Used for the
			"which" argument of fz_objt_edit_dimt_parm_get.
	
	@avail	7.0.0.0
			
	@see	<auto>

	@toc	modl_cnstr

*********************************************************************************************************/
typedef enum fz_objt_dimt_parm_enum
{
	FZ_OBJT_DIMT_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
										@ptype		fz_dimn_style_ptr */
	FZ_OBJT_DIMT_PARM_MPLANE,		/*	@emem		plane in which the note is defined.
										@ptype		fz_map_plane_td */
	FZ_OBJT_DIMT_PARM_TEXT_STR,		/*	@emem		note text string.
										@ptype		char * */
	FZ_OBJT_DIMT_PARM_TEXT_NCHAR,	/*	@emem		Number of characters (char array size) in text string.
										@ptype		fzrt_int */
	FZ_OBJT_DIMT_PARM_PT1,			/*	@emem		The 3d point at which the note's text is drawn.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMT_PARM_PT2,			/*	@emem		The 3d point which determines the direction of the text in the note's plane.
										@ptype		fz_xyz_td */
	FZ_OBJT_DIMT_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
										@ptype		fz_dimt_text_align_enum */

	FZ_OBJT_DIMT_PARM_MAX

} fz_objt_dimt_parm_enum;

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

	@fsfunc_t

	@desc		Gets the parameters of a note object
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_cnstr

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_dimt_parm_get_func) (
	fzrt_int					windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> |note object 	*/
	fz_objt_dimt_parm_enum	which,		/* @parm <in> | parameter identifier 		*/
	fz_type_td				*data		/* @parm <out> | parameter data				*/
	);

    
    
/********************************************************************************************************
 
 @enum
 
 @desc	Text alignment options for angular dimensions.
 
 @avail	8.5.5.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/
typedef enum fz_dimc_text_align_enum
{
    FZ_DIMC_TEXT_ALIGN_START = 0,		/*	@emem		Text is drawn at the start point */
    FZ_DIMC_TEXT_ALIGN_CENTER_IN,		/*	@emem		Text is drawn at the center inside. */
    FZ_DIMC_TEXT_ALIGN_CENTER_CENTER,	/*	@emem		Text is drawn at the center on top of the dimension line. */
    FZ_DIMC_TEXT_ALIGN_CENTER_OUT,		/*	@emem		Text is drawn at the center outside. */
    FZ_DIMC_TEXT_ALIGN_END,				/*	@emem		Text is drawn at the end point */
    
    FZ_DIMC_TEXT_ALIGN_MAX
    
} fz_dimc_text_align_enum;
    
/********************************************************************************************************
 
 @enum
 
 @desc	Parameter identifiers for the an angular dimension object parameter. Used for the
 "which" argument of fz_objt_edit_dima_parm_get.
 
 @avail	8.5.5.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/
typedef enum fz_objt_dimc_parm_enum
    {
        FZ_OBJT_DIMC_PARM_STYLE = 0,	/*	@emem		Dimension style pointer.
                                         @ptype		fz_dimn_style_ptr */
        FZ_OBJT_DIMC_PARM_MPLANE,		/*	@emem		plane in which the dimension is defined.
                                         @ptype		fz_map_plane_td */
        FZ_OBJT_DIMC_PARM_P_CENTER,		/*	@emem		3d center point of dimension angle.
                                         @ptype		fz_xyz_td */
        FZ_OBJT_DIMC_PARM_P_CENTER_OBJ,	/*	@emem		Object to which the 3d center point belongs. NULL, if the center
                                         point is non associative.
                                         @ptype		fz_objt_ptr */
        FZ_OBJT_DIMC_PARM_P1,			/*	@emem		3d point, from which the dimension is measured (start point).
                                         @ptype		fz_xyz_td */
        FZ_OBJT_DIMC_PARM_P1_OBJ,		/*	@emem		Object to which the start point belongs. NULL, if the start
                                         point is non associative.
                                         @ptype		fz_objt_ptr */
        FZ_OBJT_DIMC_PARM_P2,			/*	@emem		3d point, to which the dimension is measured (end point).
                                         @ptype		fz_xyz_td */
        FZ_OBJT_DIMC_PARM_P2_OBJ,		/*	@emem		Object to which the end point belongs. NULL, if the end
                                         point is non associative.
                                         @ptype		fz_objt_ptr */
        FZ_OBJT_DIMC_PARM_CUST_TEXT,	/*	@emem		Custom text for the dimension display.
                                         @ptype		fz_string_td */
        
        FZ_OBJT_DIMC_PARM_LINE_OFFSET,	/*	@emem		Offset of the dimension line from the projection of the start point
                                         on the dimension plane.
                                         @ptype		double */
        
        FZ_OBJT_DIMC_PARM_TEXT_ALIGN,	/*	@emem		Text alignment
                                         @ptype		fz_dima_text_align_enum */
        
        FZ_OBJT_DIMC_PARM_TEXT_MIDPT,	/*	@emem		Point on Arc
                                         @ptype		    */
        
        FZ_OBJT_DIMC_PARM_MAX
        
} fz_objt_dimc_parm_enum;
    
    
/* FZ_OBJT_TYPE_HATCH */
/* UUID : {a7b581d4a4cb439b8093a2ba80128a51} *//* Reference : 67 */
/********************************************************************************************************
 
 @def
 
 @desc	Unique identifier for the Note object type.
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/
#define FZ_OBJT_TYPE_HATCH				"\xa7\xb5\x81\xd4\xa4\xcb\x43\x9b\x80\x93\xa2\xba\x80\x12\x8a\x51"
	
 /********************************************************************************************************
 
 @enum	
 
 @desc	Parameter identifiers for a hathc. Used for the
 "which" argument of fz_hatch_parm_get.
 
 @avail	7.0.0.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/
typedef enum fz_hatch_parm_enum
{
	FZ_HATCH_PARM_TYPE = 0,			/*	@emem	hatch type world/screen.
									 @ptype		fzrt_int */
	FZ_HATCH_PARM_KIND,				/*	@emem	hatch kind linear/component/gradient/image.
									 @ptype		hatch_type_enum */
	FZ_HATCH_PARM_ORIGIN,			/*	@emem	origin.
									 @ptype		fz_xyz_td * */
	FZ_HATCH_PARM_WSCALE,			/*	@emem	world scale.
									 @ptype		double */
	FZ_HATCH_PARM_SSCALE,			/*	@emem	screen scale.
									 @ptype		fzrt_int */
	FZ_HATCH_PARM_ROTATION,			/*	@emem	rotation.
									 @ptype		double */
	FZ_HATCH_PARM_NAME,			   /*	@emem	pattern namet
									 @ptype		char[256] */
	
	FZ_HATCH_PARM_MAX
	
} fz_hatch_parm_enum;	
/********************************************************************************************************
 
 @enum	
 
 @desc	Parameter identifiers for a hathc kind. Used for the
 "which" argument of fz_hatch_parm_get.
 
 @avail	7.0.0.0
 
 @see	<auto>
 
 @toc	modl_cnstr
 
 *********************************************************************************************************/

typedef enum fz_hatch_kind_enum
{	FZ_HATCH_KIND_LINEAR,			/* LINEAR HATCH */
	FZ_HATCH_KIND_COMPONENT,	    /* COMPONENT HATCH */
	FZ_HATCH_KIND_GRADIENT,			/* GRADIENT HATCH */
	FZ_HATCH_KIND_IMAGE,			/* IMAGE HATCH */
 	
} fz_hatch_kind_enum;	
	
/************************************************************************

@fsfunc_t

@desc		Gets the parameters of a  hatch


@return		Error codes

@avail		7.0.0.0

@see		

@exfile		

@toc		modl_cnstr


*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_edit_hatch_parm_get_func) (
fzrt_int					windex,		/* @parm <in>	| project window index 		*/
fz_objt_ptr				obj,		/* @parm <in>	| object					*/
fz_hatch_parm_enum		which,		/* @parm <in>	| parameter identifier 		*/
fz_type_td				*data		/* @parm <out>	| parameter data			*/
);

	/************************************************************************
	 
	 @fsfunc_t
	 
	 @desc		Gets the parameters of a  hatch
	 
	 
	 @return		Error codes
	 
	 @avail		7.0.0.0
	 
	 @see		
	 
	 @exfile		
	 
	 @toc		modl_cnstr
	 
	 
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_get_hatch_lines_func) (
	   fzrt_int						windex,		/* @parm <in>	| project window index 		*/
	   fz_objt_ptr				obj,		/* @parm <in>	| object					*/
	   fzrt_int						max_knt,	/* @parm <in>	| max. number of points		*/															   
	   fzrt_int						*knt_pts,	/* @parm <out>	| points knt				*/
	   fz_xyz_float_td			*hatch_pts	/* @parm <out>	| points					*/
);
 /************************************************************************
	@fsfunc_t

	@desc		Adds an object to the result buffer. 

	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_result_add_objt_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 		objt 		/* @parm <in> | object to add	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Gets the number of entries in the result buffer 

	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_result_get_count_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fzrt_int				*count 		/* @parm <out> | the number of entries in the result buffer	*/ 	
	);

/************************************************************************
	@fsfunc_t

	@desc		Get the nth object in the result buffer. Return an error, if
				there is no nth object in the result buffer.

	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_pick
											
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_model_result_get_objt_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fzrt_int				n, 			/* @parm <in> | which object (n) to get	*/ 	
	fz_objt_ptr 		*objt 		/* @parm <out> | the nth object in the result buffer, or NULL if there is no nth object	*/ 	
	);

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

	@fsfunc_t

	@desc		Gets information about instanced objects
				
	
	@return		Error codes

	@avail		7.0.0.0

	@see		

	@exfile		

	@toc		modl_anly

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_instance_get_info_func) (
	fzrt_int				windex,		/* @parm <in> | project window index 		*/
	fz_objt_ptr				obj,		/* @parm <in> | object 	*/
	fz_objt_ptr				*def_obj,	/* @parm <out> | definition object 	*/
	fz_mat4x4_td			*mat		/* @parm <out>   | matrix, that transforms definition object into object */
	);

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

	@fsfunc_t

	@desc		Gets information about instanced objects
				
	
	@return		Error codes

	@avail		9.0.6.0

	@see

	@exfile

	@toc		modl_anly

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_instance_get_info2_func) (
	fzrt_int		windex,			/* @parm <in> | project window index 		*/
	fz_objt_ptr		obj,			/* @parm <in> | object 	*/
	fz_tag_td		*objt_id,		/* @parm <out_opt> | Unique ID of object definition 	*/
	fz_tag_td		*family_id,		/* @parm <out_opt> | Unique ID of family definition 	*/
	fz_tag_td		*instance_id,	/* @parm <out_opt> | Unique ID of instance 	*/
	fz_mat4x4_td	*tmat			/* @parm <out_opt> | matrix, that transforms definition object into object */
	);

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

	@fsfunc_t

	@desc		Gets information about render mesh memory for fz_objt_get_rndr_mesh<nl>
				
				flags:
					bit 0 : indicates do quads, else do triangles (default).
					bit 1 : indicates no clipping planes, else apply active clipping planes (default).<nl>
 
				** flags was  do_quads in versions prior to 8.5.4<nl>
	
	@return		Error codes

	@avail		7.0.0.0

	@see		fz_objt_get_rndr_mesh

	@exfile		

	@toc		modl_anly

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_get_rndr_mesh_sizes_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fz_objt_ptr 			obj,				/* @parm <in> | object 	*/
	fzrt_int				do_quads,			/* @parm <in> | do_quads (1) else triangles (0) */
	fzrt_int				*bytes_per_ref, 	/* @parm <out_opt> | number of bytes used in the triangle and quads data */
	fzrt_unsigned_int		*ntrng,				/* @parm <out_opt> | number of triangles in mesh */
	fzrt_unsigned_int		*nquad,				/* @parm <out_opt> | number of quads in mesh */
	fzrt_int				*nfact_color,		/* @parm <out_opt> | number of facet color (multi color objects only) */
	fzrt_unsigned_int		*ncord,				/* @parm <out_opt> | number of coordinates (points) in mesh */
	char					*has_txuv,			/* @parm <out_opt> | mesh has textures uvs */
	char					*has_colr,			/* @parm <out_opt> | mesh has coordinate colors */
	char					*has_tmat			/* @parm <out_opt> | mesh has transform matrix */
);

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

	@fsfunc_t

	@desc		Gets information about instanced objects<nl>
				NOTE: must first  call fz_objt_get_rndr_mesh_sizes to get the size of data. 
				Then allocate memory and call fz_objt_get_rndr_mesh to get the data in your allocated blocks<nl>	
						
				flags:
					bit 0 : indicates do quads, else do triangles (default).
					bit 1 : indicates no clipping planes, else apply active clipping planes (default).<nl>
 
				** flags was  do_quads in versions prior to 8.5.4<nl>

				If do_quads is FALSE, nquads will always be returned as 0.
				If its TRUE be aware that you will still get triangles if 
				they naturally occur in the object or than can come from the 
				resolution of a non planar face.<nl>
				
				bytes_per_ref is the number of bytes used in the triangle and quads data 
				and its based on the number of points (ie  1 byte for ncord < 256, 
				2 bytes for ncord < 65536, else 4 bytes). Note that you should use 
				the value returned by bytes_per_ref as this size rule could change 
				in the future. The triangles and quads are packed unsigned indexes 
				to the coordinates. That is for bytes_per_ref == 1: byte1, byte2 and 
				byte 3 are the coordinate indexes of the first triangle, byte 4, byte 5 
				and byte 6 are the coordinate indexes of the second triangle etc. <nl>
				
				nfact_color id for multicolor objects only. If this is returned as 0 
				then the object is a single color. if its != 0 then fact_color is an 
				array of packed fz_rmtl_ptr parallel to the triangles and quads (in that order) 
				representing the materail that should be used for that facet.<nl>

				The cord, cord_norm, cord_txuv, and cord_colr arrays are parellel. 
				Note that cord_colr is not yet implemented but will be in the future. 
				When implemented it is assumed that cord_colr will override fact_color 
				or the objects material.<nl>

				has_tmat tells you if the objects real position is transformed from render mesh. 
				This will be true for instances of components. It will be true in the future 
				for objects being transformed. You must transform your data before rendering 
				(watch those normals as the matrix might be scalar)<nl>

	@return		Error codes

	@avail		7.0.0.0

	@see		fz_objt_get_rndr_mesh_sizes

	@exfile		

	@toc		modl_anly

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_get_rndr_mesh_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fz_objt_ptr 			obj,				/* @parm <in> | object 	*/
	fzrt_int				flags,				/* @parm <in> | do_quads (1) else triangles (0) */
	fzrt_int				*bytes_per_ref, 	/* @parm <out_opt> | number of bytes used in the triangle and quads data */
	fzrt_unsigned_int		*ntrng,				/* @parm <out_opt> | number of triangles in mesh */
	fzrt_ptr				trng,				/* @parm <out_opt> | packed triangle data */
	fzrt_unsigned_int		*nquad,				/* @parm <out_opt> | number of quads in mesh */
	fzrt_ptr				quad,				/* @parm <out_opt> | packed quad data */
	fzrt_int				*nfact_color,		/* @parm <out_opt> | number of facet color (multi color objects only) */
	fz_rmtl_ptr				*fact_color,		/* @parm <out_opt> | packed quad data */
	fzrt_unsigned_int		*ncord,				/* @parm <out_opt> | number of coordinates (points) in mesh */
	fz_xyz_float_td			*cord,				/* @parm <out_opt> | coordinates */
	fz_xyz_float_td			*cord_norm,			/* @parm <out_opt> | coordinates */
	fz_xy_float_td			*cord_txuv,			/* @parm <out_opt> | coordinates */
	fz_rgba_float_td		*cord_colr,			/* @parm <out_opt> | coordinates */		
	char					*has_tmat,			/* @parm <out_opt> | mesh has transform matrix */
	fz_mat4x4_td			*tmat				/* @parm <out_opt> | mesh has transform matrix */
);

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

	@def

	@desc	macro for calculating memory needed for trng_edges param of fz_objt_get_rndr_mesh2

	@toc	modl_anly

*********************************************************************************************************/
	
#define FZ_OBJT_RNDR_MESH_TRNG_EDGE_SIZE(ntrng)	(sizeof(fzrt_int) * (ntrng/10 + ((ntrng%10) ? 1 : 0)))

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

	@def

	@desc	macro for calculating memory needed for quad_edges param of fz_objt_get_rndr_mesh2

	@toc	modl_anly

*********************************************************************************************************/
#define FZ_OBJT_RNDR_MESH_QUAD_EDGE_SIZE(nquad)	(sizeof(fzrt_int) * (nquad/8  + ((nquad%8)  ? 1 : 0)))

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

	@fsfunc_t

	@desc		Varient of fz_objt_get_rndr_mesh that includes edge marking for triangles and quads.<nl>

				trng_edges is bit packed edge flags for triangles (10 triangles per fzrt_int).
				array must be pre allocated. Use FZ_OBJT_RNDR_MESH_TRNG_EDGE_SIZE to calculate size
				Bit ON = interior edge, OFF - exterior edge<nl>

				quad_edges is bit packed edge flags for quuads (8 quads per fzrt_int).
				array must be pre allocated. Use FZ_OBJT_RNDR_MESH_QUAD_EDGE_SIZE to calculate size
				Bit ON = interior edge, OFF - exterior edge<nl>

	@return		Error codes

	@avail		8.5.4.0

	@see		fz_objt_get_rndr_mesh_sizes,fz_objt_get_rndr_mesh
 

	@exfile		

	@toc		modl_anly

	
*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_objt_get_rndr_mesh2_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fz_objt_ptr 			obj,				/* @parm <in> | object 	*/
	fzrt_int				flags,				/* @parm <in> | do_quads (1) else triangles (0) */
	fzrt_int				*bytes_per_ref, 	/* @parm <out_opt> | number of bytes used in the triangle and quads data */
	fzrt_unsigned_int		*ntrng,				/* @parm <out_opt> | number of triangles in mesh */
	fzrt_ptr				trng,				/* @parm <out_opt> | packed triangle data */
	fzrt_int				*trng_edges,		/* @parm <out_opt> | bit packed edge flags (10 triangles per fzrt_int) */
	fzrt_unsigned_int		*nquad,				/* @parm <out_opt> | number of quads in mesh */
	fzrt_ptr				quad,				/* @parm <out_opt> | packed quad data */
	fzrt_int				*quad_edges,		/* @parm <out_opt> | bit packed edge flags (8 quads per fzrt_int) */
	fzrt_int				*nfact_color,		/* @parm <out_opt> | number of facet color (multi color objects only) */
	fz_rmtl_ptr				*fact_color,		/* @parm <out_opt> | packed quad data */
	fzrt_unsigned_int		*ncord,				/* @parm <out_opt> | number of coordinates (points) in mesh */
	fz_xyz_float_td			*cord,				/* @parm <out_opt> | coordinates */
	fz_xyz_float_td			*cord_norm,			/* @parm <out_opt> | coordinates */
	fz_xy_float_td			*cord_txuv,			/* @parm <out_opt> | coordinates */
	fz_rgba_float_td		*cord_colr,			/* @parm <out_opt> | coordinates */		
	char					*has_tmat,			/* @parm <out_opt> | mesh has transform matrix */
	fz_mat4x4_td			*tmat				/* @parm <out_opt> | mesh has transform matrix */
);

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

	@fsfunc_t

	@desc		finds the frontmoast object based by projectedimng from base using the current view
	

	@return		Error codes

	@avail		8.0.2.0

	@see

	@exfile		

	@toc		modl_anly

*************************************************************************/
typedef fzrt_error_td		(FZRT_SPEC *fz_model_find_objt_by_view_ray_func)(
	fzrt_int				windex,				/* @parm <in> | project window index */
	fzrt_point				*base_screen,		/* @parm <in_opt> | screen point to base ray test (NULL to use base_world) */
	fz_xyz_td				*base_world,		/* @parm <in_opt> | world point to base ray test (NULL to use base_screen) */
	fz_enty_list_ptr		objt_enty_list,		/* @parm <in_opt> | list of objects to test or NULL for all visible objects */
	fz_objt_ptr				*found_obj,			/* @parm <out_opt> | found object */
	fzrt_int				*found_findx,		/* @parm <out_opt> | found face index */
	double					*found_depth,		/* @parm <out_opt> | found depth */
	fz_xyz_td				*found_pt,			/* @parm <out_opt> | found point on found face of found_obj */
	fz_map_plane_td			*map_plane			/* @parm <out_opt> | found mapping plane on found face of found_obj */
);



/* formZ model Function Set */
/* UUID : {61701144-133c-405d-b406-352d910834cd} */

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

	@fset	fz_model_fset

	@desc	Function set for Modeling creation / editing operations 

	@avail	5.0.0.0

	@toc	modl_cnstr_edit

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

	@fsdef	formZ model function set UUID.

*********************************************************************************************************/
#define FZ_MODEL_FSET_TYPE		"\x61\x70\x11\x44\x13\x3c\x40\x5d\xb4\x06\x35\x2d\x91\x08\x34\xcd"	/* Reference : 24 */
/********************************************************************************************************

	@fsdef	formZ model function set name.

*********************************************************************************************************/
#define FZ_MODEL_FSET_NAME		"formZ model funcs"
/********************************************************************************************************

	@fsdef	formZ model function set version.

*********************************************************************************************************/
#define FZ_MODEL_FSET_VERSION		FZPL_VERS_MAKE(9,0,6,0)

typedef struct fz_model_fset
{
	fzpl_fset_prvt_data_td				prvt_data;

	/************************************************************************
		PROJECT MANAGEMENT
	*************************************************************************/
	fz_objt_add_objt_to_project_func		fz_objt_add_objt_to_project;	/* @fsfunc */
	
	
	/************************************************************************
		MESHING
	*************************************************************************/
	fz_objt_mesh_opts_init_func			fz_objt_mesh_opts_init;				/* @fsfunc */
	fz_objt_mesh_opts_get_func			fz_objt_mesh_opts_get;				/* @fsfunc */
	fz_objt_mesh_opts_set_func			fz_objt_mesh_opts_set;				/* @fsfunc */
	fz_objt_mesh_opts_finit_func		fz_objt_mesh_opts_finit;				/* @fsfunc */
	
	/************************************************************************
		CONSTRUCTION
	*************************************************************************/

	/************************************************************************
		SIMPLE POLYGONAL
	*************************************************************************/
	fz_objt_cnstr_point_func				fz_objt_cnstr_point;					/* @fsfunc */
	fz_objt_cnstr_point_cloud_func		fz_objt_cnstr_point_cloud;			/* @fsfunc */
	fz_objt_cnstr_line_func				fz_objt_cnstr_line;					/* @fsfunc */
	fz_objt_cnstr_triangle_func			fz_objt_cnstr_triangle;				/* @fsfunc */
	fz_objt_cnstr_rectangle_func			fz_objt_cnstr_rectangle;				/* @fsfunc */
	fz_objt_cnstr_vline_func				fz_objt_cnstr_vline;					/* @fsfunc */
	fz_objt_cnstr_ngon_func				fz_objt_cnstr_ngon;					/* @fsfunc */
	fz_objt_cnstr_ngon_opts_init_func		fz_objt_cnstr_ngon_opts_init;			/* @fsfunc */
	fz_objt_cnstr_ngon_opts_get_func		fz_objt_cnstr_ngon_opts_get;			/* @fsfunc */
	fz_objt_cnstr_ngon_opts_set_func		fz_objt_cnstr_ngon_opts_set;			/* @fsfunc */
	fz_objt_cnstr_ngon_opts_finit_func	fz_objt_cnstr_ngon_opts_finit;		/* @fsfunc */
	
	/**************************************************************
		PRIMITIVES
	**************************************************************/
	fz_objt_cnstr_cube_func				fz_objt_cnstr_cube;					/* @fsfunc */
	fz_objt_cnstr_cyln_opts_init_func		fz_objt_cnstr_cyln_opts_init;			/* @fsfunc */
	fz_objt_cnstr_cyln_opts_get_func		fz_objt_cnstr_cyln_opts_get;			/* @fsfunc */
	fz_objt_cnstr_cyln_opts_set_func		fz_objt_cnstr_cyln_opts_set;			/* @fsfunc */
	fz_objt_cnstr_cyln_opts_finit_func	fz_objt_cnstr_cyln_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_cyln_func				fz_objt_cnstr_cyln;					/* @fsfunc */
	fz_objt_cnstr_cone_opts_init_func		fz_objt_cnstr_cone_opts_init;			/* @fsfunc */
	fz_objt_cnstr_cone_opts_get_func		fz_objt_cnstr_cone_opts_get;			/* @fsfunc */
	fz_objt_cnstr_cone_opts_set_func		fz_objt_cnstr_cone_opts_set;			/* @fsfunc */
	fz_objt_cnstr_cone_opts_finit_func	fz_objt_cnstr_cone_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_cone_func				fz_objt_cnstr_cone;					/* @fsfunc */
	fz_objt_cnstr_sphr_opts_init_func		fz_objt_cnstr_sphr_opts_init;			/* @fsfunc */
	fz_objt_cnstr_sphr_opts_get_func		fz_objt_cnstr_sphr_opts_get;			/* @fsfunc */
	fz_objt_cnstr_sphr_opts_set_func		fz_objt_cnstr_sphr_opts_set;			/* @fsfunc */
	fz_objt_cnstr_sphr_opts_finit_func	fz_objt_cnstr_sphr_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_sphr_func				fz_objt_cnstr_sphr;					/* @fsfunc */
	fz_objt_cnstr_tors_opts_init_func		fz_objt_cnstr_tors_opts_init;			/* @fsfunc */
	fz_objt_cnstr_tors_opts_get_func		fz_objt_cnstr_tors_opts_get;			/* @fsfunc */
	fz_objt_cnstr_tors_opts_set_func		fz_objt_cnstr_tors_opts_set;			/* @fsfunc */
	fz_objt_cnstr_tors_opts_finit_func	fz_objt_cnstr_tors_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_tors_func				fz_objt_cnstr_tors;					/* @fsfunc */
	
	fz_objt_cnstr_spid_opts_init_func		fz_objt_cnstr_spid_opts_init;			/* @fsfunc */
	fz_objt_cnstr_spid_opts_get_func		fz_objt_cnstr_spid_opts_get;			/* @fsfunc */
	fz_objt_cnstr_spid_opts_set_func		fz_objt_cnstr_spid_opts_set;			/* @fsfunc */
	fz_objt_cnstr_spid_opts_finit_func	fz_objt_cnstr_spid_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_spid_func				fz_objt_cnstr_spid;					/* @fsfunc */
	
	/**************************************************************
		PLINES
	**************************************************************/
	fz_objt_cnstr_circle_func				fz_objt_cnstr_circle;								/* @fsfunc */
	fz_objt_cnstr_ellipse_func			fz_objt_cnstr_ellipse;							/* @fsfunc */
	fz_objt_cnstr_arc_func				fz_objt_cnstr_arc;								/* @fsfunc */
	fz_objt_cnstr_spline_func				fz_objt_cnstr_spline;								/* @fsfunc */
	fz_objt_cnstr_spline_through_pts_func	fz_objt_cnstr_spline_through_pts;					/* @fsfunc */
	fz_objt_cnstr_cubic_bezier_func		fz_objt_cnstr_cubic_bezier;						/* @fsfunc */
	fz_objt_cnstr_multi_spline_func				fz_objt_cnstr_multi_spline;				/* @fsfunc */
	fz_objt_cnstr_multi_spline_through_pts_func	fz_objt_cnstr_multi_spline_through_pts;	/* @fsfunc */

	/**************************************************************
		DERIVATIVES
	**************************************************************/
	fz_objt_cnstr_objt_from_segt_func		fz_objt_cnstr_objt_from_segt;			/* @fsfunc */
	fz_objt_cnstr_objt_from_curv_func		fz_objt_cnstr_objt_from_curv;			/* @fsfunc */
	fz_objt_cnstr_objt_from_face_func		fz_objt_cnstr_objt_from_face;			/* @fsfunc */
	fz_objt_cnstr_extrude_func			fz_objt_cnstr_extrude;				/* @fsfunc */
	fz_objt_cnstr_converge_func			fz_objt_cnstr_converge;				/* @fsfunc */
	fz_objt_cnstr_enclos2d_func			fz_objt_cnstr_enclos2d;				/* @fsfunc */
	fz_objt_cnstr_enclos3d_func			fz_objt_cnstr_enclos3d;				/* @fsfunc */
	fz_objt_cnstr_revolve_func			fz_objt_cnstr_revolve;				/* @fsfunc */
	fz_objt_cnstr_revolve_opts_init_func		fz_objt_cnstr_revolve_opts_init;			/* @fsfunc */
	fz_objt_cnstr_revolve_opts_get_func		fz_objt_cnstr_revolve_opts_get;			/* @fsfunc */
	fz_objt_cnstr_revolve_opts_set_func		fz_objt_cnstr_revolve_opts_set;			/* @fsfunc */
	fz_objt_cnstr_revolve_opts_finit_func	fz_objt_cnstr_revolve_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_loft_func				fz_objt_cnstr_loft;					/* @fsfunc */
	fz_objt_cnstr_loft_opts_init_func		fz_objt_cnstr_loft_opts_init;			/* @fsfunc */
	fz_objt_cnstr_loft_opts_get_func		fz_objt_cnstr_loft_opts_get;			/* @fsfunc */
	fz_objt_cnstr_loft_opts_set_func		fz_objt_cnstr_loft_opts_set;			/* @fsfunc */
	fz_objt_cnstr_loft_opts_finit_func	fz_objt_cnstr_loft_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_blend_func				fz_objt_cnstr_blend;					/* @fsfunc */
	fz_objt_cnstr_blend_opts_init_func	fz_objt_cnstr_blend_opts_init;		/* @fsfunc */
	fz_objt_cnstr_blend_opts_get_func		fz_objt_cnstr_blend_opts_get;			/* @fsfunc */
	fz_objt_cnstr_blend_opts_set_func		fz_objt_cnstr_blend_opts_set;			/* @fsfunc */
	fz_objt_cnstr_blend_opts_finit_func	fz_objt_cnstr_blend_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_sweep_axial_func		fz_objt_cnstr_sweep_axial;			/* @fsfunc */
	fz_objt_cnstr_sweep_2source_func			fz_objt_cnstr_sweep_2source;				/* @fsfunc */
	fz_objt_cnstr_sweep_2path_func		fz_objt_cnstr_sweep_2path;			/* @fsfunc */
	fz_objt_cnstr_sweep_boundary_func		fz_objt_cnstr_sweep_boundary;			/* @fsfunc */
	fz_objt_cnstr_sweep_opts_init_func		fz_objt_cnstr_sweep_opts_init;			/* @fsfunc */
	fz_objt_cnstr_sweep_opts_get_func		fz_objt_cnstr_sweep_opts_get;			/* @fsfunc */
	fz_objt_cnstr_sweep_opts_set_func		fz_objt_cnstr_sweep_opts_set;			/* @fsfunc */
	fz_objt_cnstr_sweep_opts_finit_func	fz_objt_cnstr_sweep_opts_finit;		/* @fsfunc */

	fz_objt_cnstr_dsweep_opts_init_func		fz_objt_cnstr_dsweep_opts_init;			/* @fsfunc */
	fz_objt_cnstr_dsweep_opts_get_func		fz_objt_cnstr_dsweep_opts_get;			/* @fsfunc */
	fz_objt_cnstr_dsweep_opts_set_func		fz_objt_cnstr_dsweep_opts_set;			/* @fsfunc */
	fz_objt_cnstr_dsweep_opts_finit_func	fz_objt_cnstr_dsweep_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_dsweep_angle_func	fz_objt_cnstr_dsweep_angle;		/* @fsfunc */
	fz_objt_cnstr_dsweep_dist_func	fz_objt_cnstr_dsweep_dist;		/* @fsfunc */
	fz_objt_cnstr_dsweep_predef_func	fz_objt_cnstr_dsweep_predef;		/* @fsfunc */
	fz_objt_cnstr_dsweep_custom_func	fz_objt_cnstr_dsweep_custom;		/* @fsfunc */
	fz_objt_cnstr_dsweep_wire_func	fz_objt_cnstr_dsweep_wire;		/* @fsfunc */
	fz_objt_edit_dsweep_parm_get_func		fz_objt_edit_dsweep_parm_get;			/* @fsfunc */
	fz_objt_edit_dsweep_parm_set_func		fz_objt_edit_dsweep_parm_set;			/* @fsfunc */

	fz_objt_cnstr_helix_from_src_func		fz_objt_cnstr_helix_from_src;			/* @fsfunc */
	fz_objt_cnstr_helix_around_axis_func	fz_objt_cnstr_helix_around_axis;		/* @fsfunc */
	fz_objt_cnstr_helix_around_wire_func	fz_objt_cnstr_helix_around_wire;		/* @fsfunc */
	fz_objt_cnstr_helix_opts_init_func		fz_objt_cnstr_helix_opts_init;			/* @fsfunc */
	fz_objt_cnstr_helix_opts_get_func		fz_objt_cnstr_helix_opts_get;			/* @fsfunc */
	fz_objt_cnstr_helix_opts_set_func		fz_objt_cnstr_helix_opts_set;			/* @fsfunc */
	fz_objt_cnstr_helix_opts_finit_func	fz_objt_cnstr_helix_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_skin_opts_init_func		fz_objt_cnstr_skin_opts_init;			/* @fsfunc */
	fz_objt_cnstr_skin_opts_get_func		fz_objt_cnstr_skin_opts_get;			/* @fsfunc */
	fz_objt_cnstr_skin_opts_set_func		fz_objt_cnstr_skin_opts_set;			/* @fsfunc */
	fz_objt_cnstr_skin_opts_finit_func	fz_objt_cnstr_skin_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_skin_along_paths_func	fz_objt_cnstr_skin_along_paths;		/* @fsfunc */
	fz_objt_cnstr_skin_cross_func			fz_objt_cnstr_skin_cross;				/* @fsfunc */
	fz_objt_cnstr_parallel_single_func	fz_objt_cnstr_parallel_single;		/* @fsfunc */
	fz_objt_cnstr_parallel_wire_func		fz_objt_cnstr_parallel_wire;			/* @fsfunc */
	fz_objt_cnstr_parallel_double_func	fz_objt_cnstr_parallel_double;		/* @fsfunc */
	fz_objt_cnstr_unfold_opts_init_func		fz_objt_cnstr_unfold_opts_init;			/* @fsfunc */
	fz_objt_cnstr_unfold_opts_get_func		fz_objt_cnstr_unfold_opts_get;			/* @fsfunc */
	fz_objt_cnstr_unfold_opts_set_func		fz_objt_cnstr_unfold_opts_set;			/* @fsfunc */
	fz_objt_cnstr_unfold_opts_finit_func	fz_objt_cnstr_unfold_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_unfold_func				fz_objt_cnstr_unfold;					/* @fsfunc */
	fz_objt_cnstr_terrain_opts_init_func		fz_objt_cnstr_terrain_opts_init;			/* @fsfunc */
	fz_objt_cnstr_terrain_opts_get_func		fz_objt_cnstr_terrain_opts_get;			/* @fsfunc */
	fz_objt_cnstr_terrain_opts_set_func		fz_objt_cnstr_terrain_opts_set;			/* @fsfunc */
	fz_objt_cnstr_terrain_opts_finit_func	fz_objt_cnstr_terrain_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_terrain_func			fz_objt_cnstr_terrain;				/* @fsfunc */
	fz_objt_cnstr_pathstair_opts_init_func		fz_objt_cnstr_pathstair_opts_init;			/* @fsfunc */
	fz_objt_cnstr_pathstair_opts_get_func		fz_objt_cnstr_pathstair_opts_get;			/* @fsfunc */
	fz_objt_cnstr_pathstair_opts_set_func		fz_objt_cnstr_pathstair_opts_set;			/* @fsfunc */
	fz_objt_cnstr_pathstair_opts_finit_func	fz_objt_cnstr_pathstair_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_spirstair_opts_init_func		fz_objt_cnstr_spirstair_opts_init;			/* @fsfunc */
	fz_objt_cnstr_spirstair_opts_get_func		fz_objt_cnstr_spirstair_opts_get;			/* @fsfunc */
	fz_objt_cnstr_spirstair_opts_set_func		fz_objt_cnstr_spirstair_opts_set;			/* @fsfunc */
	fz_objt_cnstr_spirstair_opts_finit_func	fz_objt_cnstr_spirstair_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_pathstair_func	fz_objt_cnstr_pathstair;		/* @fsfunc */
	fz_objt_cnstr_spirstair_func		fz_objt_cnstr_spirstair;			/* @fsfunc */
	fz_objt_cnstr_screw_opts_init_func		fz_objt_cnstr_screw_opts_init;			/* @fsfunc */
	fz_objt_cnstr_screw_opts_get_func		fz_objt_cnstr_screw_opts_get;			/* @fsfunc */
	fz_objt_cnstr_screw_opts_set_func		fz_objt_cnstr_screw_opts_set;			/* @fsfunc */
	fz_objt_cnstr_screw_opts_finit_func	fz_objt_cnstr_screw_opts_finit;		/* @fsfunc */
	fz_objt_cnstr_screw_func				fz_objt_cnstr_screw;					/* @fsfunc */
	
	/**************************************************************
		METAFORMZ
	**************************************************************/
	fz_objt_cnstr_meta_sphere_func		fz_objt_cnstr_meta_sphere;						/* @fsfunc */
	fz_objt_cnstr_meta_ellipsoid_func		fz_objt_cnstr_meta_ellipsoid;						/* @fsfunc */
	fz_objt_cnstr_meta_stretched_ellipsoid_func	fz_objt_cnstr_meta_stretched_ellipsoid;	/* @fsfunc */

	/**************************************************************
		TEXT
	**************************************************************/
	fz_objt_cnstr_text_opts_init_func		fz_objt_cnstr_text_opts_init;				/* @fsfunc */
	fz_objt_cnstr_text_opts_get_func		fz_objt_cnstr_text_opts_get;				/* @fsfunc */
	fz_objt_cnstr_text_opts_set_func		fz_objt_cnstr_text_opts_set;				/* @fsfunc */
	fz_objt_cnstr_text_opts_finit_func	fz_objt_cnstr_text_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_text_plain_func			fz_objt_cnstr_text_plain;					/* @fsfunc */
	fz_objt_cnstr_text_object_func		fz_objt_cnstr_text_object;				/* @fsfunc */
	fz_objt_cnstr_text_on_line_func		fz_objt_cnstr_text_on_line;				/* @fsfunc */
	fz_objt_cnstr_text_parl_lines_func	fz_objt_cnstr_text_parl_lines;			/* @fsfunc */
	fz_objt_cnstr_text_between_lines_func	fz_objt_cnstr_text_between_lines;			/* @fsfunc */
	
	/**************************************************************
		PATCHES
	**************************************************************/
	fz_objt_cnstr_patch_opts_init_func		fz_objt_cnstr_patch_opts_init;						/* @fsfunc */
	fz_objt_cnstr_patch_opts_get_func		fz_objt_cnstr_patch_opts_get;						/* @fsfunc */
	fz_objt_cnstr_patch_opts_set_func		fz_objt_cnstr_patch_opts_set;						/* @fsfunc */
	fz_objt_cnstr_patch_opts_finit_func		fz_objt_cnstr_patch_opts_finit;					/* @fsfunc */
	fz_objt_cnstr_patch_from_objt_func	fz_objt_cnstr_patch_from_obj;					/* @fsfunc */
	fz_objt_cnstr_patch_bezier_func			fz_objt_cnstr_patch_bezier;						/* @fsfunc */
	fz_objt_cnstr_patch_between_edges_func 	fz_objt_cnstr_patch_between_edges;			/* @fsfunc */
	fz_objt_cnstr_patch_from_edge_func		fz_objt_cnstr_patch_from_edge;				/* @fsfunc */
	fz_objt_cnstr_patch_from_prim_objt_func	fz_objt_cnstr_patch_from_prim_obj;			/* @fsfunc */
	fz_objt_cnstr_patch_from_open_edges_func fz_objt_cnstr_patch_from_open_edges;				/* @fsfunc */
	
	/**************************************************************
		NURBS
	**************************************************************/
	fz_objt_get_nsrf_func					fz_objt_get_nsrf;								/* @fsfunc */
	fz_objt_get_ncrv_func					fz_objt_get_ncrv;								/* @fsfunc */
	fz_objt_cnstr_nrbz_curve_func			fz_objt_cnstr_nrbz_curve;						/* @fsfunc */
	fz_objt_cnstr_tang_curve_func			fz_objt_cnstr_tang_curve;							/* @fsfunc */
	fz_objt_cnstr_objt_from_nsrfs_func		fz_objt_cnstr_objt_from_nsrfs;						/* @fsfunc */
	fz_objt_cnstr_nrbz_from_nsrf_func		fz_objt_cnstr_nrbz_from_nsrf;						/* @fsfunc */
	
	/* SMR 06/17/03 (start */
	fz_objt_cnstr_nrbz_opts_init_func				fz_objt_cnstr_nrbz_opts_init;				/* @fsfunc */
	fz_objt_cnstr_nrbz_opts_get_func				fz_objt_cnstr_nrbz_opts_get;				/* @fsfunc */
	fz_objt_cnstr_nrbz_opts_set_func				fz_objt_cnstr_nrbz_opts_set;				/* @fsfunc */
	fz_objt_cnstr_nrbz_opts_finit_func			fz_objt_cnstr_nrbz_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_cpts_func			fz_objt_cnstr_nrbz_from_cpts;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_bndry_curves_func	fz_objt_cnstr_nrbz_from_bndry_curves;	/* @fsfunc */
	fz_objt_cnstr_nrbz_through_curves_func		fz_objt_cnstr_nrbz_through_curves;		/* @fsfunc */
	fz_objt_cnstr_nrbz_from_uv_curves_func		fz_objt_cnstr_nrbz_from_uv_curves;		/* @fsfunc */
	fz_objt_cnstr_nrbz_through_points_func		fz_objt_cnstr_nrbz_through_points;		/* @fsfunc */
	fz_objt_cnstr_nrbz_from_cube_func			fz_objt_cnstr_nrbz_from_cube;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_cone_func			fz_objt_cnstr_nrbz_from_cone;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_cyln_func			fz_objt_cnstr_nrbz_from_cyln;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_sphr_func			fz_objt_cnstr_nrbz_from_sphr;			/* @fsfunc */
	fz_objt_cnstr_nrbz_from_tors_func			fz_objt_cnstr_nrbz_from_tors;			/* @fsfunc */
	/* SMR 06/17/03 end) */
	/* SMR 06/23/03 (start */
	fz_objt_cnstr_nrbz_curve_sections_func		fz_objt_cnstr_nrbz_curve_sections;		/* @fsfunc */
	fz_objt_cnstr_objt_from_ncur_func				fz_objt_cnstr_objt_from_ncur;				/* @fsfunc */
	fz_objt_cnstr_nrbz_curve_extract_func		fz_objt_cnstr_nrbz_curve_extract;		/* @fsfunc */
	/* SMR 06/23/03 end) */
	
	/**************************************************************
		LOW LEVEL CONSTRUCTION / MODIFICATION
	**************************************************************/
	fz_objt_cnstr_objt_new_func			fz_objt_cnstr_objt_new;				/* @fsfunc */
	fz_objt_fact_reset_func				fz_objt_fact_reset;					/* @fsfunc */
	fz_objt_fact_add_pnts_func			fz_objt_fact_add_pnts;				/* @fsfunc */
	fz_objt_fact_set_pnt_xyz_func			fz_objt_fact_set_pnt_xyz;				/* @fsfunc */
	fz_objt_fact_create_face_func			fz_objt_fact_create_face;				/* @fsfunc */
	fz_objt_fact_create_wire_face_func	fz_objt_fact_create_wire_face;		/* @fsfunc */
	fz_objt_fact_allocate_func			fz_objt_fact_allocate;				/* @fsfunc */
	fz_objt_fact_link_faces_func			fz_objt_fact_link_faces;				/* @fsfunc */
	fz_objt_fact_cleanup_func				fz_objt_fact_cleanup;					/* @fsfunc */
	
	/**************************************************************
		LOW LEVEL TOPOLOGY ACCESS
	**************************************************************/
	fz_objt_get_face_count_func		fz_objt_get_face_count;			/* @fsfunc */
	fz_objt_get_curv_count_func		fz_objt_get_curv_count;			/* @fsfunc */
	fz_objt_get_segt_count_func		fz_objt_get_segt_count;			/* @fsfunc */
	fz_objt_get_point_count_func		fz_objt_get_point_count;			/* @fsfunc */
	fz_objt_reset_func				fz_objt_reset;					/* @fsfunc */
	fz_objt_face_get_curv_count_func		fz_objt_face_get_curv_count;			/* @fsfunc */
	fz_objt_face_get_cindx_func			fz_objt_face_get_cindx;				/* @fsfunc */
	fz_objt_face_smod_get_fact_faces_func	fz_objt_face_smod_get_fact_faces;		/* @fsfunc */
	fz_objt_curv_get_segt_count_func		fz_objt_curv_get_segt_count;			/* @fsfunc */
	fz_objt_curv_get_sindx_func			fz_objt_curv_get_sindx;				/* @fsfunc */
	fz_objt_curv_get_prev_func			fz_objt_curv_get_prev;				/* @fsfunc */
	fz_objt_curv_get_next_func			fz_objt_curv_get_next;				/* @fsfunc */
	fz_objt_curv_get_fromface_func		fz_objt_curv_get_fromface;			/* @fsfunc */
	fz_objt_curv_is_hole_func				fz_objt_curv_is_hole;					/* @fsfunc */
	fz_objt_segt_get_start_pindx_func		fz_objt_segt_get_start_pindx;			/* @fsfunc */
	fz_objt_segt_get_end_pindx_func		fz_objt_segt_get_end_pindx;			/* @fsfunc */
	fz_objt_segt_get_prev_func			fz_objt_segt_get_prev;				/* @fsfunc */
	fz_objt_segt_get_next_func			fz_objt_segt_get_next;				/* @fsfunc */
	fz_objt_segt_get_reverse_func			fz_objt_segt_get_reverse;				/* @fsfunc */
	fz_objt_segt_get_fromcurv_func		fz_objt_segt_get_fromcurv;			/* @fsfunc */
	fz_objt_segt_get_num_wire_pnts_func	fz_objt_segt_get_num_wire_pnts;		/* @fsfunc */
	fz_objt_segt_get_wire_pnt_func		fz_objt_segt_get_wire_pnt;			/* @fsfunc */
	fz_objt_point_get_xyz_func			fz_objt_point_get_xyz;				/* @fsfunc */
	fz_objt_parm_get_data_func		fz_objt_parm_get_data;			/* @fsfunc */
	fz_objt_cntl_get_uuid_func			fz_objt_cntl_get_uuid;				/* @fsfunc */
	fz_objt_parm_init_data_func		fz_objt_parm_init_data;			/* @fsfunc */
	fz_objt_get_zone_ptr_func		fz_objt_get_zone_ptr;			/* @fsfunc */
	fz_objt_parm_nested_extract_func	fz_objt_parm_nested_extract;		/* @fsfunc */
	fz_objt_indp_init_func			fz_objt_indp_init;				/* @fsfunc */
	fz_objt_indp_finit_func			fz_objt_indp_finit;				/* @fsfunc */
	fz_objt_io_func				fz_objt_io;					/* @fsfunc */
	fz_objt_iso_get_num_iso_pnts_func	fz_objt_iso_get_num_iso_pnts;		/* @fsfunc */
	fz_objt_iso_get_iso_pnt_func		fz_objt_iso_get_iso_pnt;			/* @fsfunc */
	fz_objt_face_get_iso_count_func		fz_objt_face_get_iso_count;			/* @fsfunc */
	
	/**************************************************************
		EDITING
	**************************************************************/
	
	/**************************************************************
		GENERAL
	**************************************************************/
	fz_objt_edit_delete_objt_func			fz_objt_edit_delete_objt;							/* @fsfunc */
	fz_objt_edit_copy_objt_func			fz_objt_edit_copy_objt;							/* @fsfunc */
	fz_objt_edit_copy_objt_data_func		fz_objt_edit_copy_objt_data;						/* @fsfunc */
	fz_objt_edit_copy_objt_geom_func		fz_objt_edit_copy_objt_geom;						/* @fsfunc */
	fz_objt_edit_copy_objt_to_windex_func	fz_objt_edit_copy_objt_to_windex;					/* @fsfunc */
	fz_objt_edit_copy_objt_data_to_windex_func	fz_objt_edit_copy_objt_data_to_windex;	/* @fsfunc */
	fz_objt_edit_transform_objt_func		fz_objt_edit_transform_objt;						/* @fsfunc */
	fz_objt_edit_move_objt_func			fz_objt_edit_move_objt;							/* @fsfunc */
	fz_objt_edit_rotate_objt_func			fz_objt_edit_rotate_objt;							/* @fsfunc */
	fz_objt_edit_uniscale_objt_func		fz_objt_edit_uniscale_objt;						/* @fsfunc */
	fz_objt_edit_scale_objt_func			fz_objt_edit_scale_objt;							/* @fsfunc */
	fz_objt_edit_project_on_plane_func	fz_objt_edit_project_on_plane;					/* @fsfunc */
	fz_objt_edit_parm_regen_func			fz_objt_edit_parm_regen;							/* @fsfunc */
	
	/**************************************************************
		PARAMETRICS GET/SET
	**************************************************************/
	fz_objt_edit_cube_parm_get_func		fz_objt_edit_cube_parm_get;			/* @fsfunc */
	fz_objt_edit_cube_parm_set_func		fz_objt_edit_cube_parm_set;			/* @fsfunc */
	fz_objt_edit_sphr_parm_get_func		fz_objt_edit_sphr_parm_get;			/* @fsfunc */
	fz_objt_edit_sphr_parm_set_func		fz_objt_edit_sphr_parm_set;			/* @fsfunc */
	fz_objt_edit_cyln_parm_get_func		fz_objt_edit_cyln_parm_get;			/* @fsfunc */
	fz_objt_edit_cyln_parm_set_func		fz_objt_edit_cyln_parm_set;			/* @fsfunc */
	fz_objt_edit_cone_parm_get_func		fz_objt_edit_cone_parm_get;			/* @fsfunc */
	fz_objt_edit_cone_parm_set_func		fz_objt_edit_cone_parm_set;			/* @fsfunc */
	fz_objt_edit_tors_parm_get_func		fz_objt_edit_tors_parm_get;			/* @fsfunc */
	fz_objt_edit_tors_parm_set_func		fz_objt_edit_tors_parm_set;			/* @fsfunc */
	fz_objt_edit_spid_parm_get_func		fz_objt_edit_spid_parm_get;			/* @fsfunc */
	fz_objt_edit_spid_parm_set_func		fz_objt_edit_spid_parm_set;			/* @fsfunc */
	fz_objt_edit_pathstair_parm_get_func		fz_objt_edit_pathstair_parm_get;			/* @fsfunc */
	fz_objt_edit_pathstair_parm_set_func		fz_objt_edit_pathstair_parm_set;			/* @fsfunc */
	fz_objt_edit_spirstair_parm_get_func		fz_objt_edit_spirstair_parm_get;			/* @fsfunc */
	fz_objt_edit_spirstair_parm_set_func		fz_objt_edit_spirstair_parm_set;			/* @fsfunc */
	fz_objt_edit_revolve_parm_get_func		fz_objt_edit_revolve_parm_get;			/* @fsfunc */
	fz_objt_edit_revolve_parm_set_func		fz_objt_edit_revolve_parm_set;			/* @fsfunc */
	fz_objt_edit_helix_parm_get_func		fz_objt_edit_helix_parm_get;			/* @fsfunc */
	fz_objt_edit_helix_parm_set_func		fz_objt_edit_helix_parm_set;			/* @fsfunc */
	fz_objt_edit_sweep_parm_get_func		fz_objt_edit_sweep_parm_get;			/* @fsfunc */
	fz_objt_edit_sweep_parm_set_func		fz_objt_edit_sweep_parm_set;			/* @fsfunc */
	fz_objt_edit_screw_parm_get_func		fz_objt_edit_screw_parm_get;			/* @fsfunc */
	fz_objt_edit_screw_parm_set_func		fz_objt_edit_screw_parm_set;			/* @fsfunc */
	fz_objt_edit_symb_parm_get_func		fz_objt_edit_symb_parm_get;			/* @fsfunc */
	fz_objt_edit_symb_parm_set_func		fz_objt_edit_symb_parm_set;			/* @fsfunc */
	fz_objt_edit_extrude_parm_get_func		fz_objt_edit_extrude_parm_get;			/* @fsfunc */
	fz_objt_edit_extrude_parm_set_func		fz_objt_edit_extrude_parm_set;			/* @fsfunc */
	fz_objt_edit_converge_parm_get_func		fz_objt_edit_converge_parm_get;			/* @fsfunc */
	fz_objt_edit_converge_parm_set_func		fz_objt_edit_converge_parm_set;			/* @fsfunc */
	fz_objt_edit_enclos2d_parm_get_func		fz_objt_edit_enclos2d_parm_get;			/* @fsfunc */
	fz_objt_edit_enclos2d_parm_set_func		fz_objt_edit_enclos2d_parm_set;			/* @fsfunc */
	fz_objt_edit_enclos3d_parm_get_func		fz_objt_edit_enclos3d_parm_get;			/* @fsfunc */
	fz_objt_edit_enclos3d_parm_set_func		fz_objt_edit_enclos3d_parm_set;			/* @fsfunc */
	fz_objt_edit_circle_parm_get_func		fz_objt_edit_circle_parm_get;			/* @fsfunc */
	fz_objt_edit_circle_parm_set_func		fz_objt_edit_circle_parm_set;			/* @fsfunc */
	fz_objt_edit_ellipse_parm_get_func		fz_objt_edit_ellipse_parm_get;			/* @fsfunc */
	fz_objt_edit_ellipse_parm_set_func		fz_objt_edit_ellipse_parm_set;			/* @fsfunc */
	fz_objt_edit_arc_parm_get_func		fz_objt_edit_arc_parm_get;			/* @fsfunc */
	fz_objt_edit_arc_parm_set_func		fz_objt_edit_arc_parm_set;			/* @fsfunc */
	fz_objt_edit_spline_parm_get_func		fz_objt_edit_spline_parm_get;			/* @fsfunc */
	fz_objt_edit_spline_parm_set_func		fz_objt_edit_spline_parm_set;			/* @fsfunc */
	fz_objt_edit_plin_parm_get_func		fz_objt_edit_plin_parm_get;			/* @fsfunc */
	fz_objt_edit_plin_parm_set_func		fz_objt_edit_plin_parm_set;			/* @fsfunc */
	fz_objt_edit_qsub_parm_get_func		fz_objt_edit_qsub_parm_get;			/* @fsfunc */
	fz_objt_edit_qsub_parm_set_func		fz_objt_edit_qsub_parm_set;			/* @fsfunc */
	fz_objt_edit_tsub_parm_get_func		fz_objt_edit_tsub_parm_get;			/* @fsfunc */
	fz_objt_edit_tsub_parm_set_func		fz_objt_edit_tsub_parm_set;			/* @fsfunc */
	fz_objt_edit_text_parm_get_func		fz_objt_edit_text_parm_get;			/* @fsfunc */
	fz_objt_edit_text_parm_set_func		fz_objt_edit_text_parm_set;			/* @fsfunc */
	fz_objt_edit_loft_parm_get_func		fz_objt_edit_loft_parm_get;			/* @fsfunc */
	fz_objt_edit_loft_parm_set_func		fz_objt_edit_loft_parm_set;			/* @fsfunc */

	/**************************************************************
		PLINES
	**************************************************************/
	fz_objt_edit_join_open_wires_func		fz_objt_edit_join_open_wires;				/* @fsfunc */
	
	/**************************************************************
		MESHES
	**************************************************************/
	fz_objt_edit_qsub_opts_init_func		fz_objt_edit_qsub_opts_init;				/* @fsfunc */
	fz_objt_edit_qsub_opts_get_func		fz_objt_edit_qsub_opts_get;				/* @fsfunc */
	fz_objt_edit_qsub_opts_set_func		fz_objt_edit_qsub_opts_set;				/* @fsfunc */
	fz_objt_edit_qsub_opts_finit_func		fz_objt_edit_qsub_opts_finit;			/* @fsfunc */
	fz_objt_edit_qsub_func				fz_objt_edit_qsub;						/* @fsfunc */
	fz_objt_edit_tsub_opts_init_func		fz_objt_edit_tsub_opts_init;				/* @fsfunc */
	fz_objt_edit_tsub_opts_get_func		fz_objt_edit_tsub_opts_get;				/* @fsfunc */
	fz_objt_edit_tsub_opts_set_func		fz_objt_edit_tsub_opts_set;				/* @fsfunc */
	fz_objt_edit_tsub_opts_finit_func		fz_objt_edit_tsub_opts_finit;			/* @fsfunc */
	fz_objt_edit_tsub_func				fz_objt_edit_tsub;						/* @fsfunc */
	fz_objt_edit_tsub_parm_vrtx_set_func	fz_objt_edit_tsub_parm_vrtx_set;			/* @fsfunc */	/* PVH 03/05/04 */
	fz_objt_edit_tsub_parm_vrtx_get_func	fz_objt_edit_tsub_parm_vrtx_get;			/* @fsfunc */	/* PVH 03/05/04 */
	fz_objt_edit_tsub_parm_edge_set_func	fz_objt_edit_tsub_parm_edge_set;			/* @fsfunc */	/* PVH 03/05/04 */
	fz_objt_edit_tsub_parm_edge_get_func	fz_objt_edit_tsub_parm_edge_get;			/* @fsfunc */	/* PVH 03/05/04 */
	fz_objt_edit_mesh_object_func			fz_objt_edit_mesh_object;					/* @fsfunc */
	fz_objt_edit_mesh_face_func			fz_objt_edit_mesh_face;					/* @fsfunc */
	fz_objt_edit_triangulate_func			fz_objt_edit_triangulate;					/* @fsfunc */
	fz_objt_edit_reduce_mesh_func			fz_objt_edit_reduce_mesh;					/* @fsfunc */
	fz_objt_edit_deform_shear_func		fz_objt_edit_deform_shear;				/* @fsfunc */
	fz_objt_edit_deform_taper_func		fz_objt_edit_deform_taper;				/* @fsfunc */
	fz_objt_edit_deform_twist_func		fz_objt_edit_deform_twist;				/* @fsfunc */
	fz_objt_edit_deform_bulge_func		fz_objt_edit_deform_bulge;				/* @fsfunc */
	fz_objt_edit_deform_radial_shear_func	fz_objt_edit_deform_radial_shear;			/* @fsfunc */
	fz_objt_edit_deform_bend_func			fz_objt_edit_deform_bend;					/* @fsfunc */
	fz_objt_edit_deform_bezier_func		fz_objt_edit_deform_bezier;				/* @fsfunc */
	fz_objt_edit_deform_wave_func			fz_objt_edit_deform_wave;					/* @fsfunc */
	fz_objt_edit_deform_random_xyz_func	fz_objt_edit_deform_random_xyz;			/* @fsfunc */
	fz_objt_edit_deform_random_norm_func	fz_objt_edit_deform_random_norm;			/* @fsfunc */
	fz_objt_decompose_simple_func	fz_objt_decompose_simple;			/* @fsfunc */
	
	/**************************************************************
		BOOLEANS
	**************************************************************/
	fz_objt_edit_bool_union_multi_func			fz_objt_edit_bool_union_multi;			/* @fsfunc */
	fz_objt_edit_bool_intersection_multi_func	fz_objt_edit_bool_intersection_multi;	/* @fsfunc */
	fz_objt_edit_bool_difference_multi_func		fz_objt_edit_bool_difference_multi;		/* @fsfunc */
	fz_objt_edit_bool_union_func				fz_objt_edit_bool_union;						/* @fsfunc */
	fz_objt_edit_bool_intersection_func		fz_objt_edit_bool_intersection;				/* @fsfunc */
	fz_objt_edit_bool_difference_func			fz_objt_edit_bool_difference;					/* @fsfunc */
	fz_objt_edit_bool_split_func			fz_objt_edit_bool_split;					/* @fsfunc */
	fz_objt_edit_trim_with_surface_func	fz_objt_edit_trim_with_surface;			/* @fsfunc */
	fz_objt_edit_trim_with_line_func		fz_objt_edit_trim_with_line;				/* @fsfunc */
	fz_objt_edit_split_with_surface_func	fz_objt_edit_split_with_surface;			/* @fsfunc */
	fz_objt_edit_split_with_line_func		fz_objt_edit_split_with_line;				/* @fsfunc */
	fz_objt_edit_stitch_faces_func		fz_objt_edit_stitch_faces;				/* @fsfunc */
	fz_objt_edit_stitch_objects_func		fz_objt_edit_stitch_objects;				/* @fsfunc */
	fz_objt_edit_line_of_intersection_func	fz_objt_edit_line_of_intersection;	/* @fsfunc */
	fz_objt_edit_section3d_func			fz_objt_edit_section3d;					/* @fsfunc */
	fz_objt_edit_section2d_func			fz_objt_edit_section2d;					/* @fsfunc */
	fz_objt_edit_volumes_join_func		fz_objt_edit_volumes_join;				/* @fsfunc */
	fz_objt_edit_volumes_separate_func	fz_objt_edit_volumes_separate;			/* @fsfunc */
	
	/**************************************************************
		NURBZ
	**************************************************************/
	fz_objt_edit_nrbz_curve_extend_to_point_func		fz_objt_edit_nrbz_curve_extend_to_point;						/* @fsfunc */
	fz_objt_edit_nrbz_curve_extend_by_distance_func	fz_objt_edit_nrbz_curve_extend_by_distance;					/* @fsfunc */
	fz_objt_edit_nrbz_curve_split_func				fz_objt_edit_nrbz_curve_split;								/* @fsfunc */
	fz_objt_edit_nrbz_curve_change_degree_func				fz_objt_edit_nrbz_curve_change_degree;				/* @fsfunc */
	fz_objt_edit_nrbz_curve_change_ctrlpts_by_number_func	fz_objt_edit_nrbz_curve_change_ctrlpts_by_number;	/* @fsfunc */
	fz_objt_edit_nrbz_curve_change_ctrlpts_by_curvature_func	fz_objt_edit_nrbz_curve_change_ctrlpts_by_curvature;	/* @fsfunc */
	fz_objt_edit_nrbz_change_degree_func				fz_objt_edit_nrbz_change_degree;				/* @fsfunc */
	fz_objt_edit_nrbz_change_ctrlpts_by_number_func		fz_objt_edit_nrbz_change_ctrlpts_by_number;		/* @fsfunc */
	fz_objt_edit_nrbz_change_ctrlpts_by_curvature_func	fz_objt_edit_nrbz_change_ctrlpts_by_curvature;	/* @fsfunc */
	fz_objt_edit_nrbz_swap_uv_func						fz_objt_edit_nrbz_swap_uv;						/* @fsfunc */
	fz_objt_edit_nrbz_trim_minimise_func				fz_objt_edit_nrbz_trim_minimise;				/* @fsfunc */
	fz_objt_edit_nrbz_blend_func				fz_objt_edit_nrbz_blend;								/* @fsfunc */
	fz_objt_edit_nrbz_attach_func				fz_objt_edit_nrbz_attach;								/* @fsfunc */
	fz_objt_edit_nrbz_extend_by_distance_func	fz_objt_edit_nrbz_extend_by_distance;					/* @fsfunc */
	fz_objt_edit_nrbz_merge_align_func			fz_objt_edit_nrbz_merge_align;							/* @fsfunc */
	fz_objt_edit_nrbz_merge_smooth_func			fz_objt_edit_nrbz_merge_smooth;							/* @fsfunc */
	fz_objt_cnstr_nrbz_trimmed_sketch_func		fz_objt_cnstr_nrbz_trimmed_sketch;							/* @fsfunc */
	fz_objt_cnstr_nrbz_trimmed_map_func			fz_objt_cnstr_nrbz_trimmed_map;						/* @fsfunc */
	fz_objt_cnstr_nrbz_curve_on_surf_map_func		fz_objt_cnstr_nrbz_curve_on_surf_map;						/* @fsfunc */
	fz_objt_cnstr_nrbz_curve_on_surf_sketch_func		fz_objt_cnstr_nrbz_curve_on_surf_sketch;						/* @fsfunc */
	fz_objt_edit_nrbz_untrim_func				fz_objt_edit_nrbz_untrim;								/* @fsfunc */
	fz_objt_edit_nrbz_untrim_all_func			fz_objt_edit_nrbz_untrim_all;							/* @fsfunc */
	fz_objt_edit_nrbz_split_at_point_func		fz_objt_edit_nrbz_split_at_point;						/* @fsfunc */
	fz_objt_edit_nrbz_split_at_interval_func	fz_objt_edit_nrbz_split_at_interval;					/* @fsfunc */
	fz_objt_edit_nrbz_curve_attach_func				fz_objt_edit_nrbz_curve_attach;								/* @fsfunc */
 	fz_objt_edit_nrbz_curve_blend_func				fz_objt_edit_nrbz_curve_blend;								/* @fsfunc */
 	fz_objt_edit_nrbz_curve_merge_align_func			fz_objt_edit_nrbz_curve_merge_align;							/* @fsfunc */
 	fz_objt_edit_nrbz_curve_merge_smooth_func		fz_objt_edit_nrbz_curve_merge_smooth;						/* @fsfunc */

 	/**************************************************************
		PATCHES
	**************************************************************/

	fz_objt_edit_patch_divide_object_func		fz_objt_edit_patch_divide_object;					/* @fsfunc */
	fz_objt_edit_patch_divide_face_func			fz_objt_edit_patch_divide_face;						/* @fsfunc */
	fz_objt_edit_patch_divide_segment_func		fz_objt_edit_patch_divide_segment;					/* @fsfunc */
	fz_objt_edit_patch_attach_func				fz_objt_edit_patch_attach;  						/* @fsfunc */
	fz_objt_edit_patch_dettach_object_func		fz_objt_edit_patch_dettach_object; 					/* @fsfunc */
	fz_objt_edit_patch_dettach_face_func		fz_objt_edit_patch_dettach_face; 					/* @fsfunc */
	fz_objt_edit_patch_dettach_segment_func		fz_objt_edit_patch_dettach_segment; 				/* @fsfunc */
	fz_objt_edit_patch_undivide_object_func		fz_objt_edit_patch_undivide_object;					/* @fsfunc */
	fz_objt_edit_patch_undivide_face_func		fz_objt_edit_patch_undivide_face;					/* @fsfunc */
	fz_objt_edit_patch_undivide_segment_func	fz_objt_edit_patch_undivide_segment;				/* @fsfunc */
	fz_objt_edit_patch_stitch_object_func		fz_objt_edit_patch_stitch_object;					/* @fsfunc */
	fz_objt_edit_patch_stitch_face_func		   	fz_objt_edit_patch_stitch_face;						/* @fsfunc */
	fz_objt_edit_patch_stitch_segment_func		fz_objt_edit_patch_stitch_segment;					/* @fsfunc */
	fz_objt_edit_patch_unstitch_object_func		fz_objt_edit_patch_unstitch_object;					/* @fsfunc */
	fz_objt_edit_patch_unstitch_face_func		fz_objt_edit_patch_unstitch_face;					/* @fsfunc */
	fz_objt_edit_patch_unstitch_segment_func	fz_objt_edit_patch_unstitch_segment;				/* @fsfunc */
	fz_objt_edit_patch_merge_func				fz_objt_edit_patch_merge;							/* @fsfunc */
		
	/**************************************************************
		TOPOLOGICAL EDITING
	**************************************************************/
	fz_objt_edit_set_first_point_func		fz_objt_edit_set_first_point;						/* @fsfunc */
	fz_objt_edit_reverse_topology_func	fz_objt_edit_reverse_topology;					/* @fsfunc */
	fz_objt_edit_uncover_surface_func		fz_objt_edit_uncover_surface;						/* @fsfunc */
	fz_objt_edit_cover_closed_wire_func	fz_objt_edit_cover_closed_wire;					/* @fsfunc */
	fz_objt_edit_extract_cntrl_objs_func	fz_objt_edit_extract_cntrl_objs;					/* @fsfunc */
	fz_objt_edit_can_convert_cntrl_func	fz_objt_edit_can_convert_cntrl;					/* @fsfunc */
	fz_objt_edit_convert_cntrl_func		fz_objt_edit_convert_cntrl;						/* @fsfunc */
	fz_objt_edit_drop_cntrl_func			fz_objt_edit_drop_cntrl;							/* @fsfunc */
	fz_objt_edit_drop_smooth_func			fz_objt_edit_drop_smooth;							/* @fsfunc */
	fz_objt_edit_regen_facets_func		fz_objt_edit_regen_facets;						/* @fsfunc */
	fz_objt_edit_delete_points_func		fz_objt_edit_delete_points;						/* @fsfunc */
	fz_objt_edit_delete_segments_func		fz_objt_edit_delete_segments;						/* @fsfunc */
	fz_objt_edit_delete_curves_func		fz_objt_edit_delete_curves;						/* @fsfunc */
	fz_objt_edit_delete_faces_func		fz_objt_edit_delete_faces;						/* @fsfunc */
	fz_objt_edit_delete_multi_func		fz_objt_edit_delete_multi;						/* @fsfunc */
	fz_objt_edit_transform_points_func	fz_objt_edit_transform_points;					/* @fsfunc */
	fz_objt_edit_transform_segments_func	fz_objt_edit_transform_segments;					/* @fsfunc */
	fz_objt_edit_transform_curves_func	fz_objt_edit_transform_curves;					/* @fsfunc */
	fz_objt_edit_transform_faces_func		fz_objt_edit_transform_faces;						/* @fsfunc */
	fz_objt_edit_transform_multi_func		fz_objt_edit_transform_multi;						/* @fsfunc */
	
	/**************************************************************
		ROUNDING
	**************************************************************/
	fz_objt_frnd_opts_init_func			fz_objt_frnd_opts_init;							/* @fsfunc */
	fz_objt_frnd_opts_get_func			fz_objt_frnd_opts_get;							/* @fsfunc */
	fz_objt_frnd_opts_set_func			fz_objt_frnd_opts_set;							/* @fsfunc */
	fz_objt_frnd_opts_finit_func			fz_objt_frnd_opts_finit;							/* @fsfunc */
	fz_objt_cnstr_frnd_func				fz_objt_cnstr_frnd;								/* @fsfunc */
	fz_objt_edit_frnd_parm_get_func		fz_objt_edit_frnd_parm_get;						/* @fsfunc */
	fz_objt_edit_frnd_parm_set_func		fz_objt_edit_frnd_parm_set;						/* @fsfunc */
	fz_objt_edit_frnd_parm_edge_opts_get_func		fz_objt_edit_frnd_parm_edge_opts_get;		/* @fsfunc */
	fz_objt_edit_frnd_parm_edge_opts_set_func		fz_objt_edit_frnd_parm_edge_opts_set;		/* @fsfunc */
	fz_objt_edit_frnd_parm_vrtx_opts_get_func		fz_objt_edit_frnd_parm_vrtx_opts_get;		/* @fsfunc */
	fz_objt_edit_frnd_parm_vrtx_opts_set_func		fz_objt_edit_frnd_parm_vrtx_opts_set;		/* @fsfunc */
	fz_objt_edit_frnd_plain_func			fz_objt_edit_frnd_plain;							/* @fsfunc */
	fz_objt_edit_frnd_stitch_func			fz_objt_edit_frnd_stitch;							/* @fsfunc */
	fz_objt_srnd_opts_init_func			fz_objt_srnd_opts_init;							/* @fsfunc */
	fz_objt_srnd_opts_set_func			fz_objt_srnd_opts_set;							/* @fsfunc */
	fz_objt_srnd_opts_get_func			fz_objt_srnd_opts_get;							/* @fsfunc */
	fz_objt_srnd_opts_finit_func			fz_objt_srnd_opts_finit;							/* @fsfunc */
	fz_objt_cnstr_srnd_func				fz_objt_cnstr_srnd;								/* @fsfunc */
	fz_objt_edit_srnd_get_grups_func		fz_objt_edit_srnd_get_grups;						/* @fsfunc */
	fz_objt_edit_srnd_set_grups_func		fz_objt_edit_srnd_set_grups;						/* @fsfunc */
	fz_objt_edit_srnd_plain_func			fz_objt_edit_srnd_plain;							/* @fsfunc */
	fz_objt_edit_srnd_stitch_func			fz_objt_edit_srnd_stitch;							/* @fsfunc */
	fz_objt_cnstr_fillet_func				fz_objt_cnstr_fillet;								/* @fsfunc */
	/**************************************************************
		ANALYSIS
	**************************************************************/
	
	fz_objt_alys_face_is_planar_func			fz_objt_alys_face_is_planar;					/* @fsfunc */
	fz_objt_alys_get_objt_volume_func			fz_objt_alys_get_objt_volume;					/* @fsfunc */
	fz_objt_alys_get_objt_cog_func			fz_objt_alys_get_objt_cog;					/* @fsfunc */
	fz_objt_alys_get_objt_area_func			fz_objt_alys_get_objt_area;					/* @fsfunc */
	fz_objt_alys_get_objt_moments_func		fz_objt_alys_get_objt_moments;				/* @fsfunc */
	fz_objt_alys_get_objt_principle_axes_func	fz_objt_alys_get_objt_principle_axes;			/* @fsfunc */
	fz_objt_alys_get_objt_bbox_func			fz_objt_alys_get_objt_bbox;					/* @fsfunc */
	fz_objt_alys_get_objt_bvol_func			fz_objt_alys_get_objt_bvol;					/* @fsfunc */
	fz_objt_alys_get_objt_origin_func			fz_objt_alys_get_objt_origin;					/* @fsfunc */
	fz_objt_alys_get_objt_axes_func			fz_objt_alys_get_objt_axes;					/* @fsfunc */
	fz_objt_alys_set_objt_origin_func			fz_objt_alys_set_objt_origin;					/* @fsfunc */
	fz_objt_alys_set_objt_axes_func			fz_objt_alys_set_objt_axes;					/* @fsfunc */
	fz_objt_alys_get_objt_topo_type_func		fz_objt_alys_get_objt_topo_type;				/* @fsfunc */
	fz_objt_alys_get_objt_cntl_uuid_func		fz_objt_alys_get_objt_cntl_uuid;				/* @fsfunc */
	fz_objt_alys_get_objt_model_type_func		fz_objt_alys_get_objt_model_type;				/* @fsfunc */
	fz_objt_alys_objt_is_valid_func			fz_objt_alys_objt_is_valid;					/* @fsfunc */
	fz_objt_alys_get_face_geom_type_func		fz_objt_alys_get_face_geom_type;				/* @fsfunc */
	fz_objt_alys_get_face_pnt_parm_func		fz_objt_alys_get_face_pnt_parm;				/* @fsfunc */
	fz_objt_alys_get_face_plne_parm_func	fz_objt_alys_get_face_plne_parm;			/* @fsfunc */
	fz_objt_alys_get_face_sphr_parm_func	fz_objt_alys_get_face_sphr_parm;			/* @fsfunc */
	fz_objt_alys_get_face_cyln_parm_func	fz_objt_alys_get_face_cyln_parm;			/* @fsfunc */
	fz_objt_alys_get_face_cone_parm_func	fz_objt_alys_get_face_cone_parm;			/* @fsfunc */
	fz_objt_alys_get_face_tors_parm_func	fz_objt_alys_get_face_tors_parm;			/* @fsfunc */
	fz_objt_alys_get_face_spln_parm_func	fz_objt_alys_get_face_spln_parm;			/* @fsfunc */
	fz_objt_alys_get_face_area_func			fz_objt_alys_get_face_area;					/* @fsfunc */
	fz_objt_alys_get_face_circumference_func	fz_objt_alys_get_face_circumference;			/* @fsfunc */
	fz_objt_alys_get_face_cog_func			fz_objt_alys_get_face_cog;					/* @fsfunc */
	fz_objt_alys_get_face_bbox_func			fz_objt_alys_get_face_bbox;					/* @fsfunc */
	fz_objt_alys_get_curv_circumference_func	fz_objt_alys_get_curv_circumference;			/* @fsfunc */
	fz_objt_alys_get_curv_bbox_func			fz_objt_alys_get_curv_bbox;					/* @fsfunc */
	fz_objt_alys_get_segt_geom_type_func		fz_objt_alys_get_segt_geom_type;				/* @fsfunc */
	fz_objt_alys_get_segt_bbox_func			fz_objt_alys_get_segt_bbox;					/* @fsfunc */
	fz_objt_alys_get_segt_length_func			fz_objt_alys_get_segt_length;					/* @fsfunc */
	fz_objt_alys_get_pnt_on_segt_func			fz_objt_alys_get_pnt_on_segt;					/* @fsfunc */
	fz_objt_alys_get_segt_arc_parm_func		fz_objt_alys_get_segt_arc_parm;				/* @fsfunc */
	fz_objt_alys_get_segt_spline_parm_func	fz_objt_alys_get_segt_spline_parm;			/* @fsfunc */
	fz_objt_alys_get_objt_centroid_func			fz_objt_alys_get_objt_centroid;					/* @fsfunc */
	fz_objt_alys_get_segt_pspace_geom_type_func		fz_objt_alys_get_segt_pspace_geom_type;		/* @fsfunc */
	fz_objt_alys_get_segt_pspace_arc_parm_func		fz_objt_alys_get_segt_pspace_arc_parm;		/* @fsfunc */
	fz_objt_alys_get_segt_pspace_spline_parm_func	fz_objt_alys_get_segt_pspace_spline_parm;	/* @fsfunc */
	fz_objt_alys_get_curv_pspace_trim_func			fz_objt_alys_get_curv_pspace_trim;			/* @fsfunc */
	
	/**************************************************************
		PICK BUFFER
	**************************************************************/

	fz_model_pick_func						fz_model_pick;									/* @fsfunc */
	fz_model_pick_add_pnts_func				fz_model_pick_add_pnts;							/* @fsfunc */
	fz_model_pick_add_segts_func			fz_model_pick_add_segts;							/* @fsfunc */
	fz_model_pick_add_curvs_func			fz_model_pick_add_curvs;							/* @fsfunc */
	fz_model_pick_add_faces_func			fz_model_pick_add_faces;							/* @fsfunc */
	fz_model_pick_add_holes_func			fz_model_pick_add_holes;							/* @fsfunc */
	fz_model_pick_add_objts_func			fz_model_pick_add_objts;							/* @fsfunc */
	fz_model_pick_add_grups_func			fz_model_pick_add_grups;							/* @fsfunc */
	fz_model_pick_remove_func				fz_model_pick_remove;							/* @fsfunc */
	fz_model_pick_clear_func				fz_model_pick_clear;							/* @fsfunc */
	fz_model_pick_find_func					fz_model_pick_find;								/* @fsfunc */
	fz_model_pick_sort_func					fz_model_pick_sort;								/* @fsfunc */
	fz_model_pick_get_count_func			fz_model_pick_get_count;						/* @fsfunc */
	fz_model_pick_get_data_func				fz_model_pick_get_data;							/* @fsfunc */
	fz_model_pick_get_pnts_func				fz_model_pick_get_pnts;							/* @fsfunc */
	fz_model_pick_get_pnts_world_func		fz_model_pick_get_pnts_world;					/* @fsfunc */
	fz_model_pick_get_owner_func			fz_model_pick_get_owner;						/* @fsfunc */
	fz_model_pick_axis_func					fz_model_pick_axis;								/* @fsfunc */
																						
	/**************************************************************
		MODEL PROJECT
	**************************************************************/
	fz_model_get_bounds_func				fz_model_get_bounds;						/* @fsfunc */
																						
	/**************************************************************
		SYMBOLS
	**************************************************************/
	fz_objt_symb_ins_place_func					fz_objt_symb_ins_place;					/* @fsfunc */
	fz_objt_symb_ins_explode_func				fz_objt_symb_ins_explode;				/* @fsfunc */
	fz_objt_symb_ins_get_matrix_func			fz_objt_symb_ins_get_matrix;			/* @fsfunc */

	/**************************************************************
		GROUPS
	**************************************************************/
	fz_objt_grup_get_table_func			fz_objt_grup_get_table;							/* @fsfunc */
	fz_objt_grup_get_parm_data_func		fz_objt_grup_get_parm_data;						/* @fsfunc */
	fz_objt_grup_set_parm_data_func		fz_objt_grup_set_parm_data;						/* @fsfunc */

	/**************************************************************
		Object tracing
	**************************************************************/
	fz_objt_get_count_func			fz_objt_get_count;							/* @fsfunc */
	fz_objt_tag_to_ptr_func			fz_objt_tag_to_ptr;							/* @fsfunc */
	fz_objt_ptr_to_tag_func			fz_objt_ptr_to_tag;							/* @fsfunc */
	fz_objt_get_next_func			fz_objt_get_next;							/* @fsfunc */
	fz_objt_get_prev_func			fz_objt_get_prev;							/* @fsfunc */
	fz_objt_find_func				fz_objt_find;								/* @fsfunc */
	fz_objt_get_grup_tag_func		fz_objt_get_grup_tag;						/* @fsfunc */

	/**************************************************************
		OBJECT LISTS
	**************************************************************/
	fz_objt_list_create_func			fz_objt_list_create;					/* @fsfunc */
	fz_objt_list_delete_func			fz_objt_list_delete;					/* @fsfunc */
	fz_objt_list_reset_func				fz_objt_list_reset;						/* @fsfunc */
	fz_objt_list_add_objt_func		fz_objt_list_add_objt;				/* @fsfunc */
	fz_objt_list_remove_objt_func		fz_objt_list_remove_objt;				/* @fsfunc */
	fz_objt_list_count_func				fz_objt_list_count;						/* @fsfunc */
	fz_objt_list_get_objt_func		fz_objt_list_get_objt;				/* @fsfunc */
	
	fz_objt_fact_create_hole_curv_func	fz_objt_fact_create_hole_curv;			/* @fsfunc */
	fz_objt_edit_join_open_wires_multi_func	fz_objt_edit_join_open_wires_multi;	/* @fsfunc */
	fz_objt_get_opts_parm_data_func		fz_objt_get_opts_parm_data;		/* @fsfunc */
	fz_objt_set_opts_parm_data_func		fz_objt_set_opts_parm_data;		/* @fsfunc */
	fz_objt_sort_func					fz_objt_sort;					/* @fsfunc */
	fz_objt_purge_func					fz_objt_purge;					/* @fsfunc */
	fz_objt_edit_copy_objt_geom_cntl_func		fz_objt_edit_copy_objt_geom_cntl;						/* @fsfunc */
	
	fz_objt_alys_is_pnt_inside_objt_func	fz_objt_alys_is_pnt_inside_objt;			/* @fsfunc */
	fz_objt_alys_proj_pnt_on_face_func		fz_objt_alys_proj_pnt_on_face;				/* @fsfunc */
	fz_objt_alys_proj_pnt_on_segt_func		fz_objt_alys_proj_pnt_on_segt;				/* @fsfunc */

	fz_objt_cnstr_formula_surface_func		fz_objt_cnstr_formula_surface;				/* @fsfunc */
	fz_objt_cnstr_formula_curve_func		fz_objt_cnstr_formula_curve;				/* @fsfunc */
	
	fz_objt_edit_make_clones_func			fz_objt_edit_make_clones;					/* @fsfunc */
	fz_objt_edit_unclone_func				fz_objt_edit_unclone;						/* @fsfunc */
	fz_objt_edit_find_clones_func			fz_objt_edit_find_clones;					/* @fsfunc */
	fz_objt_edit_update_clones_func			fz_objt_edit_update_clones;					/* @fsfunc */
	fz_objt_alys_objt_is_clone_func			fz_objt_alys_objt_is_clone;					/* @fsfunc */
	fz_objt_alys_objts_are_clone_siblings_func	fz_objt_alys_objts_are_clone_siblings;  /* @fsfunc */
	fz_objt_alys_get_clone_transform_func		fz_objt_alys_get_clone_transform;		/* @fsfunc */
	fz_objt_edit_replace_func					fz_objt_edit_replace;					/* @fsfunc */
	
	fz_model_pick_by_criteria_func				fz_model_pick_by_criteria;				/* @fsfunc */
	
	fz_objt_edit_handle_status_of_opnd_func		fz_objt_edit_handle_status_of_opnd;		/* @fsfunc */
	fz_objt_edit_handle_new_objt_volms_func		fz_objt_edit_handle_new_objt_volms;		/* @fsfunc */
	
	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 5.0.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	
	
	/************************************************************************************
	 *	5.5.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_edit_plin_separate_func						fz_objt_edit_plin_separate;						/* @fsfunc */
	
	fz_objt_cnstr_text_unistr_plain_func				fz_objt_cnstr_text_unistr_plain;				/* @fsfunc */
	fz_objt_cnstr_text_unistr_object_func				fz_objt_cnstr_text_unistr_object;				/* @fsfunc */
	fz_objt_cnstr_text_unistr_on_line_func				fz_objt_cnstr_text_unistr_on_line;				/* @fsfunc */
	fz_objt_cnstr_text_unistr_parl_lines_func			fz_objt_cnstr_text_unistr_parl_lines;			/* @fsfunc */
	fz_objt_cnstr_text_unistr_between_lines_func		fz_objt_cnstr_text_unistr_between_lines;		/* @fsfunc */
	fz_objt_edit_text_get_num_style_runs_func			fz_objt_edit_text_get_num_style_runs;			/* @fsfunc */
	fz_objt_edit_text_style_run_get_info_func			fz_objt_edit_text_style_run_get_info;			/* @fsfunc */
	fz_objt_edit_text_set_style_run_func				fz_objt_edit_text_set_style_run;				/* @fsfunc */
	fz_objt_edit_text_get_string_length_func			fz_objt_edit_text_get_string_length;			/* @fsfunc */
	fz_objt_edit_text_get_string_func					fz_objt_edit_text_get_string;					/* @fsfunc */
	fz_objt_edit_text_get_string_range_func				fz_objt_edit_text_get_string_range;				/* @fsfunc */
	fz_objt_edit_text_set_string_func					fz_objt_edit_text_set_string;					/* @fsfunc */
	fz_objt_edit_text_set_string_range_func				fz_objt_edit_text_set_string_range;				/* @fsfunc */
	fz_objt_edit_text_insert_string_func				fz_objt_edit_text_insert_string;				/* @fsfunc */
	fz_objt_edit_text_delete_text_func					fz_objt_edit_text_delete_text;					/* @fsfunc */

	fz_objt_cnstr_bend_func								fz_objt_cnstr_bend;						/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_cnstr_bend_opts_init_func					fz_objt_cnstr_bend_opts_init;			/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_cnstr_bend_opts_finit_func					fz_objt_cnstr_bend_opts_finit;			/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_cnstr_bend_opts_set_func					fz_objt_cnstr_bend_opts_set;			/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_cnstr_bend_opts_get_func					fz_objt_cnstr_bend_opts_get;			/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_edit_bend_parm_get_func						fz_objt_edit_bend_parm_get;				/* @fsfunc */	/* PVH 03/15/05 */
	fz_objt_edit_bend_parm_set_func						fz_objt_edit_bend_parm_set;				/* @fsfunc */	/* PVH 03/15/05 */

	/* PVH 07/11/05 begin( */
	fz_objt_cnstr_prbl_func								fz_objt_cnstr_prbl;						/* @fsfunc */
	fz_objt_cnstr_prbl_opts_init_func					fz_objt_cnstr_prbl_opts_init;			/* @fsfunc */
	fz_objt_cnstr_prbl_opts_finit_func					fz_objt_cnstr_prbl_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_prbl_opts_set_func					fz_objt_cnstr_prbl_opts_set;			/* @fsfunc */
	fz_objt_cnstr_prbl_opts_get_func					fz_objt_cnstr_prbl_opts_get;			/* @fsfunc */
	fz_objt_edit_prbl_parm_get_func						fz_objt_edit_prbl_parm_get;				/* @fsfunc */
	fz_objt_edit_prbl_parm_set_func						fz_objt_edit_prbl_parm_set;				/* @fsfunc */

	fz_objt_cnstr_hbl1_func								fz_objt_cnstr_hbl1;						/* @fsfunc */
	fz_objt_cnstr_hbl1_opts_init_func					fz_objt_cnstr_hbl1_opts_init;			/* @fsfunc */
	fz_objt_cnstr_hbl1_opts_finit_func					fz_objt_cnstr_hbl1_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_hbl1_opts_set_func					fz_objt_cnstr_hbl1_opts_set;			/* @fsfunc */
	fz_objt_cnstr_hbl1_opts_get_func					fz_objt_cnstr_hbl1_opts_get;			/* @fsfunc */
	fz_objt_edit_hbl1_parm_get_func						fz_objt_edit_hbl1_parm_get;				/* @fsfunc */
	fz_objt_edit_hbl1_parm_set_func						fz_objt_edit_hbl1_parm_set;				/* @fsfunc */

	fz_objt_cnstr_hbl2_func								fz_objt_cnstr_hbl2;						/* @fsfunc */
	fz_objt_cnstr_hbl2_opts_init_func					fz_objt_cnstr_hbl2_opts_init;			/* @fsfunc */
	fz_objt_cnstr_hbl2_opts_finit_func					fz_objt_cnstr_hbl2_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_hbl2_opts_set_func					fz_objt_cnstr_hbl2_opts_set;			/* @fsfunc */
	fz_objt_cnstr_hbl2_opts_get_func					fz_objt_cnstr_hbl2_opts_get;			/* @fsfunc */
	fz_objt_edit_hbl2_parm_get_func						fz_objt_edit_hbl2_parm_get;				/* @fsfunc */
	fz_objt_edit_hbl2_parm_set_func						fz_objt_edit_hbl2_parm_set;				/* @fsfunc */

	fz_objt_cnstr_hpbl_func								fz_objt_cnstr_hpbl;						/* @fsfunc */
	fz_objt_cnstr_hpbl_opts_init_func					fz_objt_cnstr_hpbl_opts_init;			/* @fsfunc */
	fz_objt_cnstr_hpbl_opts_finit_func					fz_objt_cnstr_hpbl_opts_finit;			/* @fsfunc */
	fz_objt_cnstr_hpbl_opts_set_func					fz_objt_cnstr_hpbl_opts_set;			/* @fsfunc */
	fz_objt_cnstr_hpbl_opts_get_func					fz_objt_cnstr_hpbl_opts_get;			/* @fsfunc */
	fz_objt_edit_hpbl_parm_get_func						fz_objt_edit_hpbl_parm_get;				/* @fsfunc */
	fz_objt_edit_hpbl_parm_set_func						fz_objt_edit_hpbl_parm_set;				/* @fsfunc */
	/* PVH 07/11/05 )end */

	fz_objt_decompose_simple_with_normals_func			fz_objt_decompose_simple_with_normals;	/* @fsfunc */

	/************************************************************************************
	 *	6.0.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_edit_parm_get_func							fz_objt_edit_parm_get;					/* @fsfunc */
	fz_objt_edit_parm_set_func							fz_objt_edit_parm_set;					/* @fsfunc */
	fz_objt_edit_parm_count_func						fz_objt_edit_parm_count;				/* @fsfunc */
	fz_objt_edit_parm_get_info_func						fz_objt_edit_parm_get_info;				/* @fsfunc */

	fz_objt_set_nsrf_func								fz_objt_set_nsrf;						/* @fsfunc */
	fz_objt_set_ncrv_func								fz_objt_set_ncrv;						/* @fsfunc */
	
	fz_objt_alys_closest_pnt_on_face_func				fz_objt_alys_closest_pnt_on_face;		/* @fsfunc */
	fz_objt_alys_closest_pnt_on_segt_func				fz_objt_alys_closest_pnt_on_segt;		/* @fsfunc */
	fz_objt_alys_is_pnt_inside_face_func				fz_objt_alys_is_pnt_inside_face;		/* @fsfunc */

	/* TAH 11/03/05 begin { */
	fz_objt_text_search_init_func						fz_objt_text_search_init;						/* @fsfunc */
	fz_objt_text_search_finit_func						fz_objt_text_search_finit;						/* @fsfunc */
	fz_objt_text_search_set_srch_str_func				fz_objt_text_search_set_srch_str;				/* @fsfunc */
	fz_objt_text_search_get_srch_str_func				fz_objt_text_search_get_srch_str;				/* @fsfunc */
	fz_objt_text_search_set_repl_str_func				fz_objt_text_search_set_repl_str;				/* @fsfunc */
	fz_objt_text_search_get_repl_str_func				fz_objt_text_search_get_repl_str;				/* @fsfunc */
	fz_objt_text_search_set_srch_unistr_func			fz_objt_text_search_set_srch_unistr;			/* @fsfunc */
	fz_objt_text_search_get_srch_unistr_func			fz_objt_text_search_get_srch_unistr;			/* @fsfunc */
	fz_objt_text_search_set_repl_unistr_func			fz_objt_text_search_set_repl_unistr;			/* @fsfunc */
	fz_objt_text_search_get_repl_unistr_func			fz_objt_text_search_get_repl_unistr;			/* @fsfunc */
	fz_objt_text_search_parm_set_func					fz_objt_text_search_parm_set;					/* @fsfunc */
	fz_objt_text_search_parm_get_func					fz_objt_text_search_parm_get;					/* @fsfunc */
	fz_objt_text_search_text_parm_set_func				fz_objt_text_search_text_parm_set;				/* @fsfunc */
	fz_objt_text_search_text_parm_get_func				fz_objt_text_search_text_parm_get;				/* @fsfunc */
	fz_objt_text_search_objt_func						fz_objt_text_search_objt;						/* @fsfunc */
	fz_objt_text_search_all_objts_func					fz_objt_text_search_all_objts;					/* @fsfunc */
	fz_objt_text_interactive_search_init_func			fz_objt_text_interactive_search_init;			/* @fsfunc */
	fz_objt_text_interactive_search_finit_func			fz_objt_text_interactive_search_finit;			/* @fsfunc */
	fz_objt_text_interactive_search_find_next_func		fz_objt_text_interactive_search_find_next;		/* @fsfunc */
	fz_objt_text_interactive_search_do_replace_func		fz_objt_text_interactive_search_do_replace;		/* @fsfunc */
	fz_objt_text_interactive_search_get_current_func	fz_objt_text_interactive_search_get_current;	/* @fsfunc */
	/* TAH 11/03/05 end } */
	/* PVH 03/10/06 begin( */
	fz_objt_tform_opts_init_func						fz_objt_tform_opts_init;						/* @fsfunc */
	fz_objt_tform_opts_get_func							fz_objt_tform_opts_get;							/* @fsfunc */
	fz_objt_tform_opts_set_func							fz_objt_tform_opts_set;							/* @fsfunc */
	fz_objt_tform_opts_finit_func						fz_objt_tform_opts_finit;						/* @fsfunc */
	fz_objt_edit_transform_points_options_func			fz_objt_edit_transform_points_options;			/* @fsfunc */
	fz_objt_edit_transform_segments_options_func		fz_objt_edit_transform_segments_options;		/* @fsfunc */
	fz_objt_edit_transform_curves_options_func			fz_objt_edit_transform_curves_options;			/* @fsfunc */
	fz_objt_edit_transform_faces_options_func			fz_objt_edit_transform_faces_options;			/* @fsfunc */
	fz_objt_edit_transform_multi_options_func			fz_objt_edit_transform_multi_options;			/* @fsfunc */
	/* PVH 03/10/06 )end */
	
	fz_objt_cnstr_morf_func								fz_objt_cnstr_morf;								/* @fsfunc */
	fz_objt_edit_morf_parm_get_func						fz_objt_edit_morf_parm_get;						/* @fsfunc */
	fz_objt_edit_morf_parm_set_func						fz_objt_edit_morf_parm_set;						/* @fsfunc */
	
	/* PVH 03/13/06 begin( */
	fz_objt_cnstr_sloft_opts_init_func					fz_objt_cnstr_sloft_opts_init;					/* @fsfunc */
	fz_objt_cnstr_sloft_opts_get_func					fz_objt_cnstr_sloft_opts_get;					/* @fsfunc */
	fz_objt_cnstr_sloft_opts_set_func					fz_objt_cnstr_sloft_opts_set;					/* @fsfunc */
	fz_objt_cnstr_sloft_opts_finit_func					fz_objt_cnstr_sloft_opts_finit;					/* @fsfunc */
	fz_objt_edit_sloft_parm_get_func					fz_objt_edit_sloft_parm_get;					/* @fsfunc */
	fz_objt_edit_sloft_parm_set_func					fz_objt_edit_sloft_parm_set;					/* @fsfunc */
	fz_objt_cnstr_sloft_basic_func						fz_objt_cnstr_sloft_basic;						/* @fsfunc */
	fz_objt_cnstr_sloft_ruled_func						fz_objt_cnstr_sloft_ruled;						/* @fsfunc */
	fz_objt_cnstr_sloft_normal_func						fz_objt_cnstr_sloft_normal;						/* @fsfunc */
	fz_objt_cnstr_sloft_path_func						fz_objt_cnstr_sloft_path;						/* @fsfunc */
	fz_objt_cnstr_sloft_branched_func					fz_objt_cnstr_sloft_branched;					/* @fsfunc */
	/* PVH 03/13/06 )end */
	
	fz_objt_edit_remove_coplanar_faces_func				fz_objt_edit_remove_coplanar_faces;				/* @fsfunc */
	fz_objt_edit_remove_colinear_segments_func			fz_objt_edit_remove_colinear_segments;			/* @fsfunc */
	
	fz_objt_cnstr_unfold_smooth_func					fz_objt_cnstr_unfold_smooth;					/* @fsfunc */
	
	/************************************************************************************
	 *	6.1.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_list_from_proj_func						fz_objt_list_from_proj;						/* @fsfunc */
	
	/************************************************************************************
	 *	6.5.6.0 functions.																*
	 ************************************************************************************/
	fz_objt_edit_section3d_optimized_func			fz_objt_edit_section3d_optimized;					/* @fsfunc */

	/************************************************************************************
	 *	7.0.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_alys_get_tangent_on_segt_func			fz_objt_alys_get_tangent_on_segt;					/* @fsfunc */
	fz_objt_alys_ratio_pnt_on_segt_func				fz_objt_alys_ratio_pnt_on_segt;						/* @fsfunc */
	fz_objt_alys_get_segt_perp_pts_func				fz_objt_alys_get_segt_perp_pts;						/* @fsfunc */	/* PVH 07/03/08 */
	fz_objt_alys_get_segt_tangent_pts_func			fz_objt_alys_get_segt_tangent_pts;					/* @fsfunc */	/* PVH 07/03/08 */
	fz_objt_cnstr_refo_func							fz_objt_cnstr_refo;									/* @fsfunc */
	fz_objt_edit_refo_add_objt_func					fz_objt_edit_refo_add_objt;							/* @fsfunc */
	fz_objt_edit_refo_set_file_info_func			fz_objt_edit_refo_set_file_info;					/* @fsfunc */
	fz_objt_cnstr_dimn_linr_func					fz_objt_cnstr_dimn_linr;							/* @fsfunc */
	fz_dimn_style_create_func						fz_dimn_style_create;								/* @fsfunc */

	fz_dimn_style_parm_get_func						fz_dimn_style_parm_get;								/* @fsfunc */
	fz_objt_edit_diml_parm_get_func					fz_objt_edit_diml_parm_get;							/* @fsfunc */
	fz_objt_edit_dima_parm_get_func					fz_objt_edit_dima_parm_get;							/* @fsfunc */
	fz_objt_edit_dimr_parm_get_func					fz_objt_edit_dimr_parm_get;							/* @fsfunc */
	fz_objt_edit_dimd_parm_get_func					fz_objt_edit_dimd_parm_get;							/* @fsfunc */
	fz_objt_edit_dimt_parm_get_func					fz_objt_edit_dimt_parm_get;							/* @fsfunc */
	
	fz_model_result_add_objt_func					fz_model_result_add_objt;							/* @fsfunc */
	fz_model_result_get_count_func					fz_model_result_get_count;							/* @fsfunc */
	fz_model_result_get_objt_func					fz_model_result_get_objt;							/* @fsfunc */

	fz_objt_cmpt_place_func							fz_objt_cmpt_place;									/* @fsfunc */
	fz_objt_cmpt_delete_func						fz_objt_cmpt_delete;								/* @fsfunc */
	fz_objt_cmpt_get_name_func						fz_objt_cmpt_get_name;								/* @fsfunc */
	fz_grup_edit_cmpt_parm_get_func					fz_grup_edit_cmpt_parm_get;							/* @fsfunc */
	fz_grup_edit_cmpt_parm_set_func					fz_grup_edit_cmpt_parm_set;							/* @fsfunc */

	fz_objt_instance_get_info_func					fz_objt_instance_get_info;							/* @fsfunc */
	fz_objt_edit_diml_parm_set_func					fz_objt_edit_diml_parm_set;							/* @fsfunc */
 	fz_dimn_style_create_world_func					fz_dimn_style_create_world;							/* @fsfunc */
 	fz_dimn_style_create_screen_func				fz_dimn_style_create_screen;						/* @fsfunc */
	fz_objt_cnstr_dimn_linr_type_func				fz_objt_cnstr_dimn_linr_type;							/* @fsfunc */
	fz_objt_cnstr_dimn_rad_func						fz_objt_cnstr_dimn_rad;								/* @fsfunc */
	fz_objt_cnstr_dimn_ang_func						fz_objt_cnstr_dimn_ang;								/* @fsfunc */
	fz_objt_cnstr_dimn_leader_func					fz_objt_cnstr_dimn_leader;							/* @fsfunc */
 	fz_objt_edit_hatch_parm_get_func				fz_objt_edit_hatch_parm_get;						/* @fsfunc */
	fz_objt_get_hatch_lines_func					fz_objt_get_hatch_lines;							/* @fsfunc */

	fz_objt_get_rndr_mesh_sizes_func				fz_objt_get_rndr_mesh_sizes;						/* @fsfunc */
	fz_objt_get_rndr_mesh_func						fz_objt_get_rndr_mesh;								/* @fsfunc */
	fz_objt_cnstr_dimn_dia_func						fz_objt_cnstr_dimn_dia;								/* @fsfunc */
	
	/************************************************************************************
	 *	8.0.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_edit_fillet_bevel_func					fz_objt_edit_fillet_bevel;							/* @fsfunc */

	/************************************************************************************
	 *	8.0.2.0 functions.																*
	 ************************************************************************************/
	fz_objt_cnstr_rect_func							fz_objt_cnstr_rect;									/* @fsfunc */
	fz_objt_edit_rect_parm_get_func					fz_objt_edit_rect_parm_get;							/* @fsfunc */
	fz_objt_edit_rect_parm_set_func					fz_objt_edit_rect_parm_set;							/* @fsfunc */
	fz_objt_grup_copy_func							fz_objt_grup_copy;									/* @fsfunc */
	fz_objt_grup_tform_func							fz_objt_grup_tform;									/* @fsfunc */
	fz_model_find_objt_by_view_ray_func				fz_model_find_objt_by_view_ray;						/* @fsfunc */
	fz_objt_grup_alys_get_origin_func				fz_objt_grup_alys_get_origin;						/* @fsfunc */
	fz_objt_grup_alys_get_axes_func					fz_objt_grup_alys_get_axes;							/* @fsfunc */
	
	/************************************************************************************
	 *	8.1.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_grup_delete_func						fz_objt_grup_delete;								/* @fsfunc */

	/************************************************************************************
	 *	8.5.0.1 functions.																*
	 ************************************************************************************/
	fz_volume_scatter_func							fz_volume_scatter;									/* @fsfunc */
	fz_volm_scatter_opts_init_func					fz_volm_scatter_opts_init;							/* @fsfunc */
	fz_volm_scatter_opts_get_func					fz_volm_scatter_opts_get;							/* @fsfunc */
	fz_volm_scatter_opts_set_func					fz_volm_scatter_opts_set;							/* @fsfunc */
	fz_volm_scatter_opts_finit_func					fz_volm_scatter_opts_finit;							/* @fsfunc */
	fz_surface_scatter_func							fz_surface_scatter;									/* @fsfunc */
	fz_surf_scatter_opts_init_func					fz_surf_scatter_opts_init;							/* @fsfunc */
	fz_surf_scatter_opts_get_func					fz_surf_scatter_opts_get;							/* @fsfunc */
	fz_surf_scatter_opts_set_func					fz_surf_scatter_opts_set;							/* @fsfunc */
	fz_surf_scatter_opts_finit_func					fz_surf_scatter_opts_finit;							/* @fsfunc */
	fz_voronoi_diagram_func							fz_voronoi_diagram;									/* @fsfunc */
	fz_delaunay_triangulation_func					fz_delaunay_triangulation;							/* @fsfunc */
	fz_planar_convex_hull_func						fz_planar_convex_hull;								/* @fsfunc */
	fz_shrink_wrap_points_func						fz_shrink_wrap_points;								/* @fsfunc */
	fz_map_curves_to_pspace_func					fz_map_curves_to_pspace;							/* @fsfunc */

	/************************************************************************************
	 *	8.5.3.0 functions.																*
	 ************************************************************************************/
	fz_objt_cnstr_nrbz_trimmed_curves_func			fz_objt_cnstr_nrbz_trimmed_curves;					/* @fsfunc */

	/************************************************************************************
	 *	8.5.4.0 functions.																*
	 ************************************************************************************/
	fz_objt_edit_subd_parm_get_mesh_func			fz_objt_edit_subd_parm_get_mesh;					/* @fsfunc */
	fz_objt_get_rndr_mesh2_func						fz_objt_get_rndr_mesh2;								/* @fsfunc */
	
	/************************************************************************************
	 *	8.5.5.0 functions.																*
	 ************************************************************************************/
	fz_dimn_style_create_world2_func				fz_dimn_style_create_world2;						/* @fsfunc */
	fz_dimn_style_create_screen2_func				fz_dimn_style_create_screen2;						/* @fsfunc */
	fz_objt_cnstr_dimn_note_func					fz_objt_cnstr_dimn_note;							/* @fsfunc */
	
	/************************************************************************************
	 *	8.6.0.0 functions.																*
	 ************************************************************************************/
	fz_objt_meta_create_group_func					fz_objt_meta_create_group;							/* @fsfunc */
	fz_objt_meta_evaluate_group_func				fz_objt_meta_evaluate_group;						/* @fsfunc */
	fz_objt_make_metaform_func						fz_objt_make_metaform;						/* @fsfunc */
	
	/************************************************************************************
	 *	8.6.0.1 functions.																*
	 ************************************************************************************/
	fz_objt_cnstr_nrbz_curve_pt_spline_func			fz_objt_cnstr_nrbz_curve_pt_spline;						/* @fsfunc */
	
	/************************************************************************************
	 *	8.6.1.0 functions.																*
	 ************************************************************************************/
	fz_objt_get_grup_ptr_func						fz_objt_get_grup_ptr;						/* @fsfunc */

	/************************************************************************************
	 *	9,0,6,0 functions.																*
	 ************************************************************************************/
	fz_objt_instance_get_info2_func					fz_objt_instance_get_info2;							/* @fsfunc */


}  fz_model_fset;


/* name fixes for 5.5.0.0, keep old names for compatibility - RWB 07/07/05 */
#define fz_objt_cnstr_filt	fz_objt_cnstr_fillet

#ifdef __cplusplus
}
#endif

#endif /*__FORMZ_MODEL_API_H */

