/*********************************************************************************************
 *                                                                                           *
 *                                                                                           *
 *   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_OTOP_API_H
#define _FORMZ_MODEL_OTOP_API_H


#include "fz_model_core_api.h"

#ifdef __cplusplus
extern "C" {
#endif



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

	Topology


	Description
		This module contains functions to query the topology of objects in formZ.
 ****************************************************************/

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

	fz_objt_get_face_count



	Description
		Returns the number of faces in an object. 
		The model_type parameter determines whether the face count 
		is taken from the facetted or smooth topology. 
		If model_type is not specified, the "natural" face 
		count is returned (i.e. smooth face count if object is smooth, 
		facetted face count otherwise).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		model_type  [Input]
			object topology type
		nface  [Result]
			number of faces

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_get_curv_count,fz_objt_get_segt_count,fz_objt_get_point_count

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

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

	fz_objt_get_curv_count



	Description
		Returns the number of curves in an object. 
		The model_type parameter determines whether the curve count 
		is taken from the facetted or smooth topology. 
		If model_type is not specified, the "natural" curve 
		count is returned (i.e. smooth curve count if object is smooth, 
		facetted curve count otherwise).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		model_type  [Input]
			object topology type
		ncurv  [Result]
			number of curves

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_get_face_count,fz_objt_get_segt_count,fz_objt_get_point_count

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

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

	fz_objt_get_segt_count



	Description
		Returns the number of segments in an object. 
		The model_type parameter determines whether the segment count 
		is taken from the facetted or smooth topology. 
		If model_type is not specified, the "natural" segment 
		count is returned (i.e. smooth segment count if object is smooth, 
		facetted segment count otherwise).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		model_type  [Input]
			object topology type
		nsegt  [Result]
			number of segments

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_get_face_count,fz_objt_get_curv_count,fz_objt_get_point_count

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

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

	fz_objt_get_point_count



	Description
		Returns the number of points in an object. 
		The model_type parameter determines whether the point count 
		is taken from the facetted or smooth topology. 
		If model_type is not specified, the "natural" point 
		count is returned (i.e. smooth point count if object is smooth, 
		facetted point count otherwise).

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		model_type  [Input]
			object topology type
		npnt  [Result]
			number of points

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_low_level.fsl
		../../../../Scripts/Samples/Tools/tool_star.fsl

	See Also
		fz_objt_get_face_count,fz_objt_get_curv_count,fz_objt_get_segt_count

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

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

	fz_objt_reset



	Description
		Resets the topology and object geometry (i.e. all faces, curves 
		segments and points) to be empty. 
		In particular it : 
		 
		Resets the facetted topology. 
		Arrays stay allocated, but counters are reset 
		Resets the smooth topology, if it exists. 
		Arrays stay allocated, but counters are reset 
		Removes the smooth data (ACIS body), if it exists 
		Removes all face, curve, segment, point attributes, 
		but leaves object attributes 
		Removes object control data

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

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_reset_func) (
	fzrt_int			windex,
	fz_objt_ptr	obj
	);

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

	fz_objt_face_get_curv_count



	Description
		Returns the number of curves in a face. 
		The model_type parameter determines whether the curve 
		count is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type
		ncurv  [Result]
			number of curves

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_face_get_curv_count_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				findx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*ncurv
	);

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

	fz_objt_face_get_cindx



	Description
		Returns the index of the first (outer) curve of a face. 
		The model_type parameter determines whether the curve 
		index is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		model_type  [Input]
			object topology type
		cindx  [Result]
			curve index

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_curv_count, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_face_get_cindx_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				findx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*cindx
	);

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

	fz_objt_face_smod_get_fact_faces



	Description
		Returns the facetted faces that represent a smooth face. The 
		face of the smooth object is identified by the findx argument. 
		The facetted faces that belong to a smooth object are all 
		in sequential order. The starting face is returned by the 
		fstart argument. The number of faces that belong to the smooth 
		face is returned by the nface argument. Recall that a smooth 
		object has both facetted and smooth topology and geometry. 
		The user can only pick the smooth faces, but the facetted 
		faces are used for display purpose. Many of the API functions 
		which retrieve information about faces, segments or curves 
		can do this for the smooth or the facetted topoplogy.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			The index of the smooth face, for which to get the facetted faces
		fstart  [Result]
			The index of the first facetted face belonging to the smooth face
		nface  [Result]
			The number of facetted faces belonging to the smooth face

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_wire_topo.fsl
 ****************************************************************/
typedef fzrt_error_td	(*fz_objt_face_smod_get_fact_faces_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				findx,
	fzrt_int				*fstart,
	fzrt_int				*nface
	);

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

	fz_objt_curv_get_segt_count



	Description
		Returns the number of segments in a curve. 
		The model_type parameter determines whether the segment 
		count is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		nsegt  [Result]
			number of segments

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_low_level.fsl
		../../../../Scripts/Samples/Utilities/util_objt_alys_face.fsl
		../../../../Scripts/Samples/Tools/tool_star.fsl

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_get_segt_count_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*nsegt
	);

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

	fz_objt_curv_get_sindx



	Description
		Returns the index of the first segment of a curve. 
		The model_type parameter determines whether the segment 
		index is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		sindx  [Result]
			segment index

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_low_level.fsl
		../../../../Scripts/Samples/Utilities/util_objt_alys_face.fsl
		../../../../Scripts/Samples/Tools/tool_star.fsl

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_get_sindx_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*sindx
	);

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

	fz_objt_curv_get_prev



	Description
		Returns the index of the previous curve of a given curve. 
		The model_type parameter determines whether the curve 
		index is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		prev  [Result]
			previous curve index

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_get_prev_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*prev
	);

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

	fz_objt_curv_get_next



	Description
		Returns the index of the next curve of a given curve. 
		The model_type parameter determines whether the curve 
		index is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		next  [Result]
			next curve index

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev, 
		fz_objt_curv_get_fromface,fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_get_next_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*next
	);

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

	fz_objt_curv_get_fromface



	Description
		Returns the index of the face to which a curve belongs. 
		The model_type parameter determines whether the curve 
		index is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		fromface  [Result]
			face index to which the curve belongs

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_is_hole

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_get_fromface_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*fromface
	);

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

	fz_objt_curv_is_hole



	Description
		Determines whether a given curve is a hole or the 
		outer boundary curve of a face. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		cindx  [Input]
			curve index
		model_type  [Input]
			object topology type
		is_hole  [Result]
			is the curve a hole 
			TRUE if curve is a hole, 
			FALSE if curve is an outer boundary curve

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_face_get_curv_count,fz_objt_face_get_cindx, 
		fz_objt_curv_get_segt_count,fz_objt_curv_get_sindx, 
		fz_objt_curv_get_prev,fz_objt_curv_get_next, 
		fz_objt_curv_get_fromface

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_curv_is_hole_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				cindx,
	fz_objt_model_type_enum		model_type,
	fzrt_boolean		*is_hole
	);

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

	fz_objt_segt_get_start_pindx



	Description
		Returns the index of the starting point of a given segment. 
		The model_type parameter determines whether the segment 
		is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		pindx  [Result]
			point index of start point of segment

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_nurbs_sections.fsl
		../../../../Scripts/Samples/Utilities/util_low_level.fsl

	See Also
		fz_objt_segt_get_end_pindx, 
		fz_objt_segt_get_prev,fz_objt_segt_get_next, 
		fz_objt_segt_get_reverse,fz_objt_segt_get_fromcurv

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_start_pindx_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*pindx
	);

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

	fz_objt_segt_get_end_pindx



	Description
		Returns the index of the end point of a given segment. 
		The model_type parameter determines whether the segment 
		is taken from the facetted or smooth topology. 
		model_type must be specified. 
		If the segment is from the facetted topology and it is the 
		last segment of an open wire, the end point index is -1 
		(i.e. there is always a dummy segment at the end of an open wire). 
		As this is not the case in the smooth topology, the last segment 
		of an open wire always has a valid end point index.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		pindx  [Result]
			point index of end point of segment

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_nurbs_sections.fsl
		../../../../Scripts/Samples/Utilities/util_low_level.fsl

	See Also
		fz_objt_segt_get_start_pindx, 
		fz_objt_segt_get_prev,fz_objt_segt_get_next, 
		fz_objt_segt_get_reverse,fz_objt_segt_get_fromcurv

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_end_pindx_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*pindx
	);

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

	fz_objt_segt_get_prev



	Description
		Returns the index of the previous segment of a given segment. 
		The model_type parameter determines whether the segment 
		is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		prev  [Result]
			previous segment index

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_segt_get_start_pindx,fz_objt_segt_get_end_pindx, 
		fz_objt_segt_get_next, 
		fz_objt_segt_get_reverse,fz_objt_segt_get_fromcurv

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_prev_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*prev
	);

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

	fz_objt_segt_get_next



	Description
		Returns the index of the next segment of a given segment. 
		The model_type parameter determines whether the segment 
		is taken from the facetted or smooth topology. 
		model_type must be specified. 
		If the curve to which the segment belongs is an open wire and the 
		given segment is the last segment, next is returned as -1. 
		Recall, that an open wire in the facetted topology has a dummy 
		segment at the end. 
		For example, a wire which appears with two segments on the screen 
		is composed of three segments. 
		This last dummy segment holds the point index for the end 
		point of the previous to last segment. 
		In the smooth topology there is no dummy segment, 
		as each segment stores start and end point indices.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		next  [Result]
			next segment index

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_nurbs_sections.fsl
		../../../../Scripts/Samples/Utilities/util_low_level.fsl

	See Also
		fz_objt_segt_get_start_pindx,fz_objt_segt_get_end_pindx, 
		fz_objt_segt_get_prev, 
		fz_objt_segt_get_reverse,fz_objt_segt_get_fromcurv

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_next_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*next
	);

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

	fz_objt_segt_get_reverse



	Description
		Returns the index of the reversely coincident segment of a given segment. 
		The model_type parameter determines whether the segment is taken 
		from the facetted or smooth topology. 
		model_type must be specified. 
		If there is no reversely coincident segment, reverse is returned as -1.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		reverse  [Result]
			reversely coincident index

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_segt_get_start_pindx,fz_objt_segt_get_end_pindx, 
		fz_objt_segt_get_prev,fz_objt_segt_get_next, 
		fz_objt_segt_get_fromcurv

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_reverse_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int				*reverse
	);

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

	fz_objt_segt_get_fromcurv



	Description
		Returns the index of the curve to which a segment belongs. 
		The model_type parameter determines whether the segment 
		is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		model_type  [Input]
			object topology type
		fromcurve  [Result]
			curve index to which the segment belongs

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_segt_get_start_pindx,fz_objt_segt_get_end_pindx, 
		fz_objt_segt_get_prev,fz_objt_segt_get_next, 
		fz_objt_segt_get_reverse

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_fromcurv_func) (
	fzrt_int						windex,
	fz_objt_ptr					obj,
	fzrt_int						sindx,
	fz_objt_model_type_enum		model_type,
	fzrt_int						*fromcurve
	);

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

	fz_objt_segt_get_num_wire_pnts



	Description
		Gets the number of points that are used to represent a segment of 
		a smooth object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		npts  [Result]
			The number of points used to represent the segment

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_segt_get_wire_pnt, fz_objt_get_segt_count, 
		fz_objt_iso_get_num_iso_pnts, fz_objt_iso_get_iso_pnt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_num_wire_pnts_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				sindx,
	fzrt_int				*npts
	);

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

	fz_objt_segt_get_wire_pnt



	Description
		Gets one of the points that are used to represent a segment of a 
		smooth object. The point is identified by an index. This index 
		must be less than the total number of points used by the segment.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		sindx  [Input]
			segment index
		pindx  [Input]
			index of a point on the segment
		pt  [Result]
			the point

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_segt_get_num_wire_pnts, fz_objt_get_segt_count, 
		fz_objt_iso_get_num_iso_pnts, fz_objt_iso_get_iso_pnt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_segt_get_wire_pnt_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				sindx,
	fzrt_int				pindx,
	fz_xyz_td			*pt
	);

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

	fz_objt_iso_get_num_iso_pnts



	Description
		Gets the number of points that are used to represent an iso line of 
		a smooth object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		iindx  [Input]
			iso line index
		npts  [Result]
			the number of points used to represent the iso line

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_iso_get_iso_pnt, fz_objt_face_get_iso_count, 
		fz_objt_segt_get_num_wire_pnts, fz_objt_segt_get_wire_pnt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_iso_get_num_iso_pnts_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				findx,
	fzrt_int				iindx,
	fzrt_int				*npts
	);

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

	fz_objt_iso_get_iso_pnt



	Description
		Gets one of the points that are used to represent an iso line of a 
		smooth object. The point is identified by a point index. This index 
		must be less than the total number of points used by the segment.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		iindx  [Input]
			iso line index
		pindx  [Input]
			index of a point of the iso line
		pt  [Result]
			the point

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_iso_get_num_iso_pnts, fz_objt_face_get_iso_count, 
		fz_objt_segt_get_num_wire_pnts, fz_objt_segt_get_wire_pnt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_iso_get_iso_pnt_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				findx,
	fzrt_int				iindx,
	fzrt_int				pindx,
	fz_xyz_td			*pt
	);
/****************************************************************

	fz_objt_face_get_iso_count



	Description
		Gets the number of iso lines of a given face of a smooth 
		object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		findx  [Input]
			face index
		niso  [Result]
			the number of iso lines for the face

	Returns
		Error codes


	Availability	5.0.0.0

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

	See Also
		fz_objt_iso_get_num_iso_pnts, fz_objt_iso_get_iso_pnt

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_face_get_iso_count_func) (
	fzrt_int				windex,
	fz_objt_ptr			obj,
	fzrt_int				findx,
	fzrt_int				*niso
	);


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

	fz_objt_point_get_xyz



	Description
		Returns the xyz coordinate of a given point. 
		The model_type parameter determines whether the point 
		is taken from the facetted or smooth topology. 
		model_type must be specified.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		pindx  [Input]
			point index
		model_type  [Input]
			object topology type
		xyz  [Result]
			point coordinates

	Returns
		Error codes


	Availability	5.0.0.0

	Example Files
		../../../../Scripts/Samples/Utilities/util_objt_nurbs_sections.fsl
		../../../../Scripts/Samples/Utilities/util_low_level.fsl
 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_point_get_xyz_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_int				pindx,
	fz_objt_model_type_enum		model_type,
	fz_xyz_td				*xyz
	);

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

	fz_objt_parm_get_data



	Description
		Returns a pointer to the parametric data block of 
		a controlled (parametric) object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		parm_data  [Result]
			pointer to parametric data

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_parm_get_data_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_ptr			*parm_data
	);

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

	fz_objt_cntl_get_uuid



	Description
		Returns the object type id of a controlled (parametric) object. 
		A NULL uuid is returned, if the object is not a controlled object.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		uuid  [Result]
			object type id

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_cntl_get_uuid_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_UUID_td		uuid
	);

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

	fz_objt_parm_init_data



	Description
		Allocates and initializes the parametric data block of an object of 
		a given parametric type. A pointer to the parametric data is returned. 
		if the object passed in is already a parametric object, the existing parametric 
		data is first deleted.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		uuid  [Input]
			the object type identifier
		parm_data  [Result, Optional]
			pointer to parametric data

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_parm_init_data_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_UUID_td		uuid,
	fzrt_ptr			*parm_data
	);


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

	fz_objt_get_zone_ptr



	Description
		Returns the memory zone of an object

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		zone_ptr  [Result]
			pointer to the memory zone

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_get_zone_ptr_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fzrt_zone_ptr		*zone_ptr
	);

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

	fz_objt_parm_nested_extract



	Description
		Extracts the nested control object to a new object. All 
		attributes, which refer possibly invalid data, such as layer, surface 
		style etc are set to the host's attributes

	Parameters
		windex  [Input]
			project window index
		host_obj  [Input]
			owning object
		src_cntl_obj  [Input]
			the object nested in the owning object
		dst_cntl_obj  [Result]
			the destination object into which the 
			nested object will be copied into.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_parm_nested_extract_func) (
	fzrt_int				windex,
	fz_objt_ptr		host_obj,
	fz_objt_ptr		src_cntl_obj,
	fz_objt_ptr		dst_cntl_obj
	);

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

	fz_objt_indp_init



	Description
		Allocates and initializes an independent object. 
		This function must be used to create a control object 
		which will be stored inside the parameter block of another 
		parametric object. It is not valid to permanently store 
		objects created with other modeling API functions in 
		the parameter block of a parametric object. The nested 
		control object must be created with this function and 
		any object data must be copied into this object.

	Parameters
		windex  [Input]
			project window index
		zone_ptr  [Input]
			memory zone for the object
		obj  [Result]
			the new, empty independent object

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_indp_init_func) (
	fzrt_int				windex,
	fzrt_zone_ptr		zone_ptr,
	fz_objt_ptr		*obj
	);

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

	fz_objt_indp_finit



	Description
		Deletes and finalizes an independent object. 
		Do NOT call fz_objt_edit_delete_objt to delete 
		an independent object. Any independent object 
		created with fz_objt_indp_init MUST be 
		deleted with fz_objt_indp_finit.

	Parameters
		windex  [Input]
			project window index
		obj  [Input, Result]
			The object to be deleted. The object pointer 
			will be passed back as NULL

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_indp_finit_func) (
	fzrt_int				windex,
	fz_objt_ptr		*obj
	);

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

	fz_objt_io



	Description
		Read / write an object via the io stream.

	Parameters
		windex  [Input]
			project window index
		obj  [Input]
			object
		iost  [Input]
			The io stream pointer.
		dir  [Input]
			Reading or writing indicator.

	Returns
		Error codes


	Availability	5.0.0.0

 ****************************************************************/
typedef fzrt_error_td  (*fz_objt_io_func) (
	fzrt_int				windex,
	fz_objt_ptr		obj,
	fz_iost_ptr			iost,
	fz_iost_dir_td_enum		dir
	);

#ifdef __cplusplus
}
#endif

#endif
