/*
uf_linked_exterior.h
File description:
Open API modeling routines to create, edit and inquire about linked exterior
*****************************************************************************/
#ifndef UF_LINKED_EXTERIOR
#define UF_LINKED_EXTERIOR
/***************************************************************************
***************************************************************************/
#include <uf_defs.h>
#include <uf_modl_types.h>
#include <libufun_exports.h>
/************************************************************************
* This function identifies Exterior Faces from the array of bodies using
* a hidden line solution. The context of the bodies is determined from
* the xforms given.
*
* See Also: UF_MODL_create_linked_exterior
* UF_MODL_ask_linked_exterior
* UF_MODL_edit_linked_exterior
* UF_MODL_identify_exterior_using_rays
*
* Environment : Internal and External
*
* History : Released in V18.0
************************************************************************/
extern UFUNEXPORT int UF_MODL_identify_exterior_using_hl (
int num_bodies, /* <I> Number of tags in the bodies array. */
tag_t *bodies, /* <I>
Array of body tags to identify faces from. */
tag_t *xforms, /* <I>
Array of xforms. One for each body,
determines the position of the body
relative to its source geometry.
NULL_TAG implies no transformation.
*/
int num_dirs, /* <I> Number of directions */
double direction[][3], /* <I> Direction to apply hidden line solution from */
double chordal_tol, /* <I> Chordal tolerance for edges */
int resolution, /* <I> Determines how many hatch lines drawn
per face. May be one of:
UF_LINKED_HL_RES_COARSE
UF_LINKED_HL_RES_NORMAL
UF_LINKED_HL_RES_FINE
UF_LINKED_HL_RES_VERY_FINE
*/
int *num_faces, /* <I/O> Number of tags in the faces array.
If input is > 0 will reallocate and add
external faces to existing output arrays
*/
tag_t **faces, /* <OF>
Array of face tags. */
int **body_index /* <OF>
Array of indices giving the body/xform
the face came from.
*/
);
/************************************************************************
* This function identifies Exterior Faces from the array of transformed
* bodies by firing a ray at each face. The context of the bodies is
* determined from the xforms given. The code will not fire rays
* at input faces already identified as exterior.
*
* See Also: UF_MODL_create_linked_exterior
* UF_MODL_ask_linked_exterior
* UF_MODL_edit_linked_exterior
* UF_MODL_identify_exterior_using_hl
*
* Environment : Internal and External
*
* History : Released in V18.0
************************************************************************/
extern UFUNEXPORT int UF_MODL_identify_exterior_using_rays (
int num_bodies, /* <I> Number of tags in the bodies array. */
tag_t *bodies, /* <I>
Array of body tags to identify faces from. */
tag_t *xforms, /* <I>
Array of xforms. One for each body,
determines the position of the body
relative to its source geometry.
NULL_TAG implies no transformation.
*/
double origin[3], /* <I> Point to fire rays from from when
ray_type = UF_LINKED_RAY_FROM_POINT
*/
double chordal_tol, /* <I> Chordal tolerance for edges */
int ray_type, /* <I> Determines orign of rays fired at each face.
May be one of:
UF_LINKED_RAY_ALONG_NORMS
UF_LINKED_RAY_ABOVE_NORMS
UF_LINKED_RAY_FROM_POINT
*/
int *num_faces, /* <I/O> Number of tags in the faces array.
If input is > 0 will reallocate and add
external faces to existing output arrays
*/
tag_t **faces, /* <OF>
Array of exterior faces. */
int **body_index /* <OF>
Array of indices giving the body/xform
the face came from.
*/
);
/************************************************************************
* This function creates an Linked Exterior feature, and its
* associated sheet bodies, in the same part as object_in_part. The
* input faces will extracted as one or more, possibly disjoint,
* regions. The xform gives the context for each face. Adjacent
* faces which come from the same body and share an xform will be
* joined into single sheet body. Input faces cannot be occurrences.
* This feature is implemeted as a feature set which owns hidden
* subfeatures similar to Linked Regions. The subfeatures should not be
* edited or deleted individually.
*
* See Also: UF_MODL_ask_linked_exterior
* UF_MODL_edit_linked_exterior
* UF_MODL_identify_exterior_using_hl
* UF_MODL_identify_exterior_using_rays
*
* Environment : Internal and External
*
* History : Released in V18.0
************************************************************************/
extern UFUNEXPORT int UF_MODL_create_linked_exterior (
UF_MODL_linked_ext_p_t ext_data, /* <I> Feature data */
tag_t *feature_tag /* <O> Feature tag */
);
/************************************************************************
* This function reads the data of a Linked Exterior feature.
* This feature is implemeted as a feature set which owns hidden
* subfeatures similar to Linked Regions. The subfeatures should not be
* edited or deleted individually. Bodies are owned by the hidden subfeatures.
*
*
* See Also: UF_MODL_create_linked_exterior
* UF_MODL_edit_linked_exterior
* UF_MODL_identify_exterior_using_hl
* UF_MODL_identify_exterior_using_rays
* UF_MODL_ask_all_members_of_set
*
* Environment : Internal and External
*
* History : Released in V18.0
************************************************************************/
extern UFUNEXPORT int UF_MODL_ask_linked_exterior (
tag_t feature_tag, /* <I> Feature tag */
UF_MODL_linked_ext_p_t ext_data, /* <OF>
Feature data. The caller defines
the UF_MODL_linked_ext_t structure,
and pass in a pointer to it. This
routine will fill in the structure
based on the feature tag. The caller
is responsible for freeing any data
returned in arrays.
*/
int *num_groups, /* <O> Number of groups this feature owns */
tag_t **groups, /* <OF> Groups this feature owns (may be null) */
int *num_subfeats, /* <O> Number of subfeatures this feature owns */
tag_t **subfeats, /* <OF> Subfeatures this feature owns (may be null) */
double mass_props[47] /* <O> Mass properties (same as UF_MODL_ask_mass_props_3d)
[0] = Surface Area
[1] = Volume
[2] = Mass
[3-5] = Center Of Mass (COFM), WCS
[6-8] = First Moments (centroidal)
[9-11] = Moments Of Inertia, WCS
[12-14] = Moments Of Inertia (centroidal)
[15] = Spherical Moment Of Inertia
[16-18] = Inertia Products, WCS
[19-21] = Inertia Products (centroidal)
[22-30] = Principal Axes, WCS
[31-33] = Principal Moments (centroidal)
[34-36] = Radii Of Gyration, WCS
[37-39] = Radii Of Gyration (centroidal)
[40] = Spherical Radius Of Gyration
[41-45] = Unused
[46] = Density
*/
);
/************************************************************************
* This function edits a Linked Exterior feature.
*
* See Also: UF_MODL_create_linked_exterior
* UF_MODL_ask_linked_exterior
* UF_MODL_identify_exterior_using_hl
* UF_MODL_identify_exterior_using_rays
*
* Environment : Internal and External
*
* History : Released in V18.0
************************************************************************/
extern UFUNEXPORT int UF_MODL_edit_linked_exterior (
tag_t feature_tag, /* <I> Feature tag */
UF_MODL_linked_ext_p_t ext_data /* <I> Feature data */
);
#undef EXPORTLIBRARY
#endif /* UF_LINKED_EXTERIOR */