/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_MODEL_CORE_API_H
#define _FORMZ_MODEL_CORE_API_H

#ifdef __cplusplus
extern "C" {
#endif


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

	Modeling


	Description
		formZ modeling functions.  This module contains functions to manage the modeling 
		aspects of a project.  The different areas of functionality include managing attributes, 
		layers, lights, objects, rendering, and views.
 ****************************************************************/

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

	fz_objt_ptr


	Description
		Data structure for a modeling object.

	Availability	5.0.0.0

 ****************************************************************/
typedef struct 	object_td	 	*fz_objt_ptr;


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

	fz_enty_list_ptr


	Description
		Data structure for an entity list. An entity list contains zero or 
		more pointers to an entity of the same kind. For example, an 
		entity list may contain object pointers (fz_objt_ptr) or 
		light pointers (fz_lite_ptr). A number of functions operate on an 
		entity list. Typically, an entity list is used in the following 
		manner :  
		1. Create an entity list via fz_objt_list_create() 
		2. Fill the entity list with entities. This may be done by 
		an api function, such as fz_objt_edit_bool_difference(). In this case 
		the entity list is filled by fz_objt_edit_bool_difference() with the result 
		of a boolean difference which may yield zero or more new objects. 
		3. Retrieve the number of entities in the list via fz_objt_list_count(). 
		4. Retrieve individual entities from the list via fz_objt_list_get_objt() 
		5. Delete the entity list via fz_objt_list_delete()

	Availability	5.0.0.0

 ****************************************************************/
typedef struct 	entity_list_td	*fz_enty_list_ptr;

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

	fz_objt_model_type_enum


	Description
		Model type identifiers. They identify facetted and smooth objects and 
		are used as a parameter to many construction and edit functions to 
		indicate, whether a facetted or smooth object is created/edited.

	Members
		FZ_OBJT_MODEL_TYPE_UNSPEC
			Model type is not specified
		FZ_OBJT_MODEL_TYPE_FACT
			Model type is facetted
		FZ_OBJT_MODEL_TYPE_SMOD
			Model type is smooth

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_model_type_enum
{	FZ_OBJT_MODEL_TYPE_UNSPEC = -1,
	FZ_OBJT_MODEL_TYPE_FACT = 0,
	FZ_OBJT_MODEL_TYPE_SMOD	= 1
} fz_objt_model_type_enum;

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

	fz_objt_topo_level_enum


	Description
		Topology level identifiers. They identify the five levels of 
		object topology : point, segment, curve(outline), face and object. 
		Note, that "hole" does not appear in this list, as it is not a 
		topological level as represented in the model object data structure. 
		Holes (volumes) can be defined as a set of connected faces.

	Members
		FZ_OBJT_TOPO_LEVEL_OBJT
			Object topology level
		FZ_OBJT_TOPO_LEVEL_FACE
			Face topology level
		FZ_OBJT_TOPO_LEVEL_CURV
			Curve (outline) topology level
		FZ_OBJT_TOPO_LEVEL_SEGT
			Segment topology level
		FZ_OBJT_TOPO_LEVEL_CORD
			Point topology level

	Availability	5.0.0.0

 ****************************************************************/
typedef enum	fz_objt_topo_level_enum
{	FZ_OBJT_TOPO_LEVEL_OBJT = 0,
	FZ_OBJT_TOPO_LEVEL_FACE,
	FZ_OBJT_TOPO_LEVEL_CURV,
	FZ_OBJT_TOPO_LEVEL_SEGT,
	FZ_OBJT_TOPO_LEVEL_CORD,
	MODEL_TOPO_N_LEVEL
} fz_objt_topo_level_enum;


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

	fz_objt_smooth_type_enum


	Description
		Smooth type identifiers. They identify whether a smooth object is 
		constructed as a regular smooth object or as a smooth nurbz object. 
		They are used as a parameter for a number of derivative construction/editing 
		functions

	Members
		FZ_OBJT_SMOOTH_TYPE_NRBZ
			Smooth model type is smooth nurbz
		FZ_OBJT_SMOOTH_TYPE_SMOD
			Smooth model type is regular smooth

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_smooth_type_enum
{	FZ_OBJT_SMOOTH_TYPE_NRBZ = 0,
	FZ_OBJT_SMOOTH_TYPE_SMOD
} fz_objt_smooth_type_enum;


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

	fz_align_lcr_enum


	Description
		Alignment identifiers. They identify whether an alignment is left, 
		center or right justified,

	Members
		FZ_ALIGN_LEFT
			Alignment is left justified
		FZ_ALIGN_CENTER
			Alignment is centered
		FZ_ALIGN_RIGHT
			Alignment is right justified

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_align_lcr_enum
{	FZ_ALIGN_LEFT = 0,
	FZ_ALIGN_CENTER,
	FZ_ALIGN_RIGHT,
	
	ALIGN_MAX
} fz_align_lcr_enum;

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

	fz_objt_topo_type_enum


	Description
		Model topology identifiers. These identifiers are the 
		same as the topology field in the Query dialog.

	Members
		FZ_OBJT_TOPO_NONE
			No Topology
		FZ_OBJT_TOPO_SPNT
			Single Point
		FZ_OBJT_TOPO_OWRE
			Open Wire
		FZ_OBJT_TOPO_CWRE
			Closed Wire
		FZ_OBJT_TOPO_SURF
			Surface (one or more faces)
		FZ_OBJT_TOPO_SSLD
			Surface Solid
		FZ_OBJT_TOPO_SOLD
			Solid
		FZ_OBJT_TOPO_MIXD
			Mixed

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_topo_type_enum
{	FZ_OBJT_TOPO_NONE = 0,
	FZ_OBJT_TOPO_SPNT,
	FZ_OBJT_TOPO_OWRE,
	FZ_OBJT_TOPO_CWRE,
	FZ_OBJT_TOPO_SURF,
	FZ_OBJT_TOPO_SSLD,
	FZ_OBJT_TOPO_SOLD,
	FZ_OBJT_TOPO_MIXD,
	
	OBJT_TOPO_MAX
} fz_objt_topo_type_enum;

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

	fz_map_space_type_enum


	Description
		Mapping types for the texture map control attribute, decal attribute 
		displacement mapping etc. Note that not all mapping types are 
		available in specific uses of texture mapping. For example, decals 
		do not offer the uv coordinate map type. Specifics about these 
		restrictions are discussed in the respective sections where mapping 
		is used.

	Members
		FZ_MAP_SPACE_FLAT
			Flat mapping
		FZ_MAP_SPACE_CUBIC
			Cubic mapping
		FZ_MAP_SPACE_CYLINDER
			Cylindrical mapping
		FZ_MAP_SPACE_SPHERE
			Spherical mapping
		FZ_MAP_SPACE_PARAMETRIC
			Parametric mapping
		FZ_MAP_SPACE_UV_CORDS
			UV Coordinates mapping

	Availability	5.0.0.0


	See Also
		fz_attr_decal_parm_enum, fz_attr_tctl_parm_enum, fz_proj_tctl_parm_enum

 ****************************************************************/
typedef enum fz_map_space_type_enum
{
	FZ_MAP_SPACE_FLAT = 0,
	FZ_MAP_SPACE_CUBIC,
	FZ_MAP_SPACE_CYLINDER,
	FZ_MAP_SPACE_SPHERE,
	FZ_MAP_SPACE_PARAMETRIC,
	FZ_MAP_SPACE_UV_CORDS

} fz_map_space_type_enum;


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

	fz_map_space_size_lock_enum


	Description
		size lock type for a map space. 
		used by the get/set functions of the texture map control attribute, 
		decal attribute etc.

	Members
		FZ_MAP_SPACE_SIZE_LOCK_NONE
			No size lock
		FZ_MAP_SPACE_SIZE_LOCK_SQUARE
			Square size lock
		FZ_MAP_SPACE_SIZE_LOCK_CURRENT
			Size lock maintaining current proportions

	Availability	5.0.0.0


	See Also
		fz_attr_decal_parm_enum, fz_attr_tctl_parm_enum, fz_proj_tctl_parm_enum

 ****************************************************************/
typedef enum fz_map_space_size_lock_enum
{
	FZ_MAP_SPACE_SIZE_LOCK_NONE = 0,
	FZ_MAP_SPACE_SIZE_LOCK_SQUARE,
	FZ_MAP_SPACE_SIZE_LOCK_CURRENT

} fz_map_space_size_lock_enum;



#define	MODEL_PARM_CSTR_START   0
#define	MODEL_PARM_CSED_START 100
#define	MODEL_PARM_EDIT_START 200


#ifdef __cplusplus
}
#endif

#endif
