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



#ifndef __FORMZ_SYMB_H
#define __FORMZ_SYMB_H 1


#include "fz_api.h"

#ifdef __cplusplus
extern "C" {
#endif


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

	Symbols


	Description
		formZ Symbols.  These functions deal with symbol libraries and symbol definitions.
 ****************************************************************/

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

	fz_symb_lib_ptr


	Description
		Data structure for a symbol library. A library contains zero or more definitions. Separate 
		lists of definitions are maintained in modeling and drafting.

	Availability	5.0.0.0


	See Also
		fz_ffmt_cbak_data_model_write_symb_def_end, fz_ffmt_cbak_data_model_write_symb_def_start, fz_symb_def_copy,  
		fz_symb_def_model_create, fz_symb_def_model_get_next, fz_symb_lib_purge,  
		fz_symb_lib_unload

 ****************************************************************/
typedef struct library_td		*fz_symb_lib_ptr;


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

	fz_symb_def_ptr


	Description
		Data structure for a symbol definition. Each definition consists of three levels, where 
		different versions of the geometry may be stored. In addition the definition 
		stores name, origin, handle point, and comment.

	Availability	5.0.0.0


	See Also
		fz_ffmt_cbak_data_model_write_symb_def_end, fz_ffmt_cbak_data_model_write_symb_def_start, fz_symb_def_copy,  
		fz_symb_def_delete, fz_symb_def_get_comment, fz_symb_def_get_handle,  
		fz_symb_def_get_level, fz_symb_def_get_name, fz_symb_def_get_origin,  
		fz_symb_def_model_get_next, fz_symb_def_set_comment, fz_symb_def_set_handle,  
		fz_symb_def_set_name, fz_symb_def_set_origin

 ****************************************************************/
typedef	struct definition_td	*fz_symb_def_ptr;

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

	fz_symb_lev_ptr


	Description
		Data structure for a symbol definition level. The definition level stores the geometry 
		of a definition. Each definition has 3 levels.

	Availability	5.0.0.0


	See Also
		fz_ffmt_cbak_data_model_write_symb_def_end, fz_ffmt_cbak_data_model_write_symb_def_start, fz_ffmt_data_is_symb_lev_referenced

 ****************************************************************/
typedef	struct def_level_td		*fz_symb_lev_ptr;

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

	fz_symb_ins_ptr


	Description
		Data structure for a symbol instance. An instance references a specific definition and 
		also has a level, which ultimately determines which geometry is used to display the 
		symbol instance.

	Availability	5.0.0.0

 ****************************************************************/
typedef struct symbol_td 		*fz_symb_ins_ptr;

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

	fz_symb_ins_color_opt_enum


	Description
		Color options for a symbol instance. In modeling, it means surface style. In drafting, 
		it means color.

	Members
		FZ_SYMB_SINS_COLOR_INS
			symbol instance uses the object color/surface style
		FZ_SYMB_SINS_COLOR_DEF
			symbol instance uses the definition colors/surface styles

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_symb_ins_color_opt_enum
{	FZ_SYMB_SINS_COLOR_INS = 0,
	FZ_SYMB_SINS_COLOR_DEF = 2
	
} fz_symb_ins_color_opt_enum;

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

	fz_symb_ins_layer_opt_enum


	Description
		Layer options for a symbol instance.

	Members
		FZ_SYMB_SINS_LAYER_INS
			symbol instance uses the object layer
		FZ_SYMB_SINS_LAYER_DEF
			symbol instance uses the definition layers

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_symb_ins_layer_opt_enum
{	FZ_SYMB_SINS_LAYER_INS	= 0,
	FZ_SYMB_SINS_LAYER_DEF	= 1
	
} fz_symb_ins_layer_opt_enum;






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

	FZ_SYMB_DEF_MAX_LEVEL


	Description
		The maximum number of levels in a definition
 ****************************************************************/
#define FZ_SYMB_DEF_MAX_LEVEL	3

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

	FZ_SYMB_LIB_MAX_NAME


	Description
		The maximum number of characters in a library name
 ****************************************************************/
#define FZ_SYMB_LIB_MAX_NAME 32

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

	FZ_SYMB_DEF_MAX_NAME


	Description
		The maximum number of characters in a definition name
 ****************************************************************/
#define FZ_SYMB_DEF_MAX_NAME 32



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

	fz_symb_lib_create



	Description
		Creates a new library and loads it into the given windex.

	Parameters
		windex  [Input]
			project window index
		name  [Input]
			library name
		lib_ptr  [Result]
			library

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_create_func) (
	fzrt_int				windex,
	char				*name,
	fz_symb_lib_ptr			*lib_ptr
	);

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

	fz_symb_lib_load



	Description
		Loads an existing symbol library.  This function uses 
		the current floc to find the library

	Parameters
		windex  [Input]
			project window index
		name  [Input]
			library name
		lib_ptr  [Result]
			library

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_load_func) (
	fzrt_int				windex,
	char				*name,
	fz_symb_lib_ptr		*lib_ptr
	);

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

	fz_symb_lib_load_floc



	Description
		Loads an existing symbol library.

	Parameters
		windex  [Input]
			project window index
		floc  [Input]
			library name
		lib_ptr  [Result]
			library

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_load_floc_func) (
	fzrt_int				windex,
	fzrt_floc_ptr		floc,
	fz_symb_lib_ptr		*lib_ptr
	);

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

	fz_symb_lib_unload



	Description
		Unloads a library from a project. 
		Caution : After this function has 
		been called, lib_ptr is no longer a valid pointer.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input, Result]
			library

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_unload_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr
	);

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

	fz_symb_lib_compact



	Description
		Compacts a library. All deleted definitions are removed from the library file.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			library

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_compact_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr
	);

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

	fz_symb_lib_purge



	Description
		Removes unused definitions from memory.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			library

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_purge_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr
	);

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

	fz_symb_lib_get_count



	Description
		Counts the number of symbol libraries in a project.

	Parameters
		windex  [Input]
			project window index
		num_libs  [Result]
			number of symbol libraries

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_get_count_func) (
	fzrt_int	windex,
	fzrt_int	*num_libs
	);

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

	fz_symb_lib_get_next



	Description
		Given a library pointer, gets the next library pointer 
		in the windex.  If lib_ptr is passed as NULL, the first library in the windex 
		is returned. This function can be used to loop through all 
		libraries in a project. For example:

		fz_symb_lib_get_next(windex,NULL,&lib_ptr);	 
		while (lib_ptr != NULL)	 
		{	 
		...	

		fz_symb_lib_get_next(windex,lib_ptr,&lib_ptr);	 
		}	

	Parameters
		windex  [Input]
			project window index
		lib_ptr_in  [Input]
			library
		lib_ptr_next  [Input]
			next library

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_get_next_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr_in,
	fz_symb_lib_ptr			*lib_ptr_next
	);

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

	fz_symb_lib_get_name



	Description
		Given a library pointer, gets the library's name. 
		Note : the name parameter must be preallocated to at least 
		FZ_SYMB_LIB_MAX_NAME characters.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			library
		name  [Result]
			library name 
			(must be preallocated to at 
			least FZ_SYMB_LIB_MAX_NAME characters)

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_get_name_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr,
	char				*name
	);

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

	fz_symb_lib_model_get_def_count



	Description
		Given a library pointer, counts the number of 
		modeling definitions.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			library
		num_defs  [Input]
			Result of modeling definitions

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_lib_model_get_def_count_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr		lib_ptr,
	fzrt_int				*num_defs
	);

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

	fz_symb_def_model_create



	Description
		Creates a modeling definition level in the given library. The objects for 
		the definition are contained in the src_obj array. If the definition 
		also contains lights, they are defined in the src_lite array. Either 
		array may be passed as NULL, but not both at the same time.

		Note, that after creating the definition, the objects/lights are 
		not deleted or ghosted but stay as is.

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			the library in which the definition is created
		name  [Input]
			the name of the definition. If the name does 
			not exist, a new definition is created. If it 
			already exists, the level will be added to the 
			definition. If the level also exists it will be 
			overwritten. The name cannot contain more than 
			32 characters.
		lev_indx  [Input]
			the level index
			Range: 0
		src_obj  [Input, Optional]
			array with object pointers
		num_src  [Input, Optional]
			number of entries in the src_obj array
		src_lite  [Input, Optional]
			array with light pointers
		num_lite  [Input, Optional]
			number of entries in the src_lite array
		origin  [Input, Optional]
			origin point of the definition level.
			Default Value: {0.0, 0.0, 0.0}
		scale_pt  [Input, Optional]
			Handle point of the definition level.
			Default Value: the upper right corner of the 3D bounding box of the objects/lights.
		new_def  [Result, Optional]
			definition (new or existing) 
			to which the definition level was added
		new_lev  [Result, Optional]
			new definition level

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td  (*fz_symb_def_model_create_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr		lib_ptr,
	char				*name,
	fzrt_int				lev_indx,
	fz_objt_ptr			*src_obj,
	fzrt_int 				num_src,
	fz_lite_ptr			*src_lite,
	fzrt_int 				num_lite,
	fz_xyz_td			*origin,
	fz_xyz_td			*scale_pt,
	fz_symb_def_ptr		*new_def,
	fz_symb_lev_ptr		*new_lev
	);

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

	fz_symb_def_model_get_next



	Description
		Given a library and a modeling definition pointer, 
		gets the next definition pointer in the library. 
		If def_ptr_in is passed as NULL, the first definition in the library 
		is returned. This function can be used to loop through all modeling 
		definitions in a library. For example:

		fz_symb_def_model_get_next(windex,lib_ptr,NULL,&def_ptr);	 
		while (def_ptr != NULL)	 
		{	 
		...	

		fz_symb_def_model_get_next(windex,lib_ptr,def_ptr,&def_ptr);	 
		}

	Parameters
		windex  [Input]
			project window index
		lib_ptr  [Input]
			library
		def_ptr_in  [Input]
			modeling definition
		def_ptr_next  [Result]
			next modeling definition

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_model_get_next_func) (
	fzrt_int				windex,
	fz_symb_lib_ptr			lib_ptr,
	fz_symb_def_ptr			def_ptr_in,
	fz_symb_def_ptr			*def_ptr_next
	);

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

	fz_symb_def_get_level



	Description
		Given a definition and a level index, gets the level pointer. 
		If the symbol level is not defined, lev_ptr is set to NULL.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: 0
		lev_ptr  [Result]
			level

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_get_level_func) (
	fzrt_int					windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int					lev_indx,
	fz_symb_lev_ptr			*lev_ptr
	);

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

	fz_symb_def_get_name



	Description
		Gets the name of a definition. 
		Note : the name parameter must be preallocated to at least 
		FZ_SYMB_DEF_MAX_NAME characters.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		name  [Result]
			name 
			(must be preallocated to at 
			least FZ_SYMB_DEF_MAX_NAME characters)

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_get_name_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	char				*name
	);

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

	fz_symb_def_get_origin



	Description
		Gets the origin of a definition level.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: 0
		origin  [Result]
			origin

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_get_origin_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int				lev_indx,
	fz_xyz_td				*origin
	);

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

	fz_symb_def_get_handle



	Description
		Gets the handle point of a definition level.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: 0
		handle  [Input]
			handle point

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_get_handle_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int				lev_indx,
	fz_xyz_td				*handle
	);

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

	fz_symb_def_get_comment



	Description
		Gets the comment string of a definition. 
		Note : the comment parameter must be preallocated to at least 
		128 characters.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		comment  [Result]
			comment 
			(must be preallocated to at least 128 characters)

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_get_comment_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	char				*comment
	);

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

	fz_symb_def_set_name



	Description
		Sets the name of a definition. 
		Note : the name cannot be longer than 32 characters and must be unique 
		(no other definition in the library can have that name).

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		name  [Input]
			name

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_set_name_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	char				*name
	);

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

	fz_symb_def_set_comment



	Description
		Sets the comment of a definition. 
		Note : the comment cannot be longer than 128 characters.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		comment  [Input]
			comment

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_set_comment_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	char				*comment
	);

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

	fz_symb_def_set_origin



	Description
		Sets the origin of a definition. 
		If the definition is a draft definition, 
		the z value of the origin is ignored.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: 0
		origin  [Input]
			origin 
			(z value ignored for draft definitions)

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_set_origin_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int				lev_indx,
	fz_xyz_td				*origin
	);

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

	fz_symb_def_set_handle



	Description
		Sets the handle point of a definition. 
		If the definition is a draft definition, 
		the z value of the scale point is ignored.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: 0
		handle  [Input]
			handle point 
			(z value ignored for draft definitions)

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_set_handle_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int				lev_indx,
	fz_xyz_td				*handle
	);

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

	fz_symb_def_delete



	Description
		Deletes a definition level. 
		If lev_indx is passed as -1, all levels and the entire definition is deleted. 
		If lev_indx is 0, 1 or 2, only the specified level is deleted. 
		If the specified level is the only defined level, 
		the definition is deleted as well.

	Parameters
		windex  [Input]
			project window index
		def_ptr  [Input]
			definition
		lev_indx  [Input]
			level index
			Range: -1

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_delete_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			def_ptr,
	fzrt_int				lev_indx
	);

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

	fz_symb_def_copy



	Description
		Makes a duplicate copy of a definition. 
		If the destination library (dst_lib) is passed as NULL, 
		the definition is copied in the library it is located in. 
		Otherwise the definition is copied into the destination library. 
		 
		If the definition is copied into a different library, 
		the new definition will have the same name as the original. 
		If a definition with that name already exists in the destination library, 
		a unique name will automatically be generated. 
		 
		if the definition is copied within the same library, 
		a unique name will always be generated.

	Parameters
		windex  [Input]
			project window index
		src_def  [Input]
			source definition
		dst_lib  [Input, Optional]
			destination library
		new_def_ptr  [Result]
			new definition

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_symb_test.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_symb_def_copy_func) (
	fzrt_int				windex,
	fz_symb_def_ptr			src_def,
	fz_symb_lib_ptr			dst_lib,
	fz_symb_def_ptr			*new_def_ptr
	);

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

	fz_symb_lev_model_get_num_lights



	Description
		Gets the number of lights contained in a symbol level.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		num_lights  [Result]
			The number of lights.

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_symb_lev_model_get_light

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_model_get_num_lights_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fzrt_int				*num_lights
	);

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

	fz_symb_lev_model_get_light



	Description
		Gets a light contained in a symbol level.  The light index must be 
		in the range of 0 to the number of lights returned from 
		fz_symb_lev_model_get_num_lights.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		lite_indx  [Input]
			Which light.
		lite_ptr  [Result]
			The light.

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_symb_lev_model_get_num_lights

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_model_get_light_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fzrt_int				lite_indx,
	fz_lite_ptr			*lite_ptr
	);

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

	fz_symb_lev_model_get_num_objts



	Description
		Gets the number of modeling objects contained in a symbol level.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		num_objts  [Result]
			The number of objects.

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_symb_lev_model_get_objt

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_model_get_num_objts_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fzrt_int				*num_objts
	);

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

	fz_symb_lev_model_get_objt



	Description
		Gets an object contained in a symbol level.  The object index must be 
		in the range of 0 to the number of objects returned from 
		fz_symb_lev_model_get_num_objts.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		objt_indx  [Input]
			Which object.
		objt_ptr  [Result]
			The object.

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_symb_lev_model_get_num_objts

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_model_get_objt_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fzrt_int				objt_indx,
	fz_objt_ptr			*objt_ptr
	);

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

	fz_symb_lev_get_bbox



	Description
		Gets the bounding box of a symbol definition.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		bbox  [Result]
			The bounding box of the level's symbol definition.

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_symb_lev_model_get_num_lights

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_get_bbox_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fz_xyz_mm_td		*bbox
	);
	
/****************************************************************

	fz_symb_lev_get_lib_def



	Description
		Gets the pointers to the symbol definition and symbol library containing 
		a symbol level.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		lib_ptr  [Result]
			The symbol definition containing the level.
		def_ptr  [Result]
			The symbol library containing the level.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_get_lib_def_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fz_symb_lib_ptr		*lib_ptr,
	fz_symb_def_ptr		*def_ptr
	);

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

	fz_symb_lev_get_indx



	Description
		Gets a symbol level's index.

	Parameters
		windex  [Input]
			project window index
		lev_ptr  [Input]
			The symbol definition's level.
		lev_indx  [Result]
			The level index.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td 	 (*fz_symb_lev_get_indx_func)(
	fzrt_int				windex,
	fz_symb_lev_ptr		lev_ptr,
	fzrt_int				*lev_indx
	);

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

	fz_symb_fset


	FZ_SYMB_FSET_TYPE
		formZ Symbols function set UUID.

	FZ_SYMB_FSET_NAME
		formZ Symbols function set name.

	FZ_SYMB_FSET_VERSION
		formZ Symbols function set version.

	Description
		formZ symbols function Set. Contains generic symbol functions.

	Availability	5.0.0.0

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



#define FZ_SYMB_FSET_TYPE		"\xa1\xaa\x61\x30\x69\xb7\x4f\xe4\x99\xe7\xa4\x33\xc6\x0f\xc3\xcd"

#define FZ_SYMB_FSET_NAME		"formZ Symbol Functions"

#define FZ_SYMB_FSET_VERSION	FZPL_VERS_MAKE(5,0,0,0)

typedef struct fz_symb_fset
{
	fzpl_fset_prvt_data_td				prvt_data;

	fz_symb_lib_create_func					fz_symb_lib_create;
	fz_symb_lib_load_func					fz_symb_lib_load;
	fz_symb_lib_unload_func					fz_symb_lib_unload;
	fz_symb_lib_compact_func				fz_symb_lib_compact;
	fz_symb_lib_purge_func					fz_symb_lib_purge;
	fz_symb_lib_get_count_func				fz_symb_lib_get_count;
	fz_symb_lib_get_next_func				fz_symb_lib_get_next;
	fz_symb_lib_get_name_func				fz_symb_lib_get_name;
	
	fz_symb_def_get_level_func				fz_symb_def_get_level;
	fz_symb_def_get_name_func				fz_symb_def_get_name;
	fz_symb_def_get_origin_func				fz_symb_def_get_origin;
	fz_symb_def_get_handle_func				fz_symb_def_get_handle;
	fz_symb_def_get_comment_func			fz_symb_def_get_comment;
	fz_symb_def_set_name_func				fz_symb_def_set_name;
	fz_symb_def_set_comment_func			fz_symb_def_set_comment;
	fz_symb_def_set_origin_func				fz_symb_def_set_origin;
	fz_symb_def_set_handle_func				fz_symb_def_set_handle;
	fz_symb_def_delete_func					fz_symb_def_delete;
	fz_symb_def_copy_func					fz_symb_def_copy;
	
	fz_symb_lev_get_bbox_func				fz_symb_lev_get_bbox;
	fz_symb_lev_get_lib_def_func			fz_symb_lev_get_lib_def;
	fz_symb_lev_get_indx_func				fz_symb_lev_get_indx;
	
	

	fz_symb_lib_load_floc_func					fz_symb_lib_load_floc;
	
}  fz_symb_fset;

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

	fz_symb_model_fset


	FZ_SYMB_MODEL_FSET_TYPE
		formZ Model Symbols function set UUID.

	FZ_SYMB_MODEL_FSET_NAME
		formZ Model Symbols function set name.

	FZ_SYMB_MODEL_FSET_VERSION
		formZ Model Symbols function set version.

	Description
		formZ modeling symbols function Set. Contains modeling specific 
		symbol functions.

	Availability	5.0.0.0

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

#define FZ_SYMB_MODEL_FSET_TYPE		"\x15\x0b\x7f\x68\x6f\x94\x4c\x80\xa0\x5d\xf7\xb2\xb2\xc4\x24\x1f"

#define FZ_SYMB_MODEL_FSET_NAME		"formZ Model Symbol Functions"

#define FZ_SYMB_MODEL_FSET_VERSION	FZPL_VERS_MAKE(5,0,0,0)


typedef struct fz_symb_model_fset
{
	fzpl_fset_prvt_data_td				prvt_data;

	
	fz_symb_lib_model_get_def_count_func	fz_symb_lib_model_get_def_count;

	fz_symb_lev_model_get_num_lights_func	fz_symb_lev_model_get_num_lights;
	fz_symb_lev_model_get_light_func		fz_symb_lev_model_get_light;
	fz_symb_lev_model_get_num_objts_func	fz_symb_lev_model_get_num_objts;
	fz_symb_lev_model_get_objt_func			fz_symb_lev_model_get_objt;

	fz_symb_def_model_get_next_func			fz_symb_def_model_get_next;
	fz_symb_def_model_create_func			fz_symb_def_model_create;
	
	

}  fz_symb_model_fset;

#ifdef __cplusplus
}
#endif

#endif

