int cvxAsmUpdateCompRef
(
const char *OldRootName,     /*I: the old root name of the target part */
const char *NewRootName     /*I: the new root name of the target part */
)
/*
DESCRIPTION:
Traverse the assembly of the active part, find components that reference BinName and
OldRootName, then replace the old reference (OldRootName) with the new one (NewRootName).

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxAssemCompVisAll
(
int *nSize,      /* o: number of int in ppath_mode */
int **ppath_mode      /* o: sum,cnt,pick_path,mode,cnt,pick_path ,mode...*/
)
/*
DESCRIPTION:
Get all the component object visibility of active part and encode the pick path and mode.

The caller is responsible for releasing the memory.
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxAxisGetData
(
int idAxis,        /* I: Axis id*/
svxAxisData *Axis  /* O: Axis data */
)
/*
DESCRIPTION:
Get the Axis data associated with the specified idAxis.

NOTES:
This interface can only retrieve datum data created by interface cvxPartAxisNew().

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxAxisInqDir
(
int idAxis,       /* I: index of axis */
svxPoint *pPnt,   /* O: start point of axis */
svxPoint *pDir    /* O: direction of axis */
)
/*
DESCRIPTION:
Get the direction associated with the specified object (idAxis).
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCSYSGetData
(
int idCSYS,        /* I: CSYS id*/
svxCSYSData *CSYS  /* O: CSYS data */
)
/*
DESCRIPTION:
Get the CSYS data associated with the specified idCSYS, contained
frame and Entity path.

NOTES:
This interface can only retrieve datum data created by interface cvxPartCSYSNew().

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCfgTblInfosSet
(
int Id,                 /* I: configuration id */
svxPartCfgInfo* info    /* I: config table info that changed */
)
/*
DESCRIPTION:
Set config table infos by info and Id.
Get Id by cvxPartInqCfgList;
Get info by cvxPartInqConfigTableInfos;

Multiple values for each row of configuration can be set at once.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompAddAngularCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a angular constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddCoincidentCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt1,        /* I: coordinate of the coincidence point on the first entity (NULL to ignore) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt2,        /* I: coordinate of the coincidence point on the second entity (NULL to ignore) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a coincident constraint, the components 
will remain coincident.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddConcentricCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt1,        /* I: coordinate of the coincidence point on the first entity (NULL to ignore) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt2,        /* I: coordinate of the coincidence point on the second entity (NULL to ignore) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a concentric constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddDistanceCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt1,        /* I: coordinate of the coincidence point on the first entity (NULL to ignore) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxPoint *Pnt2,        /* I: coordinate of the coincidence point on the second entity (NULL to ignore) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a distance constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddFrameCons
(
svxEntPath *Datum1,      /* I: pick-path of first datum (datum plane, datum CSYS) */
svxEntPath *Datum2,      /* I: pick-path of second datum (datum plane, datum CSYS) */
svxConsData *consData,   /* I: constraint custom data (NULL to use default value) */
int *idCons              /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a frame constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddLockCons
(
svxEntPath *Comp1,       /* I: pick-path of first component */
svxEntPath *Comp2,       /* I: pick-path of second component */
svxConsData *consData,   /* I: constraint custom data (NULL to use default value) */
int *idCons              /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a lock constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddMiddleCons
(
svxEntPath *BaseEnt1,        /* I: pick-path of first base entity (face,datum) */
svxEntPath *BaseEnt2,        /* I: pick-path of second base entity (face,datum) */
int nCenter,                 /* I: number of center entities (1 or 2) */
svxEntPath *CenterEnts,      /* I: list of center entities (edge,curve,face,datum) */
svxConsData *consData,       /* I: constraint custom data (NULL to use default value) */
int *idCons                  /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a middle constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddParallelCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a parallel constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddPerpendicularCons
(
svxEntPath *Ent1,      /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxEntPath *Ent2,      /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxConsData *consData, /* I: constraint custom data (NULL to use default value) */
int *idCons            /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a perpendicular constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddSymmetryCons
(
svxEntPath *Plane,       /* I: pick-path of plane (face,datum) */
svxEntPath *SymEnt1,     /* I: pick-path of first symmetric entity(edge,curve,face,datum,point,datum axis) */
svxEntPath *SymEnt2,     /* I: pick-path of second symmetric entity(edge,curve,face,datum,point,datum axis) */
svxConsData *consData,   /* I: constraint custom data (NULL to use default value) */
int *idCons              /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a symmetry constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompAddTangentCons
(
svxEntPath *Ent1,       /* I: pick-path of first entity (edge,curve,face,datum,point,datum axis) */
svxEntPath *Ent2,       /* I: pick-path of second entity (edge,curve,face,datum,point,datum axis) */
svxConsData *consData,  /* I: constraint custom data (NULL to use default value) */
int *idCons             /* O: index of new constraint (NULL to ignore) */
)
/*
DESCRIPTION:
Use the function to create a tangent constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompBomExcludedGet
(
svxEntPath EntPath,    /* I: component pick path */
int *exclude           /* O: the component Exclude state */
)
/*
DESCRIPTION:
Outputs the Exclude state of specified component.
1-excluded 0-included.
The 3D BOM table allows user to exclude and include components.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompCfgIdGet
(
const svxEntPath* path,  /* I: pick path of component */
int* idCfg               /* O: config id */
)
/*
DESCRIPTION:
Get the id of the specified component configuration.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompCfgIdSet
(
const svxEntPath* path, /* I: pick path of component */
int idCfg               /* I: config id */
)
/*
DESCRIPTION:
Set the id of the specified component configuration.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompEditPart
(
int idComp       /* I: id of component in active file */
)
/*
DESCRIPTION:
Activate the part instanced by the specified component for editing.
It is assumed the component (idComp) resides in the active assembly.
Use cvxPartExit() to exit the part to its parent assembly part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompEditPartByPath
(
const svxEntPath *compPath       /* I: id of component in active file */
)
/*
DESCRIPTION:
Activate the part instanced by the specified component path for editing.
It is assumed the component (compPath) resides in the active assembly.
Use cvxPartExit() to exit the part to its parent assembly part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompExtract
(
int idShape,      /* I: id of shape to extract */
svxMatrix *Frame,   /* I: local coordinate frame to map shape into part space */
vxLongName Name,      /* I: name of new part/component */
int NewFile,      /* I: 1 to put new part in a new file; 0 for active file */
evxResponse Overwrite,   /* I: response to "overwrite existing part?" query */
int *idComp         /* O: id of new component (NULL to ignore) */
)
/*
DESCRIPTION:
Extracts a shape from the active part into a new part that is 
instanced back into the active part as a component (i.e. converts 
a shape into a component).  If the shape was merged from a pre-existing
component, "Frame" and "Name" are ignored and the shape is extracted to
the original component using its local frame and name.

If "Frame" is input as NULL, the identity matrix is used.

If "Name" is input as NULL, a default name is assigned to the component.

If "idComp" is not NULL, the id of the new component is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompFaceAtGet
(
const svxEntPath *CompPath,    /* I: pick path of component */
svxFaceAt *At                  /* O: face attribute */
)
/*
DESCRIPTION:
Outputs display attributes of the specified component. Attributes
are grabbed from the first face in the component.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompFaceAtSet
(
int Count,              /* I: number of component */
svxEntPath *CompPath,   /* I: list of pick path of components */
svxFaceAt *At           /* I: face attribute */
)
/*
DESCRIPTION:
Changes display attributes of the specified components.
It is assumed the specified components reside in the active part.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompFind
(
evxFaceTrim Trim,   /* I: face trim option */
svxAxis *Ray,      /* I: ray defined by a point and a direction */
double Dist,      /* I: distance from start of ray along direction of ray */
int SkipBlank,      /* I; 1 to skip blanked components; else 0 */
int *Count,         /* O: number of components */
int **Comps         /* O: list of component id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the components that belong
the active part and are intersected by the specified 
ray.  Only intersections within "Dist" of the ray's
start point (Ray->Pnt) are considered.  

The "Trim" option is used to determine what portions of 
the component faces are checked against the ray.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompGetRefPart
 (
 int *Count,           /* O: the number of names in each output array */
 vxLongName **FileName, /* O: array of "*Count" files referenced by active part */
 vxLongName **RootName /* O: array of "*Count" part names referenced by active part */
 )
 /*
 DESCRIPTION:
 Get the file names and part names in the active assembly or part.  This function determines 
 the number of unique parts referenced by the active assembly or part and assigns that value 
 to *Count, then allocates arrays of that size for BinName and RootName, and fills them with 
 the referenced parts' file names and root names, respectively.

 The caller is responsible for freeing the output arrays with the cvxMemFree function.

 Return 0 if successful, otherwise return 1 if an error occurs.  If an error occurs, *Count 
 will be 0, but either or both BinName and RootName might be a non-NULL pointer to an array 
 that the caller must free.
 */
________________________________________________________________________________

void cvxCompHighlight
(
svxEntPath*CompPath,    /* I: pick-path of component */
svxColor *color         /* I: color of object to display (NULL to use default)*/
)
/*
DESCRIPTION:
Highlights the specified component.
*/
________________________________________________________________________________

int cvxCompIferCheck
(
svxEntPath *BaseComp,               /* I: pick path of the first Component, can be NULL */
svxEntPath *ChkComp,                /* I: pick path of the second Component, can be NULL */
int SubAsmAsWhole,                  /* I: 1:sub-assembly as a whole, don't check interference inside sub-assembly
                                          0:check interference inside sub-assembly */
int IgnoreHidden,                   /* I: whether to ignore the hidden components within the sub-assembly */
int *IferCnt,                       /* O: number of interference */
svxIferChkResData **IferResults     /* O: pointer to list of interference result data */
)
/*
DESCRIPTION:
Check if there is interference between the input components and output the interference result.
all components in current assembly are checked when both of the input component paths are NULL.

The memory referenced by "IferResults" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)IferResults)).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqConsState
(
int idComp,              /* I: index of component or shape */
evxConsState *consState  /* O: constraint state of component */
)
/*
DESCRIPTION:
Get the constraint state of specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqConstraints
(
svxEntPath *CompPath, /* I: pick-path of component */
int *count,           /* O: number of constraints */
int **cons            /* O: list of constraint ids */
)
/*
DESCRIPTION:
Outputs a list of indices of the constraints associated with the specified component.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqOpenShapes
(
svxEntPath *Comp,        /* I: pick path of the component/shape in the component, NULL to check all components */
int IgnoreHide,          /* I :whether to ignore hidden components and hidden shapes */
int *numOpenShps,        /* O: number of open shapes */
svxEntPath **ShpPaths    /* O: path of open shapes */
)
/*
DESCRIPTION:
Get the open shapes in input components or shape.

return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompInqPart
(
int idComp,         /* I: id of component in active file */
char *File,         /* O: name of the file instanced by the component */
int nFileBytes,   /* I: string size of file name */
char *Part,         /* O: name of the part instanced by the component */
int nPartBytes      /* I: string size of part name */
)
/*
DESCRIPTION:
Gets the names of the file and part referenced by the
specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqPartByPath
(
svxEntPath *CompPath,  /* I: pick path of component in active file */
vxLongName fileName,   /* O: name of the file instanced by the component */
vxLongName partName    /* O: name of the part instanced by the component */
)
/*
DESCRIPTION:
Gets the names of the file and part referenced by the
pick path of specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqPaths
(
svxEntPath *CompPath,     /* I: pick-path to start traversal, NULL to traverse current active part */
int Depth,                /* I: depth of traversing, -1 to traverse all pick paths */
int IgnoreHidden,         /* I: whether to ignore the hidden and suppressed components */
int *PathCnt,             /* O: number of component paths */
svxEntPath **lstPath      /* O: list of component paths */
)
/*
DESCRIPTION:
Traverse all pick-paths of components start with CompPath and store them into lstPath.

The memory referenced by "lstPath" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)lstPath)).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompInqRenderMode
(
svxEntPath *CompPath,      /* I: pick path of component */
evxRenderMode *RenderMode  /* O: render mode */
)
/*
DESCRIPTION:
Get component render mode.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompIns
(
svxCompData *Comp,   /* I: component data */
int *idComp            /* O: id of new component */
)
/*
DESCRIPTION:
Inserts a new component int the active part.  If "idComp"
is not NULL, the id of the new component is output.

If this function is called from a custom history operation,
the component will be associated with the custom operation 
and will be deleted automatically when the custom operation 
is regenerated and re-inserts the component.

When this function is called from within a custom history 
operation, if "idComp" is not NULL and "*idComp" is a value 
greater than 0, that value will be encoded in the component's
persistent label to differentiate it from other components
added by the custom operation. After the value of "idComp"
is used to label the new component, the database id of the
new component will be output via "idComp".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompIsUnplaced
(
int      idx_Comp,      /* I: index of component id */
int*     isUnplaced     /* O: component unplaced state*/
)
/*
DESCRIPTION:
Get component unplaced state.
return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompIsUnplacedByPath
(
const svxEntPath* path,  /* I: pick path of component */
int* isUnplaced          /* O: 1 is unplaced, 0 is not unplaced */
)
/*
DESCRIPTION:
Get component unplaced state by pick-path.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompIsectShpChk
(
svxEntPath *BaseShpPath,   /* I: the first shape in a component */
svxEntPath *OpShpPath,     /* I: the second shape in other component */
int *fInterfer             /* O: if found interference, output V_TRUE, otherwise output V_FALSE */
)
/*
DESCRIPTION:
Determine exist or not exist intersection between the 
input two shapes which come from two components.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompIsectShpChk2
(
svxEntPath *BaseShpPath,   /* I: the first shape in a component */
svxEntPath *OpShpPath,     /* I: the second shape in other component*/
int fClosedChk,             /* I: option to control whether check the open shell
                              1 is excluding the open shell. otherwise is 0 */
int *fInterfer            /* O: if found interference, output V_TRUE, otherwise output V_FALSE */
)
/*
DESCRIPTION:
Determine exist or not exist intersection between the 
input two shapes which come from two components.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompIsectShpShp
(
const svxEntPath* basePath,   /* I: path of the first shape */
const svxEntPath* opPath,     /* I: path of the second shape */
evxFaceTrim trim,             /* I: face trim option */
int* count,                   /* O: count of "curves" */
svxCurve** curves             /* O: list of intersection curves */
)
/*
DESCRIPTION:
Gets the intersecting curves of two shapes(comps).

Return :
1 is error,
2 is basePath is the same as opPath.
3 is not intersect.
0 is success,intersection exists.
*/
________________________________________________________________________________

int cvxCompMerge
(
evxBoolType Combine,   /* I: combination method */
int idComp,            /* I: component id (0 for last feature) */
int *idShape         /* O: shape id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Merges a component with the active part using the specified
combination method.  Only the component's top-level geometry
is merged.  Sub-components of the component are not merged.

Use cvxCompShift() to merge the component and its sub-components.

If "idShape" is not NULL, the id of the last shape created by 
merging the component is output.  "isShape=0" is output if no
shape was created by the merge.  Note that merging a component
could add multiple shapes, or other types of geometry, to the
active part.  If there is a possibility that the merge created
more than a single shape, use cvxEntNewList() to retrieve the 
new entities created by the merge.

This function can be overloaded to force merging of component
dimensions by inputting the component id with a negative sign.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompMerge2
(
evxBoolType Combine,   /* I: combination method */
int idComp,            /* I: component id (0 for last feature) */
int MergeDim,         /* I: 1 to merge component part dimensions into active part, else 0 */
int MergeWire,         /* I: 1 to merge component part wireframe geometry into active part, else 0 */
int *idShape         /* O: shape id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Merges a component with the active part using the specified
combination method.  Only the component's top-level geometry
is merged.  Sub-components of the component are not merged.

Use cvxCompShift() to merge the component and its sub-components.

If "idShape" is not NULL, the id of the last shape created by 
merging the component is output.  "isShape=0" is output if no
shape was created by the merge.  Note that merging a component
could add multiple shapes, or other types of geometry, to the
active part.  If there is a possibility that the merge created
more than a single shape, use cvxEntNewList() to retrieve the 
new entities created by the merge.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompRegenSet
(
int idComp,        /* I: component entity id */
int Regen      /* I: 1 to enable component regen; 0 to disable it */
)
/*
DESCRIPTION:
Flags the input component to regen (Regen=1) or not regen (Regen=0) 
the part it instances when the it's parent part is regenerated.

The specified component (idComp) should belong to the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompSetPart
(
int idComp,      /* I: id of component in active file */
vxLongName File,   /* I: name of the file containing the part to instance */
vxLongName Part      /* I: name of the part to instance from "File" */
)
/*
DESCRIPTION:
Changes the part instanced by the specified component in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompSetRenderMode
(
svxEntPath *CompPath,      /* I: pick path of component */
evxRenderMode RenderMode   /* I: render mode */
)
/*
DESCRIPTION:
Set component render mode.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompShapeInqOpenEdges
(
svxEntPath *ShpPath,      /* I: pick path of the shape in the component */
int *numEdg,              /* O: number of open edges */
svxEntPath **edgPaths     /* O: path of open edges */
)
/*
DESCRIPTION:
Get the open edges of the input shape,

return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxCompShift
(
int idComp            /* I: component id */
)
/*
DESCRIPTION:
Moves sub-components of a selected component up to the active part.
Also merges top-level geometry and/or alignments associated with the
specified component (idComp) into the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompSuppress
(
int idComp,  /* I: component id */
int suppress /* I: 1-suppress, 0-unsuppress */
)
/*
DESCRIPTION:
Suppress or unsuppress the specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompSuppressGet
(
int idComp,     /* I: component id */
int *suppress   /* O: the component suppress state */
)
/*
DESCRIPTION:
Outputs the suppress state of specified component.
1-suppressed 0-unsuppressed.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

void cvxCompUnHighlight
(
svxEntPath*CompPath   /* I: pick-path of component */
)
/*
DESCRIPTION:
Un-Highlight the specified component.
*/
________________________________________________________________________________

int cvxCompUserAtDel
(
svxEntPath *Comp,       /* I: pick path of component */
int Count,              /* I: number of user attributes (0 to delete all user attributes) */
svxAttribute* UserAt    /* I: list of user attributes (NULL to delete all user attributes) */
)
/*
DESCRIPTION:
Delete user attribute of the specified component in the current active file.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompUserAtGet
(
svxEntPath *Comp,       /* I: pick path of component */
int *Count,             /* O: number of user attributes */
svxAttribute** UserAt   /* O: list of user attributes */
)
/*
DESCRIPTION:
Retrieves user attribute data of the specified component in the current active file.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompUserAtSet
(
svxEntPath *Comp,       /* I: pick path of component */
int Count,              /* I: number of user attributes */
svxAttribute* UserAt    /* I: list of user attributes */
)
/*
DESCRIPTION:
Set user attribute data of the specified component in the current active file.
a new user attribute is inserted if the user attribute for the specified label
does not exist.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompVisGet      
(
svxEntPath *CompPath, /* I: pick-path of component */
int *Vis              /* O: 1-visible, 0-blank */
)
/*
DESCRIPTION:
Get the visibility of specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCompVisSet
(
svxEntPath *CompPath,   /* I: pick-path of component */
int Vis                 /* I: 1-visible, 0-blank */
)
/*
DESCRIPTION:
Set the visibility of specified component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxConsInqConsData
(
int idCons,             /* I: index of common constraint */
svxConsData *ConsData   /* O: data of common constraint */
)
/*
DESCRIPTION:
Get custom data of the specified constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxConsInqRefEnts
(
int idCons,              /* I: index of constraint */
int *count,              /* O: number of entities associated with constraint */
svxEntPath **entPaths    /* O: list of entity paths associated with constraint */
)
/*
DESCRIPTION:
Outputs a list of pick path of entities associated with the specified constraint.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxConsInqType
(
int idCons,            /* I: index of constraint */
evxConsType *consType  /* O: constraint type */
)
/*
DESCRIPTION:
Get the constraint type of specified constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxConsRedefine
(
int idCons     /* I: index of constraint */
)
/*
DESCRIPTION:
Launches interactive redefinition of the specified assembly constraint.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimInqDimBundles
(
int idDim,      /* I: index of dimension */
int *Count,     /* O: number of dimension bundles in dimension */
int **idBundles /* O: list of index of dimension bundles */
)
/*
DESCRIPTION:
Outputs a list of indices of dimension bundles in specified dimension.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimInqPos
(
int idDim,     /* I: id of dimension */
svxPoint *pPos /* O: stretchable point coordinate */
)
/*
DESCRIPTION:
This function is to inquire the point which this dimension points to,
The parent of dimension should be PMI in part.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxDimInqState
(
int idDim,           /* I: the index of dimension */
evxDimState *state   /* O: the state of specified dimension */
)
/*
DESCRIPTION:
Get the state(evxDimState) of specified dimension.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxDimInqText
(
int idDim,     /* I: id of dimension */
int subDim,    /* I: serial number of sub dimension(0,1,2...), refer to 
                     evxHoleDimDataItem for sub-data item of hole dimension */ 
char **pStr    /* O: output destination text */
)
/*
DESCRIPTION:
This function is to inquire dimension text content for the dimension with index idDim.

The calling procedure MUST deallocate the output string with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimInqTextType
(
int idDim,   /* I: index of dimension or dimension bundle */
int *Type    /* O: text type (0-value, 1-user text, 2-override value) */
)
/*
DESCRIPTION:
Get current user text type of specified dimension.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimInqTxtPnt
(
int idDim,           /* I: index of dimension */
svxPoint *TextPnt    /* O: dimension text origin */
)
/*
DESCRIPTION:
Get dimension text point location of specified dimension.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimInqType
(
int idDim,        /* I: the index of dimension */
evxDimType *type  /* O: the type of specified dimension */
)
/*
DESCRIPTION:
Get the type(evxDimType) of specified dimension.
It can't get the corresponding type if "*type = VX_DIM_LAST".

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxDimInqVar
(
int idDim,        /* I: id of dimension or dimension bundle to inquire */   
svxVariable* Var  /* O: the variable of specified dimension */
)
/*
DESCRIPTION:
Outputs the variable that belong to the specified id. 
The parent of dimension can be part,sketch or drawing.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimIsRadius
(
int idDim,     /* I: the index of dimension */
int* isRadius  /* O: 1 is radius,
                     0 is diameter */
)
/*
DESCRIPTION:
Determine whether the label is diameter or radius.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxDimModTextType
(
int idDim,    /* I: index of dimension or dimension bundle */
int Type,     /* I: text type (0-value, 1-user text, 2-override value) */
char* text    /* I: text string or override expression (NULL to ignore when Type=0) */
)
/*
DESCRIPTION:
Set user text type and text string or override expression of specified dimension. 

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimModTxt
(
int idDim,     /* I: id of dimension */
int subDim,    /* I: number to indicate which sub-dimension to be modified.*/
               /*    The first sub-dimension starts from 0 */
char *pStr     /* I: new destination text */
)
/*
DESCRIPTION:
This function is to modify dimension text for the dimension with index idDim.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimModTxtPnt
(
int idDim,          /* I: index of dimension or dimension bundle */
int center,         /* I: center flag (1-center, 0-not center) */
svxPoint *TextPnt   /* I: new dimension text origin */
)
/*
DESCRIPTION:
This function is to modify dimension text point location of specified dimension.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimValMod
(
int idDim,        /* I: the index of the dimension object*/   
char* exp         /* I: the expression of the dimension object */
)
/*
DESCRIPTION:
Modify the value of the specified dimension. 

The parent of dimension can be part or sketch.

If the dimension belongs to a block and the expression is referenced by another file 
or current part, you can not use the expression name as the second parameter directly,
use the correct form of the expression reference(File Name:Root Name:Expression or 
Root Name:Expression).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxDimValModNoUpdate
(
int idDim,        /* I: the index of the dimension object*/   
char* exp         /* I: the expression of the dimension object */
)
/*
DESCRIPTION:
Modify the value of the specified dimension. it is similar to cvxDimValMod,
the difference is no update/eval/redraw in this function so as to speed up. 
It needs to call cvxDimValMod for the last dim for update all previous changes.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxEqGetDescById
(
int idEqn,     /* I: object id */
char* desc,    /* I/O: output of description */
int size       /* I: size of description */
)
/*
DESCRIPTION:
Looking for an equation object(VEQ) whose variable id matches the input id.
Output description of the equation object with variable "desc".

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxEqGetExpByName
(
char* name,    /* I: object name */
char* exp,     /* IO: output of expression */
int size       /* I: size of expression */
)
/*
DESCRIPTION:
Looking for an equation object(VEQ) whose variable name matches the input name.
Output expression of the equation object with variable "exp".
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxEqRegen
(
int idEqn   /* I: -1 to regen all equation; equation id to regen specified equation */
)
/*
DESCRIPTION:
Regenerate all/specified equations.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxEqSetDescById
(
int idEqn,    /* I: equation id */
char* desc    /* I: description that defines the equation */
)
/*
DESCRIPTION:
Update the specified equation's description without regard for how
the equation was generated.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxFtrIsSubPart
(
int idFtr      /* I: feature id  */
)
/*
DESCRIPTION:
Determine whether the feature is a sub-part.

Returns:
-1 if function fails;
1 if the feature is sub-part;
0 if the feature is not sub-part.
*/
________________________________________________________________________________

int cvxHistBackup
(
void
)
/*
DESCRIPTION:
Backs up the current model state in a history operation.
Saving model states in the history can speed up history
rollback and regen.

Returns 1 if error, else 0.
*/
________________________________________________________________________________

void cvxHistDisable (void)
/*
DESCRIPTION:
Disable history tree update.

The application that uses this function is ALWAYS responsible
for re-enabling history tree update using cvxHistEnable().
*/
________________________________________________________________________________

void cvxHistEnable (void)
/*
DESCRIPTION:
Re-enable history tree update.

Calls to this function MUST ALWAYS be paired with a prior call
to cvxHistDisable().
*/
________________________________________________________________________________

int cvxHistRedefine
(
vxName Operation  /* I: name of history operation */
)
/*
DESCRIPTION:
Launches interactive redefinition of the specified history operation.
Returns 1 if error, else 0.
*/
________________________________________________________________________________

int cvxHistSkipTo
(
char *Expression, /* I: conditional expression (see documentation of "Skip To" command) */
vxName Operation, /* I: name of history operation */
int *idOp         /* I: id of history operation created by this function (NULL to ignore) */
)
/*
DESCRIPTION:
Logs a history operation that will cause history replay to skip to the specified operation
if the specified conditional expression evaluates to a non-zero number (i.e. TRUE).  If it
evaluates to zero (i.e. FALSE), history execution continues without skipping anything.

Returns 1 if error, else 0.
*/
________________________________________________________________________________

int cvxInstPartAsShp
(
const svxCompData *Comp    /* I: component data */
)
/*
DESCRIPTION:
Insert the specified part at the specified location as shape.
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxInstShpGetMatrix
(
int idShape,       /* I: shape id */
svxMatrix *Matrix   /* O: transformation matrix */
)
/*
DESCRIPTION:
Outputs the transformation matrix associated with the specified shape,
which was inserted from a part by command "CdInstPartAsShp".
Now this function is just used for Misumi modify shape.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxLibPartAdjust
(
int idComp,                      /*I: the index of component*/
const vxLongName File,           /*I: the file name (include the file path)*/
const vxLongName Part,           /*I: the Root name*/
const char *ValStr,              /*I: string for the selecet value, Like this A,20;B,30;C,40*/
const char *InstanceName         /*I: the instance name, my be null*/
)
/*
DESCRIPTION:
Change component part use the method like part library
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxLibPartIns
(
const svxCompData *Comp,      /* I: component data */
const char *InstanceName,     /* I: the instance name, my be null*/
const char *ValStr,           /* I: string for the selecet value, Like this A,20;B,30;C,40*/
int        fFileType,         /* I: fFileType is the flag to create the part instance as new root(0)
                                    or new file(1, 2 if read-only), ignored if fInsShape is 1.*/
int        fInsShape,         /* I: insert as shape*/
int *idComp                   /* O: id of new component, or new feature(fInsShape is 1) */
)
/*
DESCRIPTION:
Insert the standard part from reuse library to the current assembly/part as component/shape.

The "ValStr" given some parameter value to generate the instance. The name for the parameters can
be the really name or the description name. The value should be the value in excel or in config table
for the key and normal parameter. For custom value, it can be other value not in the excel or in config
table.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartActiveAsLCS
(
int id     /* I: id of datum/CSYS*/
)
/*
DESCRIPTION:
Active the specified datum/CSYS as the LCS.
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddAngleDim
(
int idEnt1,          /* I: id of the first entity */
int idEnt2,          /* I: id of the second entity */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI angle dimension between the specified two entities in part.
Supported entities include two points, a point and a line,two parallel lines,
two parallel faces.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddArcDim
(
int idEnt,           /* I: id of the first entity */
const char *text,    /* I: input user text */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI arc dimension between the specified entity in part.
Supported entities include circle or face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddChamferDim
(
int idEnt1,          /* I: id of the first entity */
int idEnt2,          /* I: id of the second entity */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI chamfer dimension between the specified two entities in part.
Supported entities include two points, a point and a line,two parallel lines,
two parallel faces.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddCoorDim
(
svxPoint *LeaderPnt, /* I: point coordinate of leader point,
                           if idParent is a point, LeaderPnt set to NULL. */
int idParent,        /* I: id of the parent entity of the leader point,
                           if no parent entity, idParent is equal to 0 */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idDatum,         /* I: Specifies a datum plane to define a local coordinate frame.
                           0 to use default datum */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use current view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI coordinate dimension to specifies leader point.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddDatumDim
(
int idEnt,           /* I: id of the first entity */
svxPoint *leadPnt,   /* I: point coordinate of text placement point */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
char *text,          /* I: datum label name */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI datum feature dimension for the specified entity in part.
Supported entities include edge and face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddDatumTargetDim
(
int idEnt,           /* I: id of the first entity */
int radRype,         /* I: type of DatumT dimension */
double diameter,     /* I: diameter */
double width,        /* I: width */
double height,       /* I: height */
svxPoint *leadPnt,   /* I: point coordinate of text placement point */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
char *text,          /* I: datum label name */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI datum target dimension for the specified entity in part.
Supported entities include edge and face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddFcsDim
(
int idEnt,           /* I: id of the first entity */
svxPoint *leadPnt,   /* I: point coordinate of text placement point */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
char *text,          /* I: datum label name */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI datum feature dimension for the specified entity in part.
Supported entities include edge and face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddLabelDim
(
int idEnt,           /* I: id of the first entity */
svxPoint *leadPnt,   /* I: point coordinate of text placement point */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
char *text,          /* I: datum label name */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI label dimension for the specified entity in part.
Supported entities include edge and face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddLineDim
(
int idEnt1,          /* I: id of the first entity */
int idEnt2,          /* I: id of the second entity */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI linear dimension between the specified two entities in part.
Supported entities include two points, a point and a line,two parallel lines,
two parallel faces.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddRadDim
(
int idEnt,           /* I: id of the first entity */
int radRype,         /* I: type of radius dimension */
const char *text,    /* I: input user text */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI radius dimension between the specified entity in part.
Supported entities include circle or face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddSymSrfDim
(
int idEnt,           /* I: id of the first entity */
svxPoint *leadPnt,   /* I: point coordinate of text placement point */
svxPoint *TextPnt,   /* I: point coordinate of text placement point */
svxRoughTexts *textGrp, /* I: Roughness PMI text define */
int idPlane,         /* I: id of insertion plane (datum or planar face),
                           0 to use default view plane */
int *idDim           /* O: id of the dimension created (input NULL to ignore) */
)
/*
DESCRIPTION:
Create a PMI surface finish dimension for the specified entity in part.
Supported entities include edge and face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAddSymmetryDim
(
svxPntOnEnt EntId,          /* I: id of the entity */
svxPntOnEnt CenterLineId,   /* I: id of the entity Center Line */
svxPntOnEnt TextPnt,         /* I: point coordinate of text placement point */
int idPlane,                 /* I: id of insertion plane (datum or planar face),
                                0 to use default view plane */
int* idDim                   /* O: id of the dimension created (input NULL to ignore) */
)
/*
Create a symmetric annotation based on entity and a center line.
Supported entities include two points, a point and a line,two parallel lines,
two parallel faces.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartAlign
(
svxAlign *Align   /* I: alignment constraint */
)
/*
DESCRIPTION:
Creates an alignment constraint between two shapes or components.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAnchor
(
int idEntity     /* I: component or shape id in active part */
)
/*
DESCRIPTION:
Anchors the specified component or shape so that it does not
move when alignment constraints are created between it and
another component/shape.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartArc3pt
(
svxPoint *Start,   /* I: start point */
svxPoint *End,      /* I: end point */
svxPoint *Mid,      /* I: mid (i.e. through) point */
int *idEnt         /* O: id of new 3D arc entity */
)
/*
DESCRIPTION:
Adds a 3D arc to the active part.   If "idEnt" is not 
NULL, the id of the new arc entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartArcRad
(
svxMatrix *Plane,      /* I: insertion plane */
double Radius,         /* I: radius (mm) */
double Start,         /* I: start angle (deg) - CCW from X axis */
double End,            /* I: end angle (deg) - CCW from X axis */
int *idEnt            /* O: id of new 2D circle entity */
)
/*
DESCRIPTION:
Adds a 3D arc to the active part.  The arc lies on
the specified plane with its center at the plane's origin
and its start/end angles measured CCW from the plane's X axis.
If "idEnt" is not NULL, the id of the new entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtGet
(
vxLongName Name,         /* I: name of part in active file */
svxPartAttribute *At      /* I: part attribute data */
)
/*
DESCRIPTION:
Retrieves attribute data from the specified part in the active file.
If "Name" is NULL or an empty string, the active target part is used.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemDel
(
evxAtItemId itemId, /* I: item id */
vxLongName label    /* I: lable of item attribute */
)
/*
DESCRIPTION:
Delete the attribute of specified item.

If the itemId = VX_AT_USER,  the label can not be NULL and the attribute will 
be delete, otherwise it will set the data of At to NULL.

The itemId includes part items of evxAtItemId(VX_AT_USER~VX_AT_HEIGHT).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemDesGet
(
evxAtItemId itemId,  /* I: attribute item id */
char* AtLable,       /* I: attribute item name */
char* AtDes,         /* O: attribute item description */
int nBytes           /* I: string size of attribute item description */
)
/*
DESCRIPTION:
Get the description of the specified attribute item.

If the itemId = VX_AT_USER, the parameter AtLable can not be NULL.
The itemId includes part items of evxAtItemId(VX_AT_USER~VX_AT_HEIGHT).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemDesSet
(
evxAtItemId itemId,  /* I: attribute item id */
char* AtLable,       /* I: attribute item name */
char* AtDes          /* I: attribute item description */
)
/*
DESCRIPTION:
Set the description of the specified attribute item.

If the itemId = VX_AT_USER, the parameter AtLable can not be NULL.
The itemId includes part items of evxAtItemId(VX_AT_USER~VX_AT_HEIGHT).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemGet
(
evxAtItemId itemId,   /* I: item id */
svxAttribute *At      /* I/O: part item attribute */
)
/*
DESCRIPTION:
Outputs the specified attribute from the active part.

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemGetInFile
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,     /* I: root object name (Root[0]=0 or NULL for active target object) */
evxAtItemId itemId,  /* I: item id */
svxAttribute *At     /* I/O: part item attribute */
)
/*
DESCRIPTION:
Outputs an attribute from a specified part.

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

If the specified file is not already open, this function will open it
to access the attribute, and will then close the file.  If you want to
keep the file open, use the cvxFileKeep function, before calling this
function, to set a flag that prevents cvxPartAtItemSetInFile and
cvxPartAtItemGetInFile from closing the files that they open.  (Files
that are already open before cvxPartAtItemSetInFile or
cvxPartAtItemGetInFile is called are never closed by these functions.)
Keeping files open is a more efficient way to access multiple
attributes in a file, but you must remember to call cvxFileKeep again
to reset the flag after you have finished your calls to
cvxPartAtItemGetInFile and cvxPartAtItemSetInFile, and you also become
responsible for closing the files, for example by using one of the
cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemLockGet
(
char* AtLable,       /* I: custom attribute name */
evxAtItemLockStatus* AtLockState  /* O: locking state of attribute item */
)
/*
DESCRIPTION:
Get the locking state of the specified attribute item.
only custom attribute item are supported.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemLockGetInFile
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,     /* I: root object name (Root[0]=0 or NULL for active target object) */
char* AtLable,       /* I: custom attribute name */
evxAtItemLockStatus* AtLockState  /* O: locking state of attribute item */
)
/*
DESCRIPTION:
Get the locking state of the specified attribute item.
only custom attribute item are supported.

If the specified file is not already open, this function will open it
to access attributes, and will then close the file.  If you want to
keep the file open, use the cvxFileKeep function, before calling this
function, to set a flag that prevents this function from closing the
files that it opens.  (Files that are already open before this function
is called are never closed by this function.)  If you will be calling
several functions to access data in the same file, keeping the file open
between calls is more efficient than letting each function open and close
the file.  However, you must remember to call cvxFileKeep again to reset
the flag after you have finished all of the function calls that need to
access the specified file, and you also become responsible for closing the
file, for example by using one of the cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemLockSet
(
char* AtLable,       /* I: custom attribute name */
evxAtItemLockStatus AtLockState  /* I: locking state of attribute item */
)
/*
DESCRIPTION:
Set the locking state of the specified attribute item.
only custom attribute item are supported.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemLockSetInFile
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,     /* I: root object name (Root[0]=0 or NULL for active target object) */
char* AtLable,       /* I: custom attribute name */
evxAtItemLockStatus AtLockState  /* I: locking state of attribute item */
)
/*
DESCRIPTION:
Set the locking state of the specified attribute item.
only custom attribute item are supported.

If the specified file is not already open, this function will open it
to access attributes, and will then close the file.  If you want to
keep the file open, use the cvxFileKeep function, before calling this
function, to set a flag that prevents this function from closing the
files that it opens.  (Files that are already open before this function
is called are never closed by this function.)  If you will be calling
several functions to access data in the same file, keeping the file open
between calls is more efficient than letting each function open and close
the file.  However, you must remember to call cvxFileKeep again to reset
the flag after you have finished all of the function calls that need to
access the specified file, and you also become responsible for closing the
file, for example by using one of the cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemSet
(
evxAtItemId itemId,  /* I: item id */
svxAttribute *At     /* I: part item attribute */
)
/*
DESCRIPTION:
Sets the value of the specified attribute in the active part.

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtItemSetInFile
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,     /* I: root object name (Root[0]=0 or NULL for active target object) */
evxAtItemId itemId,  /* I: item id */
svxAttribute *At     /* I: part item attribute */
)
/*
DESCRIPTION:
Sets an attribute value in a specified part.

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

If the specified file is not already open, this function will open it
to access the attribute, and will then close the file.  If you want to
keep the file open, use the cvxFileKeep function, before calling this
function, to set a flag that prevents cvxPartAtItemSetInFile and
cvxPartAtItemGetInFile from closing the files that they open.  (Files
that are already open before cvxPartAtItemSetInFile or
cvxPartAtItemGetInFile is called are never closed by these functions.)
Keeping files open is a more efficient way to access multiple
attributes in a file, but you must remember to call cvxFileKeep again
to reset the flag after you have finished your calls to
cvxPartAtItemGetInFile and cvxPartAtItemSetInFile, and you also become
responsible for closing the files, for example by using one of the
cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtMod
(
vxLongName Name,      /* I: name of part in active file */
svxPartAttribute *At   /* I: part attribute data */
)
/*
DESCRIPTION:
Selectively updates attributes of the specified part with the
fields in "At" that have valid ascii strings in their "data" 
variables. Any attribute whose "data" is a blank string is
ignored.  The "label" strings associated with modified fields 
are not reflected into the specified part's attribute info 
with the exception of user attributes and driving dimensions.

For this function to update a user attribute, both "label" and "data" 
must be defined for "At->UserAttribute[n]". If a user attribute with 
the specified "label" already exists in the part's current attribute
info, then the corresponding "data" is updated. If not, then a new
user-attribute is added to part's attribute info.

Entries in "At->Dimen[]" that have blank labels are skipped. 
Dimensions listed in "At->Dimen[]" that are not already listed in 
the part's attribute info are added. Entries in "At->Dimen[]" with
blank labels are ignored.  

It is assumed that labels of driving dimensions listed in "At->Dimen[]"
identify valid dimension or variables in the parent part. It is also
assumed that dimension values stored in "At->Dimen[].data" fields are
within valid ranges. No checking is done to ensure it. When driving
dimension values are changed, the parent part is automatically 
regenerated by this function.

You cannot use this function to delete pre-existing dimension names 
from a part's attribute info. To do that, you have to get the existing
attribute data with cvxPartAtGet(), clear the "label" and "data" variables
of the driving dimensions you no longer want recorded in the part attributes, 
then reset all attributes using cvxPartAtSet().

If "Name" is NULL or an empty string, the active target part is used.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAtSet
(
vxLongName Name,      /* I: name of part in active file */
svxPartAttribute *At   /* I: part attribute data */
)
/*
DESCRIPTION:
Assigns the specified part attribute data to the specified part.
Existing part attribute data is replaced with the contents of
the input attribute data structure.

This function reflects back into the specified part all of the
attribute data in "At", even the blank strings (excluding the 
part name field). So, generally speaking, you would want to 
initialize "At" by passing it to cvxPartAtGet(), modify select 
fields of "At", then pass "At" back into this function.

It is assumed that labels of driving dimensions listed in "At->Dimen[]"
identify valid dimension or variables in the parent part. It is also
assumed that dimension values stored in "At->Dimen[].data" fields are
within valid ranges. No checking is done to ensure it. When driving
dimension values are changed, the parent part is automatically 
regenerated by this function.

Use cvxPartAtMod() to selectively update part attribute data.

If "Name" is NULL or an empty string, the active target part is used.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartAxisNew
(
svxAxisData *Axis,       /* I: Axis data (NULL to ignore) */
int *idAxis              /* O: id of new datum Axis */
)
/*
DESCRIPTION:
This function add a new datum axis to the active part according to the *Axis.
If "idAxis" is not NULL, the id of the new datum axis is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartBackup(void)
/*
DESCRIPTION:
Inserts a "Backup" operation in the active part's history.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartBool
(
evxBoolType Type,   /* I: boolean combination method */
int idBase,         /* I: id of base shape */
int Count,         /* I: no. of shapes to combine with "idBase" */
int *Shapes,      /* I: list of id's of shapes to combine with "idBase" */
int Keep            /* I: 1 to keep "Shapes"; 0 to delete them */
)
/*
DESCRIPTION:
Combines one or more shapes with a base shape using a boolean operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartBool2
(
evxBoolType Type,   /* I: boolean combination method */
int BaseCount,      /* I: number of base shapes */
int *BaseList,      /* I: list of base shape id's */
int OpCount,      /* I: number of operator shapes */
int *OpList,      /* I: list of operator shape id's */
int *ResultCount,   /* O: number of resulting shapes (NULL to ignore) */
int **ResultList   /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Combines one or more operator shapes with one or more base 
shapes using the specified boolean combination method. The 
resulting shape(s) are output via "ResultList".  The memory
referenced by "ResultList" is allocated by this function.
The calling procedure is responsible to free the memory
referenced by "ResultList" (cvxMemFree((void**)ResultList)).

If you do not need the list of output shapes, input NULL
for "ResultCount" and "ResultList" and no list of results 
will be output by this function.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartBool3
(
evxBoolType Type,   /* I: boolean combination method */
int BaseCount,      /* I: number of base shapes */
int *BaseList,      /* I: list of base shape id's */
int OpCount,      /* I: number of operator shapes */
int *OpList,      /* I: list of operator shape id's */
int FaceCount,      /* I: number of bounding faces (0 if undefined) */
int *FaceList,      /* I: list of bounding faces (NULL if undefined) */
int *ResultCount,   /* O: number of resulting shapes (NULL to ignore) */
int **ResultList   /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Combines one or more operator shapes with one or more base 
shapes using the specified boolean combination method. If
bounding faces are defined (FaceCount and FaceList), an
attempt is made to limit the resulting shapes to the regions
between the bounding faces.

The resulting shape(s) are output via "ResultList".  The memory
referenced by "ResultList" is allocated by this function.
The calling procedure is responsible to free the memory
referenced by "ResultList" (cvxMemFree((void**)ResultList)).

If you do not need the list of output shapes, input NULL
for "ResultCount" and "ResultList" and no list of results 
will be output by this function.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartBox
(
svxBoxData *Box,      /* I: box definition */
int *idShape         /* O: id of new shape */
)
/*
DESCRIPTION:
Creates a box shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Box->Combine = V_BOOL_NONE", the id of the shape created 
by this function is output via "idShape".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCSYSNew
(
svxCSYSData *CSYS,       /* I: CSYS data */
int *idCSYS              /* O: id of new CSYS (NULL to ignore) */
)
/*
DESCRIPTION:
This function add a new datum CSYS to the active part according to the Frame.
If "idCSYS" is not NULL, the id of the new datum CSYS is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCalcAttrGet
(
int idPart,                 /*I: index of part in database*/
svxPartCalcAttrData* attr   /*O: calculate attribute of part*/
)
/*
DESCRIPTION:
  Calculate length,width,hight,volume,area,mass of part specified by index

RETURN:
  Return 0 if success else return 1.
*/
________________________________________________________________________________

int cvxPartCfgActivate
(
int idCfg /* I: config id */
)
/*
DESCRIPTION:
Active the specified configuration to current part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartChamAng
(
int Count,         /* I: number of edges to chamfer */
int *Edges,         /* I: pointer to list of edge id's */
int idFace,         /* I: id of face on first side of chamfer */
double Setback,   /* I: setback (mm) on first side of chamfer */
double Angle      /* I: angle of chamfer (deg) */
)
/*
DESCRIPTION:
Adds chamfers to the specified edges.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartChamAsym
(
int Count,         /* I: number of edges to chamfer */
int *Edges,         /* I: pointer to list of edge id's */
int idFace,         /* I: id of face on first side of chamfer */
double Setback1,   /* I: setback (mm) on first side of chamfer */
double Setback2    /* I: setback (mm) on second side of chamfer */
)
/*
DESCRIPTION:
Adds chamfers to the specified edges.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartChamConst
(
int Count,         /* I: number of edges to chamfer */
int *Edges,         /* I: pointer to list of edge id's */
double Setback      /* I: setback (mm) */
)
/*
DESCRIPTION:
Adds chamfers to the specified edges.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartChamferAll
(
const svxChamFlltData *Chamfer, /* I: chamfer data */
int *idChamfer                  /* O: index of new chamfer feature */
)
/*
DESCRIPTION:
Use the function to create symmetric and asymmetric chamfers.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCir3pt
(
svxPoint *P1,   /* I: first point on circle */
svxPoint *P2,   /* I: second point on circle */
svxPoint *P3,   /* I: third point on circle */
int *idEnt      /* O: id of new 3D circle entity */
)
/*
DESCRIPTION:
Adds a 3D circle to the active part.   If "idEnt" is not 
NULL, the id of the new circle entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCirRad
(
svxMatrix *Plane,      /* I: insertion plane */
double Radius,         /* I: radius (mm) */
int *idEnt            /* O: id of new 2D circle entity */
)
/*
DESCRIPTION:
Adds a 3D circle to the active part.  The circle lies on
the specified plane with its center at the plane's origin.
If "idEnt" is not NULL, the id of the new entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCone
(
svxConeData *Cone,   /* I: cone definition */
int *idShape         /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Creates a cone shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Cyl->Combine = V_BOOL_NONE", the id of the shape created
by this function is output via "idShape".

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCopy
(
const svxCopyData *Copy, /* I: Copy data */
int *idCopy              /* O: Copy feature id (NULL to ignore) */
)
/*
DESCRIPTION:
Adds the specified Copy(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idCopy" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCopyDirDis
(
int idEntity,     /* I: id of geometry entity to copy */
svxVector *Dir,    /* I: direction */
double Dis,       /* I: distance */
int*idCopy         /* O: id of copied entity (NULL to ignore) */
)
/*
DESCRIPTION:
Copies the specified geometry within the active part along specified 
direction "Dir" with distance "Dis".  If "idCopy" is not NULL, the id
of the new copy is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCopyPntToPnt
(
int idEntity,       /* I: id of geometry entity to copy */
svxAxis *Start,    /* I: start point and direction */
svxAxis *End,      /* I: end point and direction */
int *idCopy         /* O: id of copied entity (NULL to ignore) */
)
/*
DESCRIPTION:
Copies the specified geometry within the active part from one point 
"Start->Pnt" to another "End->Pnt".  It also changes the orientation
of the part based on "Start->Dir" and "End->Dir".   If the directions 
are same, the orientation of the geometry is not changed -- it is simply 
translated.  If "idCopy" is not NULL, the id of the new copy is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCopyTransform
(
int idEntity,           /* I: id of geometry entity to copy */
const svxMatrix *Mat,   /* I: transformation matrix */
int *idCopy             /* O: id of new entity (NULL to ignore) */
)
/*
Copies the specified geometry entity and applies the specified general
transformation to the copy, moving the copy within the active part.
If "idCopy" is not NULL, the id of the new copy is output.

If "Mat" includes scaling, the scale factors are ignored.

Returns 1 if the function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCopyTransformList
(
const int Count,        /* I: number of entities to transform */
const int* Entities,    /* I: list of geometry entity ids */
const svxMatrix *Mat,   /* I: transformation matrix */
int* EntCnt,            /* O: number of new entities (NULL to ignore) */
int **idList            /* O: id of new entities (NULL to ignore) */
)
/*
Copies the specified geometry entities and applies the specified general
transformation to the copy, moving the copy within the active part.The calling
procedure MUST deallocate the output list with cvxMemFree.

If "Mat" includes scaling, the scale factors are ignored.

Returns 1 if the function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCosSkPlane
(
const svxSketchData* SkData,        /* I: sketch input data */
int isAddHatPtn,                    /* I: 1 if add hatch pattern ,else 0 */
const svxHatchPtnData* PatData,     /* I: hatch pattern input data (NULL to use default) */
int *idSketch                       /* O: id of new sketch (NULL to ignore) */
)
/*
DESCRIPTION:
Adds a new cosmetic sketch to the active part, aligned with the
specified insertion plane.  The sketch is activated for
editing.  Exit the sketch edit mode (back to editing the
parent part) using cvxRootExit() or cvxSkActivate(0,0).
If "idSketch" is not NULL, the id of the new sketch is
output.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCrvInt
(
svxCrvIntData *Crv,   /* I: input data interpolated curve */
int *idEnt            /* O: id of new 3D interpolated curve entity */
)
/*
DESCRIPTION:
Adds a 3D curve interpolated through through the input
points with the specified degree to the active part.   
If "idEnt" is not NULL, the id of the new curve entity 
is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCrvList
(
int Count,         /* I: number of curves in curve-list */
int *Curves,      /* I: pointer to list of 3D curve id's */
int *idEnt         /* O: id of new curve-list entity */
)
/*
DESCRIPTION:
Adds a 3D curve-list entity which groups the specified curves.
Features like Sweep, Revolve and Extrude may be applied to 3D
curve-lists as well as 2D sketches.  If "idEnt" is not NULL, 
the id of the new entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCrvSplitAtPnts
(
int idCurve,      /* I: curve id */
int CountPnts,    /* I: number of points to split at */
svxPoint *Points, /* I: list of points to split at */
int *CountCrvs,   /* O: number of curves after split (NULL to ignore) */
int **NewCrvs     /* O: list of curves after split (NULL to ignore) */
)
/*
DESCRIPTION:
Split a curve at specified points.
Outputs a list of indices of the new curves after split.  The calling 
procedure MUST deallocate the internal memory of each element in the
output list by calling cvxCurveFree, after which the output list MUST
be deallocated with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCurve
(
svxCurve *Crv,      /* I: curve data */
int *idEnt         /* O: id of new curve entity */
)
/*
DESCRIPTION:
Adds a curve to the active part.   If "idEnt" is not 
NULL, the id of the new curve entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCurveChainFind
(
int nSeeds,    /* I: number of seed edges or curves */
int *idSeeds,  /* I: list of id of seed edges or curves */
int type,      /* I: type of edges, only effects the find result of the seed edge
                     0: find continuously tangent edges that may be bound by any number of faces
                     1: find connected open edges
                     2: find continuously tangent manifold edges that are shared by exactly two 
                        faces or are seams having the same face on both sides */
int *Count,    /* O: number of curves found */
int **idCrvs   /* O: list of curves found */
)
/*
DESCRIPTION:
Use the function to find connected chain of curves or edges and output a list
of indices of the edges or curves. 

If the seed is a curve, the chain consists of curves that are connected end-to-end, 
but without any requirement for tangency between curve. 

If the seed is an edge, the chain consists of edges that are tangent, i.e. smoothly 
connected end-to-end. If type is 0, an edge may bound any number of faces. If type 
is 1, only open edges are included in the chain, the requirement for tangency between
edges is suspended, so a chain of open edges may continue around sharp corners. If 
type is 2, only manifold edges are included in the chain, i.e. edges that are shared
by exactly two faces, or edges that have seams with the same face on both sides.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCurveOffset
(
int idCurve,   /* I: curve id */
double Dis,    /* I: offset distance */
int *idOut     /* O: id of curve after offset*/
)
/*
DESCRIPTION:
Offset a curve with distance "Dis".  

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCurveSilh
(
int idCurve,         /* I: curve id */
svxPoint *dir,       /* I: project direction */
int *iCnt,           /* O: number of new curves */
int **idList         /* O: id of new curves */
)
/*
DESCRIPTION:
Project a 2D curve along a direction, to find its silhouettes.
This will split the curve on its self-intersections.
Output new silhouette curves via "idList".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartCyl
(
svxCylData *Cyl,      /* I: cylinder definition */
int *idShape         /* O: id of new shape */
)
/*
DESCRIPTION:
Creates a cylinder shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Cyl->Combine = V_BOOL_NONE", the id of the shape created 
by this function is output via "idShape".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartDatum
(
svxMatrix *Frame,   /* I: transformation matrix */
int *idDatum      /* O: id of new datum */
)
/*
DESCRIPTION:
Adds a datum plane to the active part, aligned with the 
specified local coordinate frame.  If "idDatum" is not 
NULL, the id of the new datum is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartDatum2
(
svxMatrix *Frame,   /* I: transformation matrix */
int iCode,          /* I: position code ,1 add label to entity, 0 don't*/ 
int *idDatum        /* O: id of new datum */
)
/*
DESCRIPTION:
Adds a datum plane to the active part, aligned with the specified local coordinate frame.  
If "idDatum" is not NULL, the id of the new datum is output.In addition to need input position 
code its function is same as cvxPartDatum ,1 as the default in cvxPartDatum.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartDelGrpFtr
(
int idxFtr,    /* I: parting face feature group */
int delFtrs    /* I: delete the features in the folder or not */
)
/*
DESCRIPTION:
Delete the parting face feature group.
delFtrs: 1-delete the features in the folder
         0-just delete the folder

Note: You need regen the history after deleting all the features.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartDivide
(
svxDivideData *Divide, /* I: divide input data */
int *numShape,         /* O: number of resulting shapes (NULL to ignore) */
int **idShapes         /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to divide a solid or open shape where it intersects with faces, 
shapes, or datum planes. The result will be two distinct solids or shapes. This 
function can also divide an open shape or result in one or more open shapes.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartDraft
(
const svxDraftData *Draft,/* I: Draft Data */
int *idDraft             /* O: id of feature operation that created Draft (NULL to ignore) */
)
/*
DESCRIPTION:
Adds the specified draft(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idDraft" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartEcadRgnCut
(
int idSketch,     /* I: id sketch to cut the tab shape */
int* idFtr        /* O: id of feature(NULL to ignore) */
)
/*
DESCRIPTION:
Use the input sketch to cut the sheet metal shape.
It likes Extrude_Remove command and the extrude length is the thickness of 
the tab shape in current part.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartEcadRgnSet
(
const svxEcadRgnSetData* pRgnSetData,   /* I: region set data */
int *idFtr                              /* O: id of feature(NULL to ignore) */
)
/*
DESCRIPTION:
ECAD "Region Set" command.
The sketch must be cosmetic.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartEllipse
(
svxRectangleData *ellipseData,  /* I: ellipse input data */
int *idEnt            /* O: id of new 3D ellipse entity */
)
/*
DESCRIPTION:
Add a 3D ellipse to the active part.  The ellipse lies on
the specified plane with the specified center.
If "idEnt" is not NULL, the id of the new entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartEllipsoid
(
svxEllsoData *Ellso,   /* I: ellipsoid definition */
int *idShape           /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Creates a ellipsoid shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Cyl->Combine = V_BOOL_NONE", the id of the shape created
by this function is output via "idShape".

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartEncapsulate
(
int Option,    /* I: 0 to encapsulate according to active configuration options;
               ** I: 1 to force encapsulate to use StartData/ExplicitData; 
               ** I: 2 to force encapsulate to use ExplicitData and explicit shape features;
               ** I: 3 to force encapsulate to use Explicit data with active config setting
               **    for explicit shape features.
               */
int KeepDimen  /* I: 1 to save feature dimensions with encapsulated data; 0 to delete them */
)
/*
DESCRIPTION:
Encapsulates the active part's history.  

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartEqnDelete
(
int idEqn            /* I: equation id or equation set id*/
)
/*
DESCRIPTION:
Delete all equation if idEqn = -1.
Delete equation set or equation by specified idEqn.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartEqnSet
(
int Count,              /* I: number of variables */
svxVariable *Variables   /* I: list of variables */
)
/*
DESCRIPTION:
Create an equation set in active part, and add variables
into this equation set.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartErase
(
int Count,         /* I: number of entities */
int *idEnts         /* I: list of entity id's */
)
/*
DESCRIPTION:
Erase specified entities. 

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

void cvxPartExit (void)
/*
DESCRIPTION:
Exits the active part to its parent part if it was activated
from within an assembly, to its parent CAM plan if it was 
activated from within a CAM plan, to its parent drawing sheet
if it was activated from a drawing sheet view, or to the 
root object level of its parent file, if it was activated 
from the level of the root object list.
*/
________________________________________________________________________________

int cvxPartExplode
(
const svxExplodeData *ExplodeData,  /* I: explode_data definition */
int *numShape,                /* O: number of resulting shapes (NULL to ignore) */
int **idShapes                /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Explode faces from the active topology table.

The calling procedure MUST deallocate the output list with cvxMemFree.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartExtendFace
(
   svxExtendData *data,  /* I: extend face data */
   int*newFtr            /* O: index of new feature(NULL to ignore)*/
)
/*
DESCRIPTION:
Extend the specified face.
Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartExtrude
(
svxExtrudeData *Ext,   /* I: extrusion input data */
int *idShape         /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Creates an extruded shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Ext->Combine = V_BOOL_NONE", the id of the shape created 
by this function is output via "idShape".  If multiple shapes
could be created, use cvxEntNewList() to get their id's.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFace
(
svxSurface *Srf,      /* I: NURBS surface geometry */
int NumCurves,         /* I: number of trim curves */
svxCurve *TrimCurves,   /* I: list of 2D NURBS UV trim curves */
int Code,            /* I: non-zero integer code for labeling the face */
int Sew,            /* I: 1 to sew face to adjacent faces, else 0 */
double Tol,            /* I: 3D proximity tolerance (mm) (0.0 for default) */
int *idFace            /* O: database id of new face entity (or NULL) */
)
/*
DESCRIPTION:
Adds a face to the active part using the specified surface and trim curves.
The face is sewn to adjacent faces with matching edges.

It is assumed the trim curves are 2D NURBS curves defined in the UV space of 
the specified surface.  If no trim curves are input (NumCurves=0), trim 
curves are automatically created around the "rectangular" surface boundary.

The input 3D proximity tolerance (Tol) is used to match the endpoints of
trim curves when they are sorted into loops, and to match edges of the
new face to edges to existing faces if the "Sew" option is enabled.

If "Tol" is input as 0.0, the active part's default proximity tolerance is used.

If "idFace" is not NULL, the database id of the new face entity is output.

This function copies data passed to it.  The calling procedure is
responsible for deallocating memory referenced by the input data structures.

Note that faces will not add successfully to the active part unless there
is an active feature (i.e. history operation) for them to link to.  This is 
accomplished by putting your code inside the callback function associated 
with a command-template-defined custom history operation (see cvxTplInit).
When the history is regenerated, ZW3D will expect the input parameters defined
by the command template to provide sufficient input to the callback function
to re-create (i.e. regenerate) the original geometry.

The other option is to start your code with cvxPartHistStart(), which 
defines a "static" feature (i.e. history operation) for program-generated
geometry (e.g. faces) to attach to.  When you are done adding geometry,
call cvxPartHistEnd().  This function will cause all existing part geometry
and history to be bundled into a single static "StartData" history operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFaceEdgesFind
(
int nSeeds,            /* I: number of seed faces */
int *idSeeds,          /* I: list of id of seed faces */
evxEdgeLoopType type,  /* I: type of boundary */
int *Count,            /* O: number of edges found */
int **idEdges          /* O: list of edges found */
)
/*
DESCRIPTION:
Use the function to find edges that bound one or more seed faces.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFaceFind
(
svxFaceFind *findData, /* I: face search data */
int *Count,            /* O: number of faces found */
int **idFaces          /* O: list of faces found */
)
/*
DESCRIPTION:
Use the function to find connected groups of faces and output a list 
of indices of the faces. the function provides several methods for 
finding faces that form certain kinds of features, such as bosses, 
pockets, holes and fillets. also support custom method, please refer
to the description of input variables for details.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFaceOffset
(
int idFace,    /* I: face id */
double Dis,    /* I: offset distance */
int Keep       /* I: 1 to keep "Original surface"; 0 to delete it */
)
/*
DESCRIPTION:
Offset a face with distance "Dis".  Original surface will be deleted
if "Keep=0".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFacesOffset
(
const svxFcsOffsetData* data,  /* I: face offset data */
int* idFtr                     /* O: feature id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a new face offset from a face at a specified distance.
Multiple faces can be offset at the same time.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartFacesetSew
(
int count,          /* I: count of shapes */
int *shapes,        /* I: id list of shapes */
svxSewData* param,  /* I: parameter value (NULL to use default)*/
int *newFtr         /* O: id of new feature(NULL to ignore)*/
)
/*
DESCRIPTION:
Sew the specified shapes.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFacets
(
vxLongName Name,     /* I: block name */
svxFacets *Facets,   /* I/O: set of 3D triangular facets */
int *idBlock         /* O: id of new 3D Block of triangular facets */
)
/*
DESCRIPTION:
Creates an explicit (i.e. non-historical) 3D Block containing the input 
3D facet data and adds it to the active part. 

If "idBlock" is not NULL, the id of the 3D Block created 
by this function is output via "idBlock".

If this function successfully creates the Block, the Block takes
ownership of the memory referenced by the vertex data fields in the
"Facets" structure (Vertex, Normal, etc.).  This function assigns NULL
to fields that refer to memory that has been transferred to the Block.
After this function returns, use the cvxFacetsFree function to release
any remaining memory still referenced by the "Facets" structure.

Returns 1 if function fails; 0 if it succeeds.

See cvxPartFacetsMod for a function that can modify the facet data of
an existing 3D Block.
*/
________________________________________________________________________________

int cvxPartFacetsMod
(
int idBlock,      /* I: id of 3D Block of triangular facets */
svxFacets *Facets /* I/O: set of 3D triangular facets */
)
/*
DESCRIPTION:
Modify an explicit (i.e. non-historical) 3D Block in the active part,
replacing the Block's prior triangle and vertex data with data from
the given "Facets" input.

If this function successfully updates the Block, the Block takes
ownership of the memory referenced by the vertex data fields in the
"Facets" structure (Vertex, Normal, etc.).  This function assigns NULL
to fields that refer to memory that has been transferred to the Block.
After this function returns, use the cvxFacetsFree function to release
any remaining memory still referenced by the "Facets" structure.

This function ignores the At, Tx and Sh fields in the "Facets"
structure.  It does not update the Block's display attributes, texture
map attributes, or shader attributes.  The cvxPartFacetsSetAt and
cvxPartFacetsSetTx functions can be used to modify a Block's display
attributes and texture map attributes.  Shader attributes are not
currently used by 3D Blocks.

Returns 1 if function fails; 0 if it succeeds.

See cvxPartFacets for a function that can create a 3D Block from facet
data.
*/
________________________________________________________________________________

int cvxPartFacetsSetAt
(
int idBlock,         /* I: id of 3D Block */
const svxFaceAt *At  /* I: display attributes */
)
/*
DESCRIPTION:
Modifies display attributes of the specified block.  It is assumed the
specified block resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFacetsSetTx
(
int idBlock,            /* I: id of 3D Block */
const svxTextureAt *Tx  /* I: texture map attributes */
)
/*
DESCRIPTION:
Modifies texture map attributes of the specified block.  It is assumed
the specified block (idBlock) resides in the active part.

If the "file" field of the svxTextureAt structure is empty (a
zero-length string), the texture map attributes are not saved and any
prior texture map assigned to the block is removed.

The "opt" field of the svxTextureAt structure is not currently
supported.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFillet
(
int Count,         /* I: number of edges to fillet */
int *Edges,         /* I: pointer to list of edge id's */
double Radius      /* I: fillet radius */
)
/*
DESCRIPTION:
Adds fillets to the specified edges.

Use cvxPartPartialResults() to disable/enable the prompt to 
calculate/display partial results for failed fillets.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFilletAll
(
const svxChamFlltData *Fillet,  /* I: fillet data */
int *idFillet                   /* O: index of new fillet feature */
)
/*
DESCRIPTION:
Use the function to create symmetric and asymmetric fillets.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFittingCrv
(
int iCnt,         /* I: number of points */
svxPoint *pnts,   /* I: points */
double tol,       /* I: tolerance value */
double smth,      /* I: smooth value */
int *idEnt         /* O: id of new curve entity */
)
/*
DESCRIPTION:
Add a curve to the active part from fitting some points and smooth it.
If "idEnt" is not NULL, the id of the new curve entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFlagExtThread
(
const svxFlagExtThreadData* data,   /* I: flag ext thread data */
int* idFtr                          /* O: feature id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Use the Flag Ext Thread command to assign hole attributes so drawing 
sheets will recognize these features as holes.but only visible in 3D.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartFlagHoles
(
const svxFlagHoleData* data,   /* I: flag hole data */
int* idFtr                     /* O: feature id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Use the Flag Hole command to assign hole attributes so drawing 
sheets will recognize these features as holes.

Return 1 if error, else 0.
*/
________________________________________________________________________________

void cvxPartFreeCfgTbl
(
svxPartCfgInfo** cfginfo  /* I/O: list of config table info */
)
/*
DESCRIPTION:
Frees memory associated with the input config table infos list.
The input memory pointer (*cfginfo) is set to NULL.
*/
________________________________________________________________________________

void cvxPartFreeHoles
(
int Count,           /* I: number of holes */
svxHoleData **Holes  /* I/O: list of holes */
)
/*
DESCRIPTION:
Frees memory associated with the input hole list.
The input memory pointer (*Holes) is set to NULL.
*/
________________________________________________________________________________

int cvxPartFtrInqAuxFtrs
(
int idFtr,           /* I: id feature */
int* count,          /* O: count of idAuxFtrs */
int** idAuxFtrs      /* O: list of auxiliary feature id */
)
/*
DESCRIPTION:
Gets a list of auxiliary features for the specified feature.

The memory referenced by "idAuxFtrs" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)idAuxFtrs)).

Returns 1 if function fails; 0 if it succeeds; -1 if not found auxiliary feature.
*/
________________________________________________________________________________

int cvxPartFtrInqInpEnts
(
int idFeature,        /* i: index of feature in active bin */
evxEntType type,      /* i: entity type id */ 
int *cnt,             /* o: no. of specified entities  */
int **list             /* o: list of entities */
)
/*
DESCRIPTION:
Get the specified entities of the specified feature.
These entities are in the VDATA of the feature.

Note: usually we need to call cvxPartFtrPlayTo to rollback to "idFeature" first, 
and then call this function to get the input entities.

The feature list (list) is allocated by this function and must be
deallocated by the calling procedure.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartFtrIsMissRef
(
int idFeature,   /* I: reference feature id */
char* status     /* O: feature status. 1 is miss reference, 0 is no miss reference. */
)
/*
DESCRIPTION:
Determines whether a reference feature has lost external references.

Returns:
1 if function fails;
-1 if idFeature is not a external reference feature;
else 0.
*/
________________________________________________________________________________

int cvxPartFtrIsUDF
(
int idFtr,    /* I: index of feature */
int* isUDF    /* O: 1 - is a UDF feature, 0 - is not a UDF feature, -1 - is not a feature */
)
/*
DESCRIPTION:
Get the type of the feature: UDF or not.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartFtrPlayTo
(
int idxFtrPlayTo, /* I: id of feature play to */
int state         /* I: state of feature(1-has played, 0-not) */
)
/*
DESCRIPTION:
Play the feature history to the top of specified feature.
If the state is 1, rollback to the specified feature,
else play to this feature.

Return 1 if error, else return 0.
*/
________________________________________________________________________________

int cvxPartFtrSuppress
(
int count,        /* I: count of idFeatures */
int* idFeatures,  /* I: list of feature id */
char suppress     /* I: 1-suppress, 0-unSuppress */
)
/*
DESCRIPTION:
Suppress or unSuppress the specified feature (including assembly feature).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFtrUserAtDel
(
int idFeature,          /* I: index of feature */
int Count,              /* I: number of user attributes (0 to delete all user attributes) */
svxAttribute* UserAt    /* I: list of user attributes (NULL to delete all user attributes) */
)
/*
DESCRIPTION:
Delete user attribute of the specified feature in the current active part.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFtrUserAtGet
(
int idFeature,          /* I: index of feature */
int *Count,             /* O: number of user attributes */
svxAttribute** UserAt   /* O: list of user attributes */
)
/*
DESCRIPTION:
Retrieves user attribute data of the specified feature in the current active part.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartFtrUserAtSet
(
int idFeature,          /* I: index of feature */
int Count,              /* I: number of user attributes */
svxAttribute* UserAt    /* I: list of user attributes */
)
/*
DESCRIPTION:
Set user attribute data of the specified feature in the current active part.
a new user attribute is inserted if the user attribute for the specified label
does not exist.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartGeomExport
(
svxGeomExport *Data    /* I: data that defines geometry to be exported */
)
/*
DESCRIPTION:
Exports the specified geometry from the active target part to an 
external part.  If the destination part does not exist, it is 
created.  If the destination part already exists, the geometry 
is added to it.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartGeomExportII
(
svxGeomExport *Data    /* I: data that defines geometry to be exported */
)
/*
DESCRIPTION:
Exports the specified geometry from the active target part to an
external part.  If the destination part does not exist, it is
created.  If the destination part already exists, the geometry
is added to it.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartGetCustomStr
(
int idEnt,        /* I: part id */
int *idStr,       /* O: custom string id, can be NULL */
char **CustomString /* O: custom string */
)
/*
DESCRIPTION
Get custom string attached to a entity.

The calling procedure MUST deallocate the output string with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartGetFlatSolids
(
int* cnts,         /* O: count of "solids" */
int** solids       /* O: list of sheet metal flat solid id */
)
/*
DESCRIPTION:
Gets a list of sheet metal flat solid id in the active part.

The memory referenced by "solids" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)solids)).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistClip
(
int Cut,          /* I: 1 to cut; 0 to copy */
int Count,         /* I: number of history operations to cut or copy */
int *Operations   /* I: list of history operation id's */
)
/*
DESCRIPTION:
Cuts or copies the specified operations from the history of the active part
to the clipboard, replacing operations previously stored on the clipboard.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistDel
(
int Count,         /* I: number of history operations to delete */
int *Operations   /* I: list of history operation id's */
)
/*
DESCRIPTION:
Deletes the specified operations from the history of the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistDelUtil
(
int Count,         /* I: number of history operations to delete */
int *Operations,   /* I: list of history operation id's */
int OpType        /* I: OpType=0 : prompt to the user
                        OpType=1 : auto delete associated history operations
                        OpType=2 : auto suppress failed feature */
)
/*
DESCRIPTION:
Deletes the specified operations from the history of the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistEnd
(
void
)
/*
DESCRIPTION:
Used in conjunction with cvxPartHistStart() to bundle all existing part 
geometry and history to be bundled into a single static "StartData" history 
operation.  It is the equivalent of cvxPartEncapsulate(1, 0).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistGroup
(
int idFirst,      /* I: id of first history operation */
int idLast,         /* I: id of last history operation */
vxName Name,      /* I: group name (input NULL for default name) */
int Close         /* I: 1 to close new group, else 0 */
)
/*
DESCRIPTION:
Group the specified history operations.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistList
(
int Option,       /* I: Option=0 : get history operations that have been played
                        Option=1 : get history operations that have not been played
                        Option=2 : get played and unplayed history operations */
int *Cnts,        /* O: number of history operations */
int **HistList    /* O: list of history operations */
)
/*
DESCRIPTION:
Gets a list of history operations in the active part as specified by the
input "Option".

The memory referenced by "HistList" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)HistList)).

Returns 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartHistPaste(void)
/*
DESCRIPTION:
Paste operations currently on the clipboard into the history of the active part.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistRename
(
int idOp,         /* I: id of history operation (i.e. feature) */
vxName Name,      /* I: new operation name */
char *Descript    /* I: new description (NULL if undefined) */
)
/*
DESCRIPTION:
Renames an operation in the history of the active part and assigns 
the specified description to it (if defined).  Passing in a blank
string for "Descript" will clear the description currently assigned
to "idOp".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHistStart
(
vxName Name            /* I: history operation (i.e. feature) name */
)
/*
DESCRIPTION:
Defines a "static" feature (i.e. history operation) for program-generated
geometry (e.g. faces) to attach to.  When you are done adding geometry,
call cvxPartHistEnd().  This function will cause all existing part geometry
and history to be bundled into a single static "StartData" history operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartHole
(
svxHoleData *Hole,   /* I: hole data */
int *idOp            /* O: id of feature operation that created hole */
)
/*
DESCRIPTION:
Adds the specified hole(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idOp" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInlay
(
svxInlayData *Inlay, /* I: inlay input data */
int *idInlay         /* O: id of inlay feature (NULL to ignore) */
)
/*
DESCRIPTION:
The function is used to embed a set of closed loops of curves, as it would 
be generated by an outline text font, into a face and then offset the new 
interior faces created by the desired distance, giving a raised or sunken 
text effect. it will create new faces, edges, vertices, etc., allowing for 
sharp transitions from the raised surfaces to the base surface.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqActiveCfg
(
int *idCfg /* O: the id of current active configuration */
)
/*
DESCRIPTION:
Outputs the active configuration id of current active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAnnoTexts
(
int *Count,         /* O: number of curves */
int **Texts      /* O: list of text id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the text that belong to
the active part.  The calling procedure MUST deallocate
the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAsmFldChildEnts
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Part,     /* I: root object name (Part[0]=0 or NULL for active target object) */
int idFolder,        /* I: index of assembly folder */
int incSubFld,       /* I: 0 exclude sub folders; 1 include sub folders; 2 only sub folders */
int *count,          /* O: number of entities in specified assembly folder */
int **Ents           /* O: list of entities in specified assembly folder */
)
/*
DESCRIPTION:
Outputs a list of indices of the entities in the specified assembly folder.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAsmFolders
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Part,     /* I: root object name (Part[0]=0 or NULL for active target object) */
int type,            /* I: folder type (0: component folder; 1: constraint folder; 2: feature folder) */
int *count,          /* O: number of assembly folders */
int **Folders        /* O: list of assembly folders */
)
/*
DESCRIPTION:
Outputs a list of indices of the assembly folders in the specified assembly file.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAsmFtrList
(
vxLongName File, /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Part, /* I: part object name (Part[0]=0 or NULL for active target object) */
int *Count,        /* O: number of assembly features in the specified part */
int **Features     /* O: list of id's of assembly features in the specified part */
)
/*
DESCRIPTION:
Outputs a list of database id's of assembly features in the specified part. 
If there are no features, "*Count" is output as zero and "*Features" as NULL.

This function allocates memory for the array output via "Features". The calling
procedure is responsible for deallocating the memory.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAsmIsFlex
(
int idComp,             /* I: index of component */
int* isFlexible         /* O: 1 if flexible; 0 if not */
)
/*
DESCRIPTION:
Determine whether the component is flexible.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAsmIsFlexByPath
(
svxEntPath AsmPath,         /* I: pick-path of component */
int* isFlexible             /* O: 1 if flexible; 0 if not */
)
/*
DESCRIPTION:
Determine whether the component is flexible.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqAxis
(
int *Count,        /* O: number of axis */
int** Axis         /* O: list of index of axises */
)
/*
DESCRIPTION:
Outputs a list of axis that belong to the current part.
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqBlockPnts
(
int idBlock,         /* I: id of point block in active part */
int *Count,            /* O: number of points */
svxPointf **Points   /* O: list of points */
)
/*
DESCRIPTION:
Outputs a list of points in the specified 3D Point Block. 
Memory for the point list is allocated by this function and output
via "Points".  It must be deallocated by the calling procedure
with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqBlockType
(
int idBlock,          /* I: 3D block id */
evxBlockType *Type   /* O: block type */   
)
/*
DESCRIPTION:
Outputs the id of the parent feature of the specified entity
in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqBlocks
(
int *Count,      /* O: number of 3D blocks in the active part */
int **Blocks   /* O: list of id's of 3D blocks in the active part */
)
/*
DESCRIPTION:
Outputs a list of database id's of 3D blocks of the specified type within the 
active part. If there are no blocks, "*Count" is output as zero and "*Blocks" 
as NULL.

This function allocates memory for the array output via "Blocks". The calling 
procedure is responsible for deallocating the memory.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCfgList
(
int *Count,    /* O: the number of part configuration */
int **CfgList  /* O: the list of part configuration id */
)
/*
DESCRIPTION:
Outputs the configuration id list of current active part.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCfgTblInfos
(
int Id,                     /* I: configuration id */
svxPartCfgInfo** partcfg    /* O: configuration infos */
)
/*
DESCRIPTION:
Get specified id configuration table infos.
Get Id by cvxPartInqCfgList;

The memory referenced by "partcfg" is allocated by this function.
The calling procedure is responsible to free it (cvxPartFreeCfgTbl(partcfg)).

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqComps
(
vxLongName File,   /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,   /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,         /* O: number of components */
int **Comps         /* O: list of component id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the components that belong 
to the specified part. 

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqComps2
(
vxLongName File,   /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,   /* I: part name (Part[0]=0 or NULL for active part) */
int Option,         /* I: 1 for filter suppressed components, otherwise for 0 */
int *Count,         /* O: number of components */
int **Comps         /* O: list of component id's */
)
/*
DESCRIPTION:
According to the Option to output a list of indices of the components
that belong to the specified part. 

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCompsInfo
(
vxPath Path,         /* I: full file path (Null to the active file) */
vxLongName Name,      /* I: root object name (Null to all root objects) */
int* Count,            /* O: number of components */
vxPath** Paths,      /* O: list of components' path */
vxLongName** Names   /* O: list of components' root object name */
)
/*
DESCRIPTION:
Outputs 2 lists of path and root object name of the components that belong 
to the specified part. 

The difference between cvxPartInqComps and cvxPartInqCompsInfo is 
cvxPartInqComps just get the file name and part name,
and cvxPartInqCompsInfo get the path(include file name) and part name.

The calling procedure MUST deallocate the output lists.
  cvxMemFree((void**)Paths);
  cvxMemFree((void**)Names);

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqConstraints
(
vxLongName File,     /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Part,     /* I: root object name (Part[0]=0 or NULL for active target object) */
int *count,          /* O: number of constraints */
int **cons           /* O: list of constraint ids */

)
/*
DESCRIPTION:
Outputs a list of indices of the constraints in the specified component.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCrvList
(
int idCrvList,            /* I: id of curve-list entity in active part */
int *Count,               /* O: number of curves (0 if there are no curves) */
svxEntPick **Curves      /* O: list of curves (NULL if there are no curves) */
)
/*
DESCRIPTION:
Outputs a list of the curve or edge entities referenced by the 
specified curve-list entity within the active part. The curve
references are output using the "svxEntPick" data structure 
so that parent sketches can be identified for sketch curves 
instanced by the curve list.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCrvLists
(
int *Count,         /* O: number of curves */
int **CrvLists      /* O: list of curve list id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the curve list that belong to
the active part.  The calling procedure MUST deallocate
the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCsys
(
int *Count,        /* O: number of CSYS */
int** Csys         /* O: list of index of CSYS */
)
/*
DESCRIPTION:
Outputs a list of CSYS that belong to the current part.
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCurve
(
int idEntity,   /* I: id of curvilinear entity (includes edges) */
int Nurb,      /* I: 1=get NURBS data for all curve types; else 0 */
svxCurve *Crv   /* O:   curve data */
)
/*
DESCRIPTION:
Gets curve geometry for the specified curvilinear entity, including
face edges.  If "Nurb" is input as 1, NURBS data is output for 
analytic curve types (e.g. line, arc, circle).  NURBS data is output
via "Crv" using memory allocated by this function.  The memory MUST
be deallocated by the calling procedure using cvxCurveFree().  It
is assumed the curve geometry resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqCurves
(
int *Count,         /* O: number of curves */
int **Curves      /* O: list of curve id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the curves that belong to
the active part.  The calling procedure MUST deallocate 
the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqDefaultCSYS
(
int *CSYS         /* O: Default CSYS/Datum id */
)
/*
DESCRIPTION:
Get the Default CSYS/Datum ID which Uid is three 10.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqDimIdxs
(
vxLongName File,    /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,    /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,         /* O: number of dimensions */
int** IdList        /* O: list of the dimension's index */
)
/*
DESCRIPTION:
Outputs a list of dimensions' id that belong to the specified part.
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqDims
(
vxLongName File,    /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,    /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,         /* O: number of variables */
svxVariable **Variables    /* O: list of variables */
)
/*
DESCRIPTION:
Outputs a list of dimensions that belong to the specified part. 
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEdgeCrv
(
int idEdge,    /* I: edge id */
int idParent,   /* I: optional face or loop id for retrieving UV geometry (else 0) */
svxCurve *Crv   /* O: edge's curve geometry */
)
/*
DESCRIPTION:
Outputs the NURBS curve geometry of the specified edge in the active part.

If "idParent <= 0", the 3D definition of the edge is output.

If "idParent > 0", the UV definition of the edge corresponding to the
specified face or loop is output.

The calling procedure is responsible for deallocating the memory
assigned by this function to the "Crv" structure using cvxCurveFree().

The direction of UV curves output by this function follow the direction
of their parent loops.  3D curves are not given a specific orientation.

Outer loops proceed counterclockwise relative to the natural normal of 
the parent surface.  Inner loops are clockwise.

It is assumed the specified edge (idEdge) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEdgeFaces
(
int idEdge,       /* I: edge id */
int *Count,         /* O: number of faces */
int **Faces         /* O: list of face id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the faces connected to an edge
in the active file.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEdgeLoop
(
int idFace,    /* I: face id */
int idEdge,    /* I: edge id */
int *idLoop    /* O: loop id */
)
/*
DESCRIPTION:
Get the id of the parent loop of the specified edge on the specified face.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEdgeOpen
(
int idEdge   /* I: edge id (in active file) */
)
/*
DESCRIPTION:
Check if the specified edge is an open edge.

RETURN:
0: the specified edge is not an open edge
1: the specified edge is an open edge
-1: the id is not an edge or function fails
*/
________________________________________________________________________________

int cvxPartInqEdgePreEdges
(
int idEdge,    /* I: edge id */
int *Count,    /* O: number of pre-edges associated with the specified edge */
int **PreEdges /* O: list of pre-edges associated with the specified edge */
)
/*
DESCRIPTION:
Gets a list of the pre-edges associated with the specified edge. 
Memory for the list is allocated by this function and must be freed by the calling procedure.

Returns 1 if error or no pre-edges found, else 0.
*/
________________________________________________________________________________

int cvxPartInqEdgeShape
(
int idEdge,      /* I: index of edge */
int *idShape     /* O: index of shape */
)
/*
DESCRIPTION:
Outputs the shape connected to an edge in the active file.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEntBox
(
int idEnt,       /* I: entity id (supported entity: shape,face,component) */
svxMatrix *Mat,  /* I: optional local frame (or NULL) */
svxBndBox *Box   /* O: shape bounding box */
)
/*
DESCRIPTION:
Gets the bounding box of the specified entity in the active part. 
currently, only shape, face and component are support. If "*Mat = NULL", 
initializes "Mat" to the identity matrix. a bounding box relative
to the specified local coordinate frame is output. 

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEntByLabel
(
int *Label,      /* I: persistent label as null-terminated array of integers */
int Exact,      /* I: 1 for exact match; 0 if partial match is okay */
int *idEntity  /* O: entity id  (0 is output if no entity is found) */
)
/*
DESCRIPTION:
Searches the active part for an entity with the specified label.

Returns 1 if function fails or entity is not found; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEntFtr
(
int idEntity,       /* I: entity id */
int *idFeature      /* O: parent feature id (0 if undefined) */   
)
/*
DESCRIPTION:
Outputs the id of the parent feature of the specified entity
in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEntLabel
(
int idEntity,    /* I: entity id */
int **Label      /* O: persistent label as null-terminated array of integers */
)
/*
DESCRIPTION:
Outputs the persistent label of the specified entity in the active part.

The label is a null-terminated list of integers.

The calling procedure is responsible for deallocating the memory 
out via "Label".

Example:  

int *Label=NULL;
int idEntity = 99;

cvxPartInqEntLabel(idEntity, &Label);
cvxMemFree((void**)&Label);

See also cvxLabelSame() and cvxPartInqEntByLabel().

Returns 1 if function fails or entity does not have a label; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEntShape
(
int idEntity,       /* I: entity id (in active file) */
int *idShape      /* O: shape id (0 if undefined) */   
)
/*
DESCRIPTION:
Outputs the id of the shape that the specified face 
or edge (idEntity) belongs to.  It is assumed the
entity resides in the active object.  If "idShape = 0" 
is output, the entity could not be located or didn't 
belong to a faceset.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqEqnAllId
(
int* cntList,     /* O: number of idList */
int** idList,     /* O: list of equation id */
int* cntSets,     /* O: number of idSets */
int** idSets      /* O: list of equation set id */
)
/*
DESCRIPTION:
Output all equations and equation sets.
If no equation,*cntList=0 and *idList=NULL.
If no equation set,*cntSets=0 and *idSets=NULL.

The calling procedure MUST deallocate the output list with cvxMemFree.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqEqnAssociatedSet
(
int idEqn,         /* I: equation id */
int* idSet         /* O: equation set id */
)
/*
DESCRIPTION:
Get equation set containing specified equation.
If cannot find, *idSet = -1.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqEqnSetMembers
(
int idSet,        /* I: equation set id */
int* count,       /* O: number of idList */
int** idList      /* O: list of equation id */
)
/*
DESCRIPTION:
Output all the equations of equation set.
In specified equation set,if no equation, *count=0 and *idList=NULL.

The memory referenced by "idList" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)idList)).

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqFaceAt
(
int idFace,       /* I: face or shape id */
svxFaceAt *At      /* O: face/shape display attributes */
)
/*
DESCRIPTION:
Outputs display attributes of the specified face or shape. Attributes for a shape
are grabbed from the first face in the shape.

It is assumed the specified face or shape (idFace) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceBox
(
int idFace,         /* I: face id */
svxBndBox *Box      /* O: face bounding box */
)
/*
DESCRIPTION:
Gets the bounding box of the specified face in the active file.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceCrvs
(
int idFace,             /* I: face id */
int *Count,               /* O: number of trim curves */
svxCurve **TrimCurves   /* O: list of trim curves */
)
/*
DESCRIPTION:
Outputs a list of the trim curves that bound a face in the active part.
The calling application must sort these curves into inner and outer loops
as desired.  To get the them in sorted order, you must traverse the face
and its loops using cvxPartInqFaceLoops(), cvxPartInqLoopEdges() and
cvxPartInqEdgeCrv().

The calling procedure MUST deallocate the internal data in each
element of the output list by calling cvxCurveFree, after which the
output list MUST be deallocated using cvxMemFree((void**)TrimCurves).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceEdges
(
int idFace,       /* I: face id */
int *Count,         /* O: number of edges */
int **Edges         /* O: list of edge id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the edges that bound a face
in the active file.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceFacets
(
int idFace,          /* I: face id */
int *Count,            /* O: number of triangular facets */
svxTriangle **Facets   /* O: list of triangular facets */
)
/*
DESCRIPTION:
Outputs a list of the triangular facets used to display
the specified face.

Memory for "Facets" is allocated by this function. It
MUST be deallocated by the calling procedure with cvxMemFree.

It is assumed the specified face (idFace) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceFacets2
(
int idFace,          /* I: face id */
svxFacets *Facets      /* O: facet data set */
)
/*
DESCRIPTION:
Outputs the facets used to display the specified face along with
display, texture or shader attributes that may be defined for the
face.

This function allocates memory for lists inside the 
input "Facets" structure. The calling procedure is
responsible to free the lists using cvxFacetsFree(Facets).

It is assumed the specified face (idFace) resides in the active part.

This function returns 1 if it fails, 0 if it succeeds.

The following is sample code for retrieving and traversing a face's
facet data:

   void TestApi(void)
________________________________________________________________________________

int cvxPartInqFaceFillet
(
int idFace,         /* I: face id */
int *isFilletFace   /* O: fillet flag (1 is fillet face, else is 0) */
)
/*
DESCRIPTION:
Get the flag indicating if the specified face is a fillet face.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqFaceLoops
(
int idFace,       /* I: face id */
int Inner,         /* I: 1 to include inner loops; 0 for just the outer loops */
int *Count,         /* O: number of loops */
int **Loops         /* O: list of loop id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the loops (outer and inner) that belong 
to a face in the active file.

Outer loops proceed counterclockwise relative to the natural normal 
of the parent surface.  Inner loops are clockwise.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceSh
(
int idFace,       /* I: face id */
svxShaderAt *Sh      /* O: face shader attributes */
)
/*
DESCRIPTION:
Outputs shader attributes of the specified face.
"Sh->name[0]" is set to "0" (i.e. empty string) 
if no shader is defined for the face.

Checkerboard Shader:
   Sh->name = "Checker"
   Sh->color[0] = first checkerboard square color
   Sh->color[1] = second checkerboard square color
   Sh->param[0] = scale factor for checkerboard squares

Chrome Shader:
   Sh->name = "Chrome"
   Sh->image = optional image file reflected on chrome finish
   Sh->param[0] = reflectance (0.0 - 1.0)

Granite Shader:
   Sh->name = "Granite"
   Sh->param[0] = scale factor (0.0 - 2.0)
   Sh->param[1] = noise (0.0 - 10.0)

Marble Shader:
   Sh->name = "Marble"
   Sh->color[0] = marble base color
   Sh->color[1] = marble vein color
   Sh->param[0] = scale factor (0.0 - 200.0) 

Wood Shader:
   Sh->name = "Wood"
   Sh->color[0] = light wood color
   Sh->color[1] = dark wood color
   Sh->param[0] = frequency of wood rings (0.0 - 10.0)
   Sh->param[1] = overall noisiness of wood grain (0.0 - 6.0)
   Sh->param[2] = noise in X direction (0.0 - 1.0)
   Sh->param[3] = noise in Y direction (0.0 - 1.0)
   Sh->param[4] = noise in Z direction (0.0 - 1.0)
   Sh->param[5] = scale factor (0.0 - 4.0)

It is assumed the specified face (idFace) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceShape
(
int idFace,         /* I: face id */
int *idShape      /* O: id out face's parent shape */
)
/*
DESCRIPTION:
Gets the id of the specified face's parent shape (within the active file).
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceSrf
(
int idFace,       /* I: face id */
svxSurface *Srf   /* O: face's untrimmed NURBS surface geometry */
)
/*
DESCRIPTION:
Outputs the untrimmed NURBS surface geometry of the specified face.
The calling procedure is responsible for deallocating the memory
assigned by this function to the "Srf" structure using cvxSurfaceFree().

It is assumed the specified face (idFace) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceSrfPrim
(
int idFace,              /* I: face id */
svxSrfPrim *SrfPrim      /* O: face's untrimmed NURBS surface geometry */
)
/*
DESCRIPTION:
Gets surface geometry for the specified face entity. It is assumed the specified
face (idFace) resides in the active part.

The calling procedure is responsible for deallocating the memory assigned by this 
function to the "SrfPrim" structure using cvxSurfaceFree(&SrfPrim->srfData.srf) when 
SrfPrim->srfType = VX_SF_PRIM_NURB.

Returns 1 when the function fails;
Returns 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFaceTx
(
int idFace,       /* I: face id */
svxTextureAt *Tx      /* O: face texture attributes */
)
/*
DESCRIPTION:
Outputs texture attributes of the specified face.

If a texture image file is embedded in a Z3 file, it is automatically
extracted to a "temp" sub-folder in the Z3 runtime folder.  The path
the temp file is output via "Tx->file".

It is assumed the specified face (idFace) resides in the active part.

Returns 1 if function fails; 0 if it succeeds.

See also the cvxPartInqFaceTxFile function.
*/
________________________________________________________________________________

int cvxPartInqFaceTxFile
(
int idFace,      /* I: face id */
vxPath Path      /* O: path to texture map's original image file */
)
/*
DESCRIPTION:
Outputs path to the original image file if a texture map has been
applied to a face.  Unlike cvxPartInqFaceTx(), which may output the
path to a copy of the original image file that ZW3D has put in its
temp directory, this function outputs the path that was originally
used to create the texture map.  The file might no longer exist,
although the image may still exist as an embedded object.

It is assumed the specified face (idFace) resides in the active part.

ZW3D's native texture map command (!CdTMap) does not save the path to
the original image file when a texture map is applied to a face with
the embed option selected.  For faces that have been assigned a
texture map using the texture map command rather than the
cvxPartSetFaceTx() function, this function outputs the path that the
texture map command saves with the face, which will be the path to a
copy of the image file in ZW3D's temp directory.

Returns 1 if function fails; 0 if it succeeds.

See cvxPartInqFaceTx for a function that outputs all texture map
attributes.
*/
________________________________________________________________________________

int cvxPartInqFacets
(
int idBlock,         /* I: STL id */
svxSTL *Stl          /* O: STL facets */
)
/*
DESCRIPTION:
Outputs a list of triangular facets of the specified STL.

Memory for the STL facets is allocated by this function and
assigned to the input data structure (Stl).  It MUST be 
deallocated by the calling procedure using cvxStlFree().

Returns 1 if function fails, 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFacets2
(
int idBlock,          /* I: 3D block id */
svxFacets *Facets      /* O: facet data set */
)
/*
DESCRIPTION:
Outputs the facets stored in the specified 3D block.

This function allocates memory for lists inside the 
input "Facets" structure. The calling procedure is
responsible to free the lists using cvxFacetsFree(Facets).

It is assumed the specified 3D block (idBlock) resides 
in the active part.

See the description of cvxPartInqFaceFacets2() for
additional information.

This function returns 1 if it fails, 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFacetsTxFile
(
int idBlock,   /* I: 3D block id */
vxPath Path      /* O: path to texture map's original image file */
)
/*
DESCRIPTION:
Outputs path to the original image file if a texture map has been
applied to a facet block.  Unlike cvxPartInqFacets2(), which outputs
the path to a copy of the original image file that ZW3D has put in its
temp directory, this function outputs the path that was originally
used to create the texture map.  The file might no longer exist,
although the image may still exist as an embedded object.

It is assumed the specified block (idBlock) resides in the active
part.

Returns 1 if function fails; 0 if it succeeds.

See cvxPartInqFacets2 for a function that outputs all texture map
attributes.
*/
________________________________________________________________________________

int cvxPartInqFlattens
(
int* count,                 /* O: count of idFlattens(flattenNames). */
int** idFlattens,           /* O: list of flatten id */
vxLongName** flattenNames   /* O: list of flatten name */
)
/*
DESCRIPTION:
Gets a list of sheet metal flatten id and flatten name in the active part.
At least one of idFlattens and flattenNames must exist.

The memory referenced by "idFlattens" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)idFlattens)).
The memory referenced by "FlattenNames" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)FlattenNames)).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFlexAsmMat
(
svxEntPath AsmPath,     /* I: pick-path of assembly */
svxMatrix* AsmMat       /* O: transformation matrix of assembly */
)
/*
DESCRIPTION:
Output specified transformation matrix by pick-path.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrAssoPart
(
int idFeature,           /* I: index of external feature in active part */
vxLongName fileName,     /* O: associated external file name (NULL to ignore) */
vxLongName rootName      /* O: associated external root name (NULL to ignore) */
)
/*
DESCRIPTION:
Get information about the source file associated with the specified
external reference feature, including file name, root name.

Return value:
1 if function fails;
0 if function succeeds;
-1 if feature is not an external reference feature.
*/
________________________________________________________________________________

int cvxPartInqFtrChildFtrs
(
int idFeature,      /* I: index of feature in active part */
int *cnt,           /* O: no. of children */
int **list          /* O: list of indices of feature's children */
)
/*
DESCRIPTION:
Get the child features of specified feature.

The feature list (list) is allocated by this function and must be
deallocated by the calling procedure.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqFtrData
(
int idFeature,         /* I: feature id */   
int iNoEval,         /* I: 1 to get unevaluated data; else 0 */
int *idData            /* O: id of feature data container */
)
/*
DESCRIPTION:
Outputs the id of a copy of the specified feature's data container.
The calling procedure MUST deallocate "idData" using cvxDataFree()
after it is done querying "idData" with the cvxDataXXX() functions.

The data associated with a feature is stored in a "persistent" format.
Entity references in the data are stored in a format that uses entity
labels that were current at the time the feature operation was executed.
Before the data can be queried for current entity id's, it must be
re-evaluated.  This can fail if it references entities that no longer
exist.  Point selections that reference entities (e.g. entity endpoint)
can also fail to re-evaluate if the referenced entities no longer exist.

Re-evaluation of the feature data is done without rolling the history 
back to the specified feature.  For this reason, the success or failure 
of this function is very sensitive to whether the current state of the 
model contains all of the geometry that existed at the time that the 
feature was originally executed.

If you know that the feature data will not re-evaluate based on the
current state of the model, you can get the last evaluated state of
point and numeric inputs by calling this function with "iNoEval=1".
In this case, you will not be able to successfully query any entity
data fields in "idData".

Returns value:
1 if function fails;
0 if it succeeds;
-1 if feature data is undefined.
*/
________________________________________________________________________________

int cvxPartInqFtrEnts
(
int idFeature,             /* I: feature id */
evxEntType EntType,        /* I: entity type id */
int *Count,                /* O: number of entities */
int **Ents                 /* O: list of the entity IDs */
)
/*
DESCRIPTION:
Outputs a list of indices of the entity IDs that belong to
the specified feature in the active file.  

The calling procedure MUST deallocate the output list with cvxMemFree.

Right now, this function only support to get shape, face, curve, point, dimension form the feature.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrGroup
(
int idFeature,     /* I: feature id */
int *idGroup       /* O: feature group id */
)
/*
DESCRIPTION:
Output the index of the feature group where the specified
feature is located.  Output -1 if the specified feature is not
in any feature group.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrList
(
int *Count,      /* O: number of features in the active part */
int **Features   /* O: list of id's of features (i.e. operations) in the active part history */
)
/*
DESCRIPTION:
Outputs a list of database id's of features (i.e. operations) in the active part's history 
in the order they are listed there (including hidden operations). If there are no features, 
"*Count" is output as zero and "*Features" as NULL.

This function allocates memory for the array output via "Features". The calling 
procedure is responsible for deallocating the memory.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrParentFtrs
(
int idFeature,     /* I: index of feature in active part */
int getAll,        /* I: 1 to get all parent features (parents and grandparents)
                         0 to get just the immediate parent features */
int *cnt,          /* O: no. of parent features */
int **list         /* O: list of indices of parent features */
)
/*
DESCRIPTION:
Get a list of parent features upon with the specified feature is dependent.

The feature list (list) is allocated by this function and must be
deallocated by the calling procedure.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqFtrRegenStat
(
int idFeature,              /* I: feature index */
char *stat                  /* O: feature regen status as below:
                                  0, regen the feature without suppression
                                  1, feature is manually suppressed 
                                  2, feature is automatically suppressed due to the failure of regen
                                  4, feature have suppress condition */
)
/*
DESCRIPTION:
Outputs the regen state of a feature.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrTemplate
(
int idFeature,         /* I: feature id */   
vxName Template      /* O: feature command template name */
)
/*
DESCRIPTION:
Outputs the name of the command template that defines the input
parameters of the specified feature.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrTol
(
int idFeature,       /* I: feature id */
double *Tolerance    /* O: feature tolerance */
)
/*
DESCRIPTION:
Outputs tolerance used by the specified feature.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqFtrVersion
(
int idFeature,         /* I: feature id */   
int *Version         /* O: feature version number */
)
/*
DESCRIPTION:
Outputs the product version number associated with the specified 
feature.  If "idFeature < 1", outputs the version number of the 
"active" feature (i.e. the feature currently regenerating).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqGroupFtrs
(
int idGroup,         /* I: feature group id */
int* count,          /* O: number of elements in the Feature list */
int** ftrList        /* O: list of feature id */
)
/*
DESCRIPTION:
Output all feature_id within the specified feature group.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqGroupList
(
int* count,      /* O: number of features in the active part */
int** groups     /* O: list of id's of groups in the active part history */
)
/*
DESCRIPTION:
Outputs a list of database id's of feature groups in the active part's history
in the order they are listed there. If there are no groups,
"*count" is output as zero and "*groups" as NULL.

This function allocates memory for the array output via "groups". The calling
procedure is responsible for deallocating the memory.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqHoles
(
vxLongName File,     /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,     /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,          /* O: number of holes */
svxHoleData **Holes  /* O: list of holes */
)
/*
DESCRIPTION:
Outputs a list of holes that belong to the specified part.
The calling procedure MUST deallocate the output list using
cvxPartFreeHoles(Count, Holes);

The "idInsFace" and "idUntilFace" fields of the "svxHoleData"
structure are not currently supported.  They are always output
as zero.  "ThreadType" is always output as VX_THREAD_CUSTOM.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqLoopEdges
(
int idLoop,       /* I: loop id */
int *Count,         /* O: number of edges */
int **Edges         /* O: list of edge id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the edges that belong to a loop
on a face in the active file. Edges are output in the order
they occur in the loop.

The calling procedure MUST deallocate the output list with cvxMemFree.

Outer loops proceed counterclockwise relative to the natural
normal of the parent surface.  Inner loops are clockwise 
relative to the natural surface normal.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqLoopFace
(
int idLoop,    /* I: loop id */
int *idFace    /* O: id of loop's parent face */
)
/*
DESCRIPTION:
Outputs the id of the parent face of the specified loop within the active file.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqLoopInner
(
int idLoop,      /* I: loop id */
int *isInner     /* O: inner loop flag (1=inner, 0=outer) */
)
/*
DESCRIPTION:
Determine whether a given loop is an outer or inner loop.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqLoopPreEdges
(
int idLoop,       /* I: loop id */
int *Count,         /* O: number of PreEdges */
int **PreEdges      /* O: list of PreEdge id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the PreEdges that belong to a loop
on a face in the active file. PreEdges are output in the order
they occur in the loop.

The calling procedure MUST deallocate the output list with cvxMemFree.

Outer loops proceed counterclockwise relative to the natural
normal of the parent surface.  Inner loops are clockwise 
relative to the natural surface normal.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqPMIDimEnts
(
int idDim,            /* I: id of PMI dimension */
int *Count,           /* O: number of entities associated with the dimension */
svxEntPath **EntPaths /* O: pick path of entities associated with the dimension */
)
/*
DESCRIPTION:
Outputs the pick path list of entities associated with the specified 
PMI dimension.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqPoints
(
int *count,       /* O: number of points */
int **pointIdx    /* O: list of points' indices */
)
/*
DESCRIPTION:
Outputs a list of indices of point objects that belong to
the active part.  The calling procedure MUST deallocate the
output list with cvxMemFree.

Returns value:
1: function fails;
0: it succeeds.
*/
________________________________________________________________________________

int cvxPartInqPreEdgeInfo
(
int idPreEdge,         /* I: id of PreEdge within a loop on a face in the active part */
svxPreEdge *PreEdge  /* O: information about the PreEdge */
)
/*
DESCRIPTION:
Outputs information about the specified PreEdge (idPreEdge) to the structure
referenced by the input pointer (PreEdge).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqPreEdgeStartPnt
(
int idPreEdge,         /* I: id of PreEdge within a loop on a face */
int *idEdge,         /* O: id of PreEdge's parent edge */
svxPoint2 *StartPnt   /* O: coordinates of PreEdge start point */
)
/*
DESCRIPTION:
Gets the coordinates of the specified PreEdge's start point
relative to its parent loop direction.  Also, outputs the id 
of the PreEdge's parent edge.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeBox
(
int idShape,      /* I: shape or face id */
svxMatrix *Mat,   /* I: optional local frame (or NULL) */
svxBndBox *Box    /* O: shape bounding box */
)
/*
DESCRIPTION:
Gets the bounding box of the specified shape in the active file.
If "*Mat = NULL" && the target object class isn't VX_ROOT_PART(evxRootType),
the bounding box coordinates are given relative to the global frame of the parent part.

If the target object class is VX_ROOT_PART && "*Mat = NULL", initializes "Mat" to 
the identity matrix. The "idShape" must belong to the active part, a bounding box 
relative to the specified local coordinate frame is output. 

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeComp
(
int idShape,    /* I: shape id (in active file) */
int *idComp      /* O: shape's parent component (0 if undefined) */
)
/*
DESCRIPTION:
Outputs the id of the component from which the specified shape
was merged.  Outputs "idComp = 0" if the shape was not merged
from a component.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeEdges
(
int idShape,       /* I: shape id */
int *Count,         /* O: number of edges */
int **Edges         /* O: list of edge id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the edges that belong to
the specified shape in the active file.  

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeFaces
(
int idShape,       /* I: shape id */
int *Count,         /* O: number of faces */
int **Faces         /* O: list of face id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the faces that belong to
the specified shape in the active file.  

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeFtrs
(
int idShape,       /* I: shape id */
int Option,       /* I: 0-get all dependencies; 1-get just shape generating features */
int *Count,         /* O: number of features */
int **Features      /* O: list of feature id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the features associated with the 
specified shape in the active part. By default (Option = 0), 
this includes features that generate the shape, features on 
which the generative features are dependent for their definition 
and features that modify attributes of the shape.  If "Option=1",
only features that generate shape geometry are output, insofar as 
that classification can be made.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeMass
(
int idShape,            /* I: id of shape in active part */
double Density,         /* I: density (kg/mm^3) */
svxMassProp *Prop         /* O: mass properties for specified shape */
)
/*
DESCRIPTION:
Calculates mass properties for the specified shape in the active part.
If Density = 0, the shape's default density is used.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShapeOpen
(
int idShape,       /* I: shape id (in active file) */
int *isOpen        /* O: open flag for shape (1=open, 0=closed) */
)
/*
DESCRIPTION:
Get the flag indicating if shape is open.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqShapes
(
vxLongName File,   /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,   /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,         /* O: number of shapes */
int **Shapes      /* O: list of shape id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the shapes that belong to
the specified part.  The calling procedure MUST deallocate 
the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqShtMetalThick
(
int idShape,     /* I: index of shape */
double *thick    /* O: thick */
)
/*
DESCRIPTION:
Get thickness of the specified sheet metal.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartInqSmdPairFaces
(
int idFace,    /* I: index of face */
int *count,    /* O: number of opposite faces */
int **faces    /* O: list of opposite face id's */
)
/*
DESCRIPTION:
Outputs a list of indices of the face opposite to the input face in a sheet metal solid.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqSmdSrfType
(
int idFace,              /* I: face id */
evxSmdSurfaceType* type  /* O: sheet metal surface type */
)
/*
DESCRIPTION:
Get surface type of sheet metal.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqSmdStatFace
(
int idShape,   /* I: id of sheet metal solid */
int* idFace    /* O: id of stationary face */
)
/*
DESCRIPTION:
Get the stationary face of the shape specified by idFace.

Returns 1 if error happens, else return 0.
*/
________________________________________________________________________________

int cvxPartInqSmdStatFcs
(
int idShape,           /* I: shape id */
int* countStat,        /* O: count of "statFcs" (NULL to ignore) */
int** statFcs,         /* O: see description(NULL to ignore) */
int* countPair,        /* O: count of "pairStatFcs" (NULL to ignore) */
int** pairStatFcs      /* O: see description(NULL to ignore) */
)
/*
DESCRIPTION:
Get the faces on the same side as the stationary face(statFaces).
Get the faces opposite the stationary face(pairStatFaces).

NOTES:
Sheet metal must have a stationary face to call this interface.

The memory referenced by "statFcs" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)statFcs)).
The memory referenced by "pairStatFcs" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)pairStatFcs)).

Returns 1 if function fails; 0 if it succeeds; -1 if not found stationary face.
*/
________________________________________________________________________________

int cvxPartInqTagNames
(
int *Count,             /* O: number of tag names */
vxLongName** Names      /* O: list of tag names */
)
/*
DESCRIPTION:
Outputs a list of tag names that belong to the current active part. 
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqTempData
(
int idPart,  /* I: part id (-1 to use the active part)*/
int* count,  /* O: count of datas */
int** datas  /* O: temp datas */
)
/*
DESCRIPTION:
Get the temp data of the specified part or active part.
Such as the curves' id of the Section View. 

The memory referenced by "datas" is allocated by this function.
The calling procedure is responsible to free it (cvxMemFree((void**)datas)).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqVars
(
vxLongName File,      /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,      /* I: part name (Part[0]=0 or NULL for active part) */
int *Count,         /* O: number of variables */
svxVariable **Variables      /* O: list of variables */
)
/*
DESCRIPTION:
Outputs a list of variables that belong to the specified part. 
The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqVertexEdges
(
int idEdge,     /* I: the index of edge */
int EndPnt,     /* I: 0 to use the starting vertex of the edge,
                      1 to use the end vertex of the edge */
int *Count,     /* O: the count of edges */
int **Edges     /* O: the list of edges */
)
/*
DESCRIPTION:
Gets all associated edges of the specified vertex of edge in the active file.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqView
(
int idView,       /* I: database id of view saved in the active part */
svxView *View      /* O: view information */
)
/*
DESCRIPTION:
Outputs the parameters of the specified view saved in the active part.

This function returns 1 if it fails, 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartInqViews
(
int *Count,    /* O: number of 3D views saved in the active part */
int **Views    /* O: list of id's of 3D views saved in the active part */
)
/*
DESCRIPTION:
Outputs all view ids under the view manager for the current part,including 
standard views,custom views, and sectional views.

This function allocates memory for the array output via "Views". The calling 
procedure is responsible for deallocating the memory.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartIns
(
svxPartInstData *Part,   /* I: component data */
int *Count,              /* O: number of shapes (NULL to ignore) */
int **ShapeList          /* O: list of shape id's (NULL to ignore) */
)
________________________________________________________________________________

int cvxPartInterXCurve
(
const svxInterCrvData* pFaces,      /* I: faces to intersect */
int* idFtr                          /* O: id of new curves list (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a curve or curves at the intersection of two or more faces, 
open shapes, or solids.


Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartIsectShpChk
(
int idBaseShape,     /* I: the need check intersection shape 1 */
int idOpShape        /* I: the need check intersection shape 2 */
)
/*
DESCRIPTION:
Determine exist or not exist intersection between the input two shapes.

Returns 1 if found shape isect; 0 if it no shape isect or error occurs.
*/
________________________________________________________________________________

int cvxPartIsectShpChk2
(
int idBaseShape,     /* I: the need check intersection shape 1 */
int idOpShape,       /* I: the need check intersection shape 2 */
int fClosedChk       /* I: option to control whether check the open shell
                        1 is excluding the open shell. otherwise is 0 */
)
/*
DESCRIPTION:
Determine exist or not exist intersection between the input two shapes.
If should check the two shapes are closed, it will return 0 if any shape
of them is not closed.

Returns 1 if found shape isect; 0 if it no shape isect or error occurs.
*/
________________________________________________________________________________

int cvxPartLine2pt
(
svxPoint *Start,   /* I: start point */
svxPoint *End,      /* I: end point */
int *idEnt         /* O: id of new 3D line entity */
)
/*
DESCRIPTION:
Adds a 3D line to the active part.   If "idEnt" is not 
NULL, the id of the new line entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartLip
(
svxLipData *Lip,  /* I: lip input data */
int *idLip        /* O: id of lip feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a constant lip feature along selected edges 
based on two offset distances. The required inputs include the face edges 
to feature and the 1st and 2nd offsets.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartLoft
(
svxLoftData *Loft,   /* I: loft input data */
int *idShape         /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a loft feature.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMassProp(void)
/*
DESCRIPTION:
Appends an operation to the history of the active part to
calculate mass properties for the part, assigning the results
to the variables named Part_Area, Part_Volume and Part_Mass.

Returns 1 if error, else  0.
*/
________________________________________________________________________________

int cvxPartMirrorFtr
(
svxMirrorFtr *Mirror, /* I: mirror feature input data */
int *idFtr            /* O: id of mirror feature (NULL to ignore) */
)
/*
Use this function to mirror features.

Returns 1 if the function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMirrorGeom
(
svxMirrorGeom *Mirror,/* I: mirror geomtry input data */
int *NumNewEnts,      /* O: number of new entities (NULL to ignore) */
int **idNewEnts       /* O: list of id's of new entities (NULL to ignore) */
)
/*
Use this function to mirror any combination of shapes, components, curves, points, 
sketches and datum planes.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if the function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMkEntExternal
(
int idEnt,    /* I: index of the profile/datum to make internal/external */
int external  /*  I: 1-make external, else 0 */
)
/*
DESCRIPTION:
Make the specified profile/datum internal/external.
Note: The profile/datum must be used by only one feature.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartMove
(
const svxMoveData *Move,/* I: Move data */
int *idMove             /* O: Move feature id (NULL to ignore)*/
)
/*
DESCRIPTION:
Adds the specified Move(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idMove" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMovePntToPnt
(
int idEntity,       /* I: id of geometry entity to move */
svxAxis *Start,    /* I: start point and direction */
svxAxis *End      /* I: end point and direction */
)
/*
DESCRIPTION:
Moves the specified geometry within the active part from one point 
"Start->Pnt" to another "End->Pnt".  It also changes the orientation
of the part based on "Start->Dir" and "End->Dir".   If the directions 
are same, the orientation of the geometry is not changed -- it is simply 
translated.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMoveTransform
(
int idEntity,           /* I: id of geometry entity to move */
const svxMatrix *Mat    /* I: transformation matrix */
)
/*
Applies the specified general transformation to a geometry entity,
moving the entity within the active part.

If "Mat" includes scaling, the scale factors are ignored.

Returns 1 if the function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartMoveTransformList
(
int Count,              /* I: number of entities to transform */
const int *Entities,    /* I: list of geometry entity ids */
const svxMatrix *Mat    /* I: transformation matrix */
)
/*
Applies the specified general transformation to a list of geometry
entities, moving the entities within the active part.

"Entities" may be NULL only if "Count" is 0.

If "Mat" includes scaling, the scale factors are ignored.

Returns 1 if the function fails; 0 if it succeeds.  It is not an error
if "Count" is 0.
*/
________________________________________________________________________________

int cvxPartNSided
(
const svxNSidedData * NSidedData,     /* I: input boundary */
int *idShape                          /* O: id of new shape */
)
/*
DESCRIPTION:
This API is to do the N-sided function for entities.
The id of entity newly created is output by idShape.
Return 0 if successful.
*/
________________________________________________________________________________

int cvxPartNameLastOp
(
vxName NewName      /* I: new name for last history operation */
)
/*
DESCRIPTION:
If history regen is not active, the input name is assigned to
the last operation in the active part's history.  The name is
forced to be unique within the active history by appending an
id to it if necessary.  The seed name should be short enough
that a 4 character id can be appended to it without making the
name longer than 31 single-byte characters.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartNewDatum
(
svxMatrix *Frame,   /* I: transformation matrix */
int *idDatum      /* O: id of new datum */
)
/*
DESCRIPTION:
This function add a new datum plane to the active part according to the Frame.
It is different to cvxPartDatum(). If "idDatum" is not NULL, the id of the new datum is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

void cvxPartPartialResults
(
int Disable    /* I: 1 to disable partial results, 0 to re-enable it */
)
/*
DESCRIPTION:
Passing 1 to this function disables the prompt for partial fillet results and 
causes a failed fillet to exit rather than attempt to generate partial results.

Passing 0 to this function re-enables the prompt for partial fillet results.

This function MUST be called in pairs, first with "iDisable=1", then with
"iDisable=0".  Otherwise partial results could become permanently disabled
during the active session.
*/
________________________________________________________________________________

int cvxPartPatternFtr
(
int Count,               /* I: number of entities for pattern */
int *idFtrs,             /* I: list of id's of features */
const svxPtnFtr *Pattern,/* I: pattern input data */
int *idPattern           /* O: id of pattern feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to pattern any combination of features. eight different methods 
of patterning are available, each method requires different types of input.  

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPatternGeom
(
int Count,                 /* I: number of entities for pattern */
int *idEnts,               /* I: list of id's of entities (supported entities include: 
                               shape,face,curve,point,sketch,datum plane,datum axis,datum CSYS) */
const svxPtnGeom *Pattern, /* I: pattern input data */

int *idPattern             /* O: id of pattern feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to pattern any combination of shapes, faces, curves, points,
text, sketches, datum planes and patterns of patterns. eight different methods
of patterning are available, each method requires different types of input.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPhyAttrCalc
(
vxLongName Name   /* I: part name */
)
/*
DESCRIPTION:
Calculate physical attributes of the specified part.
If Name = "" or NULL, it will calculate current active 
part's physical attributes. 

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPlaneAdd
(
const svxNewPlaneData* plane,     /* I: new plane data */
int* idPlane                /* O: id of new plane (pass in NULL to ignore) */
)
/*
DESCRIPTION:
This function add a new datum Plane to the active part according to the svxNewPlaneData.
If "idPlane" is not NULL, the id of the new datum Plane is output.

This function is similar to cvxPartPlaneNew.
This interface uses a different command template than cvxPartPlaneNew.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartPlaneNew
(
svxPlaneData *Plane,       /* I: Plane data */
int *idPlane              /* O: id of new Plane (NULL to ignore) */
)
/*
DESCRIPTION:
This function add a new datum Plane to the active part according to the svxPlaneData.
If "idPlane" is not NULL, the id of the new datum Plane is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPlnCrv
(
int idCrv,         /* I: id of curve entity */
svxPoint *Origin,   /* I: point at or near plane origin on curve */
svxPoint *Xaxis,   /* I: point lying on plane of new datum's X axis (or NULL) */
int *idPln         /* O: id of new datum plane (or NULL) */
)
/*
DESCRIPTION:
Adds a datum plane to the active part that is normal to the specified
curve "idCrv", with its origin located at the point on "idCrv" that 
lies closest to the input "Origin" point.

If the reference point "Xaxis" is specified (i.e. not NULL), the new 
datum plane is oriented so that its X axis lies in the plane that
contains "Xaxis" and the new datum's Z axis.  That is, the point 
"Xaxis" specifies the XZ plane of the new datum.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPlnCrv2
(
int idCrv,         /* I: id of curve entity */
svxData *Origin,   /* I: point at or near plane origin on curve */
svxData *Xaxis,   /* I: point lying on plane of new datum's X axis (or NULL) */
int Flip,         /* I: 0-ignore this input; 1-flip plane 180 degrees about X axis;
                        2-flip plane about Y axis; 3-flip about Z axis */
int *idPln         /* O: id of new datum plane (or NULL) */
)
/*
DESCRIPTION:
Adds a datum plane to the active part that is normal to the specified
curve "idCrv", with its origin located at the point on "idCrv" that 
lies closest to the input "Origin" point.

If the reference point "Xaxis" is specified (i.e. not NULL), the new 
datum plane is oriented so that its X axis lies in the plane that
contains "Xaxis" and the new datum's Z axis.  That is, the point 
"Xaxis" specifies the XZ plane of the new datum.

If "Flip" is non-zero, flip the datum plane 180 degrees about the specified axis.

Besides the "Flip" argument, the difference between this function and cvxPartPlnCrv()
is that "Origin" and "Xaxis" can be defined more flexibly using the parameters available 
in "svxData".  The calling procedure is responsible for defining "svxData" correctly.

Note - Make sure you zero the entire "svxData" structure before initializing specific
parameters {svxData Origin; cvxMemZero(&Origin,sizeof(Origin);}.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPlnSrf
(
int idFace,         /* I: id of face entity */
svxPoint *Origin,   /* I: point at or near plane origin on face */
int *idPln         /* O: id of new datum plane (or NULL) */
)
/*
DESCRIPTION:
Adds a datum plane to the active part that is tangent to the surface
of the specified face "idFace", with its origin located at the point 
on "idFace" that lies closest to the input "Origin" point.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPlnSrf2
(
int idFace,         /* I: id of face entity */
svxPoint *Origin,   /* I: point at or near plane origin on face */
svxPoint *XZ,      /* I: point on XZ plane (NULL to ignore) */
int Flip,         /* I: flip plane about an axis (see DESCRIPTION) */
int *idPln         /* O: id of new datum plane (NULL to ignore) */
)
/*
DESCRIPTION:
Adds a datum plane to the active part that is tangent to the surface
of the specified face "idFace", with its origin located at the point 
on "idFace" that lies closest to the input "Origin" point and its 
Z axis pointing along the face's outward normal at "Origin".

If "XZ" is a non-NULL pointer to a 3D point, the point is used to
control the plane's orientation by rotating the plane about its
Z axis (face's outward normal) until its XZ plane intersects the
point.

If "Flip" is non-zero, the plane is flipped 180 degrees about
its X axis (Flip=1), Y axis (Flip=2) or Z axis (Flip=3).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPnt
(
svxPoint *Point,   /* I: point coordinates */
int *idEnt         /* O: id of new point entity */
)
/*
DESCRIPTION:
Adds a 3D point entity to the active part.   If "idEnt" is not 
NULL, the id of the new point entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPntBlock
(
vxLongName Name,     /* I: point block name */
int Count,            /* I: number of points */
svxPointf *Points,   /* I: list of points */
int *idEnt            /* O: id of new point block (input NULL to ignore this output) */
)
/*
DESCRIPTION:
Adds a 3D point block to the active part. If "idEnt" is not NULL, the id of the new block is output.

The active point attribute color is assigned to the new point block.

This function will only add point blocks to parts for which explicit (i.e. history free)
point cloud management is enabled (the default mode for parts created with version 18 or later).

Returns 1 if function fails; 0 if it succeeds; -1 if explicit mode is not enabled.
*/
________________________________________________________________________________

int cvxPartPnts
(
int Count,         /* I: number of points */
svxPoint *Points   /* I: list of points */
)
/*
DESCRIPTION:
Adds a list 3D point entities to the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartPntsOnCrv
(
int idCrv,     /* I: id of curve entity in active object */
svxPoint *Pnt, /* I: reference point that specifies which end of the curve to start from;
                     this input is only necessary if "Dist" is defined (i.e. non-zero);
                     if this argument is NULL, the geometric start point of the curve will
                     be used if needed. */
int Num,       /* I: the number of points to create along the curve; if "Dist" is zero,
                     then the specified number of points will be created along the curve 
                     with equal spacing between them; if "Dist" is "non-zero", then "Num"
                     points will be created along the curve with "Dist" as the spacing between 
                     each point; in this case, "Pnt" should be input and an extension option
                     should be defined in case the specified number of points at the
                     specified distance exceeds the length of the curve; if "Num" is input
                     as zero, then "Dist" must be specified; in this case, points are created
                     the specified distance apart, beginning at the end of the curve closest
                     to "Pnt" and ending at/before the other end of the curve. */
double Dist,   /* I: the distance (mm) between points (see description of "Num" argument) */
evxExtendOpt Opt, /* I: extension option is "Dist" is non-zero */
int *Count,       /* I: if this argument is not NULL, output the number of points created */
int **idEnts      /* I: if "Count" is not NULL, and this argument is not NULL, a list of 
                        the database id's of the point entities created by this function
                        is output. Memory for the list is allocated by this function.  The
                        calling procedure is responsible to free the memory. */
)
/*
DESCRIPTION:
Creates point entities spaced on and along a curve based on the specified input parameters.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartProjStl
(
int idStl,           /* I: STL id */
int idPln,           /* I: plane id */
double tol,          /* I: refit tolerance */
double smth,         /* I: refit smooth */
int *idCurve         /* O: id of STL boundary curve */
)
/*
DESCRIPTION:
Project the STL to a plane, to get its boundary curve.
Output new boundary curve via "idCurve".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartRectangle
(
svxRectangleData *rectData,  /* I: rectangle input data */
int *iCnt,                   /* O: number of output entities */
int **idEnt                  /* O: id of new 3D rectangle entities */
)
/*
DESCRIPTION:
Add a 3D rectangle to the active part.  The rectangle lies on
the specified plane with the specified center.
Commonly, the output number "iCnt" should be 4.
If "idEnt" is not NULL, the id of 4 lines of the rectangle is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartRedefineIsActive(void)
/*
DESCRIPTION:
Returns 1 if a part feature is currently being redefined.
Otherwise, returns 0.
*/
________________________________________________________________________________

int cvxPartRefGeom
(
svxEntPath *GeomPath,   /* I: pick-path of external geometry relative to top-level parent file */
int AssociativeCopy,      /* I: 0 for static copy;
                              1 for associative copy; 
                              2 for time-stamped associative copy;
                              3 for time-stamped associative copy - assembly position independent.
                        */
int *idGeom               /* O: id of new geometry (NULL to ignore) */
)
/*
DESCRIPTION:
Creates a copy of the specified external geometry (face, shape, curve or edge) in the active 
target part. The input pick-path must give the full traversal path to the external geometry 
relative to the top-level part of the parent assembly of the active target part. The id of 
the new geometry created in the active part is output via "idGeom".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartRegenFacets
(
int Count,        /* I: number of faces */
int *idFaces,     /* I: list of face id's in active part */
int Assembly,     /* I: 1 to regenerate facets for active assembly, else 0 */
int LOD,          /* I: 1 to generate level-of-detail, else 0 */
double Tol        /* I: chord-height tolerance for facet generation (0.0 for default) */
)
/*
DESCRIPTION:
Regenerates triangle facet data used to display the specified faces (Count and idFaces).

If no faces are specified (Count=0 and idFaces=NULL), all faces in the active part are
retessellated at the specified tolerance (Tol).  If "Assembly != 0", all faces in the
active assembly are retessellated.

If "Tol" is input as zero, a tolerance based on the active view extent is used.

If "LOD != 0", levels of detail are calculated for faces that are retessellated. That
means that facet data is generated at a tight tolerance, then organized into several
levels of detail from coarse to fine. Level-of-Detail generates more data for each
face, but the speed and quality of face display can be optimized based on the size
of a face relative to the active view extent.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartRegenIsActive(void)
/*
DESCRIPTION:
Returns 1 if a part feature is currently regenerating.
Otherwise, returns 0.
*/
________________________________________________________________________________

int cvxPartRevolve
(
svxRevolveData *Rev,   /* I: input data */
int *idShape         /* O: id of new shape */
)
/*
DESCRIPTION:
Creates a revolved shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Ext->Combine = V_BOOL_NONE", the id of the shape created 
by this function is output via "idShape".  If multiple shapes
could be created, use cvxEntNewList() to get their id's.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartRib
(
svxRibData *Rib,  /* I: rib input data */
int *idRib        /* O: id of rib feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a rib feature using an open profile sketch, 
curve, edge or curve list. The required inputs include the profile, 
rib thickness, draft angle, boundary faces and the draft plane. 
The boundary faces can limit or expand the extent of the rib feature.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartScale
(
int Count,        /* I: number of entities */
int *idEnts,      /* I: list of entity id's */
double X_scale,   /* I: X scale factor */
double Y_scale,   /* I: Y scale factor */
double Z_scale,   /* I: Z scale factor */
int idDatum       /* I: optional datum plane entity (input 0 to ignore) */
)
/*
DESCRIPTION:
Scales the specified entities in the active part by the 
input scale factors relative to the X, Y, Z axes and origin 
of the active part.  If "idDatum > 0", the entities(idEnts) 
are scaled relative to the origin and the X, Y, Z axes of 
the reference plane.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartScale2
(
int Count,        /* I: number of entities */
int *idEnts,      /* I: list of entity id's */
double X_scale,   /* I: X scale factor */
double Y_scale,   /* I: Y scale factor */
double Z_scale,   /* I: Z scale factor */
int idDatum,      /* I: optional datum plane entity (input 0 to ignore) */
svxPoint *CentPnt /* I: optional center point entity (input NULL to ignore) */
)
/*
DESCRIPTION:
Scales the specified entities in the active part by the 
input scale factors relative to the X, Y, Z axes and origin 
of the active part.  If "idDatum > 0", the entities(idEnts) 
are scaled relative to the origin and the X, Y, Z axes of 
the reference plane.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSetCustomStr
(
int idEnt,                /* I: part id */
const char *CustomString, /* I: custom string */
int *idStr                /* O: custom string id, NULL to ignore */
)
/*
DESCRIPTION
Set custom string attached to a entity.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSetFaceAt
(
int Count,           /* I: number of faces (or shapes) */
int *idFaces,        /* I: list of face or shape id's */
const svxFaceAt *At  /* I: face display attributes */
)
/*
DESCRIPTION:
Changes display attributes of the specified faces or shapes.
It is assumed the specified faces or shapes reside in the active part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSetFaceTx
(
int idFace,             /* I: face id */
const svxTextureAt *Tx  /* I: face texture attributes */
)
/*
DESCRIPTION:
Set texture attributes of the specified face.

It is assumed the specified face (idFace) resides in the active part.
The 'opt' field of svxTextureAt structure is not supported now.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSew
(
double Tol,       /* I: 3D proximity tolerance (mm) (0.0 for default) */
int *OpenEdges,   /* O: number of unmatched/open edges after sew (or NULL) */
double *MaxGap      /* O: maximum gap between all unmatched edges (or NULL) */
)
/*
DESCRIPTION:
Matches and sews free edges in the active part using the input proximity
tolerance.  If "Tol" is input as 0.0, the active part's default proximity 
tolerance is used.

Input NULL for "OpenEdges" and/or "MaxGap" if you are not interested in
the information returned via those variables.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSewForce
(
double Tol    /* I: 3D proximity tolerance (mm) (0.0 for default) */
)
/*
DESCRIPTION:
Matches and sews free edges in the active part using the input proximity
tolerance.  If "Tol" is input as 0.0, the active part's default proximity 
tolerance is used. Unlike cvxPartSew(), this function attempts to "force" 
open edges to sew to adjacent edges that are "close" but not within
tolerance.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartShapeFaceOffset
(
svxFaceOffData *Offset,  /* I: face offset input data */
int *idOffset            /* O: id of offset feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to offset one or more faces of a shape.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartShapeStructGet
(
int idShape,      /* I: entity id*/
svxWeldAttr *at   /* O: structural attributes */
)
/*
DESCRIPTION:
Outputs the structural attributes of specified shape.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartShell
(
const svxShellData *Shell, /* I: Shell data */
int *idShell               /* O: id of feature operation that created Shell (NULL to ignore) */
)
/*
DESCRIPTION:
Adds the specified shell(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idShell" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

void cvxPartShowAll(void)
/*
DESCRIPTION:
Set the scope of display traversal to include all objects, originating
with the root object.  This affects operations such as drawing and
picking in all views.
*/
________________________________________________________________________________

int cvxPartShowPreview
(
vxLongName fileName,  /* I: file name */
vxLongName rootName   /* I: root name */
)
/*
DESCRIPTION:
This interface opens a small window to preview the contents of a file.

NOTES:
The fileName cannot be equal to the active file name.
The rootName cannot be equal to the active root name.
If the small window is open, the small window is not refreshed.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

void cvxPartShowTarg(void)
/*
DESCRIPTION:
Limit the scope of display traversal to only the active target object.
This affects operations such as drawing and picking in all views.  For
example, when the root object is an assembly and the active target is
one of its components, this function prevents other components in the
assembly from being drawn.  If the root object is the active target,
this function and cvxPartShowAll() produce the same results.
*/
________________________________________________________________________________

int cvxPartSimplify
(
int numEnts,    /* I: number of face or feature to remove and gap edges to fill */
int *idEnts,    /* I: list of id's of face or feature to remove and gap edges to fill */
int *idSimplify /* O: id of simplify feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to simplify a part by removing specified faces. The function will
attempt to extend and reconnect faces to close the resulting gaps in the part. 

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSkIns
(
vxLongName File,   /* I: name of ZW3D file that contains the sketch as root object */
vxLongName Name,   /* I: name of sketch root object */
svxMatrix *Plane, /* I: sketch insertion plane */
int *idSketch      /* O: id of new sketch (NULL to ignore) */
)
/*
DESCRIPTION:
Inserts a copy of the specified sketch in the active part 
on the specified insertion plane.  It is assumed that "File"
resides in one of the default search directorie.  If "idSketch" 
is not NULL, the id of the new sketch is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSkIns2
(
vxLongName File,   /* I: name of ZW3D file that contains the sketch as root object */
vxLongName Name,   /* I: name of sketch root object */
int idPlane,      /* I: datum plane id */
int iAsso,        /* I: option of associate copy*/
int *idSketch      /* O: id of new sketch (NULL to ignore)*/
)
/*
DESCRIPTION:
Inserts a copy of the specified sketch in the active part 
on the specified datum plane. The sketch location will be
associatively linked to the datum plane -- if the datum
plane is moved (via history redefine/regen), the sketch 
will move with it.

It is assumed  that "File" resides in one of the default 
search directorie. If "idSketch" is not NULL, the id of 
the new sketch is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSkNew
(
svxMatrix *Plane,      /* I: sketch insertion plane */
int *idSketch            /* O: id of new sketch */
)
/*
DESCRIPTION:
Adds a new sketch to the active part, aligned with the
specified insertion plane.  The sketch is activated for
editing.  Exit the sketch edit mode (back to editing the
parent part) using cvxRootExit() or cvxSkActivate(0,0).
If "idSketch" is not NULL, the id of the new sketch is
output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSkPlane
(
svxSketchData *SkData,  /* I: sketch input data */
int *idSketch           /* O: id of new sketch (NULL to ignore) */
)
/*
DESCRIPTION:
Adds a new sketch to the active part, aligned with the
specified insertion plane.  The sketch is activated for
editing.  Exit the sketch edit mode (back to editing the
parent part) using cvxRootExit() or cvxSkActivate(0,0).
If "idSketch" is not NULL, the id of the new sketch is
output.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdAtGet
(
svxSmdAt* at   /* O: sheet metal attribute */
)
/*
DESCRIPTION:
Get the sheet metal attribute values.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdAtSet
(
const svxSmdAt* at   /* I: sheet metal attribute */
)
/*
DESCRIPTION:
Set the sheet metal attribute values.
If there is no sheet metal, it will create one.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdCloseCorner
(
const svxCloseCornerData* CornerData,  /* I: close corner data */
int *idSmdCorner                       /* O: index of close corner (NULL to ignore) */
)
/*
DESCRIPTION:
Adds the specified close corner feature to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idSmdCorner" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdDimple
(
svxDimpleData *Dimple, /* I: dimple input data */
int *idDimple          /* O: id of dimple feature (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a raised dimple feature in a sheet metal part. 
The dimple(s) can be placed on any flat face including flanges and will 
be extended in the direction of the face.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdExtrudeFlange
(
const svxExtrudeFlangeData* data,   /* I: smd extrude flange data */
int* idExtFlange                    /* O: id of smd extrude flange (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create sheet metal flange feature, can create flange feature.
Extrude a close or open profile to be a flange, it will offset the thick and add the bend.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartSmdExtrudeTab
(
const svxSmdExtrudeTabData* data,  /* I: Smd Extrude Tab data */
int* idExtTab                      /* O: id of tab (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create sheet metal flange feature, can create tab feature.
Extrude a close profile to be a base tab.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartSmdFold
(
const svxFoldData *Fold,   /* I: Smdfold data */
int *idSmdFold             /* O: Smdfold id */
)
/*
DESCRIPTION:
Adds the specified fold(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idSmdFold" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdFullFlange
(
const svxSmdFullFlangeData* data,  /* I: Smd Full Flange data */
int* idFull                        /* O: id of full flange ,NULL to ignore */
)
/*
DESCRIPTION:
Use this function to add full face flanges to the multi-edges of a sheet metal part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdHemFlange
(
const svxSmdHemFlangeData* data,  /* I: Smd Hem Flange data */
int* idHem                        /* O: id of hem flange , NULL to ignore */
)
/*
DESCRIPTION:
Use this function to add various curly shape on edges of the sheet metal model,
the thickness are same as the sheet metal model.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdLouver
(
const svxLouverData *LouverData,   /* I: louver data */
int *idSmdLouver                   /* O: index of louver (NULL to ignore) */
)
/*
DESCRIPTION:
Adds the specified louver feature to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idSmdLouver" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdNormalCut
(
const svxNormalCutData* pData,    /* I: NormalCut data */
int* numShape,                    /* O: number of resulting shapes (NULL to ignore) */
int** idShapes                    /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create Normal Cut at shapes by Profile P.
Pass in NULL for "idShapes" and "numShape" if the output is not require, or it will return the new shapes.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdPartialFlange
(
const svxSmdPartialFlangeData* data,  /* I: Smd Partial Flange data */
int* idPartial                        /* O: id of Partial Flange, NULL to ignore */
)
/*
DESCRIPTION:
Use this function to add a partial flange to the edge of a sheet metal part.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdProfFlange
(
const svxSmdFlangeProfData* data,   /* I: Smd Flange with profile data */
int* idFlange                       /* O: id of Flange with profile ,NULL to ignore */
)
/*
DESCRIPTION:
Use this function to create a sheet metal profile flange.
This function is similar to cvxPartSmdFullFlange(),
but the shape of the bend and flanges is controlled by the profile.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdPunch
(
const svxPunchData* pData,    /* I: Punch data */
int* idShape                  /* O: id's of resulting shape (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to act on the sheet metal, which can be completed punching forming.
Pass in NULL for "idShape" if the output is not require, or it will return the new shape.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSmdStatFaceSet
(
int idFace,   /* I: id of face */
int* idFtr    /* O: id of feature(NULL to ignore) */
)
/*
DESCRIPTION:
Set the stationary face of a sheet metal part.

Returns 1 if error happens, else return 0.
*/
________________________________________________________________________________

int cvxPartSmdUnfold
(
const svxUnfoldData *Unfold, /* I: SmdUnfold data */
int *idSmdUnfold             /* O: SmdUnfold id */
)
/*
DESCRIPTION:
Adds the specified unfold(s) to the active part and outputs the
id of the corresponding history operation.

Pass in NULL for "idSmdUnfold" if the output is not required.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSphere
(
svxSphereData *Sphere, /* I: sphere definition */
int *idShape           /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Creates a sphere shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Cyl->Combine = V_BOOL_NONE", the id of the shape created
by this function is output via "idShape".

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSpline
(
const svxSplineData* PntData,  /* I: spline data*/
int *idEnt                     /* O: id of new 2D spline entity (NULL to ignore) */
)
/*
DESCRIPTION:
Adds a 3D curve interpolated through through the input points/control points with the 
specified data to the active part.

If "idEnt" is not NULL, the id of the new curve entity is output.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartStock
(
svxStockData *Stock,  /* I: stock input data */
int *idShape          /* O: id of stock shape (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create an extruded stock feature that completely 
encloses faces, shapes or blocks.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartSweep
(
svxSweepData *Swp,   /* I: sweep input data */
void *Options,         /* I: data pointer reserved for future use (input NULL) */
int *idShape         /* O: id of new shape (NULL to ignore) */
)
/*
DESCRIPTION:
Creates a swept shape and adds it to the active part using the
specified combination method.  If "idShape" is not NULL and
"Ext->Combine = V_BOOL_NONE", the id of the shape created 
by this function is output via "idShape".  If multiple shapes
could be created, use cvxEntNewList() to get their id's.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartThicken
(
svxThickenData *Thicken, /* I: thicken input data */
int *idShape             /* O: id of thicken shape (NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to create a thicken feature.

Return 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartThreadAt
(
int idFace,            /* I: face id */
svxPoint *Pnt,         /* I: point on or near face identifying thread location */
svxThreadData *Thread   /* I: thread definition */
)
/*
DESCRIPTION:
Adds thread attribute data (Thread) to the specified face (idFace)
of the active part.  The thread is placed on the end of the face
nearest the input reference point (Pnt). A cosmetic representation 
of the thread displayed. Actual geometry representing the thread is 
not created.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartTrim
(
svxTrimData *Trim,   /* I: trim input data */
int *numShape,       /* O: number of resulting shapes (NULL to ignore) */
int **idShapes       /* O: list of id's of resulting shapes (NULL to ignore) */
)
/*
DESCRIPTION:
Trim a shape by the input trimming data. The trimming face/faceset should
extend outside the boundaries of the base face/faceset.

The calling procedure MUST deallocate the output list with cvxMemFree.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartTrimToCrvs
(
const svxTrimToCurvesData* trimData,  /* I: trim to curves data */
int* idTrim                     /* O: trim feature id (pass in NULL to ignore) */
)
/*
DESCRIPTION:
Use this function to trim a face or shape to a curve or set of curves.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartTrimToFaces
(
const svxTrimToFacesData * data,  /* I: trimtofaces_data definition */
int *idTrim                       /* O: trim id */
)
/*
DESCRIPTION:
Trim away part of a face or shape where it intersects with Trimming.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartTrimmedPlane
(
svxTrimPlnData *data,   /* I: input data*/
int *newShp             /* O: id of new shape(NULL to ignore)*/
)
/*
DESCRIPTION:
Use this command to create a planar face trimmed to a set of bounding curves.
Required inputs include the boundary curves to trim to. 
Optional inputs include a datum plane or planar face to project to.

This function can output the new surface if data->sew is 0 and *newShp is not null.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartUDFExplode
(
int idFtr  /* I: index of UDF feature*/
)
/*
DESCRIPTION:
Explode custom feature into the operations that define it.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartUDFInit
(
vxPath udfPath   /* I: path of UDF model */
)
/*
DESCRIPTION:
Initialize the specified UDF model, it will create a UDF command template.

If it successes, you can execute this command by follow steps:
1. cvxDataInit("CdUDFCmd", &idData);
2. calls cvxPartUDFInqFlds() to get field parameters;
3. calls cvxDataSet(idData, idFld, data) to set the data;
4. calls cvxCmdExec(idData) to execute the UDF command;
5. calls cvxPartUDFTerm to free the UDF template data.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartUDFInqFlds
(
int *cnt,                    /* O: count of fields */
svxUDFParam** fldParams      /* O: value of field parameters */
)
/*
DESCRIPTION:
Get the field parameters of current UDF command.
Note: you must call the function cvxPartUDFInit first.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartUDFInqPath
(
int idFtr,    /* I: index of UDF feature */
vxPath file   /* O: source file path of UDF feature */
)
/*
DESCRIPTION:
Get source file full path of specified UDF feature.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartUDFInqSubFtrs
(
int idFtr,    /* I: index of UDF feature */
int* count,   /* O: number of sub-feature in UDF feature */
int** ftrList /* O: list of sub-feature in UDF feature */
)
/*
DESCRIPTION:
Get sub-feature list in specified UDF feature.

This function allocates memory for the array output via "ftrList". The calling
procedure is responsible for deallocating the memory.

Return 1 if error, else 0.
*/
________________________________________________________________________________

int cvxPartUDFInsPathSet
(
const vxPath path   /* I: full path of UDF */
)
/*
DESCRIPTION:
Set the default open directory for the Insert UDF.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartUDFReplace
(
int idFtr,           /* I: index of UDF feature */
const vxPath file    /* I: the file path of UDF to replace */
)
/*
DESCRIPTION:
Replace the specified UDF to the new one by the path of UDF file.
It requires that the new UDF has the same references as the old one, or it will fail.

Return 1 if error, else 0.
*/
________________________________________________________________________________

void cvxPartUDFTerm( )
/*
DESCRIPTION:
Destruct data after execute a user define feature command.
*/
________________________________________________________________________________

int cvxPartUDFWizardPathSet
(
const vxPath path   /* I: full path of UDF */
)
/*
DESCRIPTION:
Set the default open directory for the wizard UDF.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartUserAtExport
(
vxLongName filePath  /* I: path of excel file to export */
)
/*
DESCRIPTION:
Export the part user attribute data to the specified file 'filePath'.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartUserAtGet
(
vxLongName File,        /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,        /* I: root object name (Root[0]=0 or NULL for active target object) */
int *Count,             /* O: number of user attributes */
svxAttribute** UserAt   /* O: list of user attributes */
)
/*
DESCRIPTION:
Retrieves user attribute data from the specified part in the specified file.

The calling procedure MUST deallocate the output list with cvxMemFree.

If the specified file is not already open, this function will open it 
to access attributes, and will then close the file.  If you want to 
keep the file open, use the cvxFileKeep function, before calling this 
function, to set a flag that prevents this function from closing the 
files that it opens.  (Files that are already open before this function 
is called are never closed by this function.)  If you will be calling 
several functions to access data in the same file, keeping the file open 
between calls is more efficient than letting each function open and close 
the file.  However, you must remember to call cvxFileKeep again to reset 
the flag after you have finished all of the function calls that need to 
access the specified file, and you also become responsible for closing the 
file, for example by using one of the cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartUserAtSet
(
vxLongName File,       /* I: object file name (File[0]=0 or NULL for active file) */
vxLongName Root,       /* I: root object name (Root[0]=0 or NULL for active target object) */
int DelOrgAt,          /* I: whether to clear original user attribute */
int Count,             /* I: number of user attributes */
svxAttribute* UserAt   /* I: list of user attributes */
)
/*
DESCRIPTION:
Assigns the specified part attribute data to the specified part.
Existing part attribute data is replaced with the contents of
the input attribute data structure.

If the specified file is not already open, this function will open it
to access attributes, and will then close the file.  If you want to
keep the file open, use the cvxFileKeep function, before calling this
function, to set a flag that prevents this function from closing the
files that it opens.  (Files that are already open before this function
is called are never closed by this function.)  If you will be calling
several functions to access data in the same file, keeping the file open
between calls is more efficient than letting each function open and close
the file.  However, you must remember to call cvxFileKeep again to reset
the flag after you have finished all of the function calls that need to
access the specified file, and you also become responsible for closing the
file, for example by using one of the cvxFileClose or cvxFileSave functions.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVarAdd
(
svxVariable *Variable   /* I: definition of a variable */
)
/*
DESCRIPTION:
Adds the specified variable to the active part.

Expression format of string type :"\"str\"";
Expression format of point type :"Point(1,2,3)";
Expression format of vector type :"Vector(1,2,3)";

If the type of variable is set to 0,then the sub_type must be set,else ignore.
If the sub_type of variable is set to 1 or 2,then the unit_type must be set,else ignore.

evxUnitType for length unit and evxAngUnitType for angle unit.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVarGet
(
svxVariable *Variable   /* I/O: variable data */
)
/*
DESCRIPTION:
Searches the active part for the variable named "Variable->Name".

The value of the specified variable is output via 
"Variable->Value" in database units (mm, deg).

If "Variable->Name" is a string variable, the associated
text is output via "Variable->Expression".  Strings longer
than 256 bytes are truncated.

NOTE that "Variable->Expression" is not used to output the
expression that defines a variable.  It is used to output
text associated with a "string" variable.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVarGetById
(
int idEqn,                   /* I: equation id */
svxVariable* Variable        /* O: variable data */
)
/*
DESCRIPTION:
Searches the active part for the equation id.

NOTE that "Variable->Expression" is not used to output the
expression that defines a variable.  It is used to output
text associated with a "string" variable.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVarSet
(
int Count,               /* I; number of variables */
svxVariable *Variables,   /* I: list of variables */
int Working                /* I: 1 to display "Working..." message, else 0 */
)
/*
DESCRIPTION:
Updates the part variables (e.g. dimensions, parameters) 
specified by "Variables" and regenerates the active part 
with the modified values.

You can disable the object regeneration normally performed by
this function by inputing "Working = -1".

See the description of "cvxRootVarSet()" for the names
used to identify various part parameters and attributes.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVarSubstitute
(
char *Str,     /* I/O: null-terminated string, may be NULL */
int nBytes,    /* I: maximum size of Str array in bytes */
int *Truncated /* O: 1 if string was truncated, 0 if not; may be NULL */
)
/*
DESCRIPTION:
Substitute variable values into a string for all occurrences of
variable references.  The syntax for each variable reference is [$VAR]
where VAR is the name of a variable in the active target.  References
for which the variable cannot be found are left in the string.

This function is not limited to parts, but can be used when the active
target is any type of root object in which variables may exist.

The maximum number of bytes allowed in the "Str" character array is
"nBytes" including a terminating '\0' byte.  When this function
returns, "Truncated" is set to 0 if the string with variable
substitutions fits within this maximum size.  If a variable
substitution would cause the string to exceed this size, the string is
truncated and "Truncated" is set to 1.  The caller may pass NULL in
place of the "Truncated" argument if this result is not of interest.

Returns 0 if successful.  Returns non-zero if an error occurs.  It is
not an error if "Str" is NULL or empty, nor is it an error if the
string has no [$VAR] references, but it is an error if a variable
specified in such a reference cannot be found in the active target.

See cvxPartVarSubstituteResize for a similar function that never
truncates, but instead resizes a string.
*/
________________________________________________________________________________

int cvxPartVarSubstituteResize
(
char **Str /* I/O: null-terminated string, may be NULL */
)
/*
DESCRIPTION:
Substitute variable values into a string for all occurrences of
variable references.  The syntax for each variable reference is [$VAR]
where VAR is the name of a variable in the active target.  References
for which the variable cannot be found are left in the string.

This function is not limited to parts, but can be used when the active
target is any type of root object in which variables may exist.

The string will be reallocated (if necessary) to insert the variable
values.

Returns 0 if successful.  Returns non-zero if an error occurs.  It is
not an error if "Str" is NULL or empty, nor is it an error if the
string has no [$VAR] references, but it is an error if a variable
specified in such a reference cannot be found in the active target.

The string is reallocated if substituting the variable values produces
a longer string.  The string is not reallocated if it becomes shorter
or stays the same length.

If the block of memory used for the string is larger than needed for
the string (i.e. larger than the number of bytes in the string plus
1), this function might make the block smaller.  That is because
reallocation requests only the amount of memory needed for the string,
and might not consider unused space in the block.  There is no need to
allocate more memory than the string needs before calling this
function.

See cvxPartVarSubstitute for a similar function that truncates a
string instead of resizing it.
*/
________________________________________________________________________________

int cvxPartViewAdd
(
svxView *View,   /* I: view definition */
int *idView      /* O: id of new view (NULL to ignore)*/
)
/*
DESCRIPTION:
Creates a new view with the specified definition and adds it to 
the active part.  Outputs the id of the new view via "idView".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPartVolumAndMassGet
(
vxLongName Name,   /* I: name of part in active file */
double *dVolume,   /* O: volume of part,unit:mm^3 */
double *dMass      /* O: mass of part,unit:kg */
)
/*
DESCRIPTION:
Output volume and mass data from the specified part in the active file.
Before you use it, you need to use function cvxPartPhyAttrCalc to calculate
physical attributes.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxPlaneGetData
(
int idPlane,         /* I: Plane id*/
svxPlaneData *Plane  /* O: Plane data */
)
/*
DESCRIPTION:
Get the Plane data associated with the specified idPlane, contained
frame and Entity path.

NOTES:
This interface can only retrieve datum data created by interface cvxPartPlaneNew().

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxShellAtGet
(
int idx_shl,         /* I:the shell index */
svxPartAttribute *At      /* O: shell attribute data */
)
/*
DESCRIPTION:
Retrieves attribute data from the specified shell in the active file.
If index is small than 1 or an inactive object, return 1.
Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxShellAtItemGet
(
int idx_shl,          /* I: the shell index */
evxAtItemId itemId,   /* I: item id */
svxAttribute *At      /* I/O: attribute item data */
)
/*
DESCRIPTION:
Outputs the attribute of specified item for the specified shell.

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxShellAtItemSet
(
int idx_shl,         /* I: the shell index */
evxAtItemId itemId,  /* I: item id */
svxAttribute *At     /* I: attribute item data to set */
)
/*
DESCRIPTION:
Sets the attribute of specified item for the specified shell. 

The itemId includes part items of evxAtItemId (VX_AT_USER~VX_AT_HEIGHT).

When itemId is VX_AT_USER, the name of the user-defined attribute must
be assigned to At->label before calling this function.  For all other
itemId values, At->label can be an empty string (At->label[0]=0) when
this function is called.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxSubPartFlag
(
vxLongName File,      /* I: part file name (File[0]=0 or NULL for active file) */
vxLongName Part,      /* I: part name (Part[0]=0 or NULL for active part) */
int isSubPart      /* I: 1=sub-part; 0=ordinary part; -1=ordinary part hidden in 
                        root object list */
)
/*
DESCRIPTION:
If "isSubPart = 1", the specified part is flagged as a sub-part. It will be 
skipped when gathering parts for a BoM or assembly-part-list.  It will not be
displayed in the parent file's root object list. 

If "isSubPart = -1", the specified part is flagged as a pseudo sub-part. It is
hidden in the root object list, but is still counted as a free-standing part
for BoM or assembly-part-list purposes.

If "isSubPart = 0", the part is assumed to be a standalone part (i.e. not a 
sub-part inextricably linked to its parent part). 

Generally speaking, this function should not be used to change the status of 
a genuine sub-part unless you 100% know what you are doing, but it may be used 
to suppress display of a regular part in the root object list (isSubPart = -1).

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxSubPartIns
(
vxLongName Name,   /* I: sub-part name */
int AutoRegen,      /* I: 1 to tag sub-part for automatic regeneration, else 0 */
int MergeOption   /* I: 1 to merge sub-part dimensions, 2 to merge sub-part wireframe entities, 
                        3 to merge both (0 to merge neither dimensions nor wireframe) */
)
/*
DESCRIPTION:
Inserts and activates a sub-part in the active part.
If "Name" is a blank string, a default name is assigned to the new sub-part.
Use cvxPartExit() to exit the sub-part, re-activating its parent part.

Note that if "Name" is the name of an existing sub-part in the active part,
the existing sub-part is activated.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________