/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_ALYS_API_H
#define _FORMZ_MODEL_ALYS_API_H

#ifdef __cplusplus
extern "C" {
#endif



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

	Analysis


	Description
		This module contains functions to analyze the geometry of an object.  This includes determining 
		the area of a face or the volume of the object, for example.
 ****************************************************************/

#include "fz_model_core_api.h"

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

	fz_objt_face_geom_enum


	Description
		Identifier of a face geometry.

	Members
		FZ_OBJT_FACE_GEOM_TYPE_PNT
			Face geometry : Point
		FZ_OBJT_FACE_GEOM_TYPE_WIRE
			Face geometry : Wire
		FZ_OBJT_FACE_GEOM_TYPE_PLNE
			Face geometry : Plane
		FZ_OBJT_FACE_GEOM_TYPE_SPHR
			Face geometry : Sphere
		FZ_OBJT_FACE_GEOM_TYPE_CYLN
			Face geometry : Cylinder
		FZ_OBJT_FACE_GEOM_TYPE_CONE
			Face geometry : Cone
		FZ_OBJT_FACE_GEOM_TYPE_TORS
			Face geometry : Torus
		FZ_OBJT_FACE_GEOM_TYPE_SPLN
			Face geometry : Spline
		FZ_OBJT_FACE_GEOM_TYPE_SUBD
			Face geometry : Subdivision Surface

	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_face_geom_type

 ****************************************************************/
typedef enum fz_objt_face_geom_enum
{
	FZ_OBJT_FACE_GEOM_TYPE_PNT = 0,
	FZ_OBJT_FACE_GEOM_TYPE_WIRE,
	FZ_OBJT_FACE_GEOM_TYPE_PLNE,
	FZ_OBJT_FACE_GEOM_TYPE_SPHR,
	FZ_OBJT_FACE_GEOM_TYPE_CYLN,
	FZ_OBJT_FACE_GEOM_TYPE_CONE,
	FZ_OBJT_FACE_GEOM_TYPE_TORS,
	FZ_OBJT_FACE_GEOM_TYPE_SPLN,
	FZ_OBJT_FACE_GEOM_TYPE_SUBD,
	
	MODEL_FACE_GEOM_TYPE_MAX
} fz_objt_face_geom_enum;

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

	fz_objt_segt_geom_enum


	Description
		Identifier of a segment geometry.

	Members
		FZ_OBJT_SEGT_GEOM_TYPE_PNT
			Segment geometry : Point
		FZ_OBJT_SEGT_GEOM_TYPE_LINE
			Segment geometry : Line
		FZ_OBJT_SEGT_GEOM_TYPE_ARC
			Segment geometry : Arc
		FZ_OBJT_SEGT_GEOM_TYPE_SPLN
			Segment geometry : Spline

	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_segt_geom_type

 ****************************************************************/
typedef enum fz_objt_segt_geom_enum
{
	FZ_OBJT_SEGT_GEOM_TYPE_PNT = 0,
	FZ_OBJT_SEGT_GEOM_TYPE_LINE,
	FZ_OBJT_SEGT_GEOM_TYPE_ARC,
	FZ_OBJT_SEGT_GEOM_TYPE_SPLN,
	
	MODEL_SEGT_GEOM_TYPE_MAX
} fz_objt_segt_geom_enum;

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

	fz_objt_alys_get_objt_volume



	Description
		Calculates the volume of an object. 
		The object passed in must be a solid.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object (must be solid)
		volume  [Result]
			object volume

	Returns
		Error codes 
		MODEL_ERR_INVALID_TOPO	- object isn't solid


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area,fz_objt_alys_get_objt_moments, 
		fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_volume_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	double			*volume
	);

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

	fz_objt_alys_get_objt_cog



	Description
		Calculates the center of gravity of an object. 
		Depending on which topology type is encountered, different 
		algoritms are used :

		POINT		    	: The coordinate 
		OPEN/CLOSED WIRE	: Weighted average of segment midpoints 
		SINGLE FACE SURFACE	: Face cog 
		SURF SOLID AND 
		MESHED SURFACE   	: Weighted average of all face cogs 
		SOLID  				: Volumetric cog 
		MIXED TOPOLOGY		: Average of all facetted coordinate points

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cog  [Result]
			center of gravity

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_area,fz_objt_alys_get_objt_moments, 
		fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_cog_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*cog
	);

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

	fz_objt_alys_get_objt_area



	Description
		Calculates the surface area of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		area  [Result]
			area

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_moments, 
		fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_area_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	double			*area
	);

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

	fz_objt_alys_get_objt_moments



	Description
		Calculates the moments of inertia of an object. 
		The object passed in must be a solid.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object (must be solid)
		moments_world  [Result, Optional]
			moments of inertia about the world axes
		moments_paxes  [Result, Optional]
			moments of inertia about the principle axes of rotation

	Returns
		Error codes 
		MODEL_ERR_INVALID_TOPO	- object isn't solid


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_moments_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*moments_world,
	fz_xyz_td			*moments_paxes
	);

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

	fz_objt_alys_get_objt_principle_axes



	Description
		Calculates the principle axes of rotation of an object. 
		The object passed in must be a solid. 
		The returned axes are normalized vectors from the center 
		of gravity of the object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		ax1  [Result]
			normalized vector axis 1
		ax2  [Result]
			normalized vector axis 2
		ax3  [Result]
			normalized vector axis 3

	Returns
		Error codes 
		MODEL_ERR_INVALID_TOPO	- object isn't solid


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_bbox,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_principle_axes_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*ax1,
	fz_xyz_td			*ax2,
	fz_xyz_td			*ax3
	);

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

	fz_objt_alys_get_objt_bbox



	Description
		Calculates the bounding volume of an object. 
		The bounding volume is defined by the opposite corners of 
		a world axes aligned cube. The two corners are returned 
		in the min and max parameters.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		min  [Result]
			bottom left corner of the bounding box
		max  [Result]
			top right corner of the bounding box

	Returns
		Error codes 
		MODEL_ERR_INVALID_TOPO	- object isn't solid


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_bbox_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*min,
	fz_xyz_td			*max
	);

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

	fz_objt_alys_get_objt_bvol



	Description
		Gets the object's bounding volume. This function is similar to the API 
		fz_objt_alys_get_objt_bbox, except, that it returns the bounding volume 
		of the object aligned with the object's axes (as calculated by fz_objt_alys_get_objt_axes). 
		This bounding volume is described by eight corner points in the following order : 
		bvol[0] = xmin, ymin, zmin 
		bvol[1] = xmin, ymax, zmin 
		bvol[2] = xmax, ymax, zmin 
		bvol[3] = xmax, ymin, zmin 
		bvol[4] = xmin, ymin, zmax 
		bvol[5] = xmin, ymax, zmax 
		bvol[6] = xmax, ymax, zmax 
		bvol[7] = xmax, ymin, zmax 
		Note, that the bvol array must be allocated to at least 8 points by the 
		calling code.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		bvol  [Result]
			array with 8 points, containing the bounding volume corners

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_origin, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid,fz_objt_alys_get_objt_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_bvol_func) (
	fzrt_int 			windex,
	fz_objt_ptr		obj,
	fz_xyz_td		*bvol
	);


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

	fz_objt_alys_get_objt_origin



	Description
		Gets the object's origin. 
		Note : this is the origin as seen in the query dialog.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		origin  [Result]
			object's origin

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_origin_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*origin
	);

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

	fz_objt_alys_get_objt_centroid



	Description
		Gets the object's centroid point. 
		Note : this is the centroid as seen in the query dialog.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		centroid  [Result]
			object's origin

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_centroid_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*centroid
	);


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

	fz_objt_alys_get_objt_axes



	Description
		Gets the object's axes. 
		Note : these are the axes as seen in the query dialog. 
		The axes are returned as three normalized vectors. 
		When drawn on the screen, the object axes are anchored at 
		the object origin as retrieved by fz_objt_alys_get_objt_origin.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		xaxis  [Result]
			normalized vector x axis
		yaxis  [Result]
			normalized vector y axis
		zaxis  [Result]
			normalized vector z axis

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_set_objt_origin,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_axes_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*xaxis,
	fz_xyz_td			*yaxis,
	fz_xyz_td			*zaxis
	);

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

	fz_objt_alys_set_objt_origin



	Description
		Sets the object's origin. 
		Note : this is the origin as seen in the query dialog.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		origin  [Input]
			origin

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_axes, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_set_objt_origin_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*origin
	);

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

	fz_objt_alys_set_objt_axes



	Description
		Sets the object's axes. 
		Note : these are the axes as seen in the query dialog. 
		The axes are passed as two normalized vectors, which must be 
		perpendicular to each other. 
		The cross product of the x and y axes defines the z axis.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		xaxis  [Input]
			x axis
		yaxis  [Input]
			y axis

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin, 
		fz_objt_alys_get_objt_topo_type,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_set_objt_axes_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_xyz_td			*xaxis,
	fz_xyz_td			*yaxis
	);

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

	fz_objt_alys_get_objt_topo_type



	Description
		Gets the object's topology type. 
		See fz_objt_topo_type_enum for possible values. 
		FZ_OBJT_TOPO_MIXD means that the object has multiple volumes, where 
		at least two are of a different topology type. 
		If the multi parameter is not NULL, fz_objt_alys_get_objt_topo_type 
		will also determine whether the object consists of multiple volumes. 
		If it does and they are all of the same topology type, 
		that type is returned. 
		Otherwise FZ_OBJT_TOPO_MIXD is returned.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		topo_type  [Result]
			object's topology type
		multi  [Result, Optional]
			object consists of multiple volumes

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin, 
		fz_objt_alys_set_objt_axes,fz_objt_alys_get_objt_cntl_uuid, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_topo_type_func) (
	fzrt_int 					windex,
	fz_objt_ptr			obj,
	fz_objt_topo_type_enum	*topo_type,
	fzrt_boolean			*multi
	);

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

	fz_objt_alys_get_objt_cntl_uuid



	Description
		Gets the object's control type in the form of a uuid. 
		If the object is not a controlled (parametric) object, the 
		uuid parameter (cntl_uuid) is set to FZ_OBJT_TYPE_PLAIN. 
		Otherwise the uuid of the control object type is returned (cntl_uuid).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cntl_uuid  [Result]
			object's UUID

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin, 
		fz_objt_alys_set_objt_axes,fz_objt_alys_get_objt_topo_type, 
		fz_objt_alys_get_objt_model_type,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_cntl_uuid_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_UUID_td	cntl_uuid
	);

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

	fz_objt_alys_get_objt_model_type



	Description
		Gets the object's model type.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		model_type  [Result]
			object's model type

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin, 
		fz_objt_alys_set_objt_axes,fz_objt_alys_get_objt_topo_type, 
		fz_objt_alys_get_objt_cntl_uuid,fz_objt_alys_objt_is_valid

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_objt_model_type_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fz_objt_model_type_enum	*model_type
	);

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

	fz_objt_alys_objt_is_valid



	Description
		Checks whether an object is valid. 
		An object is invalid if : 
		There is no facetted topology 
		The object is not a controlled object

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		valid  [Result]
			object is valid

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_objt_volume,fz_objt_alys_get_objt_cog,fz_objt_alys_get_objt_area, 
		fz_objt_alys_get_objt_moments,fz_objt_alys_get_objt_principle_axes,fz_objt_alys_get_objt_bbox, 
		fz_objt_alys_get_objt_origin,fz_objt_alys_get_objt_axes,fz_objt_alys_set_objt_origin, 
		fz_objt_alys_set_objt_axes,fz_objt_alys_get_objt_topo_type, 
		fz_objt_alys_get_objt_cntl_uuid,fz_objt_alys_get_objt_model_type

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_objt_is_valid_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_boolean	*valid
	);

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

	fz_objt_alys_face_is_planar



	Description
		Checks whether a given face is planar. This is the case if : 
		the face belongs to a facetted object and all its points are 
		on the same plane. 
		the face belongs to a smooth object and the face's underlying 
		geometry is a plane. 
		the face belongs to a smooth object and the face's underlying 
		geometry is a spline surface and the spline is perfectly flat.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		is_planar  [Result]
			face is planar

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE	- cannot get face normal


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm,fz_objt_alys_get_face_plne_parm, 
		fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_face_is_planar_func) (
	fzrt_int			windex,
	fz_objt_ptr		obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	fzrt_boolean	*is_planar
	);

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

	fz_objt_alys_get_face_geom_type



	Description
		Gets the geometry type of a face. 
		See fz_objt_face_geom_enum for the different types of geometry.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		face_type  [Result]
			face type

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_pnt_parm,fz_objt_alys_get_face_plne_parm, 
		fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_geom_type_func) (
	fzrt_int 					windex,
	fz_objt_ptr			obj,
	fzrt_int					findx,
	fz_objt_model_type_enum		model_type,
	fz_objt_face_geom_enum	*face_type
	);

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

	fz_objt_alys_get_face_pnt_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type point (FZ_OBJT_FACE_GEOM_TYPE_PNT). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		pnt  [Result]
			face's underlying surface geometry as a point coordinate

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_plne_parm, 
		fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_pnt_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_xyz_td			*pnt
	);

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

	fz_objt_alys_get_face_plne_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type plane (FZ_OBJT_FACE_GEOM_TYPE_PLNE). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		equ  [Result]
			face's underlying surface geometry as the plane's equation

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_plne_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	fz_plane_equ_td			*equ
	);

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

	fz_objt_alys_get_face_sphr_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type sphere (FZ_OBJT_FACE_GEOM_TYPE_SPHR). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		origin  [Result, Optional]
			origin of sphere
		radius  [Result, Optional]
			radius of sphere

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_cyln_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_sphr_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_xyz_td			*origin,
	double			*radius
	);

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

	fz_objt_alys_get_face_cyln_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type cylinder (FZ_OBJT_FACE_GEOM_TYPE_CYLN). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face. 
		The cylinder may be elliptical.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		origin  [Result, Optional]
			point on the cylindrical axis
		zaxis  [Result, Optional]
			normalized vector for the z axis direction
		xaxis  [Result, Optional]
			normalized vector for the x axis of the base
		radius_x  [Result, Optional]
			radius of the x axis
		radius_y  [Result, Optional]
			radius of the y axis

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cone_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_cyln_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_xyz_td			*origin,
	fz_xyz_td			*zaxis,
	fz_xyz_td			*xaxis,
	double			*radius_x,
	double			*radius_y
	);

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

	fz_objt_alys_get_face_cone_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type cone (FZ_OBJT_FACE_GEOM_TYPE_CONE). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face. 
		The cone may be elliptical.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		origin  [Result, Optional]
			point on the cone axis
		zaxis  [Result, Optional]
			normalized vector for the z axis direction
		xaxis  [Result, Optional]
			normalized vector for the x axis of the base
		radius_x  [Result, Optional]
			radius of the x axis
		radius_y  [Result, Optional]
			radius of the y axis
		angle  [Result, Optional]
			cone angle

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_cone_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_xyz_td			*origin,
	fz_xyz_td			*zaxis,
	fz_xyz_td			*xaxis,
	double			*radius_x,
	double			*radius_y,
	double			*angle
	);

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

	fz_objt_alys_get_face_tors_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type torus (FZ_OBJT_FACE_GEOM_TYPE_TORS). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		origin  [Result, Optional]
			point on the torus axis
		axis  [Result, Optional]
			normalized vector for the axis
		radius_maj  [Result, Optional]
			major radius
		radius_min  [Result, Optional]
			minor radius

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_spln_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_tors_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_xyz_td			*origin,
	fz_xyz_td			*axis,
	double			*radius_maj,
	double			*radius_min
	);

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

	fz_objt_alys_get_face_spln_parm



	Description
		Gets the parameters of a face's underlying surface geometry, 
		if the geometry of the face is of type spline (FZ_OBJT_FACE_GEOM_TYPE_SPLN). 
		Call fz_objt_alys_get_face_geom_type to determine the geometry of the face. 
		 
		The control points and weights arrays must be preallocated to hold nu x nv values. 
		knots_u and knots_v must be preallocated to hold 
		nu + degree_u + 1 and nv + degree_v + 1 respectively. 
		This can be done by calling this function first with all the optional return parameters 
		set to NULL except nu, nv, degree_u, and degree_v. 
		Use those values to preallocate cpts, weights, knots_u, and knots_v. 
		Here is an example of how the control points are ordered : 
		 
		cpts[u 0	v 0] 
		cpts[u 0	v 1] 
		... 
		cpts[u 0	v nv-1] 
		 
		cpts[u 1	v 0] 
		cpts[u 1	v 1] 
		... 
		cpts[u 1	v nv-1] 
		 
		... 
		... 
		... 
		 
		cpts[u nu-1	v 0] 
		cpts[u nu-1	v 1] 
		... 
		cpts[u nu-1	v nv-1] 
		The values in the weights array are ordered in the same way. 
		 
		A spline surface is rational if any of the weights in a given direction are not equal. 
		If a surface is not rational in both directions, the weights array does not need to be 
		retrieved (i.e. all weights can be considered 1.0).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		nu  [Result, Optional]
			number of control points in U
		nv  [Result, Optional]
			number of control points in V
		degree_u  [Result, Optional]
			degree of the surface in U
		degree_v  [Result, Optional]
			degree of the surface in V
		knots_u  [Result, Optional]
			knot values in U array 
			must be preallocated to store nu + degree_u + 1 values
		knots_v  [Result, Optional]
			knot values in V array 
			must be preallocated to store nv + degree_v + 1 values
		rational_u  [Result, Optional]
			is the surface rational in U
		rational_v  [Result, Optional]
			is the surface rational in U
		cpts  [Result, Optional]
			spline surface control points array 
			must be preallocated to hold nu x nv values.
		weights  [Result, Optional]
			weights of the spline surface 
			must be preallocated to store nu x nv values

	Returns
		Error codes 
		MODEL_ERR_INVALID_FACE - invalid face type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_area, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_spln_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fzrt_int			*nu,
	fzrt_int			*nv,
	fzrt_int			*degree_u,
	fzrt_int			*degree_v,
	double			*knots_u,
	double			*knots_v,
	fzrt_boolean	*rational_u,
	fzrt_boolean	*rational_v,
	fz_xyz_td			*cpts,
	double			*weights
	);

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

	fz_objt_alys_get_face_area



	Description
		Gets the surface area of a face of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		area  [Result]
			face's surface area

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm, 
		fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_area_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	double			*area
	);

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

	fz_objt_alys_get_face_circumference



	Description
		Gets the circumference of a face of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		circum  [Result]
			face's circumference

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm, 
		fz_objt_alys_get_face_area,fz_objt_alys_get_face_cog,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_circumference_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	double			*circum
	);

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

	fz_objt_alys_get_face_cog



	Description
		Gets the center of gravity of a face of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		cog  [Result]
			face's center of gravity

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm, 
		fz_objt_alys_get_face_area,fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_cog_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td			*cog
	);

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

	fz_objt_alys_get_face_bbox



	Description
		Calculates the bounding volume of a face of an object. 
		The bounding volume is defined by the opposite corners of 
		a world axes aligned cube. 
		The two corners are returned in the min and max parameters.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		min  [Result]
			bottom left corner of bounding box
		max  [Result]
			top right corner of bounding box

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_face_is_planar,fz_objt_alys_get_face_geom_type,fz_objt_alys_get_face_pnt_parm, 
		fz_objt_alys_get_face_plne_parm,fz_objt_alys_get_face_sphr_parm,fz_objt_alys_get_face_cyln_parm, 
		fz_objt_alys_get_face_cone_parm,fz_objt_alys_get_face_tors_parm,fz_objt_alys_get_face_spln_parm, 
		fz_objt_alys_get_face_area,fz_objt_alys_get_face_circumference,fz_objt_alys_get_face_cog

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_face_bbox_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			findx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td			*min,
	fz_xyz_td			*max
	);

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

	fz_objt_alys_get_curv_circumference



	Description
		Gets the circumference of a curve of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		circum  [Result]
			curve's circumference

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_curv_bbox

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_curv_circumference_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			cindx,
	fz_objt_model_type_enum		model_type,
	double			*circum
	);

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

	fz_objt_alys_get_curv_bbox



	Description
		Calculates the bounding volume of a curve of an object. 
		The bounding volume is defined by the opposite corners of 
		a world axes aligned cube. 
		The two corners are returned in the min and max parameters.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		min  [Result]
			bottom left corner of bounding box
		max  [Result]
			top right corner of bounding box

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_curv_circumference

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_curv_bbox_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			cindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td			*min,
	fz_xyz_td			*max
	);

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

	fz_objt_alys_get_segt_geom_type



	Description
		Gets the geometry type of a segment of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		segt_type  [Result]
			segment type

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length,fz_objt_alys_get_pnt_on_segt, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_geom_type_func) (
	fzrt_int 					windex,
	fz_objt_ptr			obj,
	fzrt_int					sindx,
	fz_objt_model_type_enum		model_type,
	fz_objt_segt_geom_enum	*segt_type
	);

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

	fz_objt_alys_get_segt_bbox



	Description
		Calculates the bounding volume of a segment of an object. 
		The bounding volume is defined by the opposite corners of 
		a world axes aligned cube. 
		The two corners are returned in the min and max parameters.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		min  [Result]
			bottom left corner of bounding box
		max  [Result]
			top right corner of bounding box

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_length,fz_objt_alys_get_pnt_on_segt, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_bbox_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			sindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td			*min,
	fz_xyz_td			*max
	);

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

	fz_objt_alys_get_segt_length



	Description
		Gets the length of a segment of an object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		length  [Result]
			segment length

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_pnt_on_segt, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_length_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			sindx,
	fz_objt_model_type_enum		model_type,
	double			*length
	);

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

	fz_objt_alys_get_pnt_on_segt



	Description
		Calculates a point on a segment of an object, given a ratio parameter. 
		If ratio is 0.0, the begin point of the segment is returned. 
		If ratio is 1.0, the end point of the segment is returned. 
		A value between 0.0 and 1.0 interpolates the point linearly 
		along the segment direction. 
		For example to get the midpoint of the segment, pass in 0.5 for ratio. 
		To get the quarter point, pass in 0.25 etc..

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		ratio  [Input]
			ratio
		pt  [Result]
			point on segment

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,fz_objt_alys_get_tangent_on_segt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_pnt_on_segt_func) (
	fzrt_int 					windex,
	fz_objt_ptr				obj,
	fzrt_int					sindx,
	fz_objt_model_type_enum	model_type,
	double					ratio,
	fz_xyz_td				*pt
	);

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

	fz_objt_alys_get_tangent_on_segt



	Description
		Calculates the tangent direction on a segment, given a ratio parameter. 
		If ratio is 0.0, the tangent at the begin point of the segment is returned. 
		If ratio is 1.0, the tangent at the end point of the segment is returned. 
		A value between 0.0 and 1.0 interpolates the tangent point linearly 
		along the segment direction. Foe example to get the tangent at the midpoint 
		of the segment, pass in 0.5 for ratio. To get the tangent at the quarter point, 
		pass in 0.25 etc.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		ratio  [Input]
			ratio
		tangent  [Result]
			tangent at point on segment

	Returns
		Error codes


	Availability	7.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,fz_objt_alys_get_pnt_on_segt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_tangent_on_segt_func) (
	fzrt_int 					windex,
	fz_objt_ptr				obj,
	fzrt_int					sindx,
	fz_objt_model_type_enum	model_type,
	double					ratio,
	fz_xyz_td				*tangent
	);

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

	fz_objt_alys_get_segt_arc_parm



	Description
		Gets the parameters of the underlying curve geometry of a segment of an object, 
		if the geometry of the segment is of type arc (FZ_OBJT_SEGT_GEOM_TYPE_ARC). 
		The arc can be elliptical or circular. 
		The y axis of the arc can be computed as the cross product 
		of the arc's zaxis and xaxis : yaxis = zaxis x xaxis. 
		If the start and end points are coincident, the arc is 
		considered to be a complete circle or ellipse.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		center  [Result, Optional]
			arc center
		zaxis  [Result, Optional]
			normalized vector for arc's plane
		xaxis  [Result, Optional]
			normalized vector for the x axis of the arc
		radius_x  [Result, Optional]
			radius of the x axis of the ellipse or circle
		radius_y  [Result, Optional]
			radius of the y axis
		start  [Result, Optional]
			start point
		end  [Result, Optional]
			end point
		clockwise  [Result, Optional]
			is the arc clockwise

	Returns
		Error codes 
		MODEL_ERR_INVALID_SEGT - invalid segment type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_pnt_on_segt,fz_objt_alys_get_segt_spline_parm, 
		fz_objt_alys_get_segt_pspace_arc_parm,fz_objt_alys_get_segt_pspace_spline_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_arc_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			sindx,
	fz_xyz_td			*center,
	fz_xyz_td			*zaxis,
	fz_xyz_td			*xaxis,
	double			*radius_x,
	double			*radius_y,
	fz_xyz_td			*start,
	fz_xyz_td			*end,
	fzrt_boolean	*clockwise
	);

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

	fz_objt_alys_get_segt_spline_parm



	Description
		Gets the parameters of the underlying curve geometry of a segment of an object, 
		if the geometry of the segment is of type spline (FZ_OBJT_SEGT_GEOM_TYPE_SPLN). 
		The control points and weights arrays must be preallocated to hold ncpts values. 
		knots must be preallocated to hold ncpts + degree + 1. 
		This can be done by calling this function first with all the optional return parameters 
		set to NULL except ncpts and degree. 
		Use those values to preallocate knots, cpts and weights.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		ncpts  [Result, Optional]
			number of control points
		degree  [Result, Optional]
			degree of the spline curve
		knots  [Result, Optional]
			knot values array 
			must be preallocated to store ncpts + degree + 1 values
		rational  [Result, Optional]
			is the curve rational 
			a spline curve is rational if any of the weights 
			are not equal. 
			If a curve is not rational, the weights array does not 
			need to be retrieved (i.e. all weights can be considered 1.0).
		cpts  [Result, Optional]
			spline curve control points 
			must be preallocated to store ncpts values
		weights  [Result, Optional]
			weights of the spline curve 
			must be preallocated to store ncpts values

	Returns
		Error codes 
		MODEL_ERR_INVALID_SEGT - invalid segment type


	Availability	5.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_pnt_on_segt,fz_objt_alys_get_segt_arc_parm, 
		fz_objt_alys_get_segt_pspace_arc_parm,fz_objt_alys_get_segt_pspace_spline_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_spline_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr	obj,
	fzrt_int			sindx,
	fzrt_int			*ncpts,
	fzrt_int			*degree,
	double			*knots,
	fzrt_boolean	*rational,
	fz_xyz_td			*cpts,
	double			*weights
	);

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

	fz_objt_alys_get_segt_pspace_geom_type



	Description
		Gets the geometry type of a segment of an object in the parameter space of 
		its underlying surface if the object is a Trimmed NurbZ.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		segt_type  [Result]
			segment type

	Returns
		Error codes


	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_spline_parm, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_pspace_arc_parm, 
		fz_objt_alys_get_segt_pspace_spline_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_pspace_geom_type_func) (
	fzrt_int 					windex,
	fz_objt_ptr				obj,
	fzrt_int					sindx,
	fz_objt_segt_geom_enum	*segt_type
	);

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

	fz_objt_alys_get_segt_pspace_arc_parm



	Description
		Gets the parameters of the curve geometry of a segment of an object 
		in the parameter space of its underlying surface if the object is a Trimmed NurbZ 
		and if the geometry of the segment is of type arc (FZ_OBJT_SEGT_GEOM_TYPE_ARC). 
		The arc can be elliptical or circular. 
		The y axis of the arc can be computed as the cross product 
		of the arc's zaxis and xaxis : yaxis = zaxis x xaxis. 
		If the start and end points are coincident, the arc is 
		considered to be a complete circle or ellipse.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		center  [Result, Optional]
			arc center
		zaxis  [Result, Optional]
			normalized vector for arc's plane
		xaxis  [Result, Optional]
			normalized vector for the x axis of the arc
		radius_x  [Result, Optional]
			radius of the x axis of the ellipse or circle
		radius_y  [Result, Optional]
			radius of the y axis
		start  [Result, Optional]
			start point
		end  [Result, Optional]
			end point
		clockwise  [Result, Optional]
			is the arc clockwise

	Returns
		Error codes 
		MODEL_ERR_INVALID_SEGT - invalid segment type


	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_segt_pspace_geom_type,fz_objt_alys_get_segt_geom_type, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm, 
		fz_objt_alys_get_segt_pspace_spline_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_pspace_arc_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr		obj,
	fzrt_int			sindx,
	fz_xyz_td		*center,
	fz_xyz_td		*zaxis,
	fz_xyz_td		*xaxis,
	double			*radius_x,
	double			*radius_y,
	fz_xyz_td		*start,
	fz_xyz_td		*end,
	fzrt_boolean	*clockwise
	);

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

	fz_objt_alys_get_segt_pspace_spline_parm



	Description
		Gets the parameters of the underlying curve geometry of a segment of an object, 
		in the parameter space of its underlying surface if the object is a Trimmed NurbZ 
		and if the geometry of the segment is of type spline (FZ_OBJT_SEGT_GEOM_TYPE_SPLN). 
		The control points and weights arrays must be preallocated to hold ncpts values. 
		knots must be preallocated to hold ncpts + degree + 1. 
		This can be done by calling this function first with all the optional return parameters 
		set to NULL except ncpts and degree. 
		Use those values to preallocate knots, cpts and weights.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		ncpts  [Result, Optional]
			number of control points
		degree  [Result, Optional]
			degree of the spline curve
		knots  [Result, Optional]
			knot values array 
			must be preallocated to store ncpts + degree + 1 values
		rational  [Result, Optional]
			is the curve rational 
			a spline curve is rational if any of the weights 
			are not equal. 
			If a curve is not rational, the weights array does not 
			need to be retrieved (i.e. all weights can be considered 1.0).
		cpts  [Result, Optional]
			spline curve control points 
			must be preallocated to store ncpts values
		weights  [Result, Optional]
			weights of the spline curve 
			must be preallocated to store ncpts values

	Returns
		Error codes 
		MODEL_ERR_INVALID_SEGT - invalid segment type


	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_segt_pspace_geom_type,fz_objt_alys_get_segt_geom_type, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm, 
		fz_objt_alys_get_segt_pspace_arc_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_pspace_spline_parm_func) (
	fzrt_int 			windex,
	fz_objt_ptr		obj,
	fzrt_int			sindx,
	fzrt_int			*ncpts,
	fzrt_int			*degree,
	double			*knots,
	fzrt_boolean	*rational,
	fz_xyz_td		*cpts,
	double			*weights
	);

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

	fz_objt_alys_get_curv_pspace_trim



	Description
		Gets the trimming curves of an object, in the parameter space of its underlying surface 
		if the object is a Trimmed NurbZ. 
		The curves array must be preallocated to hold ncrvs = number of segments in the curve.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		ncrvs  [Result, Optional]
			number of curves
		crvs  [Result, Optional]
			Nurbz curves array

	Returns
		Error codes 
		MODEL_ERR_INVALID_SEGT - invalid segment type


	Availability	5.0.0.0


	See Also
		fz_objt_alys_get_segt_pspace_geom_type,fz_objt_alys_get_segt_geom_type, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm, 
		fz_objt_alys_get_segt_pspace_arc_parm

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_curv_pspace_trim_func) (
	fzrt_int 				windex,
	fz_objt_ptr			obj,
	fzrt_int				cindx,
	fzrt_int				*ncrvs,
	fz_nurbs_cur_ptr	*crvs
	);

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

	fz_objt_alys_is_pnt_inside_objt



	Description
		Tests whether a point is inside (1) on (2) or outside (0) of an object

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		pt  [Input]
			the point to test
		status  [Result]
			0 if the point is outside, 1 if it is inside and 2 if it is on the object's surface

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_is_pnt_inside_objt_func) (
	fzrt_int 				windex,
	fz_objt_ptr			obj,
	fz_xyz_td			*pt,
	fzrt_int				*status
	);
	
/****************************************************************

	fz_objt_alys_proj_pnt_on_face



	Description
		Projects a point on a face. The returned information contains the projected 
		point, the distance of the original point to the projected point and 
		a flag that tells, whether the projected point is inside (1), on (2) or outside (0) 
		the face boundary. Note, that when the model_type is facetted and the 
		face is non planar, the projected point may not be accurate, as the 
		plane equation of a non planar face is not well defined.

		For smooth faces, the function will return an error, if the point cannot be projected on the face.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point to project
		proj_pt  [Result, Optional]
			the projected point of the face surface
		dist  [Result, Optional]
			the distance of the projected point to the original point
		where  [Result, Optional]
			0 if the point is outside, 1 if it is inside and 2 if it is on the face's boundary

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_proj_pnt_on_face_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						findx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	fz_xyz_td					*proj_pt,
	double						*dist,
	fzrt_int						*where
	);

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

	fz_objt_alys_proj_pnt_on_segt



	Description
		Projects a point on a segment. The returned information contains the projected 
		point, the distance of the original point to the projected point and 
		a flag that tells, whether the projected point is between the segment end points (1), 
		on a segment endpoint (2) or outside the segment end points (0)

		For smooth segments, the function will return an error, if the point cannot be projected on the segments.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point to project
		proj_pt  [Result, Optional]
			the projected point of the segment
		dist  [Result, Optional]
			the distance of the projected point to the original point
		where  [Result, Optional]
			0 if the point is outside the segment, 1 if it is inside the segment  and 2 if it is on a segment end point

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_proj_pnt_on_segt_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						sindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	fz_xyz_td					*proj_pt,
	double						*dist,
	fzrt_int						*where
	);

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

	fz_objt_alys_ratio_pnt_on_segt



	Description
		Gets the distance ratio of a point on a segment. The point is assumed to 
		be on the segment. The returned ratio parameter indicates how far from 
		the start point of the segment the point is located (as a ratio of 0.0 ... 1.0). 
		It will be 0.0 when the point is exactly at the start, 0.5 for the mid point and 1.0 for the end.

		This function heavily relies on the point passed in to be exactly located 
		on the segment. This can be achieved by previously projecting a 3d point 
		on the segment with the api fz_objt_alys_proj_pnt_on_segt. If the point 
		passed in is too far off the segment, an error will be returned.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point on the segment
		ratio  [Result, Optional]
			distance ratio of the point, form the start point of the segment

	Returns
		Error codes


	Availability	7.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_ratio_pnt_on_segt_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						sindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	double						*ratio
	);

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

	fz_objt_alys_closest_pnt_on_face



	Description
		Finds the closest point on a face from a given point. The returned information contains the 
		closest point, the distance of the original point to the closest point and 
		a flag that tells, whether the closest point is inside (1), or on (2) 
		the face boundary. Note, that when the model_type is facetted and the 
		face is non planar, the closest point may not be accurate, as the 
		plane equation of a non planar face is not well defined.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point to for which to find the closest point on the face.
		closest_pt  [Result, Optional]
			the closest point on the face
		dist  [Result, Optional]
			the distance of the closest point to the original point
		where  [Result, Optional]
			1 if the closest point is inside the face  and 2 if it is on a face boundary

	Returns
		Error codes


	Availability	6.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_closest_pnt_on_face_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						findx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	fz_xyz_td					*closest_pt,
	double						*dist,
	fzrt_int						*where
	);

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

	fz_objt_alys_closest_pnt_on_segt



	Description
		Finds the closest point on a segment from a given point. The returned information contains the 
		closest point, the distance of the original point to the closest point and 
		a flag that tells, whether the closest point is between the segment end point (1), 
		or on either segment end point (2).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point to for which to find the closest point on the segment.
		closest_pt  [Result, Optional]
			the closest point on the segment
		dist  [Result, Optional]
			the distance of the closest point to the original point
		where  [Result, Optional]
			1 if the closest point is inside the segment  and 2 if it is on a segment end point

	Returns
		Error codes


	Availability	6.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_closest_pnt_on_segt_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						sindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	fz_xyz_td					*closest_pt,
	double						*dist,
	fzrt_int						*where
	);

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

	fz_objt_alys_is_pnt_inside_face



	Description
		Finds if a point lies inside a face's boundaries. The returned information contains 
		a flag that tells, whether the given point is inside (1), on (2) or outside (0) 
		the face boundary. The point passed in should be contained in the face's 
		surface. Otherwise, the outcome may not be accurate. Note, that when the 
		model_type is facetted and the face is non planar, the result may not be accurate, as the 
		plane equation of a non planar face is not well defined.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			the point to test.
		where  [Result]
			0 if the point is outside, 1 if it is inside, and 2 if it is on the face boundary

	Returns
		Error codes


	Availability	6.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_is_pnt_inside_face_func) (
	fzrt_int 						windex,
	fz_objt_ptr					obj,
	fzrt_int						findx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td					*pt,
	fzrt_int						*where
	);

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

	fz_objt_alys_get_segt_perp_pts



	Description
		Returns all possible perpendicularly projected points on a segment from a given world point 
		For straight lines theres is only one such point. 
		For arcs there are two possible points except for its center which has infinite projections. 
		For spline segments there could be many such points.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			world point
		pts_list  [Result]
			list of projected points

	Returns
		Error codes


	Availability	7.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,fz_objt_alys_get_pnt_on_segt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_perp_pts_func) (
	fzrt_int 					windex,
	fz_objt_ptr				obj,
	fzrt_int					sindx,
	fz_objt_model_type_enum	model_type,
	fz_xyz_td				*pt,
	fz_type_list_ptr		pts_list
	);

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

	fz_objt_alys_get_segt_tangent_pts



	Description
		Returns all possible tangent points on a segment from a given world point 
		For straight lines theres are none. 
		For arcs there are two possible tangent points for all points outside the circle and none for points inside the circle. 
		For spline segments there could be many such points.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type. FZ_OBJT_MODEL_TYPE_UNSPEC may be used to use the object's natural model type.
		pt  [Input]
			world point
		pts_list  [Result]
			list of tangent points

	Returns
		Error codes


	Availability	7.0.0.0

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

	See Also
		fz_objt_alys_get_segt_geom_type,fz_objt_alys_get_segt_bbox,fz_objt_alys_get_segt_length, 
		fz_objt_alys_get_segt_arc_parm,fz_objt_alys_get_segt_spline_parm,fz_objt_alys_get_pnt_on_segt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_alys_get_segt_tangent_pts_func) (
	fzrt_int 					windex,
	fz_objt_ptr				obj,
	fzrt_int					sindx,
	fz_objt_model_type_enum	model_type,
	fz_xyz_td				*pt,
	fz_type_list_ptr		pts_list
	);

#ifdef __cplusplus
}
#endif

#endif
