/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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 _FZ_NOTF_API_H
#define _FZ_NOTF_API_H 1

#include "fz_cmnd_api.h"
#include "fz_objt_api.h"
#include "fz_view_api.h"
#include "fz_rmtl_api.h"

#ifdef __cplusplus
extern "C" {
#endif



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

	formZ Notification


	Description
		The formZ notification manager is used to notify extensions when certain events occur. 
		The events include changes in formZ project data like objects, lights and layers. 
		Plugins can receive these notifications by implementing functions in the fz_cbak_notf_fset. 
		This function set provides a variety of functions that formZ calls when the respective event 
		occurs. Care should be used when implementing these functions because notification functions 
		are called throughout formZ and a poor implementation can lead to performance issues or crashes. 
		Likewise only necessary functions should be implemented, as even empty "shell" functions will 
		cause some performance degradation. The notification function set can be included in any plugin 
		(it is not a plugin itself).  Some notification callbacks are available to scripts as well.
 ****************************************************************/

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

	fz_notf_syst_enum


	Description
		System notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_SYST_NONE
			No action
		FZ_NOTF_SYST_QUIT
			formZ application is shutting down (quit)
		FZ_NOTF_SYST_SUSPEND
			formZ application is placed in the background (suspended state)
		FZ_NOTF_SYST_RESUME
			formZ application is placed in the foreground (resumed state)
		FZ_NOTF_SYST_CANCEL
			cancel key shortcut or progress bar cancel button selected.
		FZ_NOTF_SYST_DELETE_KEY
			delete key was pressed.

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_syst_enum
{
	FZ_NOTF_SYST_NONE = 0,
	FZ_NOTF_SYST_QUIT,
	FZ_NOTF_SYST_SUSPEND,
	FZ_NOTF_SYST_RESUME,
	FZ_NOTF_SYST_CANCEL,
	FZ_NOTF_SYST_DELETE_KEY,

	FZ_NOTF_SYST_MAX
} fz_notf_syst_enum;
/****************************************************************

	fz_notf_cbak_syst



	Description
		This function is called by formZ when one of the actions specified by fz_notf_syst_enum occurs. 
		This function is provided so that extensions can be notified when one of the actions occurs 
		and the extension can make any extension specific adjustments in reaction to the action.

	Parameters
		syst_notf  [Input]
			system notification identifier

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_syst_func)(
	fz_notf_syst_enum 		syst_notf
	);

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

	fz_notf_proj_enum


	Description
		Project notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_PROJ_NONE
			entire project data dirty (file re-vert)
		FZ_NOTF_PROJ_DIRTY
			general message when anything in window changes
		FZ_NOTF_PROJ_NEW_END
			end of the creation of a new project
		FZ_NOTF_PROJ_OPEN_END
			end of opening a formZ project file
		FZ_NOTF_PROJ_SAVE
			project save, after save has been completed
		FZ_NOTF_PROJ_SAVEAS
			project saveas, after save has been completed
		FZ_NOTF_PROJ_CLOSE
			project close
		FZ_NOTF_PROJ_PICK
			project pick changed
		FZ_NOTF_PROJ_LIGHTS
			project lights changed
		FZ_NOTF_PROJ_CAMERA
			project camera changed
		FZ_NOTF_PROJ_SNAPS
			project snap highlight changed
		FZ_NOTF_PROJ_COLORS
			project colors changed
		FZ_NOTF_PROJ_SURF
			project surface style changed
		FZ_NOTF_PROJ_SMTH
			project smooth shading options changed
		FZ_NOTF_PROJ_GEOM
			project geometry options changed
		FZ_NOTF_PROJ_DEFT
			project default texture changed
		FZ_NOTF_PROJ_PRESAVE
			project save, before save is being executed
		FZ_NOTF_PROJ_TOGGLE
			After switching from one project to another. This is 
			similar to FZ_NOTF_WIND_TOGGLE, except, that the "from" 
			and "to" windows not not belong to the same project.
		FZ_NOTF_PROJ_PRE_UNDO
			project undo about to happen
		FZ_NOTF_PROJ_POST_UNDO
			project undo occured
		FZ_NOTF_PROJ_TOOL_START
			start of tool before formz_oper_start()
		FZ_NOTF_PROJ_OPER_START
			start of a user driven operation on project
		FZ_NOTF_PROJ_OPER_END
			end of a user driven operation on project
		FZ_NOTF_PROJ_OPER_TRACK_START
			start of tracking for a user driven operation
		FZ_NOTF_PROJ_OPER_TRACK_END
			end of tracking for a user driven operation
		FZ_NOTF_PROJ_OPER_TRACK_FRAME_START
			start of a frame while tracking
		FZ_NOTF_PROJ_OPER_TRACK_FRAME_END
			end of a frame while tracking
		FZ_NOTF_PROJ_SCENE_RECALL_START
			start of a scene recall in project (could affect all windows of projec)
		FZ_NOTF_PROJ_SCENE_RECALL_END
			end of a scene recall in project
		FZ_NOTF_PROJ_LAYER_VIS_BULK_START
			start of a mass layer visibility chnages (could be only 1)
		FZ_NOTF_PROJ_LAYER_VIS_BULK_END
			end of layer visibility chnages in project
		FZ_NOTF_PROJ_OBJT_VIS_BULK_START
			start of a mass object visibility chnages (could be only 1)
		FZ_NOTF_PROJ_OBJT_VIS_BULK_END
			end of object visibility chnages
		FZ_NOTF_PROJ_PRE_REDO
			project redo about to happen
		FZ_NOTF_PROJ_POST_REDO
			project redo occured

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_proj_enum
{
	FZ_NOTF_PROJ_NONE = 0,
	FZ_NOTF_PROJ_DIRTY,
	FZ_NOTF_PROJ_NEW_END,
	FZ_NOTF_PROJ_OPEN_END,
	FZ_NOTF_PROJ_SAVE,
	FZ_NOTF_PROJ_SAVEAS,
	FZ_NOTF_PROJ_CLOSE,
	FZ_NOTF_PROJ_PICK,
	FZ_NOTF_PROJ_LIGHTS,
	FZ_NOTF_PROJ_CAMERA,
	FZ_NOTF_PROJ_SNAPS,
	FZ_NOTF_PROJ_COLORS,
	FZ_NOTF_PROJ_SURF,
	FZ_NOTF_PROJ_SMTH,
	FZ_NOTF_PROJ_GEOM,
	FZ_NOTF_PROJ_DEFT,
	FZ_NOTF_PROJ_PRESAVE,
	FZ_NOTF_PROJ_TOGGLE,

	FZ_NOTF_PROJ_PRE_UNDO,
	FZ_NOTF_PROJ_POST_UNDO,
	FZ_NOTF_PROJ_TOOL_START,

	FZ_NOTF_PROJ_OPER_START,
	FZ_NOTF_PROJ_OPER_END,
	FZ_NOTF_PROJ_OPER_TRACK_START,
	FZ_NOTF_PROJ_OPER_TRACK_END,
	FZ_NOTF_PROJ_OPER_TRACK_FRAME_START,
	FZ_NOTF_PROJ_OPER_TRACK_FRAME_END,

	FZ_NOTF_PROJ_SCENE_RECALL_START,
	FZ_NOTF_PROJ_SCENE_RECALL_END,
	
	FZ_NOTF_PROJ_LAYER_VIS_BULK_START,
	FZ_NOTF_PROJ_LAYER_VIS_BULK_END,
	
	FZ_NOTF_PROJ_OBJT_VIS_BULK_START,
	FZ_NOTF_PROJ_OBJT_VIS_BULK_END,
		
	FZ_NOTF_PROJ_PRE_REDO,
	FZ_NOTF_PROJ_POST_REDO,

	FZ_NOTF_PROJ_MAX

} fz_notf_proj_enum;


#define FZ_NOTF_PROJ_OPEN	FZ_NOTF_PROJ_OPEN_END
#define FZ_NOTF_PROJ_NEW	FZ_NOTF_PROJ_NEW_END

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

	fz_notf_cbak_proj



	Description
		This function is called by formZ when one of the actions specified by fz_notf_proj_enum occurs 
		in the specified project. This function will be called for each project in which the action occurs. 
		This function is provided so that extensions can be notified when one of the actions occurs and 
		the extension can make any extension specific adjustments in reaction to the action.

	Parameters
		windex  [Input]
			project window index
		proj_notf  [Input]
			project notification identifier

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_proj_func)(
	fzrt_int			 		windex,
	fz_notf_proj_enum 		proj_notf
	);

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

	fz_notf_wind_enum


	Description
		Window notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_WIND_NONE
			No action
		FZ_NOTF_WIND_DIRTY
			general message when anything in window changes
		FZ_NOTF_WIND_NEW
			window new
		FZ_NOTF_WIND_CLOSE
			window closed
		FZ_NOTF_WIND_RESIZE
			window resized
		FZ_NOTF_WIND_RESIZE_START
			window resize start
		FZ_NOTF_WIND_RESIZE_END
			window resize end
		FZ_NOTF_WIND_ISPEC
			window's image spec changed
		FZ_NOTF_WIND_DEPTH
			window's depth changed
		FZ_NOTF_WIND_VIEW
			window's view changed
		FZ_NOTF_WIND_GRID
			window's grid changed
		FZ_NOTF_WIND_ULAY
			window's underlay changed
		FZ_NOTF_WIND_OPTS
			window's options changed
		FZ_NOTF_WIND_PROJ
			window's project changed (see fz_notf_proj_enum)
		FZ_NOTF_WIND_RNDR_START
			start of a rendering in a window
		FZ_NOTF_WIND_RNDR_END
			end of a rendering in a window
		FZ_NOTF_WIND_TOGGLE
			After switching from one window to another. The windows 
			may belong to the same or to different projects.
		FZ_NOTF_WIND_VIEW_ANIM_START
			start of an animated view chnage in a window
		FZ_NOTF_WIND_VIEW_ANIM_END
			end of an animated view chnage in a window
		FZ_NOTF_WIND_VIEW_RECALL_START
			start of a view recall in a window
		FZ_NOTF_WIND_VIEW_RECALL_END
			end of a view recall in a window

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_wind_enum
{
	FZ_NOTF_WIND_NONE = 0,
	FZ_NOTF_WIND_DIRTY,
	FZ_NOTF_WIND_NEW,
	FZ_NOTF_WIND_CLOSE,
	FZ_NOTF_WIND_RESIZE,
	FZ_NOTF_WIND_RESIZE_START,
	FZ_NOTF_WIND_RESIZE_END,
	FZ_NOTF_WIND_ISPEC,
	FZ_NOTF_WIND_DEPTH,
	FZ_NOTF_WIND_VIEW,
	FZ_NOTF_WIND_GRID,
	FZ_NOTF_WIND_ULAY,
	FZ_NOTF_WIND_OPTS,
	FZ_NOTF_WIND_PROJ,
	FZ_NOTF_WIND_RNDR_START,
	FZ_NOTF_WIND_RNDR_END,
	FZ_NOTF_WIND_TOGGLE,

	FZ_NOTF_WIND_VIEW_ANIM_START,
	FZ_NOTF_WIND_VIEW_ANIM_END,
	
	FZ_NOTF_WIND_VIEW_RECALL_START,
	FZ_NOTF_WIND_VIEW_RECALL_END,
	
	FZ_NOTF_WIND_MAX

} fz_notf_wind_enum;

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

	fz_notf_cbak_wind



	Description
		This function is called by formZ when one of the actions specified by fz_notf_wind_enum occurs 
		in the specified project. This function will be called for each window in which the action occurs. 
		This function is provided so that extensions can be notified when one of the actions occurs and 
		the extension can make any extension specific adjustments in reaction to the action. 
		 
		This function is also called for each window in a project when a project notification happens (i.e. 
		fz_notf_cbak_proj is called) . In this situation wind_notf == FZ_NOTF_WIND_PROJ and 
		proj_notf is the value of the project level notification.

	Parameters
		windex  [Input]
			project window index
		wind_notf  [Input]
			window notification identifier
		proj_notf  [Input]
			project notification identifier

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_wind_func)(
	fzrt_int			 		windex,
	fz_notf_wind_enum 		wind_notf,
	fz_notf_proj_enum		proj_notf
	);


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

	fz_notf_cbak_syst_units



	Description
		This function is called when the current unit type (English/Metric) or unit scale 
		(large/medium/small/miniature) changes. This happens when the user changes the settings in 
		the Working Units dialog, the function fz_proj_units_set_parm_data is called to change 
		the settings or when the active window is changed to a project with different 
		Working units settings. When this notification is received, all system level 
		(global) dimensional values should be converted to a reasonable setting for the current settings.

		It is recommended that function fz_fuim_unit_convert be used to get proper dimensional 
		values (units and data scale) from default values for the specified pref_units and pref_scale. 
		The fz_fuim_unit_convert function sets a double value to the current pref_units and pref_scale 
		given an  English and metric default unit values for a specified scale.

	Parameters
		units  [Input]
			preferences units to use.
		scale  [Input]
			preferences scale to use.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_syst_units_func)(
	fz_unit_type_enum 			units,
	fz_unit_scale_enum 			scale
	);

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

	fz_notf_cbak_proj_units



	Description
		This function is called when the unit type (English/Metric) or unit scale 
		(large/medium/small/miniature) for a project is changed. This happens when the user changes 
		the settings in the Working Units dialog or the function fz_proj_units_set_parm_data is called 
		to change the settings. When this notification is received, all project level dimensional 
		values should be converted to a reasonable setting for the current settings.

		It is recommended that function fz_fuim_unit_convert be used to get proper dimensional 
		values (units and data scale) from default values for the specified pref_units and pref_scale. 
		The fz_fuim_convert_units function sets a double value to the current pref_units and pref_scale 
		given an English and metric default unit values for a specified scale.

	Parameters
		windex  [Input]
			project window index
		units  [Input]
			preferences units to use.  (when action == CMDS_DFLT_FLAG_TRUE_DFLTS or CMDS_DFLT_FLAG_UNIT_DFLTS)
		scale  [Input]
			preferences scale to use.  (when action == CMDS_DFLT_FLAG_TRUE_DFLTS or CMDS_DFLT_FLAG_UNIT_DFLTS)

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_proj_units_func)(
	fzrt_int						windex,
	fz_unit_type_enum 			units,
	fz_unit_scale_enum 			scale
	);

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

	fz_notf_cbak_wind_units



	Description
		This function is called for each project window when the unit type (English/Metric) or 
		unit scale (large/medium/small/miniature) for a project changes. This happens when the 
		user changes the settings in the Working Units dialog or the function 
		fz_proj_units_set_parm_data is called to change the settings. 
		When this notification is received, all project level dimensional values 
		should be converted to a reasonable setting for the current settings.

		It is recommended that function fz_fuim_unit_convert be used to get proper 
		dimensional values (units and data scale) from default values for the specified 
		pref_units and pref_scale. The fz_fuim_unit_convert function sets a double value to 
		the current pref_units and pref_scale given an English and metric default unit values 
		for a specified scale.

	Parameters
		windex  [Input]
			project window index
		units  [Input]
			preferences units to use.
		scale  [Input]
			preferences scale to use.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_wind_units_func)(
	fzrt_int						windex,
	fz_unit_type_enum 			units,
	fz_unit_scale_enum 			scale
	);

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

	fz_notf_objt_enum


	Description
		Object notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_OBJT_NONE
			No action
		FZ_NOTF_OBJT_NEW
			new object
		FZ_NOTF_OBJT_DELETE
			object deleted
		FZ_NOTF_OBJT_EDTOP
			object topology edited
		FZ_NOTF_OBJT_EDGEO
			object geometry edited
		FZ_NOTF_OBJT_EDATTR
			object attribute edited

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_objt_enum
{
	FZ_NOTF_OBJT_NONE = 0,
	FZ_NOTF_OBJT_NEW = 2,
	FZ_NOTF_OBJT_DELETE,
	FZ_NOTF_OBJT_EDTOP,
	FZ_NOTF_OBJT_EDGEO,
	FZ_NOTF_OBJT_EDATTR,
	
	FZ_NOTF_OBJT_MAX

} fz_notf_objt_enum;


#define FZ_NOTF_OBJT_DIRTY	FZ_NOTF_OBJT_EDTOP
#define FZ_NOTF_OBJT_LAY	FZ_NOTF_OBJT_EDATTR
#define FZ_NOTF_OBJT_PARM	FZ_NOTF_OBJT_EDTOP

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

	fz_notf_cbak_objt



	Description
		This function is called to notify that an object has changed. 
		The objt_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		objt_notf  [Input]
			which object action has occurred.
		objt  [Input]
			object that has changed.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_objt_func)(
	fzrt_int						windex,
	fz_notf_objt_enum 			objt_notf,
	fz_objt_ptr 				objt
	);

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

	fz_notf_anim_enum


	Description
		Animation generation notification identifiers. These identifiers indicate the action that is 
		being notified during an animation generation.

	Members
		FZ_NOTF_ANIM_NONE
			No action.
		FZ_NOTF_ANIM_DIRTY
			general message when anything during animation generation changes.
		FZ_NOTF_ANIM_FRAME_CHANGED
			The current frame has changed during animation generation.
		FZ_NOTF_ANIM_GEN_START
			The animation generation has begun.
		FZ_NOTF_ANIM_GEN_END
			The animation generation has ended.

	Availability	5.0.0.0


	See Also
		fz_notf_cbak_anim

 ****************************************************************/
typedef enum fz_notf_anim_enum
{
	FZ_NOTF_ANIM_NONE = 0,
	FZ_NOTF_ANIM_DIRTY,
	FZ_NOTF_ANIM_FRAME_CHANGED,
	FZ_NOTF_ANIM_GEN_START,
	FZ_NOTF_ANIM_GEN_END,
	FZ_NOTF_ANIM_MAX

} fz_notf_anim_enum;

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

	fz_notf_cbak_anim



	Description
		This function is called to notify an extension that something has changed during 
		animation generation.  The anim_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		anim_notf  [Input]
			which animation action occurred
		anim_view  [Input]
			animation view being used for generation.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_anim_func)(
	fzrt_int						windex,
	fz_notf_anim_enum 			anim_notf,
	fz_view_ptr 				anim_view
	);


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

	fz_notf_lite_enum


	Description
		Light notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_LITE_NONE
			No action
		FZ_NOTF_LITE_DIRTY
			general message when anything in light changes
		FZ_NOTF_LITE_NEW
			new light
		FZ_NOTF_LITE_DELETE
			light deleted
		FZ_NOTF_LITE_COPY
			new light was created as a copy. This will be called after the 
			FZ_NOTF_LITE_NEW action was fired and after the light data 
			from the source was copied into the new light copy

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_lite_enum
{
	FZ_NOTF_LITE_NONE = 0,
	FZ_NOTF_LITE_DIRTY,
	FZ_NOTF_LITE_NEW,
	FZ_NOTF_LITE_DELETE,
	FZ_NOTF_LITE_COPY,
	
	FZ_NOTF_LITE_MAX

} fz_notf_lite_enum;

#define 	FZ_NOTF_LITE_PARM	FZ_NOTF_LITE_DIRTY

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

	fz_notf_cbak_lite



	Description
		This function is called to notify that a light has changed. 
		The lite_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		lite_notf  [Input]
			light notification identifier
		lite  [Input]
			light which was modified

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_lite_func)(
	fzrt_int						windex,
	fz_notf_lite_enum 			lite_notf,
	fz_lite_ptr 				lite
	);

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

	fz_notf_view_enum


	Description
		View notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_VIEW_NONE
			No action
		FZ_NOTF_VIEW_DIRTY
			general message when anything in view changes
		FZ_NOTF_VIEW_NEW
			new view
		FZ_NOTF_VIEW_DELETE
			view deleted

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_view_enum
{
	FZ_NOTF_VIEW_NONE = 0,
	FZ_NOTF_VIEW_DIRTY,
	FZ_NOTF_VIEW_NEW,
	FZ_NOTF_VIEW_DELETE,
	
	FZ_NOTF_VIEW_MAX

} fz_notf_view_enum;

#define FZ_NOTF_VIEW_PARM FZ_NOTF_VIEW_DIRTY

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

	fz_notf_cbak_view



	Description
		This function is called to notify that a view has changed. 
		The view_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		view_notf  [Input]
			View notification identifier
		view  [Input]
			view that was modified

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_view_func)(
	fzrt_int						windex,
	fz_notf_view_enum 			view_notf,
	fz_view_ptr 				view
	);

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

	fz_notf_layr_enum


	Description
		Layer notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_LAYR_NONE
			No action
		FZ_NOTF_LAYR_DIRTY
			general message when anything in layer changes
		FZ_NOTF_LAYR_NEW
			new layer
		FZ_NOTF_LAYR_DELETE
			layer deleted
		FZ_NOTF_LAYR_PARM
			layer parameters changed

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_notf_layr_enum
{
	FZ_NOTF_LAYR_NONE = 0,
	FZ_NOTF_LAYR_DIRTY,
	FZ_NOTF_LAYR_NEW,
	FZ_NOTF_LAYR_DELETE,
	FZ_NOTF_LAYR_PARM,
	
	FZ_NOTF_LAYR_MAX

} fz_notf_layr_enum;

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

	fz_notf_cbak_layr



	Description
		This function is called to notify that a layer has changed. 
		The layr_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		layr_notf  [Input]
			layer notification identifiers
		layr  [Input]
			layer that was modified

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_layr_func)(
	fzrt_int						windex,
	fz_notf_layr_enum 			layr_notf,
	fz_layr_ptr 				layr
	);


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

	fz_notf_cbak_pref_default



	Description
		The default function is called by formZ once at startup (after plugin registration) 
		and when the user resets the preferences to defaults in the preferences dialog. This function 
		is provided so that plugins can establish default values for private data. All private data 
		should be set to its default values and dimensional values should be set to the specified 
		pref_units and pref_scale. It is recommended that the function fz_fuim_unit_convert should be 
		used to get proper dimensional values (units and data scale) from default values for the 
		specified pref_units and pref_scale. The fz_fuim_unit_convert function sets a double value 
		to the current pref_units and pref_scale given an English and metric default unit values 
		for a specified scale.

	Parameters
		pref_units  [Input]
			preferences units to use.  (when action == CMDS_DFLT_FLAG_TRUE_DFLTS or CMDS_DFLT_FLAG_UNIT_DFLTS)
		pref_scale  [Input]
			preferences scale to use.  (when action == CMDS_DFLT_FLAG_TRUE_DFLTS or CMDS_DFLT_FLAG_UNIT_DFLTS)

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_pref_default_func)(
	fz_unit_type_enum 			pref_units,
	fz_unit_scale_enum 			pref_scale
	);

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

	fz_notf_cbak_pref_model_type



	Description
		The preference model type function is called by formZ when the model type preference is changed. 
		This function notifies the plugin to change its internal preference to facetted (FZ_OBJT_MODEL_TYPE_FACT ) 
		or smooth modeling (FZ_OBJT_MODEL_TYPE_SMOD) as indicated by the model_type parameter. 
		This function is useful for tool plugins which support both facetted and smooth modeling.

	Parameters
		model_type  [Input]
			preferences model type to use (when action == CMDS_DFLT_FLAG_MODEL_TYPE)

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_pref_model_type_func)(
	fz_objt_model_type_enum 	model_type
	);


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

	fz_notf_cbak_os



	Description
		The OS function is called by formZ when an Operating System Custom user event is dispatched. 
		This function notifies the plugin that a user defined system event has occurred. This function is 
		provided so that plugins can get access to custom installed messages such as those used by 
		some 3rd party device drivers. Note that this function will be called for all user defined 
		system events, so the plugin should make sure that it is the appropriate event before performing 
		any actions. It is also advised that the plugin return as soon as possible to avoid affecting 
		system performance. This function is not called Macintosh systems due to the nature of Carbon 
		Event handling.

	Parameters
		event  [Input]
			pointer to a system defined event structure. On Windows this is a pointer to a Windows MSG struct

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_os_func)(
	void *event
	);


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

	fz_notf_rmtl_enum


	Description
		Surface style (render material) notification identifiers. These items indicate the action that is being notified.

	Members
		FZ_NOTF_RMTL_NONE
			No action
		FZ_NOTF_RMTL_DIRTY
			general message when anything in surface style changes
		FZ_NOTF_RMTL_NEW
			new surface style
		FZ_NOTF_RMTL_DELETE
			surface style deleted
		FZ_NOTF_RMTL_PREVIEW_START
			surface style preview generation started (rmtl == NULL)
		FZ_NOTF_RMTL_PREVIEW_END
			surface style preview generation ended (rmtl == NULL)

	Availability	6.0.0.5

 ****************************************************************/
typedef enum fz_notf_rmtl_enum
{
	FZ_NOTF_RMTL_NONE = 0,
	FZ_NOTF_RMTL_DIRTY,
	FZ_NOTF_RMTL_NEW,
	FZ_NOTF_RMTL_DELETE,
	FZ_NOTF_RMTL_PREVIEW_START,
	FZ_NOTF_RMTL_PREVIEW_END,
	FZ_NOTF_RMTL_MAX

} fz_notf_rmtl_enum;


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

	fz_notf_cbak_rmtl



	Description
		This function is called to notify that a surface style has changed. 
		The rmtl_notf parameter indicates what change occurred.

	Parameters
		windex  [Input]
			project window index
		rmtl_notf  [Input]
			surface style notification identifier
		rmtl  [Input]
			surface style, which was modified

	Returns
		Error codes


	Availability	6.0.0.5

 ****************************************************************/
typedef fzrt_error_td (*fz_notf_cbak_rmtl_func)(
	fzrt_int						windex,
	fz_notf_rmtl_enum 			rmtl_notf,
	fz_rmtl_ptr 				rmtl
	);

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

	fz_notf_cbak_fset


	FZ_NOTF_CBAK_FSET_TYPE
		formZ notification function set id.

	FZ_NOTF_CBAK_FSET_NAME
		formZ notification function set name.

	FZ_NOTF_CBAK_FSET_VERSION
		formZ notification function set version.

	Description
		formZ Notification callback function set.

	Availability	5.0.0.0

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


#define FZ_NOTF_CBAK_FSET_TYPE		"\x1a\x7f\x19\x6c\xd2\x3a\x4f\xd1\xbc\xee\xc5\x9e\x1a\x8f\xe2\x6a"
#define FZ_NOTF_CBAK_FSET_NAME		"formZ notification callback functions"
#define FZ_NOTF_CBAK_FSET_VERSION	FZPL_VERS_MAKE(6,0,0,5)


typedef struct fz_notf_cbak_fset
{
	fzpl_fset_prvt_data_td					prvt_data;

	fz_notf_cbak_syst_func					fz_notf_cbak_syst;
	fz_notf_cbak_syst_units_func			fz_notf_cbak_syst_units;

	fz_notf_cbak_proj_func					fz_notf_cbak_proj;
	fz_notf_cbak_proj_units_func			fz_notf_cbak_proj_units;
	
	fz_notf_cbak_wind_func					fz_notf_cbak_wind;
	fz_notf_cbak_wind_units_func			fz_notf_cbak_wind_units;
	
	fz_notf_cbak_objt_func					fz_notf_cbak_objt;
	fz_notf_cbak_lite_func					fz_notf_cbak_lite;
	fz_notf_cbak_view_func					fz_notf_cbak_view;
	fz_notf_cbak_layr_func					fz_notf_cbak_layr;

	fz_notf_cbak_pref_default_func			fz_notf_cbak_pref_default;
	fz_notf_cbak_pref_model_type_func		fz_notf_cbak_pref_model_type;
	
	fz_notf_cbak_os_func					fz_notf_cbak_os;
	
	fz_notf_cbak_anim_func					fz_notf_cbak_anim;
	
	
	
	fz_notf_cbak_rmtl_func					fz_notf_cbak_rmtl;

	
	
} fz_notf_cbak_fset;

#ifdef __cplusplus
}
#endif

#endif
