#ifndef _FZ_CEDT_API
#define _FZ_CEDT_API

#ifdef __cplusplus
extern "C" {
#endif


/* @doc EXTERNAL CEDT */
/********************************************************************************************************

	@module 

	@desc	formZ Control Edit Manager (CEDT). This function set contains the functions for creating
			and managing on screen graphic control elements in formZ.

	@toc	cedt

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

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

	@type	

	@desc	A pointer to a single cedt (Control Editor) item.
			
	@avail	8.0.0.0
	
	@see	<auto>

	@toc	cedt

*********************************************************************************************************/
typedef struct cedt_item_st *fz_cedt_item_ptr;

#include "fz_api.h"

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

	@enum

	@desc	cedt item selector for fz_cedt_item_func.

	@avail	8.0.0.0

	@see	<auto>

	@toc	cedt

*********************************************************************************************************/
typedef enum fz_cedt_item_action_enum
{
	FZ_CEDT_ITEM_ACTION_PRE_TRACK = 0,	/* CALLED BEFORE INIT TRACK. ALLOW REDEFINITION OF PLANES, WHICH REQUIRES	*/
										/* RECALCULATION OF SCREEN POINT MAPPED TO CURRENT PLANE 					*/
	FZ_CEDT_ITEM_ACTION_POST_TRACK,		/* CALLED AFTER FINIT TRACK. BACK END OF PRE_TRACK */
	
	FZ_CEDT_ITEM_ACTION_INIT_TRACK,		/* TRACKING HAS STARTED */
	FZ_CEDT_ITEM_ACTION_CANCEL_TRACK,	/* TRACKING WAS CANCELLED (ALWAYS CALLED BEFORE CEDT_ITEM_ACTION_FINIT_TRACK) */
	FZ_CEDT_ITEM_ACTION_FINIT_TRACK,	/* TRACKING HAS ENDED */
	
	FZ_CEDT_ITEM_ACTION_NEW_VALUE,
	FZ_CEDT_ITEM_ACTION_DELETE,
	FZ_CEDT_ITEM_ACTION_CLICK_PICK,
	
	FZ_CEDT_ITEM_NUM_ACTIONS
} fz_cedt_item_action_enum;

#define	FZ_CEDT_ITEM_ID_NONE	-1

/************************************************************************
	Bit flags for cedt_mngr_item_set_flags
*************************************************************************/
typedef enum fz_cedt_item_flag_bits_enum
{
	FZ_CEDT_ITEM_FLAG_FORCE_DRAW = 0,			/* ALWAYS DRAW / PICK ITEM, REGARDLESS OF WHAT TOOLS SAY */
	FZ_CEDT_ITEM_FLAG_ALLOW_OWNER_SNAP,			/* IF SET, SANPPING TO THE OWNER OF THE CEDIT ITEM (i.e. OBJECT) IS ALLOWED */
												/* OTHERWISE, WE NEVER SNAP TO OBJECTS THAT SHOW A CEDIT ITEM 				*/
	FZ_CEDT_ITEM_FLAG_DISPLAY_ONLY,				/* IF SET, THE ITEM IS SET UP FOR DISPLAY PURPOSES ONLY. IT CAN'T BE SELECTED */
												/* AND WILL BE DRAWN IN ITS TRACKING STATE (i.e. FULL GRAPHICS)				  */
	
	FZ_CEDT_ITEM_FLAG_NO_REMOVE_UNDO_AFTER_CANCEL,	/* IF SET, cedt_mngr_drag_finit_constraint WILL NOT REMOVE BACKUP UNDO'S AFTER */
												/* THE CEDT TRACKING WAS CANCELLED (i.e. CALLING CODE HANDLES UNDO'S : SEE SECTION TOOL) */
	FZ_CEDT_ITEM_FLAG_DISABLE,					/* IF SET THE ITEM WILL NOT DRAW OR PICK OIR OTHERWISE BE CONSIDERED. THIS ALLOWS THE CALLING CODE */
												/* TO TEMPORARLIY HIDE AN ITEM, WITHOUT DELETING IT */
	FZ_CEDT_ITEM_FLAG_NO_PERP_SWITCH,			/* IF SET, DON"T ALLOW SWITCHING OF PERP MODE. ALWAYS STAY IN PARALLEL TO PLANE MODE. (FREE MOVEABLES ONLY)	*/
												/* FOR EXAMPLE, USED BY NESTED CONTROL SHAPES THAT MUST STAY PLANAR */
	FZ_CEDT_ITEM_FLAG_DEPTH_DRAW,				/* IF SET, DRAW CEDT DEPTH SPRTED (IE OBSCURED BY SCENE OBJECTS)	*/
	FZ_CEDT_ITEM_FLAG_PBLC_MAX
} fz_cedt_item_flag_bits_enum;

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

	@enum

	@desc	enum FOR fz_cedt_item_get_data.

	@avail	8.0.0.0

	@see	<auto>

	@toc	cedt

*********************************************************************************************************/
typedef enum fz_cedt_item_data_enum
{
	FZ_CEDT_ITEM_DATA_ID = 0,			/* CALLER SUPPLIED ID 			(fzrt_int) 			*/
	FZ_CEDT_ITEM_DATA_PARENT,			/* PARENT ITEM 					(cedt_item_ptr)	*/
	FZ_CEDT_ITEM_DATA_OWNER_TYPE,		/* OWNER TYPE 					(fzrt_UUID_td)	*/
	FZ_CEDT_ITEM_DATA_OWNER_TAG,		/* OWNER TAG 					(fz_tag_td)		*/
	FZ_CEDT_ITEM_DATA_OWNER_PART_TYPE,	/* OWNER PART TYPE 				(fzrt_UUID_td)	*/
	FZ_CEDT_ITEM_DATA_OWNER_PART_ID,	/* OWNER PART ID				(fzrt_int)			*/
	FZ_CEDT_ITEM_DATA_DATA_PTR,		/* CALLER SUPPLIED DATA POINTER	(void*)			*/
	FZ_CEDT_ITEM_DATA_TRACKED_PART_ID,	/* ID FOR ACTIVE TRACKED PART					*/
	FZ_CEDT_ITEM_DATA_LAST_TRACK,		/* TRUE, IF THE ITEM CALLBACK IS INVOKED WITH CEDT_ITEM_ACTION_NEW_VALUE ACTION FOR THE LAST TIME (i.e AT SECOND CLICK) (fzrt_boolean) */
	FZ_CEDT_ITEM_DATA_TRACK_PNT		/* THE SCREEN POINT IN EFFECT WHEN CEDT_ITEM_ACTION_NEW_VALUE IS CALLED. ONLY VALID DURING TRACKING (fzrt_point) */
} fz_cedt_item_data_enum;

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

	@enum

	@desc	Command click types. Indicates how many times the mouse is to be or was clicked.

	@avail	8.0.0.0

	@see	<auto>

	@toc	cedt

*********************************************************************************************************/
typedef enum fz_cedt_item_rangt_bits_enum
{
	FZ_CEDT_ITEM_RANGE_MIN = 0,
	FZ_CEDT_ITEM_RANGE_MAX,
	FZ_CEDT_ITEM_RANGE_MIN_INCL,
	FZ_CEDT_ITEM_RANGE_MAX_INCL
} fz_cedt_item_rangt_bits_enum;

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

	@func		

	@desc		This function is called to handle events that happen to an item.<nl>
				It is passed in the item_func parameter of the any of the functions that 
				start with fz_fuim_new_.<nl>
				Not all action types have to be handled in the function.

	@return		TRUE if the action was handled successfully, FALSE if it was not successful.

	@avail		5.0.0.0

	@see		<auto>

	@exfile		

	@toc		fuim_tmpl

*********************************************************************************************************/
typedef fzrt_error_td (FZRT_SPEC *fz_cedt_item_func)(
	fzrt_int					windex,				/* @parm	<in> | fuim manager								*/
	fz_cedt_item_ptr			item_ptr,			/* @parm	<in> | type of action that occurred				*/
	fz_cedt_item_action_enum	action				/* @parm	<in> | index of the item that an action occurred */
	);

	
/************************************************************************
	Group constrain callback. Called right before a tracked or transformed
	3d point is passed to the children of the group. Gives the caller the 
	opportunity to constrain the point, for example, to a certain
	direction or on a certain plane. 
	Also passed in is the screen point which corresponds to the 3d point
	to be constraint. The caller may recalculate a new 3d point from the
	screen point, for example, mapping it onto a different plane.
	Similar to the generic cedt_item_func, information about the control 
	edit item can be aquired via cedt_mngr_item_get_data.
	This function receives the group item and also the child item and part id, whose 3d point
	is ultimately tracked
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_cedt_group_constrain_func)(

	fzrt_int				windex,
	fz_cedt_item_ptr		group_item_ptr,		/* THE GROUP CONTROL EDIT ITEM ITSELF								*/
	fz_cedt_item_ptr		child_item_ptr,		/* THE CHILD CONTROL EDIT ITEM WHOSE 3D POINT IS BEING TRACKED		*/
	fzrt_int				part_id,			/* PART ID OF THE CHILD CONTROL ITEM								*/
	fzrt_point				*where,				/* SCREEN POINT, CORRESPONDING TO THE 3D POINT TO BE CONSTRAINT		*/
	fz_xyz_td				*cnstr_pt			/* THE POINT, WHICH NEEDS TO BE CONSTRAINT BEFORE BEING ASSIGNED	*/
);

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

	@fsfunc_t	

	@desc		Creates a new vector cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_new_group_func) (
	fzrt_int						windex,
	fz_cedt_item_ptr				parent_item,				/* PARENT, OR NULL, IF ROOT */
	fzrt_int						item_id_in,					/* CALLER SUPPLIED ID, OR -1 TO GET ONE */
	
	/* OWNER INFO */
	fzrt_UUID_td					owner_type,
	fz_tag_td						*owner_tag,
	fzrt_UUID_td					owner_part_type,
	fzrt_int						owner_part_id,
	
	fzrt_int						flags,						/* @parm	<in> | item flags (fz_cedt_item_flag_bits_enum)							*/
		
	fz_cedt_item_func				item_func,					/* ITEM CALLBACK */
	void							*data_ptr,					/* GENERIC DATA */
	fz_cedt_group_constrain_func	constrain_func,				/* CONSTRAIN CALLBACK	*/
	
	fz_cedt_item_ptr				*item_ptr_out				/* @parm	<out> | pointer to new cedt item							*/
	);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		Creates a new vector cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_new_vector_func) (
	fzrt_int				windex,
	fz_cedt_item_ptr		parent_item,				/* PARENT, OR NULL, IF ROOT */
	fzrt_int				item_id_in,					/* CALLER SUPPLIED ID, OR -1 TO GET ONE */
	
	/* OWNER INFO */
	fzrt_UUID_td			owner_type,					
	fz_tag_td				*owner_tag,
	fzrt_UUID_td			owner_part_type,
	fzrt_int				owner_part_id,
	
	fzrt_int				flags,						/* @parm	<in> | item flags (fz_cedt_item_flag_bits_enum)							*/
															   
	/* GEOMETRY INFO */
	fz_xyz_td				*origin,					/* POINT FROM WHICH DISTANCE IS MEASURED */
	fz_xyz_td				*direction,					/* THE VECTOR ALONG WHICH THE DISTANCE IS MEASURED */
	fz_xyz_td				*yaxis,						/* OPTIONAL SECONDARY VECTOR TO DEFINE PLANE IN WHICH MARKERS ARE DRAWN */
	double					min,						/* ALLOWABLE MIN VALUE 						*/
	double					max,						/* ALLOWABLE MAX VALUE 						*/
	fzrt_int				range_flags,				/* BIT ENCODED FLAGS OF HOW TO USE MIN/MAX VALUES		*/
	double					*distance,					/* THE DISTANCE */
	
	fzrt_boolean			do_live,					/* TRUE TO USE THE VAR POINTER(S) PASSED IN (LIVE) 	*/
														/* FALSE TO LET CEDT PROVIDE VAR STOREAGE (LOCAL)	*/
	
	fz_cedt_item_func		item_func,					/* ITEM CALLBACK */
	void					*data_ptr,					/* GENERIC DATA */
	
	fz_string_td			item_title,					/* TITLE STRING. USED BY HINTS. IF NULL IS PASSED A GENERIC TITLE IS USED. */
	fz_cedt_item_ptr		*item_ptr_out				/* @parm	<out> | pointer to new cedt item							*/
	);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		Updates a vector cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_update_vector_func) (
	fzrt_int				windex,
	fz_cedt_item_ptr		cedt_item,
	fz_xyz_td				*origin,	
	fz_xyz_td				*direction,	
	fz_xyz_td				*yaxis,		
	double					*min,						/* ALLOWABLE MIN VALUE 						*/
	double					*max,						/* ALLOWABLE MAX VALUE 						*/
	fzrt_int				*range_flags,				/* BIT ENCODED FLAGS OF HOW TO USE MIN/MAX VALUES		*/
	double					*distance	
	);

/************************************************************************
	Point constrain callback. Called right before a tracked or transformed
	3d point is assigned to the point control item. Gives the caller the 
	opportunity to constrain the point, for example, to a certain
	direction or on a certain plane. 
	Also passed in is the screen point which corresponds to the 3d point
	to be constraint. The caller may recalculate a new 3d point from the
	screen point, for example, mapping it onto a different plane.
	Similar to the generic cedt_item_func, information about the control 
	edit item can be aquired via cedt_mngr_item_get_data.
*************************************************************************/
typedef fzrt_error_td  (FZRT_SPEC *fz_cedt_point_constrain_func)(

	fzrt_int					windex,
	fz_cedt_item_ptr			item_ptr,			/* THE CONTROL EDIT ITEM ITSELF										*/
	fzrt_point					*where,				/* SCREEN POINT, CORRESPONDING TO THE 3D POINT TO BE CONSTRAINT		*/
	fz_xyz_td					*cnstr_pt			/* THE POINT, WHICH NEEDS TO BE CONSTRAINT BEFORE BEING ASSIGNED	*/
);

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

	@fsfunc_t	

	@desc		Creates a new vector cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_new_point_func) (
	fzrt_int						windex,
	fz_cedt_item_ptr				parent_item,				/* PARENT, OR NULL, IF ROOT */
	fzrt_int						item_id_in,					/* CALLER SUPPLIED ID, OR -1 TO GET ONE */
	
	/* OWNER INFO */
	fzrt_UUID_td					owner_type,
	fz_tag_td						*owner_tag,
	fzrt_UUID_td					owner_part_type,
	fzrt_int						owner_part_id,
		   
	fzrt_int						flags,						/* @parm	<in> | item flags (fz_cedt_item_flag_bits_enum)							*/

																/* GEOMETRY INFO */
	fz_xyz_td						*position,
	   
	fzrt_boolean					do_live,					/* TRUE TO USE THE VAR POINTER(S) PASSED IN (LIVE) 	*/
																/* FALSE TO LET CEDT PROVIDE VAR STOREAGE (LOCAL)	*/
	   
	fz_cedt_item_func				item_func,					/* ITEM CALLBACK */
	void							*data_ptr,					/* GENERIC DATA */
	fz_cedt_point_constrain_func	constrain_func,				/* CONSTRAIN CALLBACK	*/
	
	fz_string_td					item_title,					/* TITLE STRING. USED BY HINTS. IF NULL IS PASSED A GENERIC TITLE IS USED. */
	fz_cedt_item_ptr				*item_ptr_out				/* @parm	<out> | pointer to new cedt item							*/
	);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		Updates a vector cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_update_point_func) (
	fzrt_int				windex,
	fz_cedt_item_ptr		cedt_item,
	fz_xyz_td				*position
	);

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

	@fsfunc_t	

	@desc		Deletes a cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_delete_func) (
	fzrt_int				windex,
	fz_cedt_item_ptr		*cedt_item			/* PARENT, OR NULL, IF ROOT */
	);

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

	@fsfunc_t	

	@desc		Deletes a cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_get_data_func) (
	fz_cedt_item_ptr			cedt_item,
	fz_cedt_item_data_enum		which,
	fz_type_td					*data
	);

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

	@fsfunc_t	

	@desc		Start tracking on a cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_start_track_func) (
	fzrt_int				windex,
	 fz_cedt_item_ptr		cedt_item,
	 fzrt_int				part_id,
	 fz_xyz_td				*world_click,
	 fzrt_point				*screen_click
	);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		tracking for a cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_track_func) (
	  fzrt_int					windex,
	  fz_cedt_item_ptr			cedt_item,
	  fzrt_int					part_id,
	  fzrt_point 				*where,
	  fz_xyz_td					*where_3d,
	  fz_map_plane_td			*map_plane
	);

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

	@fsfunc_t	

	@desc		End tracking on a cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_end_track_func) (
	   fzrt_int					windex,
	   fz_cedt_item_ptr			cedt_item,
	   fzrt_int					part_id,
	   fzrt_point 				*where,
	   fz_xyz_td	 			*where_3d, 	
	   fz_map_plane_td			*map_plane
	);

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

	@fsfunc_t	

	@desc		Set fuim update info for a cedt item part part_id must be >= 0 and < number of parts for this item <nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_xlink_fuim_item_func)(
		fzrt_int			windex,
		fz_cedt_item_ptr	cedt_item,
		fzrt_int			part_id,
		fzrt_boolean		do_fuim_update,
		fzrt_int			n_fuim_items,
		fzrt_int			*fuim_items
	);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		todo: <nl>

	@return		Error code or FZRT_NOERR for sucess

	@avail		8.5.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_get_original_value_func)(
	   fzrt_int					windex,
	   fz_cedt_item_ptr			cedt_item,
	   fzrt_int					item_part_id,
	   fz_type_td				*data
);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		todo: <nl>

	@return		Error code or FZRT_NOERR for sucess

	@avail		8.5.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_get_current_value_func)(
	  fzrt_int					windex,
	  fz_cedt_item_ptr			cedt_item,
	  fzrt_int					item_part_id,
	  fz_type_td				*data
);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		todo: <nl>

	@return		Error code or FZRT_NOERR for sucess

	@avail		8.5.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_get_delta_value_func)(
	  fzrt_int					windex,
	  fz_cedt_item_ptr			cedt_item,
	  fzrt_int					item_part_id,
	  fz_type_td				*data
);
	
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		todo: <nl>

	@return		Error code or FZRT_NOERR for sucess

	@avail		8.5.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_set_current_value_func)(
	  fzrt_int					windex,
	  fz_cedt_item_ptr			cedt_item,
	  fzrt_int					item_part_id,
	  fz_type_td				*data
);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		todo: <nl>

	@return		Error code or FZRT_NOERR for sucess

	@avail		8.5.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_item_set_delta_value_func)(
	  fzrt_int					windex,
	  fz_cedt_item_ptr			cedt_item,
	  fzrt_int					item_part_id,
	  fz_type_td				*data
);

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

	@enum

	@desc	enum FOR mrs flags.

	@avail	8.0.0.0

	@see	<auto>

	@toc	cedt

*********************************************************************************************************/
typedef enum fz_cedt_mrs_flags_enum
{
	FZ_CEDT_MRS_FLAGS_MOVE_OFF = 0,
	FZ_CEDT_MRS_FLAGS_ROTATE_OFF,
	FZ_CEDT_MRS_FLAGS_SCALE_UNI_ON,
	FZ_CEDT_MRS_FLAGS_SCALE_INDEP_ON,
	FZ_CEDT_MRS_FLAGS_XY_ONLY_ON,
	
} fz_cedt_mrs_flags_enum;
	
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		Creates a new mrs cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_new_mrs_func) (
	fzrt_int				windex,
	fz_cedt_item_ptr		parent_item_ptr,			/* PARENT, OR NULL, IF ROOT */
	fzrt_int				item_id_in,					/* CALLER SUPPLIED ID, OR -1 TO GET ONE */
	
	/* OWNER INFO */
	fzrt_UUID_td			owner_type,
	fz_tag_td				*owner_tag,
	fzrt_UUID_td			owner_part_type,
	fzrt_int				owner_part_id,
	
	fzrt_int				flags,						/* @parm	<in> | item flags (fz_cedt_item_flag_bits_enum)							*/
	
	/* STATIC INFO */
	fzrt_int				mrs_flags,
	fzrt_int				axis_len,
	
	/* LIVE GEOMETRY INFO */
	fz_xyz_td				*center,					/* CENTER */
	fz_xyz_td				*angles,					/* X, Y AND Z ROTATION ANGLE (Z, Y, X ORDER) */
	fz_xyz_td				*scale,						/* X, Y AND Z SCALE */
	
	fzrt_boolean			do_live,					/* TRUE TO USE THE VAR POINTER(S) PASSED IN (LIVE) 	*/
	/* FALSE TO LET CEDT PROVIDE VAR STOREAGE (LOCAL)	*/
	
	fz_cedt_item_func		item_func,					/* ITEM CALLBACK */
	void					*data_ptr,					/* GENERIC DATA */
	
	fz_string_td			*item_title,					/* TITLE STRING. USED BY HINTS. IF NULL IS PASSED A GENERIC TITLE IS USED. */
	fz_cedt_item_ptr		*item_ptr_out
);
	
/********************************************************************************************************

	@fsfunc_t	

	@desc		Updates a mrs cedt item.<nl>

	@return		Icon id

	@avail		8.0.0.0

	@see		

	@exfile		

	@toc		cedt

*********************************************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_cedt_update_mrs_func) (
   fzrt_int					windex,
   fz_cedt_item_ptr			cedt_item,
   
   /* STATIC INFO */
   fzrt_int					*axis_len,
   
   /* LIVE GEOMETRY INFO */
   fz_xyz_td				*center,					/* CENTER */
   fz_xyz_td				*angles,					/* X, Y AND Z ROTATION ANGLE (Z, Y, X ORDER) */
   fz_xyz_td				*scale						/* X, Y AND Z SCALE */
);

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

	@fset	fz_cedt_fset
	
	@desc	formZ cedt Function Set

	@avail	8.0.0.0

	@toc	cedt

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

	@fsdef	formZ cedt function set UUID.

*********************************************************************************************************/
/* UUID : {12c9836c-3d32-4e61-b376-8fcc7b13fcd5} */
#define FZ_CEDT_FSET_TYPE		"\x12\xc9\x83\x6c\x3d\x32\x4e\x61\xb3\x76\x8f\xcc\x7b\x13\xfc\xd5"	/* Reference : 4488 */

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

	@fsdef	formZ cedt function set name.

*********************************************************************************************************/
#define FZ_CEDT_FSET_NAME		"formZ Control Edit Manager (CEDT)"

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

	@fsdef	formZ cedt function set version.

*********************************************************************************************************/
#define FZ_CEDT_FSET_VERSION	FZPL_VERS_MAKE(8,7,0,0)

typedef struct fz_cedt_fset
{
	fzpl_fset_prvt_data_td					prvt_data;

	/*** GROUP FUNCTIONS ***/
	fz_cedt_new_group_func					fz_cedt_new_group;				/* @fsfunc */
	
	/*** VECTOR (DISTANCE) FUNCTIONS ***/
	fz_cedt_new_vector_func					fz_cedt_new_vector;				/* @fsfunc */
	fz_cedt_update_vector_func				fz_cedt_update_vector;			/* @fsfunc */
	
	/*** POINT FUNCTIONS ***/
	fz_cedt_new_point_func					fz_cedt_new_point;				/* @fsfunc */
	fz_cedt_update_point_func				fz_cedt_update_point;			/* @fsfunc */
	
	/*** MANAGEMENT FUNCTIONS ***/
	fz_cedt_item_delete_func				fz_cedt_item_delete;			/* @fsfunc */
	fz_cedt_item_start_track_func			fz_cedt_item_start_track;		/* @fsfunc */
	fz_cedt_item_track_func					fz_cedt_item_track;				/* @fsfunc */
	fz_cedt_item_end_track_func				fz_cedt_item_end_track;			/* @fsfunc */
	fz_cedt_item_get_data_func				fz_cedt_item_get_data;			/* @fsfunc */
	fz_cedt_item_xlink_fuim_item_func		fz_cedt_item_xlink_fuim_item;	/* @fsfunc */
	
	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 8.0.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_cedt_item_get_original_value_func	fz_cedt_item_get_original_value;	/* @fsfunc */
	fz_cedt_item_get_current_value_func		fz_cedt_item_get_current_value;		/* @fsfunc */
	fz_cedt_item_get_delta_value_func		fz_cedt_item_get_delta_value;		/* @fsfunc */
	fz_cedt_item_set_current_value_func		fz_cedt_item_set_current_value;		/* @fsfunc */
	fz_cedt_item_set_delta_value_func		fz_cedt_item_set_delta_value;		/* @fsfunc */

	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 8.5.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	
	fz_cedt_new_mrs_func					fz_cedt_new_mrs;				/* @fsfunc */
	fz_cedt_update_mrs_func					fz_cedt_update_mrs;				/* @fsfunc */
	
}  fz_cedt_fset;
																									
																									
#ifdef __cplusplus
}
#endif

#endif /* _FZ_CEDT_API */