/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_PLIN_API_H
#define _FORMZ_MODEL_PLIN_API_H


#include "fz_model_core_api.h"

#ifdef __cplusplus
extern "C" {
#endif





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

	FZ_OBJT_TYPE_PLIN


	Description
		Unique identifier for the composite curve object type.
 ****************************************************************/
#define FZ_OBJT_TYPE_PLIN		"\x84\x50\x32\x48\xe6\x7f\x4d\x5a\x84\x03\xea\x38\x67\x12\xb8\xb0"

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

	fz_objt_plin_parm_enum


	Description
		Parameter identifiers for a parametric composite curve. Used for the 
		"which" argument of fz_objt_edit_plin_parm_get and fz_objt_edit_plin_parm_set.

	Members
		FZ_OBJT_PLIN_PARM_MODEL_TYPE
			Editing - Composite curve model type.
			Type: fz_objt_model_type_enum

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_plin_parm_enum
{
	
	FZ_OBJT_PLIN_PARM_MODEL_TYPE = 0,
										
	MODEL_PLIN_PARM_MAX
	
} fz_objt_plin_parm_enum;

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

	fz_objt_edit_plin_parm_get



	Description
		Gets a parameter of a composite curve object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Result]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a composite curve object


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_plin_parm_set,fz_objt_cnstr_multi_spline, 
		fz_objt_cnstr_multi_spline_through_pts,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_plin_parm_get_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_plin_parm_enum	which,
	fz_type_td				*data
	);

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

	fz_objt_edit_plin_parm_set



	Description
		Sets a parameter of a composite curve object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Input]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a composite curve object


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_plin_parm_get,fz_objt_cnstr_multi_spline, 
		fz_objt_cnstr_multi_spline_through_pts,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_plin_parm_set_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_plin_parm_enum	which,
	fz_type_td				*data
	);






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

	FZ_OBJT_TYPE_SPLINE


	Description
		Unique identifier for the spline curve object type.
 ****************************************************************/
#define FZ_OBJT_TYPE_SPLINE		"\x45\xce\x74\xe0\xbe\x26\x42\x31\x9b\x5d\x05\x48\xea\x67\xc5\x07"

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

	fz_objt_spline_type_enum


	Description
		Identifies, which type of spline a spline object is. 
		They are equivalent to the various drawing tools, that 
		create spline objects : quadratic bezier, cubic bezier, 
		quadratic spline (also called sketch spline), cubic 
		spline and spline through points.

	Members
		FZ_OBJT_SPLINE_TYPE_BEZIER_QUAD
			Spline object is a quadratic bezier (degree 2 bezier)
		FZ_OBJT_SPLINE_TYPE_BEZIER_CUBC
			Spline object is a cubic bezier (degree 3 bezier). 
			This is the Illustrator style curve
		FZ_OBJT_SPLINE_TYPE_SPLINE_QUAD
			Spline object is a quadratic spline (degree 2 spline).
		FZ_OBJT_SPLINE_TYPE_SPLINE_CUBC
			Spline object is a cubic spline (degree 3 spline).
		FZ_OBJT_SPLINE_TYPE_THROUGH_PTS
			Spline object is a degree 3 spline that passes through 
			user defined points.

	Availability	5.5.0.0

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

typedef enum fz_objt_spline_type_enum
{
	FZ_OBJT_SPLINE_TYPE_BEZIER_QUAD = 0,
	FZ_OBJT_SPLINE_TYPE_BEZIER_CUBC,
	FZ_OBJT_SPLINE_TYPE_SPLINE_QUAD,
	FZ_OBJT_SPLINE_TYPE_SPLINE_CUBC,
	FZ_OBJT_SPLINE_TYPE_THROUGH_PTS,
	
	FZ_OBJT_SPLINE_TYPE_MAX
} fz_objt_spline_type_enum;

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

	fz_objt_spline_parm_enum


	Description
		Parameter identifiers for a parametric spline. Used for the 
		"which" argument of fz_objt_edit_spline_parm_get and fz_objt_edit_spline_parm_set. 
		The parameters of a spline curve are the number of control points, 
		the control points themselves and the closure. The number of control points 
		can only be read, but not set. Control points can be read and set. 
		When reading the control points, an array of fz_xyz_td must be preallocated 
		to be at least "npts" fzrt_int. The array pointer is set in the data argument 
		of fz_objt_edit_spline_parm_get. An example how this is done in a plugin 
		and a script is shown below. Setting the control points is done exactly 
		the same way. That is, an array of npts items must be allocated and 
		filled with the coordinate values of the control points. The array 
		pointer is set in the data argument for fz_objt_edit_spline_parm_set.

	Members
		FZ_OBJT_SPLINE_PARM_NPTS
			Editing - Spline number of control points.
			Type: fzrt_int
			Range: 3
		FZ_OBJT_SPLINE_PARM_CPTS
			Editing - Spline control points.
			Type: fz_xyz_td*
		FZ_OBJT_SPLINE_PARM_CLOSED
			Editing - Spline closed on (TRUE) or off (FALSE).
			Type: fzrt_boolean
		FZ_OBJT_SPLINE_PARM_MODEL_TYPE
			Editing - Spline model type.
			Type: fz_objt_model_type_enum
		FZ_OBJT_SPLINE_PARM_SPLINE_TYPE
			Editing - Spline type of the spline object.	Possible 
			values are contained in fz_objt_spline_type_enum. They 
			are equivalent to the various drawing tools, that 
			create spline objects : quadratic bezier, cubic bezier, 
			quadratic spline (also called sketch spline), cubic 
			spline and spline through points. 
			Available with version 5.1.0 and later
			Type: fz_objt_spline_type_enum

	Availability	5.0.0.0

	Plugin Example
		fz_xyz_td		*cpts; 
		fzrt_int		i,npts; 
		fz_type_td	data;

		// GET THE NUMBER OF CONTROL POINTS 
		fz_objt_edit_spline_parm_get(windex,obj,FZ_OBJT_SPLINE_PARM_NPTS,&data); 
		fz_type_get_int(&data,&npts);

		// ALLOCATE THE CONTROL POINTS ARRAY 
		cpts = (fz_xyz_td*)fzrt_new_ptr(sizeof(fz_xyz_td) * npts);

		// SET THE cpts POINTER IN THE data ARGUMENT AND RETRIEVE THE POINTS 
		fz_type_set_xyz_ptr(&data,&cpts); 
		fz_objt_edit_spline_parm_get(windex,obj,FZ_OBJT_SPLINE_PARM_CPTS,&data);

		// NOW cpts CONTAINS A COPY OF THE CONTROL POINTS 
		for(i = 0; i < ntps; i++) 
		{ 
		cpts[i].z += 10.0; 
		}

		// NOW PASS THE cpts BACK TO THE SPLINE OBJECT 
		fz_objt_edit_spline_parm_set(windex,obj,FZ_OBJT_SPLINE_PARM_CPTS,&data);

		// DEALLOCATE THE CONTROL POINTS ARRAY 
		fzrt_dispose_ptr((fzrt_ptr) cpts);
	Script Example
		 
		fz_xyz_td	cpts[]; 
		fzrt_int	i,npts;

		// GET THE NUMBER OF CONTROL POINTS 
		fz_objt_edit_spline_parm_get(windex,obj,FZ_OBJT_SPLINE_PARM_NPTS,npts);

		// BY ACESSING THE ARRAY ITEM npts-1, THE ARRAY 
		// IS ALLOCATED TO AT LEAST npts ITEMS 
		cpts[npts-1] = {0,0,0};

		// RETRIEVE THE POINTS 
		fz_objt_edit_spline_parm_get(windex,obj,FZ_OBJT_SPLINE_PARM_CPTS,cpts);

		// NOW cpts CONTAINS A COPY OF THE CONTROL POINTS 
		for(i = 0; i < ntps; i++) 
		{ 
		cpts[i].z += 10.0; 
		}

		// NOW PASS THE cpts BACK TO THE SPLINE OBJECT 
		fz_objt_edit_spline_parm_set(windex,obj,FZ_OBJT_SPLINE_PARM_CPTS,cpts); 
 ****************************************************************/
typedef enum fz_objt_spline_parm_enum
{
	
	FZ_OBJT_SPLINE_PARM_NPTS = 0,
												
	FZ_OBJT_SPLINE_PARM_CPTS,
												
	FZ_OBJT_SPLINE_PARM_CLOSED,
												
	FZ_OBJT_SPLINE_PARM_MODEL_TYPE,
												
	
	FZ_OBJT_SPLINE_PARM_SPLINE_TYPE,
	
	FZ_OBJT_SPLINE_PARM_MAX
} fz_objt_spline_parm_enum;

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

	fz_objt_cnstr_spline



	Description
		Creates 2nd or 3rd degree b-spline using control points and knots. 
		knots are optional. If passed, the knot array must contain exactly 
		ncpts + degree + 1 knot values, where knot[i-1] <= knot[i] <= knot[i+1]. 
		For open splines, there must be knot multiplicity at the start and end. 
		model_type determines if a smooth or facetted spline is created.

	Parameters
		windex  [Input]
			project window index
		cpts  [Input]
			control points
		ncpts  [Input]
			number of control points
			Range: 3 if degree is 2, 4 if degree is 3
		degree  [Input]
			degree
			Range: 2
		knots  [Input, Optional]
			knot array. If passed in, the knot 
			array must contain (ncpts + degree + 1) items, where 
			knot[i-1] <= knot[i] <= knot[i+1]. For open splines, 
			there must be multiplicity at the start and end.
		closed  [Input]
			open or closed spline. If TRUE, the spline 
			is closed.
		model_type  [Input]
			model type
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_edit_spline_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_spline_func) (
	fzrt_int 				windex,
	fz_xyz_td				*cpts,
	fzrt_int				ncpts,
	fzrt_int				degree,
	double				*knots,
	fzrt_boolean		closed,
	fz_objt_model_type_enum		model_type,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_spline_through_pts



	Description
		Creates degree 3 b-spline, which goes through the specified points.

	Parameters
		windex  [Input]
			project window index
		pts  [Input]
			points through which the spline curve goes
		npts  [Input]
			number of points
			Range: 3
		closed  [Input]
			open or closed spline. If TRUE, the spline is closed.
		model_type  [Input]
			model type
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_edit_spline_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_spline_through_pts_func) (
	fzrt_int 				windex,
	fz_xyz_td				*pts,
	fzrt_int				npts,
	fzrt_boolean		closed,
	fz_objt_model_type_enum		model_type,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_cubic_bezier



	Description
		Creates a cubic bezier spline (Illustrator style curve). The number 
		of control points passed in must be in multiple of 3 if closed or 
		multiple of 3 plus one if open. 
		model_type determines if a smooth or facetted spline is created.

	Parameters
		windex  [Input]
			project window index
		cpts  [Input]
			control points
		ncpts  [Input]
			number of control points
			Range: 3, must be in multiple of 3 if closed or multiple of 3 plus one if open
		closed  [Input]
			open or closed spline. If TRUE, the spline is closed.
		model_type  [Input]
			model type
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_edit_spline_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_cubic_bezier_func) (
	fzrt_int 				windex,
	fz_xyz_td				*cpts,
	fzrt_int				ncpts,
	fzrt_boolean		closed,
	fz_objt_model_type_enum		model_type,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);
											
/****************************************************************

	fz_objt_cnstr_multi_spline



	Description
		Creates multiple 2nd or 3rd degree b-spline curves. Each curve 
		has "pts_per_seg" control points 
		model_type determines if a smooth or facetted spline is created. 
		Note, that the resulting object type is not "Spline" but "Composite Curve" 
		since there are multiple curves.

	Parameters
		windex  [Input]
			project window index
		cpts  [Input]
			control points
		ncpts  [Input]
			number of control points
			Range: 3, if degree is 2, 4 if degree is 3
		degree  [Input]
			degree
			Range: 2
		pts_per_seg  [Input]
			control points per curve
		closed  [Input]
			open or closed spline. If TRUE, the spline is closed.
		model_type  [Input]
			model type
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_edit_spline_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_multi_spline_func) (
	fzrt_int 				windex,
	fz_xyz_td				*cpts,
	fzrt_int				ncpts,
	fzrt_int				degree,
	fzrt_int				pts_per_seg,
	fzrt_boolean		closed,
	fz_objt_model_type_enum		model_type,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_cnstr_multi_spline_through_pts



	Description
		Creates multiple degree 3 b-splines curves, which go through 
		the specified points. Each curve has "pts_per_seg" user points. 
		model_type determines if a smooth or facetted spline is created. 
		Note, that the resulting object type is not "Spline" but "Composite Curve" 
		since there are multiple curves.

	Parameters
		windex  [Input]
			project window index
		pts_in  [Input]
			points through which the curves goe
		npts  [Input]
			number of points
			Range: 3
		pts_per_seg  [Input]
			points per curve
		closed  [Input]
			open or closed spline. If TRUE, the spline is closed.
		model_type  [Input]
			model type
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_edit_spline_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_multi_spline_through_pts_func) (
	fzrt_int 				windex,
	fz_xyz_td				*pts_in,
	fzrt_int				npts,
	fzrt_int				pts_per_seg,
	fzrt_boolean		closed,
	fz_objt_model_type_enum		model_type,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_edit_spline_parm_get



	Description
		Gets a parameter of a spline object. 
		The parameters of a spline curve are the number of control points, 
		the control points themselves and the closure. The number of control points 
		can only be read, but not set. Control points can be read and set. 
		When reading the control points, an array of fz_xyz_td must be preallocated 
		to be at least "npts" fzrt_int. The array pointer is set in the data argument 
		of fz_objt_edit_spline_parm_get. See fz_objt_spline_parm_enum for a code 
		example. Setting the control points is done exactly the same way. 
		That is, an array of npts items must be allocated and 
		filled with the coordinate values of the control points. The array 
		pointer is set in the data argument for fz_objt_edit_spline_parm_set.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Result]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a spline object


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_set,fz_objt_cnstr_cubic_bezier, 
		fz_objt_cnstr_spline,fz_objt_cnstr_spline_through_pts, 
		fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_spline_parm_get_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_spline_parm_enum	which,
	fz_type_td				*data
	);

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

	fz_objt_edit_spline_parm_set



	Description
		Sets a parameter of a spline object. 
		The parameters of a spline curve are the number of control points, 
		the control points themselves and the closure. The number of control points 
		can only be read, but not set. Control points can be read and set. 
		When reading the control points, an array of fz_xyz_td must be preallocated 
		to be at least "npts" fzrt_int. The array pointer is set in the data argument 
		of fz_objt_edit_spline_parm_get. See fz_objt_spline_parm_enum for a code 
		example. Setting the control points is done exactly the same way. 
		That is, an array of npts items must be allocated and 
		filled with the coordinate values of the control points. The array 
		pointer is set in the data argument for fz_objt_edit_spline_parm_set. 
		Note, that the shape of the spline is not changed until the 
		function fz_objt_edit_parm_regen has been called.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Input]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a spline object


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_spline_parm_get,fz_objt_cnstr_cubic_bezier, 
		fz_objt_cnstr_spline,fz_objt_cnstr_spline_through_pts, 
		fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_spline_parm_set_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_spline_parm_enum	which,
	fz_type_td				*data
	);
	









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

	FZ_OBJT_TYPE_ARC


	Description
		Unique identifier for the arc object type.
 ****************************************************************/
#define FZ_OBJT_TYPE_ARC		"\x28\xca\xc6\xfc\xca\xe3\x4b\xd1\xa0\x3a\x99\x27\x16\xd2\x87\x87"

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

	fz_objt_arc_parm_enum


	Description
		Parameter identifiers for a parametric arc. Used for the 
		"which" argument of model_cnstr_arc_opts_get and model_cnstr_arc_opts_set.

	Members
		FZ_OBJT_ARC_PARM_RADII
			Editing - Arc radii.
			Type: fz_xy_td
			Range: 0.0
		FZ_OBJT_ARC_PARM_MODEL_TYPE
			Editing - Arc model type.
			Type: fz_objt_model_type_enum
		FZ_OBJT_ARC_PARM_START_ANG
			Editing - Arc start angle.
			Type: double
			Range: -2PI
		FZ_OBJT_ARC_PARM_END_ANG
			Editing - Arc end angle.
			Type: double
			Range: -2PI
		FZ_OBJT_ARC_PARM_CLOCKWISE
			Editing - Arc clockwise on (TRUE) or off (FALSE).
			Type: fzrt_boolean
		FZ_OBJT_ARC_PARM_ORIGIN
			Editing - Arc origin.
			Type: fz_xyz_td
		FZ_OBJT_ARC_PARM_ROTATION
			Editing - Arc rotation. Rotation angles are applied 
			in z y x order to transform the arc from alignment with 
			the world axes to it's 3d orientation.
			Type: fz_xyz_td

	Availability	5.0.0.0


	See Also
		fz_objt_edit_arc_parm_get, fz_objt_edit_arc_parm_set

 ****************************************************************/
typedef enum fz_objt_arc_parm_enum
{
	
	FZ_OBJT_ARC_PARM_RADII = 0,
										
	FZ_OBJT_ARC_PARM_MODEL_TYPE,
												
	FZ_OBJT_ARC_PARM_START_ANG,
												
	FZ_OBJT_ARC_PARM_END_ANG,
												
	FZ_OBJT_ARC_PARM_CLOCKWISE,
												
	FZ_OBJT_ARC_PARM_ORIGIN,
											
	FZ_OBJT_ARC_PARM_ROTATION,
	
	MODEL_ARC_PARM_MAX
	
} fz_objt_arc_parm_enum;

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

	fz_objt_cnstr_arc



	Description
		Creates a circular or elliptical arc. 
		The arc is centered at 0,0,0. The major axis is aligned 
		with the x axis. The minor axis is aligned with the y axis. 
		radius x is measured along the x axis and radius y along the y axis. 
		start_ang and end_ang define the start and end of the arc and are 
		measured from the positive x axis. 
		If clockwise is TRUE, the arc goes in clockwise direction from start to end. 
		Otherwise it goes in counterclockwise direction from start to end. 
		model_type determines if a smooth or facetted arc is created. 
		The optional origin and rotation arguments represent the 
		transformation into 3D space. 
		If start_ang and end_ang are the same, a full circle or ellipse is created.

	Parameters
		windex  [Input]
			project window index
		rx_ry  [Input]
			x and y radii
			Range: 0.0
		start_ang  [Input]
			start angle
			Range: -2PI
		end_ang  [Input]
			end angle
			Range: -2PI
		clockwise  [Input]
			If TRUE, the arc is generated clockwise from 
			the start angle to the end angle. Otherwise it is 
			generated counter clockwise
		model_type  [Input]
			model type
		origin  [Input, Optional]
			origin
			Default Value: {0,0,0}
		rotation  [Input, Optional]
			rotation angles, applied in z,y,x order
			Default Value: {0,0,0}
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_ellipse_parm_set,fz_objt_edit_ellipse_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_arc_func) (
	fzrt_int 				windex,
	fz_xy_td				*rx_ry,
	double				start_ang,
	double				end_ang,
	fzrt_boolean		clockwise,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td				*origin,
	fz_xyz_td				*rotation,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_edit_arc_parm_get



	Description
		Gets a parameter of an arc.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Result]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not an arc


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_arc_parm_set,fz_objt_cnstr_arc,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_arc_parm_get_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_arc_parm_enum		which,
	fz_type_td				*data
	);

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

	fz_objt_edit_arc_parm_set



	Description
		Sets a parameter of an arc. Note, that the shape of the arc 
		is not changed until the function fz_objt_edit_parm_regen has 
		been called.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Input]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not an arc


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_arc_parm_get,fz_objt_cnstr_arc,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_arc_parm_set_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_arc_parm_enum		which,
	fz_type_td				*data
	);









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

	FZ_OBJT_TYPE_CIRCLE


	Description
		Unique identifier for the circle object type.
 ****************************************************************/
#define FZ_OBJT_TYPE_CIRCLE		"\xd6\x0a\x6e\xd8\x55\x94\x4b\x71\x82\xab\xa4\xc4\x85\xb9\xde\x03"

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

	fz_objt_circle_parm_enum


	Description
		Parameter identifiers for a parametric circle. Used for the 
		"which" argument of model_cnstr_circ_opts_get and model_cnstr_circ_opts_set.

	Members
		FZ_OBJT_CIRCLE_PARM_RADIUS
			Editing - Circle radius.
			Type: double
			Range: 0.0
		FZ_OBJT_CIRCLE_PARM_MODEL_TYPE
			Editing - Model type.
			Type: fz_objt_model_type_enum
		FZ_OBJT_CIRCLE_PARM_ORIGIN
			Editing - Circle origin.
			Type: fz_xyz_td
		FZ_OBJT_CIRCLE_PARM_ROTATION
			Editing - Circle rotation. Rotation angles are applied 
			in z y x order to transform the circle from alignment with 
			the world axes to it's 3d orientation.
			Type: fz_xyz_td

	Availability	5.0.0.0


	See Also
		fz_objt_edit_circle_parm_get, fz_objt_edit_circle_parm_set

 ****************************************************************/
typedef enum fz_objt_circle_parm_enum
{
	
	FZ_OBJT_CIRCLE_PARM_RADIUS = 0,
										
	FZ_OBJT_CIRCLE_PARM_MODEL_TYPE,
										
	FZ_OBJT_CIRCLE_PARM_ORIGIN,
										
	FZ_OBJT_CIRCLE_PARM_ROTATION,

	FZ_OBJT_CIRCLE_PARM_MAX
} fz_objt_circle_parm_enum;

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

	fz_objt_cnstr_circle



	Description
		Creates a circle. 
		The circle is centered at 0,0,0. The major axis is aligned 
		with the x axis. The minor axis is alligned with the y axis. 
		model_type determines if a smooth or facetted circle is created. 
		The optional origin and rotation arguments represent the 
		transformation into 3D space.

	Parameters
		windex  [Input]
			project window index
		radius  [Input]
			radius
			Range: 0.0
		model_type  [Input]
			model type
		origin  [Input, Optional]
			origin
			Default Value: {0,0,0}
		rotation  [Input, Optional]
			rotation angles, applied in z,y,x order
			Default Value: {0,0,0}
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_circle_parm_set,fz_objt_edit_circle_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_circle_func) (
	fzrt_int 				windex,
	double				radius,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td				*origin,
	fz_xyz_td				*rotation,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_edit_circle_parm_get



	Description
		Gets a parameter of a circle.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Result]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a circle


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_circle_parm_set,fz_objt_cnstr_circle,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_circle_parm_get_func) (
	fzrt_int 					windex,
	fz_objt_ptr			obj,
	fz_objt_circle_parm_enum	which,
	fz_type_td				*data
	);


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

	fz_objt_edit_circle_parm_set



	Description
		Sets a parameter of a circle. Note, that the shape of the circle 
		is not changed until the function fz_objt_edit_parm_regen has 
		been called.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Input]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not a circle


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_circle_parm_get,fz_objt_cnstr_circle,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_circle_parm_set_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_circle_parm_enum	which,
	fz_type_td				*data
	);










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

	FZ_OBJT_TYPE_ELLIPSE


	Description
		Unique identifier for the ellipse object type.
 ****************************************************************/
#define FZ_OBJT_TYPE_ELLIPSE		"\x6c\x17\x6c\x0b\xdc\xa0\x42\x00\xbf\x4e\xc4\xa4\x09\x89\xed\x61"



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

	fz_objt_ellipse_parm_enum


	Description
		Parameter identifiers for a parametric ellipse. Used for the 
		"which" argument of model_cnstr_elps_opts_get and model_cnstr_elps_opts_set.

	Members
		FZ_OBJT_ELLIPSE_PARM_RADII
			Editing - Ellipse radii.
			Type: fz_xy_td
			Range: 0.0
		FZ_OBJT_ELLIPSE_PARM_MODEL_TYPE
			Editing - Model type.
			Type: fz_objt_model_type_enum
		FZ_OBJT_ELLIPSE_PARM_ORIGIN
			Editing - Ellipse origin.
			Type: fz_xyz_td
		FZ_OBJT_ELLIPSE_PARM_ROTATION
			Editing - Ellipse rotation. Rotation angles are applied 
			in z y x order to transform the ellipse from alignment with 
			the world axes to it's 3d orientation.
			Type: fz_xyz_td

	Availability	5.0.0.0

 ****************************************************************/
typedef enum fz_objt_ellipse_parm_enum
{
	
	FZ_OBJT_ELLIPSE_PARM_RADII = 0,
										
	FZ_OBJT_ELLIPSE_PARM_MODEL_TYPE,
										
	FZ_OBJT_ELLIPSE_PARM_ORIGIN,
											
	FZ_OBJT_ELLIPSE_PARM_ROTATION,

	FZ_OBJT_ELLIPSE_PARM_MAX
} fz_objt_ellipse_parm_enum;


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

	fz_objt_cnstr_ellipse



	Description
		Creates an ellipse. 
		The ellipse is centered at 0,0,0. The major axis is aligned 
		with the x axis. The minor axis is aligned with the y axis. 
		The x radius is measured along the x axis, the y radius along the y axis. 
		model_type determines if a smooth or facetted ellipse is created. 
		The optional origin and rotation arguments represent the 
		transformation into 3D space.

	Parameters
		windex  [Input]
			project window index
		radii  [Input]
			x and y radii
			Range: 0.0
		model_type  [Input]
			model type
		origin  [Input, Optional]
			origin
			Default Value: {0,0,0}
		rotation  [Input, Optional]
			rotation angles, applied in z,y,x order
			Default Value: {0,0,0}
		refn_opts  [Input, Optional]
			display resolution options. For defaults see fz_attr_refn_parm_enum
		obj  [Result]
			new object

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_ellipse_parm_set,fz_objt_edit_ellipse_parm_get

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cnstr_ellipse_func) (
	fzrt_int 				windex,
	fz_xy_td				*radii,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td				*origin,
	fz_xyz_td				*rotation,
	fz_attr_refn_ptr	refn_opts,
	fz_objt_ptr		*obj
	);

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

	fz_objt_edit_ellipse_parm_get



	Description
		Gets a parameter of an ellipse.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Result]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not an ellipse


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_ellipse_parm_set,fz_objt_cnstr_circle,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_ellipse_parm_get_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_ellipse_parm_enum	which,
	fz_type_td				*data
	);

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

	fz_objt_edit_ellipse_parm_set



	Description
		Sets a parameter of an ellipse. Note, that the shape of the ellipse 
		is not changed until the function fz_objt_edit_parm_regen has 
		been called.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		which  [Input]
			parameter id
		data  [Input]
			parameter data

	Returns
		Error codes 
		MODEL_ERR_WRONG_OBJT_TYPE	- object passed in is not an ellipse


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_plin.fsl

	See Also
		fz_objt_edit_ellipse_parm_get,fz_objt_cnstr_circle,fz_objt_edit_parm_regen

 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_edit_ellipse_parm_set_func) (
	fzrt_int					windex,
	fz_objt_ptr			obj,
	fz_objt_ellipse_parm_enum	which,
	fz_type_td				*data
	);
											


#ifdef __cplusplus
}
#endif

#endif
