#ifndef _FORMZ_MODEL_ATTR_API_H
#define _FORMZ_MODEL_ATTR_API_H

#ifdef __cplusplus
extern "C" {
#endif

#include "fz_objt_refn_api.h"
#include "fz_objt_tctl_api.h"
#include "fz_objt_decal_api.h"
#include "fz_iost_api.h"
#include "fz_fuim_api.h"

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

	@type	Data structure for an attribute prototype.

	@desc	Data structure for an attribute prototype. This pointer is used in a number of API functions
			to identify a generic attribute of a given type. A generic attribute, is for example, an 
			attribute which a user has created in the Attributes manager dialog, or an attribute
			installed by a plugin.
			
	@avail	5.0.0.0
	
	@see	

	@toc	modl_attr

*********************************************************************************************************/
typedef struct 	attr_sys_td	 	*fz_attr_proto_ptr;

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

	@module	Attributes

	@desc	formZ object attributes. There are three levels of attributes. Simple attributes,
			such as surface style tag, visibility, lock, snap, etc. are set and retrieved directly
			from an object or face. They are simple types : boolean, fzrt_int or enum. <nl>
			A second level of attributes are complex attributes such as display resolution, smooth shading, radiosity meshing.
			To retrieve such an attribute, storage must first be allocated by the respective fz_objt_attr_xxxx_init function.
			Then the content of the attribute is retrieved from the object and loaded into the
			allocated storage via the fz_objt_attr_obj_get_xxxx function. Individual fields of
			the attributes can be set and retrieved via fz_objt_attr_xxxx_set and fz_objt_attr_xxxx_get.
			The attribute can be assigned back to an object with the fz_objt_attr_obj_set_xxxx function.
			Finally, the allocated storage must be discarded with fz_objt_attr_xxxx_finit. <nl>
			The third level of attributes are those that are firmly bound to the geometry of an object,
			such as the texture map control and decal attributes. Functions are provided to create
			the attribute, remove it and manipulate individual parameters of the attribute. In each
			case the object is passed to the function, as it is needed to deal with the attribute.<nl>
			For convenience, functions are provided for simple and complex attributes (level 1 and 2),
			which check whether the attribute of a certain type of two objects or faces are the same.

	@toc	modl_attr

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

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

	@enum	visibility type.

	@desc	Visibility type. This enum is used to specify the
			visibility attribute in fz_objt_attr_set_objt_visib and
			fz_objt_attr_get_objt_visib

	@avail	5.0.0.0

	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum	fz_attr_visib_enum
{
	FZ_ATTR_VISIB_INVISIB = 0,	/* @emem entity is invisible */
	FZ_ATTR_VISIB_VISIB,			/* @emem entity is visible */
	FZ_ATTR_VISIB_GHOSTED		/* @emem entity is ghosted */

} fz_attr_visib_enum;

/************************************************************************
	
	@fsfunc_t	Set the surface style tag of an object
	
	@desc		Sets the surface style tag of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_get_face_rmtl,
				fz_objt_attr_set_face_rmtl,fz_objt_attr_clear_face_rmtl,
				fz_objt_attr_clear_all_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rmtl_func) (	
	fzrt_int 			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj, 		/* @parm <in> | object						*/
	fz_tag_td 		*rmtl_tag	/* @parm <in> | surface style tag			*/
	);

/************************************************************************
	
	@fsfunc_t	Get the surface style tag of an object.
	
	@desc		Gets the surface style tag of an object. If display is TRUE, layer override
				is taken into account. Otherwise, the true object attribute is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_face_rmtl,fz_objt_attr_set_objt_rmtl,
				fz_objt_attr_set_face_rmtl,fz_objt_attr_clear_face_rmtl,
				fz_objt_attr_clear_all_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rmtl_func) (	
	fzrt_int			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj, 		/* @parm <in> | object									*/
	fzrt_boolean	display,   	/* @parm <in> | get from display context or attribute	*/
	fz_tag_td 		*rmtl_tag	/* @parm <out> | surface style tag						*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same surface style
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_set_objt_rmtl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_rmtl_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1, 		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal	/* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the surface style tag of a face.
	
	@desc		Sets the surface style tag of a face.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_get_face_rmtl,
				fz_objt_attr_set_objt_rmtl,fz_objt_attr_clear_face_rmtl,
				fz_objt_attr_clear_all_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_face_rmtl_func) (	
	fzrt_int			windex,		/* @parm <in> | project window index */
	fz_objt_ptr		obj, 		/* @parm <in> | object						*/
	fzrt_int			findx,		/* @parm <in> | face index					*/
	fz_tag_td 		*rmtl_tag	/* @parm <in> | surface style tag			*/
	);

/************************************************************************
	
	@fsfunc_t	Get the surface style of a face. 
	
	@desc		Gets the surface style of a face. 
				If check_obj is TRUE, the object's surface style tag is returned, 
				if the face does not have its own surface style. If check_obj is 
				FALSE and the face does not have its own surface style, -1 is returned as a tag.
				If display is TRUE, layer override
				is taken into account. Otherwise, the true face/object attribute is returned.
				To get what's rendered on the screen, TRUE should be passed for "display"
				("check_obj" doesn't matter). To get the real attribute, FALSE should be passed for 
				"check_obj" and "display".
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_set_objt_rmtl,fz_objt_attr_set_face_rmtl,
				fz_objt_attr_clear_face_rmtl,fz_objt_attr_clear_all_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_face_rmtl_func) (	
	fzrt_int			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 	obj,		/* @parm <in> | object									*/
	fzrt_int			findx,		/* @parm <in> | face index								*/
	fzrt_boolean	check_obj,  /* @parm <in> | if TRUE, the function gets the object's 
													surface style tag, if the face does not
													have its own.	*/
	fzrt_boolean	display,	/* @parm <in> | get from display context or attribute	*/
	fz_tag_td 		*rmtl_tag   /* @parm <out> | surface style tag						*/
	);
											

/************************************************************************
	
	@fsfunc_t
	
	@desc		Check whether two faces of two objects have the same surface style attribute.
				The two objects may be the same.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_face_rmtl,fz_objt_attr_set_face_rmtl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_face_rmtl_are_equal_func) (	
	fzrt_int			windex1, 		/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,			/* @parm <in> | object 1								*/
	fzrt_int			findx1,			/* @parm <in> | face index of object 1					*/
	fzrt_int			windex2, 		/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 			/* @parm <in> | object 2								*/
	fzrt_int			findx2,			/* @parm <in> | face index of object 2					*/		
	fzrt_boolean	*are_equal		/* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Clear the surface style of a face.
	
	@desc		Clears the surface style of a face. Returns the face to use the object's
				surface style
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_get_face_rmtl,
				fz_objt_attr_set_objt_rmtl,fz_objt_attr_set_face_rmtl,
				fz_objt_attr_clear_all_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

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

/************************************************************************
	
	@fsfunc_t	Clear the surface style of all faces of an object.
	
	@desc		Clears the surface style of all faces of an object. Returns the faces 
				to use the object's surface style
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmtl,fz_objt_attr_get_face_rmtl,
				fz_objt_attr_set_objt_rmtl,fz_objt_attr_set_face_rmtl,
				fz_objt_attr_clear_face_rmtl

	@exfile		<scdir>/Utilities | util_attr_rmtl.fsl

	@toc		modl_attr

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


/************************************************************************
	
	@fsfunc_t
	
	@desc		Sets the smooth shading status of a face.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_face_smth

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_face_smth_func) (	
	fzrt_int			windex,		/* @parm <in> | project window index */
	fz_objt_ptr	obj, 		/* @parm <in> | object						*/
	fzrt_int			findx,		/* @parm <in> | face index					*/
	fzrt_boolean	smth		/* @parm <in> | smooth shading status		*/
	);

/************************************************************************
	
	@fsfunc_t	Get the surface style of a face. 
	
	@desc		Gets the smooth shading status of a face
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_face_smth

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_face_smth_func) (	
	fzrt_int			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 	obj,		/* @parm <in> | object									*/
	fzrt_int			findx,		/* @parm <in> | face index								*/
	fzrt_boolean	*smth  		/* @parm <out> | smooth shading status				*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Check whether two faces of two objects have the same smooth shading status attribute.
				The two objects may be the same.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_face_smth,fz_objt_attr_set_face_smth

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_face_smth_are_equal_func) (	
	fzrt_int			windex1, 		/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,			/* @parm <in> | object 1								*/
	fzrt_int			findx1,			/* @parm <in> | face index of object 1					*/
	fzrt_int			windex2, 		/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 			/* @parm <in> | object 2								*/
	fzrt_int			findx2,			/* @parm <in> | face index of object 2					*/		
	fzrt_boolean	*are_equal		/* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);


/************************************************************************
	
	@fsfunc_t	Set the visibility of an object.
	
	@desc		Sets the visibility of an object. An object can be
				visible, invisible or ghosted.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_visib

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_visib_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj, 		/* @parm <in> | object						*/
	fz_attr_visib_enum	visib		/* @parm <in> | visibility type				*/
	);

/************************************************************************
	
	@fsfunc_t	Get the visibility of an object.
	
	@desc		Gets the visibility of an object. An object can be
				visible, invisible or ghosted. If display is TRUE,
				the layer visibility is taken into account. Otherwise,
				the true object attribute is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_visib

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_visib_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fz_attr_visib_enum	*visib		/* @parm <out> | visibility type			*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same visibility
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_visib,fz_objt_attr_set_objt_visib

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_visib_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the layer tag of an object.
	
	@desc		Sets the layer tag of an object. Setting the tag input 
				to NULL will put the set the object to the active layer.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_layer

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_layer_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fz_tag_td			*lay_tag 	/* @parm <in> | layer tag or NULL for active layer				*/
	);

/************************************************************************
	
	@fsfunc_t	Get the layer tag of an object.
	
	@desc		Gets the layer tag of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_layer

	@toc		modl_attr

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

/************************************************************************
 
 @fsfunc_t	Set the line style of an object.
 
 @desc		Sets the line style  of an object. Setting the line style input 
			to NULL will set the object to the active line style.
 
 @return	Error codes
 
 @avail		5.0.0.0
 
 @see		fz_objt_attr_get_objt_lsty
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_lsty_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index				*/
	fz_objt_ptr			obj,    	/* @parm <in> | object								*/
	fz_tag_td			*lsty_tag 	/* @parm <in> | lsty tag or NULL for active lsty	*/
 	);
	
/************************************************************************
 
 @fsfunc_t	Get the line style of an object.
 
 @desc		Gets the line style of an object.
 
 @return	Error codes
 
 @avail		5.0.0.0
 
 @see		fz_objt_attr_set_objt_lsty_func
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_lsty_func) (
	fzrt_int 				windex, 	/* @parm <in>  | project window index			*/
	fz_objt_ptr			obj,		/* @parm <in>  | object							*/
	fz_tag_td			*lsty_tag   /* @parm <out> | lsty tag						*/
	);
	

/************************************************************************
 
 @fsfunc_t	Set the line weight of an object.
 
 @desc		Sets the line weight of an object. Setting the line weight input 
			to NULL will set the object to the active line weight.
 
 @return	Error codes
 
 @avail		5.0.0.0
 
 @see		fz_objt_attr_get_objt_lwgt
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_lwgt_func) (
   fzrt_int 				windex, 	/* @parm <in> | project window index				*/
   fz_objt_ptr			obj,    	/* @parm <in> | object								*/
   fz_tag_td			*lwgt_tag 	/* @parm <in> | lwgt tag or NULL for active lwgt	*/
   );
	
/************************************************************************
 
 @fsfunc_t	Get the line weight of an object.
 
 @desc		Gets the line weight of an object.
 
 @return	Error codes
 
 @avail		5.0.0.0
 
 @see		fz_objt_attr_set_objt_lwgt
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_lwgt_func) (
   fzrt_int 				windex, 	 /* @parm <in>  | project window index			*/
   fz_objt_ptr			obj,		 /* @parm <in>  | object						*/
   fz_tag_td			*lwgt_tag     /* @parm <out> | tag							*/

   );

/************************************************************************
 
 @fsfunc_t	Gets exclude from non destructve section plane (clipping plane) attribute.
 
 @desc		Gets exclude from non destructve section plane (clipping plane) attribute.
 
 @return	Error codes
 
 @avail		8.1.0.0
 
 @see		fz_objt_attr_get_no_ndsp
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_no_ndsp_func) (
   fzrt_int 				windex,			/* @parm <in>  | project window index			*/
   fz_objt_ptr				obj,			/* @parm <in>  | object						*/
   fzrt_boolean				value			/* @parm <in> | true if object is excluded from non destructve section plane (clipping plane) */

   );
	
/************************************************************************
 
 @fsfunc_t	Sets exclude from non destructve section plane (clipping plane) attribute.
 
 @desc		Sets exclude from non destructve section plane (clipping plane) attribute.
 
 @return	Error codes
 
 @avail		8.1.0.0
 
 @see		fz_objt_attr_set_no_ndsp
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_no_ndsp_func) (
	fzrt_int 				windex,			/* @parm <in>  | project window index			*/
	fz_objt_ptr				obj,			/* @parm <in>  | object						*/
	fzrt_boolean			display,		/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*value			/* @parm <out> | true if object is excluded from non destructve section plane (clipping plane) */

   );

/********************************************************************************************************
 
 @enum
 
 @desc	NDSP objt attribute parameters.
 
 @avail	8.5.5.0
 
 @see
 
 @toc	modl_ndsp
 
 *********************************************************************************************************/
typedef enum fz_objt_ndsp_parm_enum
{
	
	FZ_OBJT_NDSP_PARM_SURF=0,			/*	@emem 		 Indicates which color the surface of clipped objects should use (0=project setting, 1, obejct color, 2 custome color)
										 @ptype		fzrt_int
										 @default	1
										 */
	
	FZ_OBJT_NDSP_PARM_SURF_CUST,		/*	@emem	 	Custom color for clipped surface.
											@ptype		fz_xyz_float_td
											@default	FALSE
											*/
	
	FZ_OBJT_NDSP_PARM_SURF_RNDR_COLOR,	/*	@emem	 	Actual color to render clipped surface (can not be set, just aquired).
										 @ptype		fz_xyz_float_td
										 @default	FALSE
										 */
	
	FZ_OBJT_NDSP_PARM_EDGE,				/*	@emem	 	Indicates which color the edge clipped objects should use (0=project setting, 1, obejct color, 2 custome color)
										 @ptype		fzrt_int
										 @default	1
											*/
	
	FZ_OBJT_NDSP_PARM_EDGE_CUST,		/*	@emem	 	Indicates the ndsp is visible in the project windows.
											@ptype		fz_xyz_float_td
											*/
	
	FZ_OBJT_NDSP_PARM_EDGE_RNDR_COLOR,		/*	@emem	 	Actual color to render clipped edges (can not be set, just aquired).
												@ptype		fz_xyz_float_td
											*/
	
	FZ_OBJT_NDSP_PARM_EDGE_WEIGHT,		/*	@emem	 	Indicates weight for the edge rendering
											 @ptype		float
											 @default	1.0
										*/
	
	FZ_OBJT_NDSP_PARM_MAX
} fz_objt_ndsp_parm_enum;

/************************************************************************
 
 @fsfunc_t	Gets object non destructve section plane (clipping plane) attribute.
 
 @desc		Gets object non destructve section plane (clipping plane) attribute.
 
 @return	Error codes
 
 @avail		8.1.0.0
 
 @see		fz_objt_attr_set_no_ndsp
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_ndsp_parm_data_func) (
	fzrt_int 				windex,			/* @parm <in>  | project window index			*/
	fz_objt_ptr				obj,			/* @parm <in>  | object						*/
	fz_objt_ndsp_parm_enum	which,			/* @parm <in> | wich parameter selector	*/
	fz_type_td				*value			/* @parm <out> | true if object is excluded from non destructve section plane (clipping plane) */

   );

/************************************************************************
 
 @fsfunc_t	Sets object non destructve section plane (clipping plane) attribute.
 
 @desc		Sets object non destructve section plane (clipping plane) attribute.
 
 @return	Error codes
 
 @avail		8.1.0.0
 
 @see		fz_objt_attr_set_no_ndsp
 
 @toc		modl_attr
 
 *************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_ndsp_parm_data_func) (
	fzrt_int 				windex,			/* @parm <in>  | project window index			*/
	fz_objt_ptr				obj,			/* @parm <in>  | object						*/
	fz_objt_ndsp_parm_enum	which,			/* @parm <in> | wich parameter selector	*/
	fz_type_td				*value			/* @parm <in> | true if object is excluded from non destructve section plane (clipping plane) */

   );

	
	
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same layer
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_layer,fz_objt_attr_set_objt_layer

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_layer_are_equal_func) (	
	fzrt_int			windex1,	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object	1 								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object	2 								*/
	fzrt_boolean	*are_equal	/* @parm <out> | TRUE if attributes area equal, FALSE otherwise 		*/
	);

/************************************************************************
	
	@fsfunc_t	Set the lock status of an object.
	
	@desc		Sets the lock status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_lock

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_lock_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			lock		/* @parm <in> | lock status					*/
	);
	
/************************************************************************
	
	@fsfunc_t	Get the lock status of an object.
	
	@desc		Gets the lock status of an object. If display is TRUE, the lock status 
				of the layer on which the object is placed is taken into account.
				Otherwise the true lock attribute of the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_lock

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_lock_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*lock		/* @parm <out> | lock status							*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same lock
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_lock,fz_objt_attr_set_objt_lock

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_lock_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the snap status of an object.
	
	@desc		Sets the snap status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_snap

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_snap_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			snap		/* @parm <in> | snap status					*/
	);
											
/************************************************************************
	
	@fsfunc_t	Get the snap status of an object.
	
	@desc		Gets the snap status of an object. If display is TRUE, the snap status 
				of the layer on which the object is placed is taken into account.
				Otherwise the true snap attribute of the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_snap

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_snap_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*snap   	/* @parm <out> | snap status							*/
	);
	
											
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same snap
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_snap,fz_objt_attr_set_objt_snap

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_snap_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the shadow casting status of an object.
	
	@desc		Sets the shadow casting status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_shad_cast

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_shad_cast_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			shad_cast	/* @parm <in> | shadow casting status		*/
	);
	
											
/************************************************************************
	
	@fsfunc_t	Get the shadow casting status of an object.
	
	@desc		Gets the shadow casting status of an object. If display is TRUE, the 
				shadow casting override status of the layer on which the object is placed is 
				taken into account. Otherwise the true shadow casting attribute of 
				the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_shad_cast

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_shad_cast_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*shad_cast	/* @parm <out> | shadow casting status					*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same shadow casting
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_shad_cast,fz_objt_attr_set_objt_shad_cast

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_shad_cast_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the shadow receiving status of an object.
	
	@desc		Sets the shadow receiving status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_shad_recv

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_shad_recv_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			shad_recv	/* @parm <in> | shadow receiving status		*/
	);
	
	
/************************************************************************
	
	@fsfunc_t	Get the shadow receiving status of an object.
	
	@desc		Gets the shadow receiving status of an object. If display is TRUE, the 
				shadow receiving override status of the layer on which the object is placed is 
				taken into account. Otherwise the true shadow receiving attribute of 
				the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_shad_recv

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_shad_recv_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*shad_recv	/* @parm <out> | shadow receiving status				*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same shadow receiving
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_shad_recv,fz_objt_attr_set_objt_shad_recv

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_shad_recv_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,	    /* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the render as wireframe status of an object.
	
	@desc		Sets the render as wireframe status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_wire

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rndr_wire_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			rndr_wire	/* @parm <in> | render as wireframe status	*/
	);
	
/************************************************************************
	
	@fsfunc_t	Get the render as wireframe status of an object.
	
	@desc		Gets the render as wireframe status of an object. If display is TRUE, the 
				render as wireframe override status of the layer on which the object is placed is 
				taken into account. Otherwise the true render as wireframe attribute of 
				the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_rndr_wire

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rndr_wire_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*rndr_wire	/* @parm <out> | render as wireframe status				*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same render as wireframe
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_wire,fz_objt_attr_set_objt_rndr_wire

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_rndr_wire_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the render as shaded surface status of an object.
	
	@desc		Sets the render as shaded surface status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_surf

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rndr_surf_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object							*/
	fzrt_boolean			rndr_surf	/* @parm <in> | render as shaded surface status	*/
	);
	
/************************************************************************
	
	@fsfunc_t	Get the render as shaded surface status of an object.
	
	@desc		Gets the render as shaded surface status of an object. If display is TRUE, the 
				render as shaded surface override status of the layer on which the object is placed is 
				taken into account. Otherwise the true render as shaded surface attribute of 
				the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_rndr_surf

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rndr_surf_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_boolean			*rndr_surf	/* @parm <out> | render as shaded surface status		*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same render as surface
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_surf,fz_objt_attr_set_objt_rndr_surf

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_rndr_surf_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the render as backdrop status of an object.
	
	@desc		Sets the render as backdrop status of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_bdrp

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rndr_bdrp_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			rndr_bdrp	/* @parm <in> | render as backdrop status	*/
	);
	
/************************************************************************
	
	@fsfunc_t	Get the render as backdrop status of an object.
	
	@desc		Gets the render as backdrop status of an object. This attribute
				does not have a layer override. Therefore the true object attribute
				is always returned
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_rndr_bdrp

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rndr_bdrp_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			*rndr_bdrp	/* @parm <out> | render as backdrop status	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same render as backdrop
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_bdrp,fz_objt_attr_set_objt_rndr_bdrp

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_rndr_bdrp_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	Set the rendering line width of an object.
	
	@desc		Sets the rendering line width of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_lwid

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rndr_lwid_func) (
	fzrt_int 					windex, 	/*	@parm <in> | project window index */
	fz_objt_ptr			obj,    	/*	@parm <in> | object					*/
	fzrt_int					rndr_lwid	/*	@parm <in> | rendering line width
										 	&rimin_imax	1 | 32				*/
	);
	
/************************************************************************
	
	@fsfunc_t	Get the rendering line width of an object.
	
	@desc		Gets the rendering line width of an object. If display is TRUE, the 
				rendering line width override status of the layer on which the object is placed is 
				taken into account. Otherwise the true rendering line width attribute of 
				the object is returned.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_rndr_lwid

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rndr_lwid_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute	*/
	fzrt_int					*rndr_lwid	/* @parm <out> | rendering line width					*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same rendering line width
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rndr_lwid,fz_objt_attr_set_objt_rndr_lwid

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_rndr_lwid_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr	obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr	obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Sets the name of an object. The name cannot exceed 32 characters
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_name

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_name_func) (
	fzrt_int 					windex, 	/*	@parm <in> | project window index */
	fz_objt_ptr			obj,    	/*	@parm <in> | object					*/
	char					*name		/*	@parm <in> | object name, 32 characters maximum. */
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the name of an object. The character array passed in must
				be at least 128 characters fzrt_int.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_name

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_name_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr				obj,    	/* @parm <in> | object						*/
	char					*name		/* @parm <out> | object name. Array must be at least 128 characters fzrt_int	*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same name
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_name,fz_objt_attr_set_objt_name

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_name_are_equal_func) (
	fzrt_int					windex1,	/* @parm <in> | project 1								*/
	fz_objt_ptr			obj1,		/* @parm <in> | object 1								*/
	fzrt_int					windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr			obj2,		/* @parm <in> | object 2								*/
	fzrt_boolean			*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Sets the sampling density of an object. This attribute is
				currently used only by the point cloud objects created with
				the re-engineer tool. It is possible to set this attribute for
				other objects, but it will not be used. If -1.0 is passed in
				as the sdns argument, the attribute will be removed. Otherwise
				only values greater than 0.0 will be accepted.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_sdns

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_sdns_func) (
	fzrt_int 					windex, 	/*	@parm <in> | project window index */
	fz_objt_ptr			obj,    	/*	@parm <in> | object					*/
	double					sdns		/*	@parm <in> | Sampling density. If -1.0 is passed in, the
														 attribute will be removed. Otherwise values greater
														 than 0.0 must be passed in.
											@rmin 0.0  */
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the sampling density of an object. This attribute is
				currently used only by the point cloud objects created with
				the re-engineer tool. If an object does not have a sampling density
				attribute, the optional has_sdns argument will be set to FALSE and -1.0
				will be returned for the sdns argument.
	
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_sdns

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_sdns_func) (
	fzrt_int 					windex, 	/*	@parm <in> | project window index */
	fz_objt_ptr			obj,    	/*	@parm <in> | object						*/
	fzrt_boolean			*has_sdns,	/*	@parm <out_opt> | TRUE if the object has a sampling density attribute, FALSE otherwise. */
	double					*sdns		/*	@parm <out_opt> | sampling density. This argument will be set to -1.0, if the
															  object does not have a sampling density attribute	*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same sampling density
				attribute.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_sdns,fz_objt_attr_set_objt_sdns

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_sdns_are_equal_func) (
	fzrt_int					windex1,	/* @parm <in> | project 1								*/
	fz_objt_ptr			obj1,		/* @parm <in> | object 1								*/
	fzrt_int					windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr			obj2,		/* @parm <in> | object 2								*/
	fzrt_boolean			*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	SMOOTH SHADING ATTRIBUTE
*************************************************************************/
/********************************************************************************************************

	@type	smooth shading attribute type

	@desc	Data structure to hold options for the modeling smooth shading attribute.
			The individual fields of this type can be accessed and set via 
			fz_objt_attr_sshd_get and fz_objt_attr_sshd_set.
			
	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef struct attr_smooth_td	*fz_attr_sshd_ptr;

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

	@prmenum	smooth shading parameter ids.

	@desc		smooth shading parameter ids. Used to set/get the parameters of a smooth
				shading attribute using fz_objt_attr_sshd_get and fz_objt_attr_sshd_set

	@avail		5.0.0.0
	
	@see		<auto>

	@toc		modl_attr

*********************************************************************************************************/
typedef enum fz_attr_sshd_parm_enum
{
	FZ_ATTR_SSHD_PARM_SMOOTH_ON = 0,				/*	@emem		smooth shading is on
													@ptype		fzrt_boolean 
													@default	FALSE	*/
	
	FZ_ATTR_SSHD_PARM_SMOOTH_ALL,					/*	@emem		smooth all
													@ptype		fzrt_boolean 
													@default	TRUE	*/
	
	FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_ANGLE,		/*	@emem		if smooth all if off, smooth by face angle
													@ptype		fzrt_boolean 
													@default	TRUE	*/
	
	FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_MARK,		/*	@emem		if smooth all if off, smooth faces marked as smooth
													@ptype		fzrt_boolean 
													@default	FALSE	*/
	
	FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_NSIDES,		/*	@emem		if smooth all if off, smooth faces with m to n sides
													@ptype		fzrt_boolean 
													@default	FALSE	*/
	
	FZ_ATTR_SSHD_PARM_ANGLE,						/*	@emem		smoothing angle if FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_ANGLE is used
													@ptype		double 
													@default	140 degrees (as radians)
													@rmin_max	0.0 | PI */
	
	FZ_ATTR_SSHD_PARM_NSIDES_MIN,					/*	@emem		minimum number of sides per face, if FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_NSIDES is used
													@ptype		fzrt_int 
													@default	4
													@rimin		3 */
	
	FZ_ATTR_SSHD_PARM_NSIDES_MAX,					/*	@emem		maximum number of sides per face, if FZ_ATTR_SSHD_PARM_SMOOTH_FACES_BY_NSIDES is used
													@ptype		fzrt_int 
													@default	4
													@rimin		3 */
	
	FZ_ATTR_SSHD_PARM_SMOOTH_OBJS,				/*	@emem		render smooth object smooth
													@ptype		fzrt_boolean 
													@default	TRUE	*/
	
	MODEL_ATTR_SSHD_MAX

} fz_attr_sshd_parm_enum;

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

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

	@see		fz_objt_attr_sshd_get,fz_objt_attr_sshd_set,fz_objt_attr_sshd_finit

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_init_func) (	
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_attr_sshd_ptr	*opts	/* @parm <out> | smooth shading options			*/
	);

/************************************************************************
	
	@fsfunc_t	Gets a smooth shading parameter
	
	@desc		Gets a smooth shading parameter
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_sshd_init,fz_objt_attr_sshd_set,fz_objt_attr_sshd_finit

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_attr_sshd_ptr		opts,  	/* @parm <in> | smooth shading options		*/
	fz_attr_sshd_parm_enum	which,	/* @parm <in> | parameter identifier		*/
	fz_type_td				*data 	/* @parm <out>	| parameter data				*/
	);

/************************************************************************
	
	@fsfunc_t	Sets a smooth shading parameter
	
	@desc		Sets a smooth shading parameter
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_sshd_init,fz_objt_attr_sshd_get,fz_objt_attr_sshd_finit

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_set_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_attr_sshd_ptr		opts,  	/* @parm <in> | smooth shading options		*/
	fz_attr_sshd_parm_enum	which, 	/* @parm <in> | parameter identifier		*/
	fz_type_td				*data 	/* @parm <in> | parameter data				*/
	);

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

	@see		fz_objt_attr_sshd_init,fz_objt_attr_sshd_get,fz_objt_attr_sshd_set

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_finit_func) (	
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_attr_sshd_ptr	*opts	/* @parm <in_out> | smooth shading options (will become NULL)	*/
	);


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Checks whether two smooth shading attributes are equal.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_sshd_init,fz_objt_attr_sshd_get,fz_objt_attr_sshd_set,fz_objt_attr_sshd_finit

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_are_equal_func) (	
	fzrt_int					windex1,	/* @parm <in> | project 1								*/
	fz_attr_sshd_ptr		sshd1,		/* @parm <in> | smooth shading attribute 1 				*/
	fzrt_int					windex2, 	/* @parm <in> | project 2								*/
	fz_attr_sshd_ptr		sshd2,		/* @parm <in> | smooth shading attribute 2 				*/
	fzrt_boolean			*are_equal	/* @parm <out> | TRUE if they are equal, FALSE otherwise */
	);


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Copy the content of one smooth shading attribute to another. Note, that
				the destination smooth shading must already be allocated. This can be
				done by a call to fz_objt_attr_sshd_init.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_sshd_init,fz_objt_attr_sshd_get,fz_objt_attr_sshd_set,fz_objt_attr_sshd_finit

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_sshd_copy_func) (
	fzrt_int					src_windex,	/* @parm <in> | source project								*/
	fz_attr_sshd_ptr		src_sshd,   /* @parm <in> | source attribute							*/
	fzrt_int					dst_windex, /* @parm <in> | destination project							*/
	fz_attr_sshd_ptr		dst_sshd    /* @parm <in> | destination attribute						*/
	);

/************************************************************************
	
	@fsfunc_t	Get the smooth shading attribute of an object.
	
	@desc		Gets the smooth shading attribute of an object. The
				fz_attr_sshd_ptr sshd parameter must be created and
				deleted by the calling function. For example :
				
					fz_objt_attr_sshd_init(windex,&sshd);
					fz_objt_attr_get_objt_sshd(windex,obj,FALSE,&has_sshd,sshd);
					fz_objt_attr_sshd_finit(windex,&sshd);
					
				If display is TRUE, the smooth shading settings of the layer on which the 
				object is placed is taken into account. Otherwise the true smooth shading 
				attribute of the object is returned.
				
				Note, that an object may not have a smooth shading attribute, in which case
				the has_sshd parameter will be returned as FALSE.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_sshd

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_sshd_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fzrt_boolean			display,	/* @parm <in> | get from display context or attribute. */
	fzrt_boolean			*has_sshd,	/* @parm <out_opt> | TRUE if the object has a smooth shading attribute. 
													FALSE otherwise. This parameter always looks at the true object
													attribute, even id display is set to TRUE. */
	fz_attr_sshd_ptr		sshd		/* @parm <out_opt> | smooth shading attribute	*/
	);
	
/************************************************************************
	
	@fsfunc_t	Set the smooth shading attribute of an object.
	
	@desc		Sets the smooth shading attribute of an object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_sshd

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_sshd_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,    	/* @parm <in> | object						*/
	fz_attr_sshd_ptr		sshd		/* @parm <in> | smooth shading attribute	*/
	);

/************************************************************************
	RADIOSITY MESHING ATTRIBUTE
*************************************************************************/
/********************************************************************************************************

	@type	radiosity meshing attribute type

	@desc	Data structure to hold options for the modeling radiosity meshing attribute.
			The individual fields of this type can be accessed and set via 
			fz_objt_attr_rmsh_get and fz_objt_attr_rmsh_set.
			
	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef struct attr_expr_radios_mesh_td *fz_attr_rmsh_ptr;

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

	@prmenum	radiosity meshing parameters ids.

	@desc		radiosity meshing parameters ids. Used to set/get the parameters of a radiosity 
				meshing attribute using fz_objt_attr_rmsh_get and fz_objt_attr_rmsh_set

	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum fz_attr_rmsh_parm_enum
{
	FZ_ATTR_RMSH_PARM_MESH_ON = 0,		/*	@emem			radiosity meshing is on/off
											@ptype			fzrt_boolean 
											@default		FALSE	*/
											
	FZ_ATTR_RMSH_PARM_PATCHES,			/*	@emem			density of radiosity patches. The normal range is
															from 0.0 to 1.0, but values larger than 1.0 can be used.
											@ptype			double 
											@default		0.5
											@rmin			0.0 */

	FZ_ATTR_RMSH_PARM_POLYS,				/*	@emem			# of radioslity mesh polygons as a factor of the number 
															of radiosity patches.
											@ptype			double 
											@default		5.0
											@rmin			0.0 */

	FZ_ATTR_RMSH_PARM_ADAPT_ON,			/*	@emem			adaptive radiosity meshing is on
											@ptype			fzrt_boolean 
											@default		FALSE	*/
													
	FZ_ATTR_RMSH_PARM_ADAPT_DENSITY,		/*	@emem			density of adaptive meshing.
											@ptype			double 
											@default		0.8
											@rimin_imax	0.0 | 1.0 */
											
	FZ_ATTR_RMSH_PARM_ADAPT_THRESSHOLD,	/* @emem			threshold of adaptive meshing.
											@ptype			double 
											@default		0.2
											@rimin_imax	0.0 | 1.0 */
	
	MODEL_ATTR_RMSH_MAX

} fz_attr_rmsh_parm_enum;

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

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

	@see		fz_objt_attr_rmsh_get,fz_objt_attr_rmsh_set,fz_objt_attr_rmsh_finit

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_rmsh_init_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_attr_rmsh_ptr	*opts	/* @parm <out> | radiosity meshing options		*/
	);

/************************************************************************
	
	@fsfunc_t	Gets a radiosity meshing parameter
	
	@desc		Gets a radiosity meshing parameter
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_rmsh_init,fz_objt_attr_rmsh_set,fz_objt_attr_rmsh_finit

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_rmsh_set_func) (
	fzrt_int					windex,/* @parm <in> | project window index */
	fz_attr_rmsh_ptr		opts,  /* @parm <in> | radiosity meshing options	*/
	fz_attr_rmsh_parm_enum	which, /* @parm <in> | parameter identifier		*/
	fz_type_td				*data  /* @parm <out> | parameter data				*/
	);

/************************************************************************
	
	@fsfunc_t	Sets a radiosity meshing parameter
	
	@desc		Sets a radiosity meshing parameter
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_rmsh_init,fz_objt_attr_rmsh_get,fz_objt_attr_rmsh_finit

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_rmsh_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_attr_rmsh_ptr		opts,   /* @parm <in> | radiosity meshing options	*/
	fz_attr_rmsh_parm_enum	which,  /* @parm <in> | parameter identifier		*/
	fz_type_td				*data   /* @parm <in> | parameter data				*/
	);

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

	@see		fz_objt_attr_rmsh_init,fz_objt_attr_rmsh_get,fz_objt_attr_rmsh_set

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

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


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Checks whether two radiosity meshing attributes are equal.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_rmsh_init,fz_objt_attr_rmsh_get,fz_objt_attr_rmsh_set,fz_objt_attr_rmsh_finit

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_rmsh_are_equal_func) (	
	fzrt_int					windex1,	/* @parm <in> | project 1								*/
	fz_attr_rmsh_ptr		rmsh1,		/* @parm <in> | radiosity meshing attribute 1 			*/
	fzrt_int					windex2, 	/* @parm <in> | project 2								*/
	fz_attr_rmsh_ptr		rmsh2,		/* @parm <in> | radiosity meshing attribute 2 			*/
	fzrt_boolean			*are_equal	/* @parm <out> | TRUE if they are equal, FALSE otherwise */
	);


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Copy the content of one radiosity meshing attribute to another. Note, that
				the destination radiosity meshing must already be allocated. This can be
				done by a call to fz_objt_attr_rmsh_init. 	
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_rmsh_init,fz_objt_attr_rmsh_get,fz_objt_attr_rmsh_set,fz_objt_attr_rmsh_finit

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_rmsh_copy_func) (
	fzrt_int					src_windex,	/* @parm <in> | source project								*/
	fz_attr_rmsh_ptr		src_rmsh,   /* @parm <in> | source attribute							*/
	fzrt_int					dst_windex, /* @parm <in> | destination project							*/
	fz_attr_rmsh_ptr		dst_rmsh    /* @parm <in> | destination attribute						*/
	);

/************************************************************************
	
	@fsfunc_t	Sets the radiosity meshing attribute of an object.
	
	@desc		Sets the radiosity meshing attribute of an object.
				If NULL is passed as the rmsh parameter, the attribute is removed 
				from the object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_rmsh

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_rmsh_func) (	
	fzrt_int 				windex, /* @parm <in> | project window index */
	fz_objt_ptr		obj,    /* @parm <in> | object						*/
	fz_attr_rmsh_ptr	rmsh    /* @parm <in> | radiosity meshing attribute	*/
	);

/************************************************************************
	
	@fsfunc_t	Gets the radiosity meshing attribute of an object.
	
	@desc		Gets the radiosity meshing attribute of an object. The
				fz_attr_rmsh_ptr rmsh parameter must be created and
				deleted by the calling function. For example :
				
					fz_objt_attr_rmsh_init(windex,&rmsh);
					fz_objt_attr_get_objt_rmsh(windex,obj,&has_rmsh,rmsh);
					fz_objt_attr_rmsh_finit(windex,&rmsh);
									
				Note, that an object may not have a radiosity meshing attribute, in which case
				the has_rmsh parameter will be returned as FALSE.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_rmsh

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_rmsh_func) (	
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj,		/* @parm <in> | object						*/
	fzrt_boolean		*has_rmsh,  /* @parm <out_opt> | TRUE if the object has a radiosity meshing attribute. 
														 FALSE otherwise. */
	fz_attr_rmsh_ptr	rmsh_ptr    /* @parm <out_opt> | radiosity meshing attribute	*/
	);								


/************************************************************************
	
	@fsfunc_t
	
	@desc		Sets the radiosity meshing attribute of a face.
				If NULL is passed as the rmsh parameter, the attribute is removed 
				from the face.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_face_rmsh

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_face_rmsh_func) (	
	fzrt_int 				windex, /* @parm <in> | project window index */
	fz_objt_ptr		obj,    /* @parm <in> | object						*/
	fzrt_int				findx, 	/* @parm <in> | face index					*/
	fz_attr_rmsh_ptr	rmsh    /* @parm <in> | radiosity meshing attribute	*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Gets the radiosity meshing attribute of a face. The
				fz_attr_rmsh_ptr rmsh parameter must be created and
				deleted by the calling function. For example :
				
					fz_objt_attr_rmsh_init(windex,&rmsh);
					fz_objt_attr_get_face_rmsh(windex,obj,findx,&has_rmsh,rmsh);
					fz_objt_attr_rmsh_finit(windex,&rmsh);
									
				Note, that a face may not have a radiosity meshing attribute, in which case
				the has_rmsh parameter will be returned as FALSE.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_face_rmsh

	@exfile		<scdir>/Utilities | util_attr_rmsh.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_face_rmsh_func) (	
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj,		/* @parm <in> | object						*/
	fzrt_int				findx, 		/* @parm <in> | face index					*/
	fzrt_boolean		*has_rmsh,  /* @parm <out_opt> | TRUE if the face has a radiosity meshing attribute. 
														 FALSE otherwise. */
	fz_attr_rmsh_ptr	rmsh_ptr    /* @parm <out_opt> | radiosity meshing attribute	*/
	);								

/************************************************************************
	MATERIAL DENSITY ATTRIBUTE
*************************************************************************/
/********************************************************************************************************

	@type	material density attribute type

	@desc	Data structure to hold options for the modeling material density attribute.
			The individual fields of this type can be accessed and set via 
			fz_objt_attr_mdns_get and fz_objt_attr_mdns_set. The material density attribute
			consists of three parameters : density, weight unit and volume unit. The
			density is always set and retrieved as g / cm^3 (gram per cubic centimeter).
			The weight and volume unit parameters are used to display the density
			in the Mass Properties dialog, where the density will be converted to the
			selected units.
			
	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef struct attr_density_td *fz_attr_mdns_ptr;

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

	@enum

	@desc		material density weight units. It is used in functions fz_objt_attr_mdns_set and
				fz_objt_attr_mdns_get, when the parameter id is MODEL_ATTR_MDNS_WEIT_UNITS.

	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum fz_attr_mdns_weit_unit_enum
{
	FZ_ATTR_MDNS_WEIT_UNIT_OZ = 1,		/*	@emem	Ounce 		*/
	FZ_ATTR_MDNS_WEIT_UNIT_LBS,			/*	@emem	Pound 		*/
	FZ_ATTR_MDNS_WEIT_UNIT_GRAM,			/*	@emem	Gram 		*/
	FZ_ATTR_MDNS_WEIT_UNIT_KG,			/*	@emem	Kilogram	*/

	MODEL_MDNS_WEIT_UNIT_MAX

} fz_attr_mdns_weit_unit_enum;


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

	@enum

	@desc		material density volume units. It is used in functions fz_objt_attr_mdns_set and
				fz_objt_attr_mdns_get, when the parameter id is MODEL_ATTR_MDNS_VOLM_UNITS.

	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum fz_attr_mdns_volm_unit_enum
{
	FZ_ATTR_MDNS_VOLM_UNIT_IN3 = 1,		/*	@emem	Cubic inch 			*/
	FZ_ATTR_MDNS_VOLM_UNIT_FT3,			/*	@emem	Cubic foot 			*/
	FZ_ATTR_MDNS_VOLM_UNIT_CM3,			/*	@emem	Cubic centimeter	*/
	FZ_ATTR_MDNS_VOLM_UNIT_M3,			/*	@emem	Cubic meter			*/

	MODEL_MDNS_VOLM_UNIT_MAX

} fz_attr_mdns_volm_unit_enum;


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

	@prmenum

	@desc		material density parameters ids. Used to set/get the parameters of a material
				density attribute using fz_objt_attr_mdns_get and fz_objt_attr_mdns_set.

	@avail	5.0.0.0
	
	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum fz_attr_mdns_parm_enum
{
	FZ_ATTR_PARM_MDNS_DENSITY = 0,		/*	@emem			material density value, expressed in grams per cubic centimeter.
															The default material density attribute is 1 gram per
															cubic centimeter, which is the density of water.
											@ptype			double
											@rmin			0.0
											@default		1.0	*/
											
	FZ_ATTR_PARM_MDNS_WEIT_UNIT,			/*	@emem			weight units. This parameter, together with the volume units 
															determines how the density is displayed in the Mass Properties
															dialog. The density itself is always specified by the API
															as grams per cubic centimeter.
											@ptype			fz_attr_mdns_weit_unit_enum 
											@default		MODEL_MDNS_WEIT_GRAM */

	FZ_ATTR_PARM_MDNS_VOLM_UNIT,			/*	@emem			volume units. This parameter, together with the weight units 
															determines how the density is displayed in the Mass Properties
															dialog. The density itself is always specified by the API
															as grams per cubic centimeter.
											@ptype			fz_attr_mdns_volm_unit_enum 
											@default		MODEL_MDNS_VOLM_CM3 */

	
	MODEL_ATTR_MDNS_MAX

} fz_attr_mdns_parm_enum;

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

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

	@see		fz_objt_attr_mdns_get,fz_objt_attr_mdns_set,fz_objt_attr_mdns_finit

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_init_func) (
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_attr_mdns_ptr	*opts	/* @parm <out> | material density options		*/
	);

/************************************************************************
	
	@fsfunc_t	Gets a material density parameter
	
	@desc		Gets a material density parameter
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_mdns_init,fz_objt_attr_mdns_set,fz_objt_attr_mdns_finit

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_set_func) (
	fzrt_int					windex,/* @parm <in> | project window index */
	fz_attr_mdns_ptr		opts,  /* @parm <in> | material density options	*/
	fz_attr_mdns_parm_enum	which, /* @parm <in> | parameter identifier		*/
	fz_type_td				*data  /* @parm <out> | parameter data				*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets a material density parameter.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_mdns_init,fz_objt_attr_mdns_get,fz_objt_attr_mdns_finit

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_get_func) (
	fzrt_int					windex,	/* @parm <in> | project window index */
	fz_attr_mdns_ptr		opts,   /* @parm <in> | material density options	*/
	fz_attr_mdns_parm_enum	which,  /* @parm <in> | parameter identifier		*/
	fz_type_td				*data   /* @parm <in> | parameter data				*/
	);

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

	@see		fz_objt_attr_mdns_init,fz_objt_attr_mdns_get,fz_objt_attr_mdns_set

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_finit_func) (	
	fzrt_int				windex,	/* @parm <in> | project window index */
	fz_attr_mdns_ptr	*opts   /* @parm <in_out> | material density options (will become NULL)	*/
	);


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Checks whether two material density attributes are equal.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_mdns_init,fz_objt_attr_mdns_get,fz_objt_attr_mdns_set,fz_objt_attr_mdns_finit

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_are_equal_func) (	
	fzrt_int					windex1,	/* @parm <in> | project 1								*/
	fz_attr_mdns_ptr		mdns1,		/* @parm <in> | material density attribute 1 			*/
	fzrt_int					windex2, 	/* @parm <in> | project 2								*/
	fz_attr_mdns_ptr		mdns2,		/* @parm <in> | material density attribute 2 			*/
	fzrt_boolean			*are_equal	/* @parm <out> | TRUE if they are equal, FALSE otherwise */
	);


/************************************************************************
	
	@fsfunc_t	
	
	@desc		Copy the content of one material density attribute to another. Note, that
				the destination material density must already be allocated. This can be
				done by a call to fz_objt_attr_mdns_init. 
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_mdns_init,fz_objt_attr_mdns_get,fz_objt_attr_mdns_set,fz_objt_attr_mdns_finit

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_mdns_copy_func) (
	fzrt_int					src_windex,		/* @parm <in> | source project								*/
	fz_attr_mdns_ptr		src_mdns,		/* @parm <in> | source attribute							*/
	fzrt_int					dst_windex,		/* @parm <in> | destination project							*/
	fz_attr_mdns_ptr		dst_mdns   		/* @parm <in> | destination attribute						*/
	);

/************************************************************************
	
	@fsfunc_t	Sets the material density attribute of an object.
	
	@desc		Sets the material density attribute of an object.
				If NULL is passed as the mdns parameter, the attribute is removed 
				from the object.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_get_objt_mdns

	@exfile		<scdir>/Utilities | util_attr_sshd.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_mdns_func) (	
	fzrt_int 				windex, /* @parm <in> | project window index */
	fz_objt_ptr		obj,    /* @parm <in> | object						*/
	fz_attr_mdns_ptr	mdns    /* @parm <in> | material density attribute	*/
	);

/************************************************************************
	
	@fsfunc_t	Gets the material density attribute of an object.
	
	@desc		Gets the material density attribute of an object. The
				fz_attr_mdns_ptr mdns parameter must be created and
				deleted by the calling function. For example :
				
					fz_objt_attr_mdns_init(windex,&mdns);
					fz_objt_attr_get_objt_mdns(windex,obj,&has_mdns,mdns);
					fz_objt_attr_mdns_finit(windex,&mdns);
									
				Note, that an object may not have a material density attribute, in which case
				the has_mdns parameter will be returned as FALSE.
	
	@return		Error codes
	
	@avail		5.0.0.0

	@see		fz_objt_attr_set_objt_mdns

	@exfile		<scdir>/Utilities | modl_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_mdns_func) (	
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj,		/* @parm <in> | object						*/
	fzrt_boolean		*has_mdns,  /* @parm <out_opt> | TRUE if the object has a material density attribute. 
														 FALSE otherwise. */
	fz_attr_mdns_ptr	mdns_ptr    /* @parm <out_opt> | material density attribute	*/
	);								

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Copy all the object level attributes of one object to another object. All
				attributes in the destination object will be removed prior to the
				copy. Face level attributes will not be copied.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_copy_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							*/
	fz_objt_ptr			dst_obj    		/* @parm <in> | destination object							*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Sets a custom attribute of an object. The attribute is identified
				by its uuid. The attribute data is passed in the data pointer.
				It is the responsibility of the calling code to pass the proper
				attribute data to this function.
		
				If the data argument is passed as NULL, the attribute is
				deleted, if it exists.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_cust_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr			obj,		/* @parm <in> | source object								*/
	fzrt_UUID_td		attr_uuid,  /* @parm <in> | attribute unique identifier					*/
	void				*data		/* @parm <in_opt> | attribute data							*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Gets a custom attribute of an object. The attribute is identified
				by its uuid. The attribute data is retrieved in the data pointer.
				It is the responsibility of the calling code to allocate enough
				space for the data pointer.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_cust_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj,		/* @parm <in> | source object								*/
	fzrt_UUID_td		attr_uuid,  /* @parm <in> | attribute unique identifier					*/
	fzrt_boolean		*has_attr,  /* @parm <out_opt> | TRUE if the object has an attribute of the given type. 
														 FALSE otherwise. 						*/
	void				*data		/* @parm <out_opt> | attribute data							*/
	);

/************************************************************************
	
	@fsfunc_t	
	
	@desc		Sets a custom attribute of a face. The attribute is identified
				by its uuid. The attribute data is passed in the data pointer.
				It is the responsibility of the calling code to pass the proper
				attribute data to this function.
				
				If the data argument is passed as NULL, the attribute is
				deleted, if it exists.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_face_cust_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj, 			/* @parm <in> | source object								*/
	fzrt_int				findx, 		/* @parm <in> | face index									*/	
	fzrt_UUID_td		attr_uuid,  /* @parm <in> | attribute unique identifier					*/
	void				*data		/* @parm <in_opt> | attribute data							*/
	);
											
/************************************************************************
	
	@fsfunc_t	
	
	@desc		Gets a custom attribute of a face. The attribute is identified
				by its uuid. The attribute data is retrieved in the data pointer.
				It is the responsibility of the calling code to allocate enough
				space for the data pointer.
		
	@return		Error codes
	
	@avail		5.0.0.0

	@see		

	@exfile		

	@toc		modl_attr
											
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_face_cust_func) (
	fzrt_int 				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr		obj,		/* @parm <in> | source object								*/
	fzrt_int				findx, 		/* @parm <in> | face index									*/	
	fzrt_UUID_td		attr_uuid,  /* @parm <in> | attribute unique identifier					*/
	fzrt_boolean		*has_attr,  /* @parm <out_opt> | TRUE if the object has an attribute of the given type. 
														 FALSE otherwise. 						*/
	void				*data		/* @parm <out_opt> | attribute data							*/
	);


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

	@fsfunc_t	

	@desc		Gets the pointer of the attribute prototype, given the attribute's name.
				The prototype pointer is used throughout the generic attribute functions
				to identify a particular attribute.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_proto_ptr_func) (	
	char				*attr_name,		/* @parm <in> | the name of the attribute, as seen in the Attributes Manager dialog */
	fz_attr_proto_ptr	*attr_proto		/* @parm <out> | The attribute prototype pointer */
	);

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

	@fsfunc_t	

	@desc		Gets the pointer of the attribute prototype, given the attribute's UUID.
				The prototype pointer is used throughout the generic attribute functions
				to identify a particular attribute.

	@return		error

	@avail		6.5.4.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_proto_ptr_from_UUID_func) (	
	fzrt_UUID_td		uuid,			/* @parm <in> | the uuid of the attribute */
	fz_attr_proto_ptr	*attr_proto		/* @parm <out> | The attribute prototype pointer */
	);

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

	@fsfunc_t	

	@desc		Gets the number of fields of a plugin or user defined attribute. The
				attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr. 
				For a plugin attribute, the number of fields is determined by the plugin's 
				fz_attr_cbak_get_field_count callback function. Therefore, a plugin attribute may
				choose not to publish all its fields (as seen in the attribute's editor dialog).
				For user defined attributes, the number of fields is the same as the fields shown 
				in the Attributes Manager dialog.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_count_func) (	
	fz_attr_proto_ptr	attr_proto,	/* @parm <in> | The attribute prototype pointer */
	fzrt_int				*nfields	/* @parm <out> | The number of fields for the given attribute */
	);

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

	@fsfunc_t	

	@desc		Gets the index of a field, given the field name.
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_indx_func) (	
	fz_attr_proto_ptr			attr_proto,		/* @parm <in> | The attribute prototype pointer */
	char						*field_name,	/* @parm <in> | the name of the attribute field, as seen in the Attributes Manager dialog */
	fzrt_int						*field_indx		/* @parm <out> | The index of the field */
	);

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

	@fsfunc_t	

	@desc		Gets the name of a field of an attribute. 
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_name_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	char				*field_name,	/* @parm <out> | The name of the field */
	fzrt_int				max_len			/* @parm <in> | The maximum number of characters to copy into field_name. */
	);

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

	@fsfunc_t	

	@desc		Gets the default value of a field of an attribute. 
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_default_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	fz_type_td			*fz_data		/* @parm <out> | The default value of the attribute field */
	);

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

	@fsfunc_t	

	@desc		Gets the minimum value of a field of an attribute. 
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_min_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	fz_type_td			*fz_data		/* @parm <out> | The minimum value of the attribute field */
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Gets the maximum value of a field of an attribute. 
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_max_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	fz_type_td			*fz_data		/* @parm <out> | The maximum value of the attribute field */
	);

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

	@fsfunc_t	

	@desc		Gets the value list uuid of a field of an attribute. This is only
				meaningful if the field uses a value list. That is, the API call
				fz_objt_attr_get_field_type must return FZ_ATTR_FIELD_TYPE_VLST for that field.
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_vlist_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	fzrt_UUID_td		vlist_uuid		/* @parm <out> | The uuid of the value list used by the attribute field */
	);

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

	@enum	attribute field data type.

	@desc	attribute field data type. This enum is used to specify the
			data type of a field of a custom attribute. It is used to
			return this information via the fz_attr_cbak_get_field_info callback function

	@avail	5.0.0.0

	@see	<auto>

	@toc	modl_attr

*********************************************************************************************************/
typedef enum fz_attr_field_type_enum
{
	FZ_ATTR_FIELD_TYPE_INTG = 0,	/* @emem the field defines an whole (integer) number. The value of the field is stored as an integer number (fzrt_int). */
	FZ_ATTR_FIELD_TYPE_FRCT,		/* @emem the field defines a fractional number, displayed with a decimal point.
											 The precision and # of decimal points is determined by the setting in the
											 working units dialog. The value of the field is stored as a floating point number (double). */
	FZ_ATTR_FIELD_TYPE_DIST,		/* @emem the field defines a linear distance, displayed according to the setting in the
											 working units dialog. The value of the field is stored as a floating point number (double).
											 The stored value is assumed to always be in inches or centimeters, depending on the unit system of the project. */
	FZ_ATTR_FIELD_TYPE_AREA,		/* @emem the field defines an area. The value of the field is stored as a floating point number (double).
											 The stored value is assumed to always be in square inches or square centimeters, depending on the unit system of the project. */
	FZ_ATTR_FIELD_TYPE_VOLM,		/* @emem the field defines a volume. The value of the field is stored as a floating point number (double). 
											 The stored value is assumed to always be in cubic inches or cubic centimeters, depending on the unit system of the project. */
	FZ_ATTR_FIELD_TYPE_ANGL,		/* @emem the field defines an angle, displayed according to the setting in the
											 working units dialog. The value of the field is stored as a floating point number (double). 
											 The stored value is assumed to always be in radians. */
	FZ_ATTR_FIELD_TYPE_PCNT,		/* @emem the field defines a percentage. That is, the actual value of an attribute
											 field is multiplied by 100 when shown in the dialog. The value of the field is stored as a floating point number (double). */
	FZ_ATTR_FIELD_TYPE_CRCY,		/* @emem the field defines a currency value. The currency format is determined
											 by the settings in the operating system. The value of the field is stored as a floating point number (double). */
	FZ_ATTR_FIELD_TYPE_DATE,		/* @emem the field defines a date (day, month and year). The date format is determined
											 by the settings in the operating system. The value of the field is stored as an integer number (fzrt_int). */
	FZ_ATTR_FIELD_TYPE_DURN,		/* @emem the field defines a time duration (hours, minutes and seconds). The value of the field is stored as an integer number (fzrt_int). */
	FZ_ATTR_FIELD_TYPE_BOOL,		/* @emem the field defines a boolean value (TRUE or FALSE). The value of the field is stored as a boolean (fzrt_boolean). */
	FZ_ATTR_FIELD_TYPE_STNG,		/* @emem the field defines a string value, such as a name. It can contain a maximum
											 of 256 characters. The value of the field is stored as a string (fz_string_td). */
	FZ_ATTR_FIELD_TYPE_VLST,		/* @emem the field defines a value list. A value list shows up as a menu with user defined items. */
	FZ_ATTR_FIELD_TYPE_TIME,		/* @emem the field defines a time of day (hours, minutes and seconds). The time format is determined
											 by the settings in the operating system. The value of the field is stored as an integer number (fzrt_int). */
	
	FZ_ATTR_FIELD_TYPE_MAX

} fz_attr_field_type_enum;

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

	@fsfunc_t	

	@desc		Gets the data type of a field of an attribute. 
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. 

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_type_func) (	
	fz_attr_proto_ptr	attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int				field_indx,		/* @parm <in> | The index of the attribute field */
	fz_attr_field_type_enum	*type		/* @parm <out> | The data type of the attribute field */
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Get the range of a field of an attribute. The flags parameter is a
				fzrt_int, where the information is bit encoded as follows :<nl>
				FZ_ATTR_FIELD_RANGE_MIN 	 : the field uses a minimum value<nl>
				FZ_ATTR_FIELD_RANGE_MIN_INCL : the field uses a minimum value and the 
											   minimum value is inclusive (allowed)<nl>
				FZ_ATTR_FIELD_RANGE_MAX 	 : the field uses a maximum value<nl>
				FZ_ATTR_FIELD_RANGE_MAX_INCL : the field uses a maximum value and the 
											   maximum value is inclusive (allowed)<nl>
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index.  

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_flags_func) (	
	fz_attr_proto_ptr		attr_proto,		/* @parm <in> | The attribute prototype pointer */
	fzrt_int					field_indx,		/* @parm <in> | The index of the attribute field */
	fzrt_int					*flags			/* @parm <out> | The flags of the attribute field */
	);

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

	@fsfunc_t	

	@desc		Gets the value of a field of an attribute, which is assigned to an object
				The attribute is identified the prototype pointer, which can be
				retrieved from the attributes name by calling fz_objt_attr_get_proto_ptr.
				The field is identified by its index. If the object does not have an
				attribute of the given type assigned to it, an error is returned.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_field_value_func) (	
	fzrt_int					windex,			/*	@parm	<in> |	project window index 	*/
	fz_objt_ptr				obj, 			/*	@parm 	<in> |	the object, from which to retrieve the attribute field value */
	fz_attr_proto_ptr		attr_proto,		/* 	@parm	<in> | The attribute prototype pointer */
	fzrt_int					field_indx,		/* 	@parm 	<in> | The index of the attribute field */
	fz_type_td				*fz_data		/*	@parm <out> | The value of the attribute field */
	);



/************************************************************************
	
	@fsfunc_t
	
	@desc		Sets the receive ambient occlusion status of an object.
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_get_objt_ao_recv

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_ao_recv_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr				obj,    	/* @parm <in> | object						*/
	fzrt_boolean			rndr_bdrp	/* @parm <in> | receive ambient occlusion status	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the receive ambient occlusion status of an object. This attribute
				does not have a layer override. Therefore the true object attribute
				is always returned
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_set_objt_ao_recv

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_ao_recv_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr				obj,    	/* @parm <in> | object						*/
	fzrt_boolean			*rndr_bdrp	/* @parm <out> | receive ambient occlusion status	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same receive ambient occlusion
				attribute.
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_set_objt_ao_recv,fz_objt_attr_get_objt_ao_recv

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_ao_recv_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr		obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr		obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Sets the cause ambient occlusion status of an object.
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_get_objt_ao_cause

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_ao_cause_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr				obj,    	/* @parm <in> | object						*/
	fzrt_boolean			rndr_bdrp	/* @parm <in> | cause ambient occlusion status	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the cause ambient occlusion status of an object. This attribute
				does not have a layer override. Therefore the true object attribute
				is always returned
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_set_objt_ao_cause

	@exfile		<scdir>/Utilities | util_attr_basic.fsl

	@toc		modl_attr

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_ao_cause_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_objt_ptr				obj,    	/* @parm <in> | object						*/
	fzrt_boolean			*rndr_bdrp	/* @parm <out> | cause ambient occlusion status	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Checks whether two objects have the same cause ambient occlusion
				attribute.
	
	@return		Error codes
	
	@avail		6.5.0.0

	@see		fz_objt_attr_set_objt_ao_cause,fz_objt_attr_get_objt_ao_cause

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_objt_ao_cause_are_equal_func) (	
	fzrt_int			windex1, 	/* @parm <in> | project 1								*/
	fz_objt_ptr		obj1,		/* @parm <in> | object 1								*/
	fzrt_int			windex2, 	/* @parm <in> | project 2								*/
	fz_objt_ptr		obj2, 		/* @parm <in> | object 2								*/
	fzrt_boolean	*are_equal  /* @parm <out> | TRUE if attributes are equal, FALSE otherwise.	*/
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the number of attributes used by an object (also includes attributes
				used by faces). This function can be used to create a loop through all
				attributes used by a given object. fz_objt_attr_get_attr_uuid is used
				to access the n-th attribute for an object.
	
	@return		Error codes
	
	@avail		6.5.4.0

	@see		fz_objt_attr_get_attr_uuid

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_attr_count_func) (	
	fzrt_int			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 	obj,		/* @parm <in> | object									*/
	fzrt_int			*count 		/* @parm <out> | The number of attributes used by the object */
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the n-th attribute used by an object. The indx argument must be
				between 0 and the number returned by fz_objt_attr_get_attr_count. 
				This function can be used to create in a loop through all
				attributes used by a given object.
	
	@return		Error codes
	
	@avail		6.5.4.0

	@see		fz_objt_attr_get_attr_count

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_attr_uuid_func) (	
	fzrt_int			windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 	obj,		/* @parm <in> | object									*/
	fzrt_int			indx, 		/* @parm <in> | The attribute index, must be >= 0 and < value returned by fz_objt_attr_get_attr_count */
	fzrt_UUID_td	uuid 		/* @parm <out> | The uuid of the n-th attribute */
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the object's edge color. if display is TRUE, it takes all overwrites into account.
				(use material, layer override ... ). If display is FALSE, the actual rgb
				color attribute is returned (i.e. no overrides).
	
	@return		Error codes
	
	@avail		7.0.0.0

	@see		fz_objt_attr_set_objt_ecol

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_ecol_func) (	
	fzrt_int				windex, 	/* @parm <in> | project window index */
	fz_objt_ptr 		obj,		/* @parm <in> | object									*/
	fzrt_boolean		display,	/* @parm <in> | get from display context or attribute. */
	fzrt_rgb_color_td	*ecol 		/* @parm <out> | The rgb color for the object edge */
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the n-th attribute used by an object. The indx argument must be
				between 0 and the number returned by fz_objt_attr_get_attr_count. 
				This function can be used to create in a loop through all
				attributes used by a given object.
	
	@return		Error codes
	
	@avail		7.0.0.0

	@see		fz_objt_attr_get_objt_ecol

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_ecol_func) (	
	fzrt_int				windex, 	/* @parm <in> | project window index 			  */
	fz_objt_ptr 		obj,		/* @parm <in> | object							  */
	fzrt_rgb_color_td	*ecol 		/* @parm <in> | The rgb color for the object edge */
	);

/************************************************************************
	
	@fsfunc_t
	
	@desc		Gets the object's Edge Color : Use material attribute
	
	@return		Error codes
	
	@avail		7.0.0.0

	@see		fz_objt_attr_set_objt_ecol_use_matl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_get_objt_ecol_use_matl_func) (	
	fzrt_int				windex, 		/* @parm <in> | project window index 					*/
	fz_objt_ptr 		obj,			/* @parm <in> | object									*/
	fzrt_boolean		*ecol_use_mal	/* @parm <out> | The edge color use material attribute 	*/
	);
	
/************************************************************************
	
	@fsfunc_t
	
	@desc		Sets the object's Edge Color : Use material attribute
	
	@return		Error codes
	
	@avail		7.0.0.0

	@see		fz_objt_attr_get_objt_ecol_use_matl

	@toc		modl_attr
	
*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_objt_attr_set_objt_ecol_use_matl_func) (	
	fzrt_int				windex, 		/* @parm <in> | project window index 					*/
	fz_objt_ptr 		obj,			/* @parm <in> | object									*/
	fzrt_boolean		ecol_use_mal	/* @parm <in> | The edge color use material attribute 	*/
	);

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

	@fset	fz_objt_attr_fset

	@desc	Object Attributes Function Set

	@avail	5.0.0.0

	@toc	modl_attr

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

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

	@fsdef	Object Attributes function set UUID.

*********************************************************************************************************/
#define FZ_OBJT_ATTR_FSET_TYPE		"\x1c\xd7\x4e\x5a\x0c\xed\x4a\x6b\xb8\x5d\x8e\xe3\xb2\xe2\xa3\x61"	/* Reference : 26 */

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

	@fsdef	Object Attributes function set name.

*********************************************************************************************************/
#define FZ_OBJT_ATTR_FSET_NAME		"formZ Object Attribute Functions"

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

	@fsdef	Object Attributes function set version.

*********************************************************************************************************/
#define FZ_OBJT_ATTR_FSET_VERSION	FZPL_VERS_MAKE(9,2,0,0)

typedef struct fz_objt_attr_fset
{
	fzpl_fset_prvt_data_td				prvt_data;

	
	/************************************************************************
		BASIC ATTRIBUTES
	*************************************************************************/
	fz_objt_attr_set_objt_rmtl_func			fz_objt_attr_set_objt_rmtl;				/* @fsfunc */
	fz_objt_attr_get_objt_rmtl_func			fz_objt_attr_get_objt_rmtl;				/* @fsfunc */
	fz_objt_attr_objt_rmtl_are_equal_func		fz_objt_attr_objt_rmtl_are_equal;			/* @fsfunc */
	fz_objt_attr_set_face_rmtl_func			fz_objt_attr_set_face_rmtl;				/* @fsfunc */
	fz_objt_attr_get_face_rmtl_func			fz_objt_attr_get_face_rmtl;				/* @fsfunc */
	fz_objt_attr_face_rmtl_are_equal_func		fz_objt_attr_face_rmtl_are_equal;			/* @fsfunc */
	fz_objt_attr_clear_face_rmtl_func			fz_objt_attr_clear_face_rmtl;				/* @fsfunc */
	fz_objt_attr_clear_all_face_rmtl_func		fz_objt_attr_clear_all_face_rmtl;			/* @fsfunc */
	fz_objt_attr_set_face_smth_func			fz_objt_attr_set_face_smth;				/* @fsfunc */
	fz_objt_attr_get_face_smth_func			fz_objt_attr_get_face_smth;				/* @fsfunc */
	fz_objt_attr_face_smth_are_equal_func		fz_objt_attr_face_smth_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_visib_func			fz_objt_attr_set_objt_visib;				/* @fsfunc */
	fz_objt_attr_get_objt_visib_func			fz_objt_attr_get_objt_visib;				/* @fsfunc */
	fz_objt_attr_objt_visib_are_equal_func		fz_objt_attr_objt_visib_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_layer_func			fz_objt_attr_set_objt_layer;				/* @fsfunc */
	fz_objt_attr_get_objt_layer_func			fz_objt_attr_get_objt_layer;				/* @fsfunc */
	fz_objt_attr_objt_layer_are_equal_func		fz_objt_attr_objt_layer_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_lock_func			fz_objt_attr_set_objt_lock;				/* @fsfunc */
	fz_objt_attr_get_objt_lock_func			fz_objt_attr_get_objt_lock;				/* @fsfunc */
	fz_objt_attr_objt_lock_are_equal_func		fz_objt_attr_objt_lock_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_snap_func			fz_objt_attr_set_objt_snap;				/* @fsfunc */
	fz_objt_attr_get_objt_snap_func			fz_objt_attr_get_objt_snap;				/* @fsfunc */
	fz_objt_attr_objt_snap_are_equal_func		fz_objt_attr_objt_snap_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_shad_cast_func		fz_objt_attr_set_objt_shad_cast;			/* @fsfunc */
	fz_objt_attr_get_objt_shad_cast_func		fz_objt_attr_get_objt_shad_cast;			/* @fsfunc */
	fz_objt_attr_objt_shad_cast_are_equal_func	fz_objt_attr_objt_shad_cast_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_shad_recv_func		fz_objt_attr_set_objt_shad_recv;			/* @fsfunc */
	fz_objt_attr_get_objt_shad_recv_func		fz_objt_attr_get_objt_shad_recv;			/* @fsfunc */
	fz_objt_attr_objt_shad_recv_are_equal_func	fz_objt_attr_objt_shad_recv_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_rndr_wire_func		fz_objt_attr_set_objt_rndr_wire;			/* @fsfunc */
	fz_objt_attr_get_objt_rndr_wire_func		fz_objt_attr_get_objt_rndr_wire;			/* @fsfunc */
	fz_objt_attr_objt_rndr_wire_are_equal_func	fz_objt_attr_objt_rndr_wire_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_rndr_surf_func		fz_objt_attr_set_objt_rndr_surf;			/* @fsfunc */
	fz_objt_attr_get_objt_rndr_surf_func		fz_objt_attr_get_objt_rndr_surf;			/* @fsfunc */
	fz_objt_attr_objt_rndr_surf_are_equal_func	fz_objt_attr_objt_rndr_surf_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_rndr_bdrp_func		fz_objt_attr_set_objt_rndr_bdrp;			/* @fsfunc */
	fz_objt_attr_get_objt_rndr_bdrp_func		fz_objt_attr_get_objt_rndr_bdrp;			/* @fsfunc */
	fz_objt_attr_objt_rndr_bdrp_are_equal_func	fz_objt_attr_objt_rndr_bdrp_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_rndr_lwid_func		fz_objt_attr_set_objt_rndr_lwid;			/* @fsfunc */
	fz_objt_attr_get_objt_rndr_lwid_func		fz_objt_attr_get_objt_rndr_lwid;			/* @fsfunc */
	fz_objt_attr_objt_rndr_lwid_are_equal_func	fz_objt_attr_objt_rndr_lwid_are_equal;		/* @fsfunc */
	fz_objt_attr_set_objt_name_func			fz_objt_attr_set_objt_name;				/* @fsfunc */
	fz_objt_attr_get_objt_name_func			fz_objt_attr_get_objt_name;				/* @fsfunc */
	fz_objt_attr_objt_name_are_equal_func		fz_objt_attr_objt_name_are_equal;			/* @fsfunc */
	fz_objt_attr_set_objt_sdns_func			fz_objt_attr_set_objt_sdns;				/* @fsfunc */
	fz_objt_attr_get_objt_sdns_func			fz_objt_attr_get_objt_sdns;				/* @fsfunc */
	fz_objt_attr_objt_sdns_are_equal_func		fz_objt_attr_objt_sdns_are_equal;			/* @fsfunc */
	fz_objt_attr_objt_copy_func				fz_objt_attr_objt_copy;					/* @fsfunc */
	
	/************************************************************************
		DISPLAY RESOLUTION ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_refn_init_func				fz_objt_attr_refn_init;					/* @fsfunc */
	fz_objt_attr_refn_get_func				fz_objt_attr_refn_get;					/* @fsfunc */
	fz_objt_attr_refn_set_func				fz_objt_attr_refn_set;					/* @fsfunc */
	fz_objt_attr_refn_finit_func				fz_objt_attr_refn_finit;					/* @fsfunc */
	fz_objt_attr_refn_are_equal_func			fz_objt_attr_refn_are_equal;				/* @fsfunc */
	fz_objt_attr_refn_copy_func				fz_objt_attr_refn_copy;					/* @fsfunc */
	fz_objt_attr_set_objt_refn_func			fz_objt_attr_set_objt_refn;				/* @fsfunc */
	fz_objt_attr_get_objt_refn_func			fz_objt_attr_get_objt_refn;				/* @fsfunc */
	
	/************************************************************************
		SMOOTH SHADING ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_sshd_init_func				fz_objt_attr_sshd_init;					/* @fsfunc */
	fz_objt_attr_sshd_get_func				fz_objt_attr_sshd_get;					/* @fsfunc */
	fz_objt_attr_sshd_set_func				fz_objt_attr_sshd_set;					/* @fsfunc */
	fz_objt_attr_sshd_finit_func				fz_objt_attr_sshd_finit;					/* @fsfunc */
	fz_objt_attr_sshd_are_equal_func			fz_objt_attr_sshd_are_equal;				/* @fsfunc */
	fz_objt_attr_sshd_copy_func				fz_objt_attr_sshd_copy;					/* @fsfunc */
	fz_objt_attr_set_objt_sshd_func			fz_objt_attr_set_objt_sshd;				/* @fsfunc */
	fz_objt_attr_get_objt_sshd_func			fz_objt_attr_get_objt_sshd;				/* @fsfunc */
	
	/************************************************************************
		RADIOSITY MESHING ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_rmsh_init_func				fz_objt_attr_rmsh_init;					/* @fsfunc */
	fz_objt_attr_rmsh_get_func				fz_objt_attr_rmsh_get;					/* @fsfunc */
	fz_objt_attr_rmsh_set_func				fz_objt_attr_rmsh_set;					/* @fsfunc */
	fz_objt_attr_rmsh_finit_func				fz_objt_attr_rmsh_finit;					/* @fsfunc */
	fz_objt_attr_rmsh_are_equal_func			fz_objt_attr_rmsh_are_equal;				/* @fsfunc */
	fz_objt_attr_rmsh_copy_func				fz_objt_attr_rmsh_copy;					/* @fsfunc */
	fz_objt_attr_set_objt_rmsh_func			fz_objt_attr_set_objt_rmsh;				/* @fsfunc */
	fz_objt_attr_get_objt_rmsh_func			fz_objt_attr_get_objt_rmsh;				/* @fsfunc */
	fz_objt_attr_set_face_rmsh_func			fz_objt_attr_set_face_rmsh;				/* @fsfunc */
	fz_objt_attr_get_face_rmsh_func			fz_objt_attr_get_face_rmsh;				/* @fsfunc */
	
	/************************************************************************
		MATERIAL DENSITY ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_mdns_init_func				fz_objt_attr_mdns_init;					/* @fsfunc */
	fz_objt_attr_mdns_get_func				fz_objt_attr_mdns_get;					/* @fsfunc */
	fz_objt_attr_mdns_set_func				fz_objt_attr_mdns_set;					/* @fsfunc */
	fz_objt_attr_mdns_finit_func				fz_objt_attr_mdns_finit;					/* @fsfunc */
	fz_objt_attr_mdns_are_equal_func			fz_objt_attr_mdns_are_equal;				/* @fsfunc */
	fz_objt_attr_mdns_copy_func				fz_objt_attr_mdns_copy;					/* @fsfunc */
	fz_objt_attr_set_objt_mdns_func			fz_objt_attr_set_objt_mdns;				/* @fsfunc */
	fz_objt_attr_get_objt_mdns_func			fz_objt_attr_get_objt_mdns;				/* @fsfunc */
	
	/************************************************************************
		TEXTURE MAP CONTROL ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_get_objt_tctl_count_func			fz_objt_attr_get_objt_tctl_count;				/* @fsfunc */
	fz_objt_attr_add_objt_tctl_fgrp_func		fz_objt_attr_add_objt_tctl_fgrp;			/* @fsfunc */
	fz_objt_attr_delete_objt_tctl_fgrp_func	fz_objt_attr_delete_objt_tctl_fgrp;		/* @fsfunc */
	fz_objt_attr_set_face_tctl_indx_func		fz_objt_attr_set_face_tctl_indx;			/* @fsfunc */
	fz_objt_attr_get_face_tctl_indx_func		fz_objt_attr_get_face_tctl_indx;			/* @fsfunc */
	fz_objt_attr_objt_has_tctl_func			fz_objt_attr_objt_has_tctl;				/* @fsfunc */
	fz_objt_attr_create_objt_tctl_func			fz_objt_attr_create_objt_tctl;				/* @fsfunc */
	fz_objt_attr_clear_objt_tctl_func			fz_objt_attr_clear_objt_tctl;				/* @fsfunc */
	fz_objt_attr_set_objt_tctl_parm_func		fz_objt_attr_set_objt_tctl_parm;			/* @fsfunc */
	fz_objt_attr_get_objt_tctl_parm_func		fz_objt_attr_get_objt_tctl_parm;			/* @fsfunc */
	fz_objt_attr_set_objt_tctl_uv_func			fz_objt_attr_set_objt_tctl_uv;				/* @fsfunc */
	fz_objt_attr_get_objt_tctl_uv_func			fz_objt_attr_get_objt_tctl_uv;				/* @fsfunc */
	
	/************************************************************************
		DECAL ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_get_objt_decal_count_func		fz_objt_attr_get_objt_decal_count;			/* @fsfunc */
	fz_objt_attr_add_objt_decal_grp_func		fz_objt_attr_add_objt_decal_grp;			/* @fsfunc */
	fz_objt_attr_delete_objt_decal_grp_func		fz_objt_attr_delete_objt_decal_grp;		/* @fsfunc */
	fz_objt_attr_set_face_decal_mask_func		fz_objt_attr_set_face_decal_mask;			/* @fsfunc */
	fz_objt_attr_get_face_decal_mask_func		fz_objt_attr_get_face_decal_mask;			/* @fsfunc */
	fz_objt_attr_objt_has_decal_func			fz_objt_attr_objt_has_decal;				/* @fsfunc */
	fz_objt_attr_create_objt_decal_func			fz_objt_attr_create_objt_decal;			/* @fsfunc */
	fz_objt_attr_clear_objt_decal_func			fz_objt_attr_clear_objt_decal;				/* @fsfunc */
	fz_objt_attr_set_objt_decal_parm_func		fz_objt_attr_set_objt_decal_parm;			/* @fsfunc */
	fz_objt_attr_get_objt_decal_parm_func		fz_objt_attr_get_objt_decal_parm;			/* @fsfunc */
	fz_objt_attr_sort_objt_decals_func			fz_objt_attr_sort_objt_decals;				/* @fsfunc */

	/************************************************************************
		CUSTOM ATTRIBUTE
	*************************************************************************/
	fz_objt_attr_get_objt_cust_func			fz_objt_attr_get_objt_cust;				/* @fsfunc */
	fz_objt_attr_set_objt_cust_func			fz_objt_attr_set_objt_cust;				/* @fsfunc */
	fz_objt_attr_get_face_cust_func			fz_objt_attr_get_face_cust;				/* @fsfunc */
	fz_objt_attr_set_face_cust_func			fz_objt_attr_set_face_cust;				/* @fsfunc */

	fz_objt_attr_get_proto_ptr_func			fz_objt_attr_get_proto_ptr;				/* @fsfunc */
	fz_objt_attr_get_field_count_func		fz_objt_attr_get_field_count;			/* @fsfunc */
	fz_objt_attr_get_field_indx_func		fz_objt_attr_get_field_indx;			/* @fsfunc */
	fz_objt_attr_get_field_name_func		fz_objt_attr_get_field_name;			/* @fsfunc */
	fz_objt_attr_get_field_default_func		fz_objt_attr_get_field_default;			/* @fsfunc */
	fz_objt_attr_get_field_min_func			fz_objt_attr_get_field_min;				/* @fsfunc */
	fz_objt_attr_get_field_max_func			fz_objt_attr_get_field_max;				/* @fsfunc */
	fz_objt_attr_get_field_vlist_func		fz_objt_attr_get_field_vlist;			/* @fsfunc */
	fz_objt_attr_get_field_type_func		fz_objt_attr_get_field_type;			/* @fsfunc */
	fz_objt_attr_get_field_flags_func		fz_objt_attr_get_field_flags;			/* @fsfunc */
	fz_objt_attr_get_field_value_func		fz_objt_attr_get_field_value;			/* @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.									*
	 *																					*
	 ************************************************************************************/

	fz_objt_attr_set_objt_ao_recv_func			fz_objt_attr_set_objt_ao_recv;			/* @fsfunc */
	fz_objt_attr_get_objt_ao_recv_func			fz_objt_attr_get_objt_ao_recv;			/* @fsfunc */
	fz_objt_attr_objt_ao_recv_are_equal_func	fz_objt_attr_objt_ao_recv_are_equal;	/* @fsfunc */
	
	fz_objt_attr_set_objt_ao_cause_func			fz_objt_attr_set_objt_ao_cause;			/* @fsfunc */
	fz_objt_attr_get_objt_ao_cause_func			fz_objt_attr_get_objt_ao_cause;			/* @fsfunc */
	fz_objt_attr_objt_ao_cause_are_equal_func	fz_objt_attr_objt_ao_cause_are_equal;	/* @fsfunc */

	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 6.0.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_objt_attr_get_proto_ptr_from_UUID_func	fz_objt_attr_get_proto_ptr_from_UUID;	/* @fsfunc */
	fz_objt_attr_get_attr_count_func			fz_objt_attr_get_attr_count;			/* @fsfunc */
	fz_objt_attr_get_attr_uuid_func				fz_objt_attr_get_attr_uuid;				/* @fsfunc */
	fz_objt_attr_get_objt_ecol_func				fz_objt_attr_get_objt_ecol;				/* @fsfunc */
	fz_objt_attr_set_objt_ecol_func				fz_objt_attr_set_objt_ecol;				/* @fsfunc */
	fz_objt_attr_get_objt_ecol_use_matl_func	fz_objt_attr_get_objt_ecol_use_matl;	/* @fsfunc */
	fz_objt_attr_set_objt_ecol_use_matl_func	fz_objt_attr_set_objt_ecol_use_matl;	/* @fsfunc */
	
	fz_objt_attr_set_objt_lsty_func				fz_objt_attr_set_objt_lsty;				/* @fsfunc */
	fz_objt_attr_get_objt_lsty_func				fz_objt_attr_get_objt_lsty;				/* @fsfunc */
	fz_objt_attr_set_objt_lwgt_func				fz_objt_attr_set_objt_lwgt;				/* @fsfunc */
	fz_objt_attr_get_objt_lwgt_func				fz_objt_attr_get_objt_lwgt;				/* @fsfunc */

	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 8.1.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_objt_attr_set_no_ndsp_func				fz_objt_attr_set_no_ndsp;				/* @fsfunc */
	fz_objt_attr_get_no_ndsp_func				fz_objt_attr_get_no_ndsp;				/* @fsfunc */

	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 8.5.5.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_objt_attr_get_ndsp_parm_data_func		fz_objt_attr_get_ndsp_parm_data;				/* @fsfunc */
	fz_objt_attr_set_ndsp_parm_data_func		fz_objt_attr_set_ndsp_parm_data;				/* @fsfunc */
	
	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 8.7.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_facet_scheme_create_func			fz_facet_scheme_create;				/* @fsfunc */
	fz_facet_scheme_delete_func			fz_facet_scheme_delete;				/* @fsfunc */
	fz_facet_scheme_parm_get_func		fz_facet_scheme_parm_get;			/* @fsfunc */
	fz_facet_scheme_parm_set_func		fz_facet_scheme_parm_set;			/* @fsfunc */
	fz_facet_scheme_parm_compare_func	fz_facet_scheme_parm_compare;		/* @fsfunc */
	fz_facet_scheme_parm_copy_func		fz_facet_scheme_parm_copy;			/* @fsfunc */
	
	/************************************************************************************
	 *																					*
	 *		DO NOT MAKE ANY CHANGES TO THE ABOVE FUNCTIONS!!!							*
	 *		DO NOT ADD ANY FUNCTION ABOVE THIS LINE!!!									*
	 *		@comm  End of version 9.2.0.0 functions.									*
	 *																					*
	 ************************************************************************************/
	fz_objt_attr_get_objt_decal_uvs_func		fz_objt_attr_get_objt_decal_uvs;			/* @fsfunc */

}  fz_objt_attr_fset;

/* name fixes for 5.5.0.0, keep old names for compatibility - RWB 07/07/05 */
#define fz_objt_attr_get_obj_n_decal	fz_objt_attr_get_objt_decal_count
#define fz_objt_attr_add_obj_decal_grp	fz_objt_attr_add_objt_decal_grp

/************************************************************************
*************************************************************************
						CUSTOM ATTRIBUTE PLUGIN
**************************************************************************
*************************************************************************/

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

	@module	Object Attributes

	@desc	formZ is equipped with a set of standard attributes, such as surface styles,
			layers, shadow casting or visibility. With this function set, it is possible
			to create custom attributes in a plugin by
			registering a function set with a plugin. Multiple attribute function
			sets may be installed with a single plugin. This allows a plugin to offer a
			suite of attribute types, which logically belong together in a single package.
			
			
	@toc	modl_attr_cbak

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



/************************************************************************
*************************************************************************
			CUSTOM ATTRIBUTE FUNCTION SET AND ITS CALLBACKS
**************************************************************************
*************************************************************************/

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

	@fsfunc_t	

	@desc		Custom attribute uuid function (Required). This function is called
				at system startup. It is expected to return a unique identifier
				for the custom attribute.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_uuid_func) (
	fzrt_UUID_td			uuid 		/*	@parm	<out> |	The uuid of the attribute. */
	);

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

	@fsfunc_t	

	@desc		Custom attribute name function (Required). This function is called
				at system startup. It is expected to return a name string
				for the custom attribute. The name cannot be longer than 
				max_name.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_name_func) (
	char		*name,		/*	@parm	<out> |	The name of the attribute. */
	fzrt_int		max_name	/*	@parm	<in>  |	The maximum numbers of characters for the name. */
	);
	
/********************************************************************************************************

	@enum

	@desc	Indicates which level in formZ uses a particular custom attribute.
			These flags are used in the plugin supplied fz_attr_cbak_info_func.
			For example, if a plugin wants to indicate that its attribute is used 
			by the object and face level, the flags returned are set :
			
	@expl	FZ_SETBIT(*level_flags,FZ_ATTR_LEVEL_OBJT);
		 	FZ_SETBIT(*level_flags,FZ_ATTR_LEVEL_FACE);

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_attr_cbak

*********************************************************************************************************/
typedef enum fz_attr_level_enum
{
	FZ_ATTR_LEVEL_OBJT= 0,	/*  @emem The attribute is used by the object level		*/
	FZ_ATTR_LEVEL_FACE		/*  @emem The attribute is used by the face level		*/

} fz_attr_level_enum;

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

	@enum

	@desc	These bit encoded flags give basic information about the nature of
			the attribute. These flags are used in the plugin supplied fz_attr_cbak_info.
			For example, if a plugin wants to indicate
			that its attribute is to be added to all new objects and that it
			is to be shown in the query attributes dialog, the flags argument of
			the fz_attr_cbak_info callback function can be set as follows :
			
	@expl	FZ_SETBIT(*flags,ATTR_FLAGS_ADD_ALWAYS);
			FZ_SETBIT(*flags,FZ_ATTR_FLAGS_SHOW_QUERY);

	@avail	5.0.0.0

 	@see	<auto>

	@toc	modl_attr_cbak

*********************************************************************************************************/
typedef enum fz_attr_flags_enum
{
	FZ_ATTR_FLAGS_ADD_OBJ_ALWAYS = 0,	/*  @emem  The attribute will always be added to a new object.
											   When this is done, the fz_attr_cbak_deflt callback
											   function is invoked to set the default parameters. */
	FZ_ATTR_FLAGS_SHOW_QUERY,			/*  @emem  A button with the attributes name will be shown
											   in the respective Query Attributes dialog. The button
											   will only be shown, if the entity has an attribute
											   of the given type assigned to it. When pressed, the
											   attribute dialog, which is set up by the
											   fz_attr_cbak_iface_tmpl callback function, will be invoked. */
	FZ_ATTR_FLAGS_SHOW_QUERY_ALWAYS,	/*  @emem  A button with the attributes name will be shown
											   in the respective Query Attributes dialog. The button
											   will always be shown, regardless of whether the 
											   attribute is assigned to the entity or not. When pressed, the
											   attribute dialog, which is set up by the
											   fz_attr_cbak_iface_tmpl callback function, will be invoked. If
											   the attribute does not exist with the entity, formZ
											   will automatically create the attribute. This will invoke
											   the fz_attr_cbak_deflt callback function. */
	FZ_ATTR_FLAGS_TEMPORARY			/*  @emem  The attribute will only exist during the runtime session
											   of formZ. The attribute content will not be read to or
											   written from file. When combined with the FZ_ATTR_FLAGS_SHOW_QUERY
											   and FZ_ATTR_FLAGS_SHOW_QUERY_ALWAYS not set, it allows a
											   plugin to create an attribute which is invisible to the
											   user. */

} fz_attr_flags_enum;

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

	@fsfunc_t	

	@desc		Custom attribute info function (Required). This function is called
				at system startup. It is expected to return basic information
				about the attribute. The info to be returned is :<nl>
				<nl>
				size : the size of the attribute data in # of bytes.<nl>
				<nl>
				level_flags : the levels by which the attribute is used. 
				Attributes can be used on the face and object level and may be 
				used by more than one level at a time. For example, the
				surface style attribute is used by the object and face level.
				The levels used by the attribute are bit encoded in the level_flags
				parameter. The bits are defined in fz_attr_level_enum.
				For example to indicate, that an attribute is used by the
				object and face level, the level_flags is set : <nl>
				<nl>
				*level_flags = 0;<nl>
				FZ_SETBIT(*level_flags,FZ_ATTR_LEVEL_OBJT);<nl>
				FZ_SETBIT(*level_flags,FZ_ATTR_LEVEL_FACE;<nl>
				<nl>
				flags : general information about the attribute. The flags are bit encoded.
				The bits are defined in fz_attr_flags_enum.
				*flags = 0;<nl>
				FZ_SETBIT(*flags,FZ_ATTR_LEVEL_OBJT);<nl>
				FZ_SETBIT(*flags,FZ_ATTR_LEVEL_FACE);<nl>
				
	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_info_func) (
	fzrt_int		*size,			/*	@parm	<out>  |	The size of the attribute data in # of bytes. */
	fzrt_int		*level_flags,	/*	@parm	<out>  |	Bit encoded levels which use the attribute. */
	fzrt_int		*flags 			/*	@parm	<out>  |	Bit encoded flags, which tell formZ basic information about the attribute. */
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute default function (Optional). This function is called
				whenever an attribute is created automatically by formZ. It is
				expected to fill in the default values for the attribute content.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_deflt_func) (
	fzrt_int					windex,		/*	@parm	<in> |	project window index */
	void					*data		/*	@parm	<in> |	attribute data. */
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute transformation function (Optional). This function is called
				whenever an attribute is transformed. Any dimensional fields of the
				attribute should be scaled by the scale portion of the matrix. Any 3d
				location (xyz) should be transformed by the matrix. The scale part of
				the matrix can be retrieved by the math API call fz_math_4x4_mat_to_trl_scl_rot.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_tform_func) (	
	fzrt_int 					windex, 	/*  @parm   <in> |  project window index 	*/
	void					*data,		/*	@parm	<in> |	attribute data. 		*/
	fz_mat4x4_td			*mat		/*	@parm	<in> |	transformation matrix.	*/
	);


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

	@fsfunc_t	

	@desc		Custom attribute finit function (Optional). This function is called
				whenever an attribute is deleted. It allows the plugin to
				free any dynamic memory that may be present in an attribute.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_finit_func) (
	fzrt_int 					windex, 	/*  @parm 	<in> | project window index */
	void					*data		/*	@parm	<in_out> | attribute data. */
	);

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

	@fsfunc_t	

	@desc		Custom attribute copy function (Optional). This function is called
				whenever an attribute is copied. It allows the plugin to
				copy any dynamic memory that may be present in an attribute.
				When this function is called, the actual attribute has already
				been copied into dst_data.

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_attr_cbak_copy_full

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_attr_cbak_copy_func) (
	fzrt_int					src_windex,		/*	@parm 	<in> | source project window index		*/
	void					*src_data, 		/*	@parm	<in> | The source attribute data. 		*/
	fzrt_int					dst_windex,		/*	@parm 	<in> | destination project window index	*/
	void					*dst_data	  	/*	@parm	<in> | The destination attribute data. 	*/
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute copy full function (Optional). This function is called
				whenever an attribute is copied. It allows the plugin to
				copy any dynamic memory that may be present in an attribute.
				When this function is provided, formZ does not copy any attribute 
				data on behalf of the sttribute. This function does all of the copying of data. 

	@return		Error codes

	@avail		5.0.0.0

	@see		fz_attr_cbak_copy

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_attr_cbak_copy_full_func) (
	fzrt_int					src_windex,		/*	@parm 	<in> | source project window index		*/
	void					*src_data, 		/*	@parm	<in> | The source attribute data. 		*/
	fzrt_int					dst_windex,		/*	@parm 	<in> | destination project window index	*/
	void					*dst_data	  	/*	@parm	<in> | The destination attribute data. 	*/
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute compare function (Optional). This function is called
				whenever two attributes are compared to be equal.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_attr_cbak_are_equal_func) (
	void					*attr_data1,	/*	@parm	<in> |	The data of attribute 1. */
	void					*attr_data2,	/*	@parm	<in> |	The data of attribute 2. */
	fzrt_boolean			*are_equal		/*	@parm	<out> |	TRUE, if they are equal, FALSE otherwise. */
	);
	
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute io function (Required). This function is called
				whenever an attribute is written to or read from file.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_attr_cbak_io_func) (
	fzrt_int 					windex, 	/* @parm <in> | project window index */
	fz_iost_ptr				iost, 		/*	@parm	<in> |	The io stream pointer. */
	fz_iost_dir_td_enum		dir,		/*	@parm	<in> |	Reading or writing indicator. */
	fzpl_vers_td * const version, 		/*	@parm	<in_out> |	When reading, this is the version with which the attribute was written.
															When writing, the parameter needs to be set to the attribute's
															current version. It is up to the plugin to keep track of the
															attribute's version.   */
	fzrt_unsigned_int 			size,		/*	@parm	<in> |	When reading, this parameter is the size of the data when it was
															written. When writing, this parameter is unused. */
	void					*data		/*	@parm	<in> |	Pointer to the attribute data from which to write or to which to read. */
	);
												
/************************************************************************

	@fsfunc_t	

	@desc		Custom attribute dialog function (Obsoluete. New fz_attr_cbak_iface_tmpl_multi_func
				should be used from now on). 
				This function is called
				whenever an attribute is edited. It is expected to create the
				dialog template and the editing items to display the content of the attribute. When
				this function is defined and fz_attr_cbak_iface_tmpl_multi_func is not,
				only the attribute of one object can be edited. If more than one object is
				picked, the attribute will not be displayed in the properties palette.

	@return		the dialog template index

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_int 	 (FZRT_SPEC *fz_attr_cbak_iface_tmpl_func) (	
	fzrt_int				windex,					/* @parm	<in> | project window index 		*/
	fz_fuim_tmpl_ptr	fuim_tmpl, 				/*	@parm	<in> |	Pointer to the dialog template. 		*/
	fzrt_ptr			fuim_data				/*	@parm	<in> |	Pointer to the attribute data. 			*/
	);

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

	@fsfunc_t	

	@desc		Custom attribute dialog function for displaying multiple attributes in the
				properties palette (Strongly Recommended). This function is called
				whenever an object is picked and its attributes are displayed in the 
				properties palette. 
				It is expected to create the editing items to display the content of the attribute.
				Noe, that this callback function should not create a new template via fz_fuim_tmpl_init.
				In addition this callback needs to handle mutiple attirbutes, which are
				passed in as an array. The items should be created based on the content of
				the first attribute in the array. Each template item needs to be assigned
				an item callback function. If the attribute value for that item is
				different in at least on other attribute (assuming there is more
				than one attibute passed in), the item callback function needs to
				respond to the FZ_FUIM_ACTN_GET_VALUE action, by setting the return
				value of the item callback to TRUE | 0x8000. 
				In addition, the item callback function eeds to handle the FZ_FUIM_ACTN_NEW_VALUE
				action. If will be invoked after the value of one of the attribute fields
				from the first attribute (which was used to set up the items) was
				changed. The callback now needs to copy the changed value of the field of
				the first attribute to the same field of the other attributes.
				
				Below is pseudo code 
				which shows how this can be done :
				
	@expl		short	my_item_func(
					fz_fuim_tmpl_ptr	fuim_tmpl, 
					fzrt_int 				action, 
					short				item_id, 
					void				*func_data,
					fz_fuim_type_td 	*rv_data)
				{
					short	rv = FALSE;
					switch (action)
					{
						case FZ_FUIM_ACTN_GET_VALUE	:
							switch ( item_id )
							{
								case MY_ATTR_FIELD_1 :
									
									// figure out whether this attr field has multiple values
									...

									if ( multi_values )
									{
										rv = TRUE | 0x8001;
									}
									
								break;
							
							}
					
						break;
				
						case FZ_FUIM_ACTN_NEW_VALUE	:
							
							for (i = 1; i < n_attrs; i++)
							{
								switch ( item_id )
								{
									case MY_ATTR_FIELD_1 :
								
										// copy changed value from first attr to all other attributes
										...
								
									break;
								}
							}
							
							rv = TRUE;
						break;
					}
					
					return(rv);
				}
				

	@return		the dialog template index

	@avail		7.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_int 	 (FZRT_SPEC *fz_attr_cbak_iface_tmpl_multi_func) (	
	fzrt_int				windex,					/* @parm	<in> | project window index 		*/
	fz_fuim_tmpl_ptr	fuim_tmpl, 				/* @parm	<in> | Pointer to the dialog template. 		*/
	short				parent,					/* @parm	<in> | the parent group for the items to be created. */
	fzrt_ptr			*attr_data,				/* @parm	<in> | Array of pointers to "n_attr_data" attributes. */
	fzrt_int				n_attr_data
	);

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

	@fsfunc_t	

	@desc		Custom attribute merge function (Optional). This function is called
				whenever part (or all) of an object was appended to or merged
				with another object. This callback function gives the plugin the
				opportunity to make adjustments to the attributes of appended faces, curves
				segments.
				This function may be called for any of the topological levels
				which contain attribute data.
				
				When this function is called, dst_obj already contains the merged
				data, including any copied attributes. The dst_indx parameter
				contains the face, curve or segment index of the entity which
				was merged, or -1, if the topological level is the object level.
				src_obj is the original object which was merged and src_indx is
				the index of the original face, curve or segment, if the topological 
				level is the object level.
				
				The topo_level parameter indicates for which topological level
				this function is called.

	@return		Error codes

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td 	 (FZRT_SPEC *fz_attr_cbak_objt_merge_func) (
	fzrt_int	   				src_windex,	/* @parm <in> |	project of the source object					*/
	fz_objt_ptr				src_obj, 	/* @parm <in> |	source object									*/
	fzrt_int					src_indx,	/* @parm <in> |	entity index of the source object. If the topo_level parameter is
														FZ_OBJT_TOPO_LEVEL_OBJT, src_indx is passed as -1. If the  topo_level 
														parameter is FZ_OBJT_TOPO_LEVEL_FACE, src_indx is the face index etc. */
	fzrt_int					dst_windex,	/* @parm <in> |	project of the destination object					*/
	fz_objt_ptr				dst_obj,    /* @parm <in> |	destination object									*/
	fzrt_int					dst_indx,   /* @parm <in> |	entity index of the destination object. If the topo_level parameter is
														FZ_OBJT_TOPO_LEVEL_OBJT, dst_indx is passed as -1. If the  topo_level 
										 				parameter is FZ_OBJT_TOPO_LEVEL_FACE, dst_indx is the face index etc. */
	fz_objt_topo_level_enum	topo_level /* @parm <in> |	The topological level for which the merge operation occurs.			*/
	);
				

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

	@fsfunc_t	

	@desc		Custom attribute field count (Optional). This function is called
				by formZ to determine, how many fields of this attribute need to be
				shown to the user. This is, for example, done in the Attributes
				Manager dialog. Note, that this does not necessarily have to be all the
				fields of the attribute, just the ones, that need to be shown to
				the user in the context of attribute and information management.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_get_field_count_func) (
	fzrt_int		*num_fields		/*	@parm	<out> |	The number of fields shown for this attribute. */
	);



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

	@enum	bit encoded attribute field flags.

	@desc	bit encoded attribute field flags. These flags are used by the 
			fz_attr_cbak_get_field_info callback function.
			To set a variable with a bit flag, see FZ_SETBIT, FZ_CLRBIT, FZ_CHKBIT.
			Alternatively, the constants below could be used.

	@avail	5.5.0.0

	@see	<auto>,
			FZ_ATTR_FIELD_RANGE_NONE,
			FZ_ATTR_FIELD_RANGE_MIN,
			FZ_ATTR_FIELD_RANGE_MIN_INCL,
			FZ_ATTR_FIELD_RANGE_MAX
			FZ_ATTR_FIELD_RANGE_MAX_INCL,

	@toc	modl_attr_cbak

*********************************************************************************************************/
typedef enum fz_attr_field_flags_enum
{
	FZ_ATTR_FIELD_RANGE_MIN_BIT = 0,		/* @emem the field uses the minimum range */
	FZ_ATTR_FIELD_RANGE_MIN_INCL_BIT,		/* @emem if the field uses the minimum range, the minimum value is included (allowed) */
	FZ_ATTR_FIELD_RANGE_MAX_BIT,			/* @emem the field uses the maximum range */
	FZ_ATTR_FIELD_RANGE_MAX_INCL_BIT		/* @emem if the field uses the maximum range, the maximum value is included (allowed) */
	
} fz_attr_field_flags_enum;


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

	@grpbegin	Attribute Field Flags Constants

	@desc		These defines are used when specifying the range an attribute field can take. 
				They set how the boundaries of a range are handled.
				They need to be OR-ed together to specify more
				than one flag. For example to
				specify that a field uses the minimum range and the minimum value is inclusive use the
				following code : 
				flags = FZ_ATTR_FIELD_RANGE_MIN <bar> FZ_ATTR_FIELD_RANGE_MIN_INCL;

	@avail		5.0.0.0
	
	@see		fz_attr_field_flags_enum

	@toc		modl_attr_cbak

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

	@gdef	

	@desc	There are no mimimum or maximum values for the range.<nl>
			If minimum and maximum values are specified, they are ignored.

	@avail	5.5.0.0

	@toc	modl_attr_cbak

*********************************************************************************************************/
#define FZ_ATTR_FIELD_RANGE_NONE			0
/********************************************************************************************************

	@gdef	

	@desc	The minimum allowable value in the range must be greater than the specified minimum.

	@avail	5.0.0.0

*********************************************************************************************************/
#define	FZ_ATTR_FIELD_RANGE_MIN				(1<<FZ_ATTR_FIELD_RANGE_MIN_BIT)
/********************************************************************************************************

	@gdef	

	@desc	The minimum allowable value in the range must be greater than or equal to the specified minimum.

	@avail	5.0.0.0

*********************************************************************************************************/
#define FZ_ATTR_FIELD_RANGE_MIN_INCL		(1<<FZ_ATTR_FIELD_RANGE_MIN_INCL_BIT)
/********************************************************************************************************

	@gdef	

	@desc	The maximum allowable value in the range must be less than the specified maximum.

	@avail	5.0.0.0

*********************************************************************************************************/
#define	FZ_ATTR_FIELD_RANGE_MAX				(1<<FZ_ATTR_FIELD_RANGE_MAX_BIT)
/********************************************************************************************************

	@gdef	

	@desc	The maximum allowable value in the range must be less than or equal to the specified maximum.

	@avail	5.0.0.0

*********************************************************************************************************/
#define	FZ_ATTR_FIELD_RANGE_MAX_INCL		(1<<FZ_ATTR_FIELD_RANGE_MAX_INCL_BIT)
/********************************************************************************************************
	@grpend
*********************************************************************************************************/
			


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

	@fsfunc_t	

	@desc		Custom attribute field info (Optional). This function is called
				by formZ to retrieve information about a particular attribute field. The information
				consists of field name, data type, default value, field format,
				minimum and maximum range.
				This information is retrieved, for example, in the Attributes
				Manager dialog. The index passed in needs to be interpreted by the
				plugin to address the proper field in the attribute. The index
				ranges between 0 and the value returned by fz_attr_cbak_get_field_count.
				Note, that it is not necessary to expose all fields of an attribute
				to a user in this fashion, just the ones that needs to be seen in
				the context of attribute and information management. The name returned
				by this function is also used to determine the proper reference in
				an expression in the Information Management dialog.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_get_field_info_func) (
	fzrt_int						field_indx,		/*	@parm	<in> |	The index of the field. Ranges between 0 and the number
																	of fields reported by fz_attr_cbak_get_field_count */
	char						*name,			/*	@parm	<out> |	The name of the field. Each field name must be unique among
																	all the fields of the same attribute. */
	fzrt_int						max_name_len,	/*	@parm	<in> |	The maximum number of characters the name can have. */
	fz_attr_field_type_enum		*field_type,	/*	@parm	<out> |	The formatting type of the field. It also determines, implicitly, which data type is used to store the information. 
																	For the available field types, the data is stored in the following types :
																	FZ_ATTR_FIELD_TYPE_INTG		fzrt_int			<nl>															
																	FZ_ATTR_FIELD_TYPE_FRCT		double			<nl>														
																	FZ_ATTR_FIELD_TYPE_DIST		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_AREA		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_VOLM		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_ANGL		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_PCNT		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_CRCY		double			<nl>																	
																	FZ_ATTR_FIELD_TYPE_DATE		fzrt_int			<nl>																
																	FZ_ATTR_FIELD_TYPE_TIME		fzrt_int			<nl>																
																	FZ_ATTR_FIELD_TYPE_DURN		fzrt_int			<nl>																
																	FZ_ATTR_FIELD_TYPE_BOOL		fzrt_int			<nl>																
																	FZ_ATTR_FIELD_TYPE_STNG		fz_string_td	<nl>															
																	FZ_ATTR_FIELD_TYPE_VLST		fzrt_UUID_td (id of the field) <nl>												
																		*/
	fz_fuim_format_float_enum	*unit_fmt_flt,/*	@parm	<out> |	 The unit format in which the value of the attribute field is displayed, if the field
																	 represents a double value (see field type value). The appropriate enum must be
																	 chosen. For example, if the field type is FZ_ATTR_FIELD_TYPE_AREA, unit_fmt_flt may be
																	 FZ_FUIM_FORMAT_FLOAT_AREA_SQIN or FZ_FUIM_FORMAT_FLOAT_AREA_SQKM, but not
																	 FZ_FUIM_FORMAT_FLOAT_VOLUME_CUIN. */
	
	fz_fuim_format_int_enum		*unit_fmt_int,/*	@parm	<out> |	 The unit format in which the value of the attribute field is displayed, if the field
																	 represents a fzrt_int value (see field type value). The appropriate enum must be
																	 chosen. For example, if the field type is FZ_ATTR_FIELD_TYPE_DATE, unit_fmt_int may be
																	 FZ_FUIM_FORMAT_INT_DATE_NATIVE, but not  FZ_FUIM_FORMAT_INT_DURN_HHMMSS. */

	fz_type_td					*def_value,		/*	@parm	<out> |	The default value for this field. Depending on the data type of the field, the fz_type_td needs to be set with the proper function. */
	fz_type_td					*min_value,		/*	@parm	<out> |	The minimum value allowed for this field. This argument only needs to be set for integer or floating point fields. */
	fz_type_td					*max_value,		/*	@parm	<out> |	The maximum value allowed for this field. This argument only needs to be set for integer or floating point fields. */
	fzrt_UUID_td				vlist_uuid,		/*	@parm	<out> |	If the field uses a value list (i.e. field_type is FZ_ATTR_FIELD_TYPE_VLST), the UUID of the value list is returned by this argument. */
	fzrt_int						*flags			/*	@parm	<out> |	Bit encoded flags, that determine, whether to use the minimum or maximum value,
																	and if so, whether the minimum or maximum value is inclusive */
	);

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

	@fsfunc_t	

	@desc		Custom attribute field info (Optional). This function is called
				by formZ to retrieve information about a particular attribute field. The information
				consists of field name, data type, default value, field format,
				minimum and maximum range.
				This information is retrieved, for example, in the Attributes
				Manager dialog. The index passed in needs to be interpreted by the
				plugin to address the proper field in the attribute. The index
				ranges between 0 and the value returned by fz_attr_cbak_get_field_count.
				Note, that it is not necessary to expose all fields of an attribute
				to a user in this fashion, just the ones that needs to be seen in
				the context of attribute and information management. The name returned
				by this function is also used to determine the proper reference in
				an expression in the Information Management dialog.

	@return		error

	@avail		5.0.0.0

	@see		

	@exfile

	@toc		modl_attr_cbak

*************************************************************************/
typedef fzrt_error_td	 (FZRT_SPEC *fz_attr_cbak_get_field_data_func) (
	fzrt_int 					windex, 		/*  @parm 	<in> |	project window index 	*/
	fz_objt_ptr				obj, 			/*	@parm 	<in> |	object					*/
	void					*data,			/*	@parm	<in> |	attribute data. */
	fzrt_int					field_indx,		/*	@parm	<in> |	The index of the field. Ranges between 0 and the number
																of fields reported by fz_attr_cbak_get_field_count */
	fz_type_td				*value			/*	@parm	<out> |	The value for this field. */
	);

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

	@plfset	fz_attr_cbak_fset

	@desc	Function set for a custom attribute. The functions in this set needs to
			be supplied by the plugin or script to implement a custom attribute.
						
			
	@avail	5.0.0.0

	@toc	modl_attr_cbak

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

/* UUID : {4ce7fad9-052e-47d6-bb81-c1e4a602c76b} *//* Reference 1987 */
/********************************************************************************************************

	@fsdef	formZ custom attribute callbacks function set id.

*********************************************************************************************************/
#define FZ_ATTR_CBAK_FSET_TYPE		"\x4c\xe7\xfa\xd9\x05\x2e\x47\xd6\xbb\x81\xc1\xe4\xa6\x02\xc7\x6b"	
/********************************************************************************************************

	@fsdef	formZ custom attribute callbacks function set name.

*********************************************************************************************************/
#define FZ_ATTR_CBAK_FSET_NAME		"FormZ Custom Attribute Callbacks"
/********************************************************************************************************

	@fsdef	formZ custom attribute callbacks function set version.

*********************************************************************************************************/
#define FZ_ATTR_CBAK_FSET_VERSION		FZPL_VERS_MAKE(7,0,0,0)

typedef struct fz_attr_cbak_fset
{
	fzpl_fset_prvt_data_td		prvt_data;

	/* ALL LEVELS CALLBACKS, REQUIRED */
	fz_attr_cbak_name_func			fz_attr_cbak_name;			/* @fsfunc */
	fz_attr_cbak_uuid_func			fz_attr_cbak_uuid;			/* @fsfunc */
	fz_attr_cbak_info_func			fz_attr_cbak_info;			/* @fsfunc */
	fz_attr_cbak_io_func			fz_attr_cbak_io;			/* @fsfunc */

	/* ALL LEVELS CALLBACKS, OPTIONAL */
	fz_attr_cbak_deflt_func			fz_attr_cbak_deflt;			/* @fsfunc */
	fz_attr_cbak_tform_func			fz_attr_cbak_tform;			/* @fsfunc */
	fz_attr_cbak_finit_func			fz_attr_cbak_finit;			/* @fsfunc */
	fz_attr_cbak_copy_func			fz_attr_cbak_copy;			/* @fsfunc */
	fz_attr_cbak_are_equal_func		fz_attr_cbak_are_equal;		/* @fsfunc */
	fz_attr_cbak_iface_tmpl_func	fz_attr_cbak_iface_tmpl;	/* @fsfunc */

	/* OBJECT LEVEL CALLBACKS, OPTIONAL */
	fz_attr_cbak_objt_merge_func	fz_attr_cbak_objt_merge;	/* @fsfunc */
	
	/* FIELD INFORMATION FUNCTIONS (OPTIONAL) */
	fz_attr_cbak_get_field_count_func	fz_attr_cbak_get_field_count;	/* @fsfunc */
	fz_attr_cbak_get_field_info_func	fz_attr_cbak_get_field_info;	/* @fsfunc */
	fz_attr_cbak_get_field_data_func	fz_attr_cbak_get_field_data;	/* @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.									*
	 *																					*
	 ************************************************************************************/
	
	
	/************************************************************************************
	 *																					*
	 *		@comm  new version 7.0.0.0 functions.										*
	 *																					*
	 ************************************************************************************/
	fz_attr_cbak_iface_tmpl_multi_func	fz_attr_cbak_iface_tmpl_multi;	/* @fsfunc */
	
	/************************************************************************************
	 *																					*
	 *		@comm  new version 8.0.0.0 functions.										*
	 *																					*
	 ************************************************************************************/

	fz_attr_cbak_copy_full_func		fz_attr_cbak_copy_full;			/* @fsfunc */

}  fz_attr_cbak_fset;



#ifdef __cplusplus
}
#endif

#endif /* _FORMZ_MODEL_ATTR_API_H */
