/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_SURF_API_H
#define _FORMZ_MODEL_SURF_API_H

#ifdef __cplusplus
extern "C" {
#endif


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

	Formula Surface and Curve


	Description
		formZ Model Formula Surface objects. This module contains functions to construct 
		Formula Surface objects.
 ****************************************************************/

#include "fz_model_core_api.h"

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

	FZ_OBJT_TYPE_FSRF


	Description
		Unique identifier for the Formula Surface object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_FSRF		"\x1c\x31\x43\xa7\xf1\x5e\x48\x6a\x9f\x9f\x81\x15\x63\xcc\xb2\x38"

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

	FZ_OBJT_TYPE_PRBL


	Description
		Unique identifier for the Paraboloid object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_PRBL		"\xaa\x95\xfb\xfb\xe3\x81\x43\x16\xbf\x85\x4d\xa5\xcd\x5a\x87\xe0"

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

	FZ_OBJT_TYPE_HBL1


	Description
		Unique identifier for the Single Hyperboloid object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_HBL1		"\xf3\x56\x5b\xc4\xc8\x50\x47\xd5\xb4\xac\xb9\x53\x2a\x55\x03\xbe"

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

	FZ_OBJT_TYPE_HBL2


	Description
		Unique identifier for the Double Hyperboloid object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_HBL2		"\x6d\x06\xb8\xae\xbd\x54\x4a\x0b\x9a\x09\xfd\x3a\xa3\x29\xed\xe5"

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

	FZ_OBJT_TYPE_HPBL


	Description
		Unique identifier for the Hyperbolic Paraboloid object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_HPBL		"\xca\xaf\x1b\x03\x0d\x05\x47\x15\x91\x78\x7c\xad\xd8\x33\x64\xc7"


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

	fz_objt_cnstr_formula_surface



	Description
		Creates a Formula Surface object by custom function. 
		This function constructs a Smooth controlled object. 
		A surface is constructed from the parametric functions x(u,v), y(u,v) and z(u,v) 
		defined in the domain [umin < u < umax] [vmin < v < vmax]. The parametric functions 
		are specified by the strings str_x, str_y and str_z.

	Parameters
		windex  [Input]
			project window index
		str_x  [Input]
			X Function string
		str_y  [Input]
			Y Function string
		str_z  [Input]
			Z Function string
		umin  [Input]
			Lower bound for u
		umax  [Input]
			Upper bound for u
		vmin  [Input]
			Lower bound for v
		vmax  [Input]
			Upper bound for v
		scale  [Input, Optional]
			scale factors
			Default Value: {1,1,1}
		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_surf.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_formula_surface_func)(
	fzrt_int 					windex,
	char					*str_x,
	char					*str_y,
	char					*str_z,
	double					umin,
	double					umax,
	double					vmin,
	double					vmax,
	fz_xyz_td				*scale,
	fz_xyz_td				*origin,
	fz_xyz_td				*rotation,
	fz_attr_refn_ptr		refn_opts,
	fz_objt_ptr				*obj
	);

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

	FZ_OBJT_TYPE_FCRV


	Description
		Unique identifier for the Formula Curve object type.
 ****************************************************************/

#define FZ_OBJT_TYPE_FCRV		"\xc6\x92\x17\x62\x4e\xab\x4f\xd9\x85\x08\x97\x32\xbf\xaa\xa4\x0e"


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

	fz_objt_cnstr_formula_curve



	Description
		Creates a Formula Curve object by custom function. 
		This function constructs a Smooth controlled object. 
		A curve is constructed from the parametric functions x(u), y(u) and z(u) 
		defined in the domain [umin < u < umax]. The parametric functions 
		are specified by the strings str_x, str_y and str_z.

	Parameters
		windex  [Input]
			project window index
		str_x  [Input]
			X Function string
		str_y  [Input]
			Y Function string
		str_z  [Input]
			Z Function string
		umin  [Input]
			Lower bound for u
		umax  [Input]
			Upper bound for u
		scale  [Input, Optional]
			scale factors
			Default Value: {1,1,1}
		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_surf.fsl
 ****************************************************************/
typedef fzrt_error_td	 (*fz_objt_cnstr_formula_curve_func)(
	fzrt_int 					windex,
	char					*str_x,
	char					*str_y,
	char					*str_z,
	double					umin,
	double					umax,
	fz_xyz_td				*scale,
	fz_xyz_td				*origin,
	fz_xyz_td				*rotation,
	fz_attr_refn_ptr		refn_opts,
	fz_objt_ptr				*obj
	);


#ifdef __cplusplus
}
#endif

#endif
