/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkitErrors.h>
#include <ProSelection.h>
#include <ProElement.h>
#include <ProMfg.h>
#include <ProMfgOptions.h>
#include <ProUtil.h>
#include <ProTKRunTime.h>
#include <ProCrvcollection.h>
#include <TestError.h>
#include <UtilString.h>
#include <TestConsts.h>
#include <UgMfg.h>
/*====================================================================*\
FUNCTION : UserToolMtnOffsetSet
PURPOSE : Set "Tool motion offset" element
\*====================================================================*/
ProError UserToolMtnOffsetSet(
/*--------------------------------------------------------------------*/
double x_offset,
double y_offset,
double z_offset,
ProElement offset_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_X_OFFSET, PRO_VALUE_TYPE_DOUBLE },
{ PRO_E_TOOL_MTN_X_OFFSET, PRO_VALUE_TYPE_DOUBLE },
{ PRO_E_TOOL_MTN_Z_OFFSET, PRO_VALUE_TYPE_DOUBLE }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnOffsetSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_X_OFFSET:
err = ProElementDoubleSet ( element, x_offset);
ERROR_CHECK( "UserToolMtnOffsetSet", "ProElementDoubleSet", err );
break;
case PRO_E_TOOL_MTN_Y_OFFSET:
err = ProElementDoubleSet ( element, y_offset);
ERROR_CHECK( "UserToolMtnOffsetSet", "ProElementDoubleSet", err );
break;
case PRO_E_TOOL_MTN_Z_OFFSET:
err = ProElementDoubleSet ( element, z_offset);
ERROR_CHECK( "UserToolMtnOffsetSet", "ProElementDoubleSet", err );
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnOffsetSet", "UserToolMtnOffsetSet()", err );
break;
}
err = ProElemtreeElementAdd( offset_elem, NULL, element );
ERROR_CHECK( "UserToolMtnOffsetSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnPlungeSet
PURPOSE : Set "Plunge" tool motion
\*====================================================================*/
ProError UserToolMtnPlungeSet(
/*--------------------------------------------------------------------*/
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
double x_offset,
double y_offset,
double z_offset,
ProSelection axis,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
ProSelection selection;
ProReference reference;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_MFG_PARAM_ARR, ARRAY },
{ PRO_E_TOOL_MTN_OFFSET, COMPOUND },
{ PRO_E_TOOL_MTN_AXIS_REF, PRO_VALUE_TYPE_SELECTION }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnPlungeSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
break;
case PRO_E_MFG_PARAM_ARR:
err = UserMfgParamArrSet( dbl_params, n_dbl_params,
str_params, n_str_params,
element );
ERROR_CHECK( "UserToolMtnPlungeSet", "UserMfgParamArrSet()", err );
break;
case PRO_E_TOOL_MTN_OFFSET:
err = UserToolMtnOffsetSet( x_offset, y_offset, z_offset,
element );
ERROR_CHECK( "UserToolMtnPlungeSet", "UserToolMtnOffsetSet()", err );
break;
case PRO_E_TOOL_MTN_AXIS_REF:
if ( axis == NULL )
{
err = ProElementFree( &element );
continue;
}
else
selection = axis;
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnPlungeSet", "UserToolMtnPlungeSet()", err );
break;
}
if ( elem_table[ii].val_type == PRO_VALUE_TYPE_INT )
{
err = ProElementIntegerSet(element,PRO_TM_TYPE_PLUNGE);
ERROR_CHECK( "UserToolMtnPlungeSet", "ProElementIntegerSet()", err );
}
else if ( elem_table[ii].val_type == PRO_VALUE_TYPE_SELECTION )
{
err = ProSelectionToReference( selection, &reference );
ERROR_CHECK( "UserToolMtnPlungeSet()", "ProSelectionToReference", err );
err = ProElementReferenceSet( element, reference );
ERROR_CHECK( "UserToolMtnPlungeSet()", "ProElementReferenceSet", err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnPlungeSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnLeadSet
PURPOSE : Set "Lead In" tool motion element
\*====================================================================*/
ProError UserToolMtnLeadSet(
/*--------------------------------------------------------------------*/
ProTmType lead_tm_type,
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProTmSideDir dir_opt,
ProSelection axis,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
ProSelection selection;
ProReference reference;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_MFG_PARAM_ARR, ARRAY },
{ PRO_E_MFG_APPR_EXIT_DIR, PRO_VALUE_TYPE_INT },
{ PRO_E_TOOL_MTN_AXIS_REF, PRO_VALUE_TYPE_SELECTION }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnLeadSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
err = ProElementIntegerSet ( element, lead_tm_type);
ERROR_CHECK( "UserToolMtnLeadSet", "ProElementIntegerSet()", err);
break;
case PRO_E_MFG_PARAM_ARR:
err = UserMfgParamArrSet( dbl_params, n_dbl_params,
str_params, n_str_params,
element );
ERROR_CHECK( "UserToolMtnLeadSet", "UserMfgParamArrSet()", err );
break;
case PRO_E_MFG_APPR_EXIT_DIR:
err = ProElementIntegerSet ( element, dir_opt);
ERROR_CHECK( "UserToolMtnLeadSet", "ProElementIntegerSet()", err);
break;
case PRO_E_TOOL_MTN_AXIS_REF:
if ( axis == NULL )
{
err = ProElementFree( &element );
continue;
}
else
selection = axis;
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
break;
}
if ( elem_table[ii].val_type == PRO_VALUE_TYPE_SELECTION )
{
err = ProSelectionToReference( selection, &reference );
ERROR_CHECK( "UserToolMtnLeadSet()", "ProSelectionToReference", err );
err = ProElementReferenceSet( element, reference );
ERROR_CHECK( "UserToolMtnLeadSet()", "ProElementReferenceSet", err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnLeadSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnLeadInSet
PURPOSE : Set "Lead In" tool motion element
\*====================================================================*/
ProError UserToolMtnLeadInSet(
/*--------------------------------------------------------------------*/
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProTmSideDir dir_opt,
ProSelection axis,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
err = UserToolMtnLeadSet( PRO_TM_TYPE_LEAD_IN,
dbl_params,
n_dbl_params,
str_params,
n_str_params,
dir_opt,
axis,
tool_mtn_elem );
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnLeadOutSet
PURPOSE : Set "Lead Out" tool motion element
\*====================================================================*/
ProError UserToolMtnLeadOutSet(
/*--------------------------------------------------------------------*/
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProTmSideDir dir_opt,
ProSelection axis,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
err = UserToolMtnLeadSet( PRO_TM_TYPE_LEAD_OUT,
dbl_params,
n_dbl_params,
str_params,
n_str_params,
dir_opt,
axis,
tool_mtn_elem );
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnRetractSet
PURPOSE : Set "Retract" tool motion element
\*====================================================================*/
ProError UserToolMtnRetractSet(
/*--------------------------------------------------------------------*/
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
ProSelection selection;
ProReference reference;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_MFG_PARAM_ARR, ARRAY }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnRetractSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
break;
case PRO_E_MFG_PARAM_ARR:
err = UserMfgParamArrSet( dbl_params, n_dbl_params,
str_params, n_str_params,
element );
ERROR_CHECK( "UserToolMtnRetractSet", "UserMfgParamArrSet()", err );
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnRetractSet", "UserToolMtnRetractSet()",
err );
break;
}
if ( elem_table[ii].val_type == PRO_VALUE_TYPE_INT )
{
err = ProElementIntegerSet(element,PRO_TM_TYPE_GO_RETRACT);
ERROR_CHECK( "UserToolMtnRetractSet", "ProElementIntegerSet()", err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnRetractSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserSimpleClCommandSet
PURPOSE : Set "CL command" element without datum point or surface
selection.
\*====================================================================*/
ProError UserSimpleClCommandSet(
/*--------------------------------------------------------------------*/
wchar_t *cl_command_wstr,
ProClCmdLocType location_type,
double location_param,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_CL_CMD_LOC_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_TOOL_MTN_CL_CMD_STR, PRO_VALUE_TYPE_WSTRING },
{ PRO_E_TOOL_MTN_CL_CMD_PARAM, PRO_VALUE_TYPE_DOUBLE },
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserSimpleClCommandSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_CL_CMD_LOC_TYPE:
err = ProElementIntegerSet ( element, location_type);
ERROR_CHECK( "UserSimpleClCommandSet", "ProElementIntegerSet()", err);
break;
case PRO_E_TOOL_MTN_CL_CMD_STR:
err = ProElementWstringSet( element, cl_command_wstr);
ERROR_CHECK( "UserSimpleClCommandSet", "ProElementWstringSet()", err);
break;
case PRO_E_TOOL_MTN_CL_CMD_PARAM:
err = ProElementDoubleSet ( element, location_param);
ERROR_CHECK( "UserSimpleClCommandSet", "ProElementDoubleSet()", err);
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserSimpleClCommandSet", "UserSimpleClCommandSet()",
err );
break;
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserSimpleClCommandSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnSimpleClCommandSet
PURPOSE : Set "CL command" tool motion element
In this example - simple cl command specification without
referencing datum point or surface.
\*====================================================================*/
ProError UserToolMtnSimpleClCommandSet(
/*--------------------------------------------------------------------*/
wchar_t *cl_command_wstr,
ProClCmdLocType location_type,
double param,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_TOOL_MTN_CL_CMD, COMPOUND }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnSimpleClCommandSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
break;
case PRO_E_TOOL_MTN_CL_CMD:
err = UserSimpleClCommandSet( cl_command_wstr, location_type,
param, element );
ERROR_CHECK( "UserToolMtnSimpleClCommandSet",
"UserSimpleClCommandSet()",
err );
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnSimpleClCommandSet",
"UserToolMtnSimpleClCommandSet()",
err );
break;
}
if ( elem_table[ii].val_type == PRO_VALUE_TYPE_INT )
{
err = ProElementIntegerSet(element,PRO_TM_TYPE_CL_COMMAND);
ERROR_CHECK( "UserToolMtnSimpleClCommandSet", "ProElementIntegerSet()",
err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnSimpleClCommandSet", "ProElemtreeElementAdd",
err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnFollowCutSet
PURPOSE : Set "Follow Cut" tool motion
\*====================================================================*/
ProError UserToolMtnFollowCutSet(
/*--------------------------------------------------------------------*/
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProTmTrimValOpt trim_option,
double start_value,
double end_value,
ProBool reverse_dir,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
ProSelection selection;
ProReference reference;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_MFG_PARAM_ARR, ARRAY },
{ PRO_E_TOOL_MTN_TRIM_VAL_OPT, PRO_VALUE_TYPE_INT },
{ PRO_E_TOOL_MTN_TRIM_START_VAL, PRO_VALUE_TYPE_DOUBLE },
{ PRO_E_TOOL_MTN_TRIM_END_VAL, PRO_VALUE_TYPE_DOUBLE },
{ PRO_E_TOOL_MTN_TRIM_FLIP_DIR, PRO_VALUE_TYPE_INT }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnFollowCutSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
value_data.v.i = PRO_TM_TYPE_TRIM;
break;
case PRO_E_MFG_PARAM_ARR:
err = UserMfgParamArrSet( dbl_params, n_dbl_params,
str_params, n_str_params,
element );
ERROR_CHECK( "UserToolMtnFollowCutSet", "UserMfgParamArrSet()",
err );
break;
case PRO_E_TOOL_MTN_TRIM_VAL_OPT:
value_data.v.i = trim_option;
break;
case PRO_E_TOOL_MTN_TRIM_START_VAL:
value_data.v.d = start_value;
break;
case PRO_E_TOOL_MTN_TRIM_END_VAL:
value_data.v.d = end_value;
break;
case PRO_E_TOOL_MTN_TRIM_FLIP_DIR:
value_data.v.i = (int)reverse_dir;
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnFollowCutSet","UserToolMtnFollowCutSet()",
err );
break;
}
if ( elem_table[ii].val_type != ARRAY )
{
err = ProValueAlloc( &value );
ERROR_CHECK( "UserToolMtnFollowCutSet","ProValueAlloc()", err );
value_data.type = elem_table[ii].val_type;
err = ProValueDataSet( value, &value_data );
ERROR_CHECK( "UserToolMtnFollowCutSet", "ProValueDataSet()", err );
err = ProElementValueSet( element, value );
ERROR_CHECK( "UserToolMtnFollowCutSet", "ProElementValueSet()", err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnFollowCutSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserToolMtnCurveCutSet
PURPOSE : Set "Curve Cut" tool motion
\*====================================================================*/
ProError UserToolMtnCurveCutSet(
/*--------------------------------------------------------------------*/
ProSelection curve,
MfgPrmDblValue dbl_params[],
int n_dbl_params,
MfgPrmStrValue str_params[],
int n_str_params,
ProElement tool_mtn_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
ProValueData value_data;
ProValue value;
ProSelection selection;
ProReference reference;
int ii = 0, table_size = 0;
static ElemTable elem_table[] =
{
{ PRO_E_TOOL_MTN_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_MFG_PARAM_ARR, ARRAY },
{ PRO_E_MFG_TRAJ_CRV, COMPOUND },
{ PRO_E_MFG_OFFSET, COMPOUND }
};
table_size = sizeof( elem_table ) / sizeof( ElemTable );
for ( ii = 0; ii < table_size; ii++ )
{
err = ProElementAlloc( elem_table[ii].elem_type, &element );
ERROR_CHECK( "UserToolMtnCurveCutSet","ProElementAlloc()", err );
switch ( elem_table[ii].elem_type )
{
case PRO_E_TOOL_MTN_TYPE:
break;
case PRO_E_MFG_PARAM_ARR:
err = UserMfgParamArrSet( dbl_params, n_dbl_params,
str_params, n_str_params,
element );
ERROR_CHECK( "UserToolMtnCurveCutSet", "UserMfgParamArrSet()", err );
break;
case PRO_E_MFG_TRAJ_CRV:
err = UserTrajCurveSet( curve, element );
ERROR_CHECK( "UserToolMtnCurveCutSet", "UserTrajCurveSet()", err );
break;
case PRO_E_MFG_OFFSET:
err = UserMfgOffsetSet( PRO_B_TRUE, PRO_MAT_RMV_LEFT, PRO_B_TRUE,
element );
ERROR_CHECK( "UserToolMtnCurveCutSet", "UserMfgOffsetSet()", err );
break;
default:
ProTKFprintf( stderr, "Error setting element type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserToolMtnCurveCutSet", "UserToolMtnCurveCutSet()",
err );
break;
}
if ( elem_table[ii].val_type == PRO_VALUE_TYPE_INT )
{
err = ProElementIntegerSet(element,PRO_TM_TYPE_CURVE_TRAJECTORY);
ERROR_CHECK( "UserToolMtnCurveCutSet", "ProElementIntegerSet()", err );
}
err = ProElemtreeElementAdd( tool_mtn_elem, NULL, element );
ERROR_CHECK( "UserToolMtnCurveCutSet", "ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserTrajToolMtnArrSet
PURPOSE : Set array of tool motions for trajectory sequence
\*====================================================================*/
ProError UserTrajToolMtnArrSet(
/*--------------------------------------------------------------------*/
ProSelection curve,
ProElement tm_arr_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
int ii, num = 0;
int n_leadin_dbl_params;
int n_leadout_dbl_params;
static ProTmType tm_types[] =
{
PRO_TM_TYPE_PLUNGE, /* optional */
PRO_TM_TYPE_LEAD_IN, /* optional */
PRO_TM_TYPE_CURVE_TRAJECTORY, /* trajectroy cut tool motion */
PRO_TM_TYPE_TRIM, /* required for PRO_TM_TYPE_CURVE_TRAJECTORY */
PRO_TM_TYPE_LEAD_OUT, /* optional */
PRO_TM_TYPE_GO_RETRACT, /* optional */
PRO_TM_TYPE_CL_COMMAND, /* optional */
};
static MfgPrmDblValue leadin_dbl_params[] =
{
{ "ENTRY_ANGLE", 90.0 },
{ "LEAD_RADIUS", 30.0 },
{ "TANGENT_LEAD_STEP", 40.0 },
{ "NORMAL_LEAD_STEP", 0.0 }
};
static MfgPrmDblValue leadout_dbl_params[] =
{
{ "EXIT_ANGLE", 90.0 },
{ "LEAD_RADIUS", 30.0 },
{ "TANGENT_LEAD_STEP", 0.0 },
{ "NORMAL_LEAD_STEP", 0.0 }
};
wchar_t *cl_command_wstr = L"OPSTOP";
n_leadin_dbl_params = sizeof( leadin_dbl_params ) /sizeof( MfgPrmDblValue );
n_leadout_dbl_params = sizeof( leadout_dbl_params )/sizeof( MfgPrmDblValue );
num = sizeof( tm_types ) / sizeof( ProTmType );
for ( ii = 0; ii < num; ii++ )
{
err = ProElementAlloc( PRO_E_TOOL_MTN, &element );
ERROR_CHECK( "UserTrajToolMtnArrSet", "ProElementAlloc", err );
switch ( tm_types[ii] )
{
case PRO_TM_TYPE_PLUNGE:
err = UserToolMtnPlungeSet( NULL, 0, NULL, 0, 0., 0., 0., NULL,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnPlungeSet", err );
break;
case PRO_TM_TYPE_LEAD_IN:
err = UserToolMtnLeadInSet( leadin_dbl_params,
n_leadin_dbl_params,
NULL,
0,
PRO_TM_DIR_RIGHT_SIDE,
NULL,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnLeadInSet", err );
break;
case PRO_TM_TYPE_CURVE_TRAJECTORY:
err = UserToolMtnCurveCutSet( curve,
NULL, 0, /* use seq params */
NULL, 0,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnCurveCutSet",
err );
break;
case PRO_TM_TYPE_TRIM:
err = UserToolMtnFollowCutSet( NULL, 0, /* use params from parent */
NULL, 0, /* use params from parent */
PRO_TM_TRIM_VAL_PARAM,
0.,
1.,
PRO_B_FALSE,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnFollowCutSet",
err );
break;
case PRO_TM_TYPE_LEAD_OUT:
err = UserToolMtnLeadOutSet( leadout_dbl_params,
n_leadout_dbl_params,
NULL,
0,
PRO_TM_DIR_RIGHT_SIDE,
NULL,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnLeadOutSet", err );
break;
case PRO_TM_TYPE_GO_RETRACT:
err = UserToolMtnRetractSet( NULL, 0, NULL, 0, element );
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserToolMtnRetractSet", err );
break;
case PRO_TM_TYPE_CL_COMMAND:
err = UserToolMtnSimpleClCommandSet( cl_command_wstr,
PRO_CL_CMD_LOC_TYPE_CURR, 0.,
element );
ERROR_CHECK( "UserTrajToolMtnArrSet", "UserSimpleClCommandSet()",
err );
break;
default:
ProTKFprintf( stderr, "Error setting tool motion type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserTrajToolMtnArrSet()", "UserTrajToolMtnArrSet", err );
break;
}
err = ProElemtreeElementAdd( tm_arr_elem, NULL, element );
ERROR_CHECK( "UserTrajToolMtnArrSet","ProElemtreeElementAdd", err );
}
return ( err );
}
/*====================================================================*\
FUNCTION : UserManualCycleMtnArrSet
PURPOSE : Set array of tool motions for manual cycle sequence.
In this example the array has only one tool motion of type
PRO_TM_TYPE_CL_COMMAND
\*====================================================================*/
ProError UserManualCycleMtnArrSet(
/*--------------------------------------------------------------------*/
ProElement tm_arr_elem
)
/*--------------------------------------------------------------------*/
{
ProError err = PRO_TK_NO_ERROR;
ProElement element;
int ii, num = 0;
static ProTmType tm_types[] =
{
PRO_TM_TYPE_CL_COMMAND
};
wchar_t *cl_command_str = L"DELAY/REV\nCOMMAND/1\nCOMMAND/2";
num = sizeof( tm_types ) / sizeof( ProTmType );
for ( ii = 0; ii < num; ii++ )
{
err = ProElementAlloc( PRO_E_TOOL_MTN, &element );
ERROR_CHECK( "UserManualCycleMtnArrSet", "ProElementAlloc", err );
switch ( tm_types[ii] )
{
case PRO_TM_TYPE_CL_COMMAND:
err = UserToolMtnSimpleClCommandSet( cl_command_str,
PRO_CL_CMD_LOC_TYPE_CURR, 0.,
element );
ERROR_CHECK( "UserManualCycleMtnArrSet()", "UserToolMtnPlungeSet",
err );
break;
default:
ProTKFprintf( stderr, "Error setting tool motion type\n" );
err = PRO_TK_GENERAL_ERROR;
ERROR_CHECK( "UserManualCycleMtnArrSet()", "UserTrajToolMtnArrSet",
err );
break;
}
err = ProElemtreeElementAdd( tm_arr_elem, NULL, element );
ERROR_CHECK( "UserManualCycleMtnArrSet","ProElemtreeElementAdd", err );
}
return ( err );
}