#ifndef PROD3ELEM_H
#define PROD3ELEM_H
#include <ProToolkit.h>
#include <ProElement.h>
#include <ProObjects.h>
PRO_BEGIN_C_DECLS
/*===========================================================================
D3 Tree branch.
Used by features which utilize 3d transformation steps, usually using the
3D Dragger. (e.g. FlexMove)
=============================================================================*/
/*===============================================================================================
(1) Element tree
PRO_E_D3ELEM_SETS
|
|-- PRO_E_D3ELEM_SET
|
|-- PRO_E_D3ELEM_PLACEMENT_REFERENCE
|
|-- PRO_E_D3ELEM_ORIENTATION_REFERENCE
|
|-- PRO_E_D3ELEM_LOCATION
|
|-- PRO_E_D3ELEM_MOVES
|
|-- PRO_E_D3ELEM_MOVE
|
|-- PRO_E_D3ELEM_MOVE_TYPE
|
|-- PRO_E_D3ELEM_MOVE_VALUE
=================================================================================================
(2) Elements table
-------------------------------------------------------------------------------------------------
Element Id Element Name Data Type Valid Values
-------------------------------------------------------------------------------------------------
PRO_E_D3ELEM_SETS Sets Array holder
PRO_E_D3ELEM_SET Set Compound
PRO_E_D3ELEM_PLACEMENT_REFERENCE Placement Reference PRO_VALUE_TYPE_SELECTION Note-1
PRO_E_D3ELEM_ORIENTATION_REFERENCE Orientation Reference PRO_VALUE_TYPE_SELECTION Note-2
PRO_E_D3ELEM_LOCATION Location PRO_VALUE_TYPE_INT Note-3
PRO_E_D3ELEM_MOVES Moves Array holder
PRO_E_D3ELEM_MOVE Move Compound
PRO_E_D3ELEM_MOVE_TYPE Move Type PRO_VALUE_TYPE_INT Note-4
PRO_E_D3ELEM_MOVE_VALUE Move Value PRO_VALUE_TYPE_DOUBLE Note-5
=================================================================================================
(3) Notes
Note-1 : PRO_E_D3ELEM_PLACEMENT_REFERENCE: Optional.
===========================================
Possible selection types are
SEL_3D_SRF, SEL_3D_EDG, SEL_3D_AXIS, SEL_3D_CSYS,
SEL_3D_PNT, SEL_3D_VERT, SEL_3D_CURVE, SEL_CURVE_END.
In case of an empty value for the placement reference, the default
placement reference will be used.
Note-2 : PRO_E_D3ELEM_ORIENTATION_REFERENCE: Optional.
=============================================
Possible selection types are
SEL_3D_SRF, SEL_3D_EDG, SEL_3D_AXIS, SEL_3D_CSYS, SEL_3D_CURVE.
In case of an empty value for the orientation reference, the default
orientation reference will be used, according to the placement reference.
Note-3 : PRO_E_D3ELEM_LOCATION: Optional.
=================================
Possible values are:
PRO_D3_LOCATION_MOVING - The default value, the Set's coordinate
system moves with each "Move" made in the set.
PRO_D3_LOCATION_FIXED - This value can be set only if the placement
reference and the orientation reference are
selected both to be the same coordinate
system. (SEL_3D_CSYS).
When this value is set, the Set's coordinate system
retains its position and orientation, as "Moves" are
being made. Each "Move" begins from this fixed coordinate
system.
Note-4 : PRO_E_D3ELEM_MOVE_TYPE: Mandatory.
==================================
Possible values are:
PRO_D3_MOVE_TYPE_UNDEFINED
PRO_D3_MOVE_TYPE_XMOVE - Move along the current coordinate
system's X vector.
PRO_D3_MOVE_TYPE_YMOVE - Move along the current coordinate
system's Y vector.
PRO_D3_MOVE_TYPE_ZMOVE - Move along the current coordinate
system's Z vector.
PRO_D3_MOVE_TYPE_XROTATE - Rotate around the current coordinate
system's X vector.
PRO_D3_MOVE_TYPE_YROTATE - Rotate around the current coordinate
system's Y vector.
PRO_D3_MOVE_TYPE_ZROTATE - Rotate around the current coordinate
system's Z vector.
PRO_D3_MOVE_TYPE_SURF - Move to a uv coordinate on a surface.
This move type is relevant only if the
move set is placed on a surface.
Please use these API functions:
ProFeatureD3elemUvSet()
ProFeatureD3elemUvGet()
PRO_D3_MOVE_TYPE_EDGE - Move to a u (ratio parameter) coordinate
on an edge.
This move type is possible only if the
move set is placed on an edge.
Please use these API functions:
ProFeatureD3elemRatioSet()
ProFeatureD3elemRatioGet()
PRO_D3_MOVE_TYPE_FREE - Move using a transformation matrix.
This move type is relevant if the
placement and orientation references
of the set are empty (default).
PRO_D3_MOVE_TYPE_FREETRF - Same as PRO_D3_MOVE_TYPE_FREE, but
instead of storing final position,
tranformation matrix is stored.
Note-5 : PRO_E_D3ELEM_MOVE_VALUE: Mandatory.
==================================
Value ranges:
For linear move types : [-1e6,1e6]
For angular move types : [0,360]
==============================================================================*/
/* PRO_E_D3ELEM_LOCATION Possible Values */
#define PRO_D3_LOCATION_MOVING 0
#define PRO_D3_LOCATION_FIXED 1
/* PRO_E_D3ELEM_MOVE_TYPE Possible Values */
#define PRO_D3_MOVE_TYPE_UNDEFINED 0
#define PRO_D3_MOVE_TYPE_XMOVE 1
#define PRO_D3_MOVE_TYPE_YMOVE 2
#define PRO_D3_MOVE_TYPE_ZMOVE 3
#define PRO_D3_MOVE_TYPE_XROTATE 4
#define PRO_D3_MOVE_TYPE_YROTATE 5
#define PRO_D3_MOVE_TYPE_ZROTATE 6
#define PRO_D3_MOVE_TYPE_SURF 7
#define PRO_D3_MOVE_TYPE_EDGE 8
#define PRO_D3_MOVE_TYPE_FREE 9
#define PRO_D3_MOVE_TYPE_FREETRF 10
/* D3Elem API Prototypes */
extern ProError ProFeatureD3elemUvSet( ProElement elem_move,
ProUvParam position_uv );
/*
Purpose: Set the position UV parameter for PRO_E_D3ELEM_MOVE_VALUE element
on a surface or plane.
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
position_uv - The position UV parameter on surface or plane.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
extern ProError ProFeatureD3elemUvGet( ProElement elem_move,
ProUvParam position_uv );
/*
Purpose: Get the position UV parameter for PRO_E_D3ELEM_MOVE_VALUE element
on a surface or plane.
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
Output Arguments:
position_uv - The position UV parameter on surface or plane.
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
extern ProError ProFeatureD3elemRatioSet( ProElement elem_move,
double ratio );
/*
Purpose: Set the position ratio for PRO_E_D3ELEM_MOVE_VALUE element on an
edge or entity.
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
ratio - The position ratio on edge or entity.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
extern ProError ProFeatureD3elemRatioGet( ProElement elem_move,
double* ratio );
/*
Purpose: Get the position ratio for PRO_E_D3ELEM_MOVE_VALUE element on an
edge or entity.
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
Output Arguments:
ratio - The position ratio on edge or entity.
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
extern ProError ProFeatureD3elemMatrixSet( ProElement elem_move,
ProMatrix delta );
/*
Purpose: Set the position delta matrix for PRO_E_D3ELEM_MOVE_VALUE element
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
delta - The position delta matrix.
Output Arguments:
none
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
extern ProError ProFeatureD3elemMatrixGet( ProElement elem_move,
ProMatrix delta );
/*
Purpose: Get the position delta matrix for PRO_E_D3ELEM_MOVE_VALUE element
Input Arguments:
elem_move - The PRO_E_D3ELEM_MOVE_VALUE id element.
Output Arguments:
delta - The position delta matrix.
Return Values:
PRO_TK_NO_ERROR - The function succeeded.
PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid
PRO_TK_GENERAL_ERROR - The function failed.
*/
PRO_END_C_DECLS
#endif