/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*---------------------- Pro/Toolkit Includes ------------------------*/
#include "ProToolkit.h"
#include "ProFeature.h"
#include "ProElemId.h"
#include "ProExtrude.h"
#include "ProModFeat.h"
#include "ProStdSection.h"
#include "ProElement.h"
#include "ProElempath.h"
#include "ProFeatType.h"
#include "ProFeatForm.h"
#include "ProSelection.h"
#include "ProSection.h"
#include "ProSrfcollection.h"
#include "ProCrvcollection.h"
#include "ProRound.h"
static ProFileName message_file;
#define C_LOG(a) ProTKPrintf ("Status for %s is = %d\n", a, status ); \
ERROR_CHECK( a, "UgRoundCreate.c", status );
#define C_PRINT(a) ProTKPrintf ( "%s\n", a);
/*===============================================================*\
FUNCTION : UserRoundTemplate()
PURPOSE : Template function for creation of extrude features.
\*===============================================================*/
ProError UserRoundTemplate()
{
ProErrorlist errors;
ProMdl model;
ProSelection model_sel;
ProFeature feature;
ProFeatureCreateOptions *opts = 0;
ProElempath path;
ProElempathItem path_items[2];
ProSection section;
ProAsmcomppath comp_path;
ProAsmcomppath *p_comp_path = NULL;
ProCollection collection;
ProCrvcollinstr instr;
ProModelitem model_item;
ProReference reference;
ProElement pro_e_feature_tree;
ProElement pro_e_feature_type;
ProElement pro_e_std_feature_name;
ProElement pro_e_rndch_sets;
ProElement pro_e_rndch_set;
ProElement pro_e_rndch_dimensional_schema;
ProElement pro_e_rndch_chamfer_shape;
ProElement pro_e_rndch_shape_options;
ProElement pro_e_rndch_variable_radius;
ProElement pro_e_rndch_compound_conic;
ProElement pro_e_rndch_conic_type;
ProElement pro_e_rndch_conic_value;
ProElement pro_e_rndch_conic_dep_opt;
ProElement pro_e_rndch_references;
ProElement pro_e_rndch_reference_type;
ProElement pro_e_std_curve_collection_appl;
ProElement pro_e_rndch_compound_spine;
ProElement pro_e_rndch_ball_spine;
ProElement pro_e_rndch_compound_ext_options;
ProElement pro_e_rndch_auto_blend;
ProElement pro_e_rndch_radii;
ProElement pro_e_rndch_radius;
ProElement pro_e_rndch_leg1;
ProElement pro_e_rndch_leg_type;
ProElement pro_e_rndch_leg_value;
ProElement pro_e_rndch_leg2;
ProElement pro_e_rndch_attach_type;
ProElement pro_e_rndch_transitions;
ProName wide_string;
ProSelection *sketch_refs;
ProError status;
ProValueData value_data;
ProSelection * p_select;
int n_select;
ProBoolean is_interactive = PRO_B_TRUE;
ProStringToWstring ( message_file, "utilities.txt" );
status = ProMdlCurrentGet (&model);
if ( status != PRO_TK_NO_ERROR ) return ( status );
/*---------------------------------------------------------------*\
Populating root element PRO_E_FEATURE_TREE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_FEATURE_TREE *** " );
status = ProElementAlloc ( PRO_E_FEATURE_TREE, &pro_e_feature_tree );
C_LOG( " ProElementAlloc " );
/*---------------------------------------------------------------*\
Populating element PRO_E_FEATURE_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_FEATURE_TYPE *** " );
status = ProElementAlloc ( PRO_E_FEATURE_TYPE, &pro_e_feature_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_feature_type, PRO_FEAT_ROUND );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_feature_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_STD_FEATURE_NAME
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_STD_FEATURE_NAME *** " );
status = ProElementAlloc ( PRO_E_STD_FEATURE_NAME, &pro_e_std_feature_name );
C_LOG( " ProElementAlloc " );
ProStringToWstring ( wide_string, "MY_ROUND" );
status = ProElementWstringSet ( pro_e_std_feature_name, wide_string );
C_LOG( " ProElementWstringSet " );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_std_feature_name );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_SETS
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_SETS *** " );
status = ProElementAlloc ( PRO_E_RNDCH_SETS, &pro_e_rndch_sets );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_rndch_sets );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_SET
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_SET *** " );
status = ProElementAlloc ( PRO_E_RNDCH_SET, &pro_e_rndch_set );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_sets, NULL, pro_e_rndch_set );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_DIMENSIONAL_SCHEMA
Following elements are optional for round and "required"
for chamfer -
0- PRO_E_RNDCH_DIMENSIONAL_SCHEMA
1- PRO_E_RNDCH_CHAMFER_SHAPE
\*---------------------------------------------------------------*/
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_SHAPE_OPTIONS
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_SHAPE_OPTIONS *** " );
status = ProElementAlloc ( PRO_E_RNDCH_SHAPE_OPTIONS, &pro_e_rndch_shape_options );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_shape_options,
PRO_ROUND_TYPE_CONSTANT );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_shape_options );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_VARIABLE_RADIUS ::
Not used for round & chamfer at all - kept here to ensure as optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_VARIABLE_RADIUS *** " );
status = ProElementAlloc ( PRO_E_RNDCH_VARIABLE_RADIUS, &pro_e_rndch_variable_radius );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_variable_radius, 0 );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_variable_radius );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_COMPOUND_CONIC
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_COMPOUND_CONIC *** " );
status = ProElementAlloc ( PRO_E_RNDCH_COMPOUND_CONIC, &pro_e_rndch_compound_conic );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_compound_conic );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_CONIC_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_CONIC_TYPE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_CONIC_TYPE, &pro_e_rndch_conic_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_conic_type,
PRO_ROUND_CONIC_DISABLE );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_compound_conic, NULL, pro_e_rndch_conic_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_CONIC_VALUE
- Optional since PRO_E_RNDCH_CONIC_TYPE == PRO_ROUND_CONIC_DISABLE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_CONIC_VALUE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_CONIC_VALUE, &pro_e_rndch_conic_value );
C_LOG( " ProElementAlloc " );
status = ProElementDoubleSet ( pro_e_rndch_conic_value, 0.000000 );
C_LOG( " ProElementDoubleSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_compound_conic, NULL, pro_e_rndch_conic_value );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_CONIC_DEP_OPT
- Optional since PRO_E_RNDCH_CONIC_TYPE == PRO_ROUND_CONIC_DISABLE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_CONIC_DEP_OPT *** " );
status = ProElementAlloc ( PRO_E_RNDCH_CONIC_DEP_OPT, &pro_e_rndch_conic_dep_opt );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_conic_dep_opt,
PRO_ROUND_CONIC_DEPENDENT ); /* 0 */
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_compound_conic, NULL, pro_e_rndch_conic_dep_opt );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_REFERENCES
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_REFERENCES *** " );
status = ProElementAlloc ( PRO_E_RNDCH_REFERENCES, &pro_e_rndch_references );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_references );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_REFERENCE_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_REFERENCE_TYPE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_REFERENCE_TYPE, &pro_e_rndch_reference_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_reference_type,
PRO_ROUND_REF_EDGE ); /* 1 */
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_references, NULL, pro_e_rndch_reference_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_STD_CURVE_COLLECTION_APPL
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_STD_CURVE_COLLECTION_APPL *** " );
status = ProElementAlloc ( PRO_E_STD_CURVE_COLLECTION_APPL, &pro_e_std_curve_collection_appl );
C_LOG( " ProElementAlloc " );
status = ProCrvcollectionAlloc ( &collection );
C_LOG( " ProCrvcollectionAlloc" );
status = ProCrvcollinstrAlloc ( PRO_CURVCOLL_ADD_ONE_INSTR, &instr );
C_LOG( " ProCrvcollinstrAlloc" );
if ( is_interactive == PRO_B_TRUE )
{
ProSelection *sel_array;
int n_sel_array;
ProTKPrintf(" Please select 1st edge for ROUND \n");
status = ProMessageDisplay ( message_file, "USER Select reference." );
C_LOG( " ProMessageDisplay" );
status = ProSelect ( "edge,curve", 1, NULL, NULL, NULL, NULL,
&sel_array, &n_sel_array );
C_LOG( " ProSelect" );
if ( n_sel_array <= 0 )
return PRO_TK_GENERAL_ERROR;
status = ProSelectionToReference ( sel_array[0], &reference );
C_LOG( " ProSelectionToReference" );
}
else
{
status = ProModelitemInit ( model, 59, PRO_EDGE, &model_item );
C_LOG( " ProModelitemInit" );
status = ProReferenceAlloc ( &reference );
C_LOG( " ProReferenceAlloc" );
status = ProReferenceSet ( reference, NULL, &model_item );
C_LOG( " ProReferenceSet" );
}
status = ProCrvcollinstrReferenceAdd ( instr, reference );
C_LOG( " ProCrvcollinstrReferenceAdd" );
status = ProCrvcollectionInstructionAdd ( collection, instr );
C_LOG( " ProCrvcollectionInstructionAdd" );
status = ProCrvcollinstrAlloc ( PRO_CURVCOLL_ADD_ONE_INSTR, &instr );
C_LOG( " ProCrvcollinstrAlloc" );
if ( is_interactive == PRO_B_TRUE )
{
ProSelection *sel_array;
int n_sel_array;
ProTKPrintf(" Please select 2nd edge for ROUND \n");
status = ProMessageDisplay ( message_file, "USER Select reference." );
C_LOG( " ProMessageDisplay" );
status = ProSelect ( "edge,curve", 1, NULL, NULL, NULL, NULL,
&sel_array, &n_sel_array );
C_LOG( " ProSelect" );
if ( n_sel_array <= 0 )
return PRO_TK_GENERAL_ERROR;
status = ProSelectionToReference ( sel_array[0], &reference );
C_LOG( " ProSelectionToReference" );
}
else
{
status = ProModelitemInit ( model, 45, PRO_EDGE, &model_item );
C_LOG( " ProModelitemInit" );
status = ProReferenceAlloc ( &reference );
C_LOG( " ProReferenceAlloc" );
status = ProReferenceSet ( reference, NULL, &model_item );
C_LOG( " ProReferenceSet" );
}
status = ProCrvcollinstrReferenceAdd ( instr, reference );
C_LOG( " ProCrvcollinstrReferenceAdd" );
status = ProCrvcollectionInstructionAdd ( collection, instr );
C_LOG( " ProCrvcollectionInstructionAdd" );
status = ProCrvcollinstrAlloc ( PRO_CURVCOLL_ADD_ONE_INSTR, &instr );
C_LOG( " ProCrvcollinstrAlloc" );
if ( is_interactive == PRO_B_TRUE )
{
ProSelection *sel_array;
int n_sel_array;
ProTKPrintf(" Please select 3rd edge for ROUND \n");
status = ProMessageDisplay ( message_file, "USER Select reference." );
C_LOG( " ProMessageDisplay" );
status = ProSelect ( "edge,curve", 1, NULL, NULL, NULL, NULL,
&sel_array, &n_sel_array );
C_LOG( " ProSelect" );
if ( n_sel_array <= 0 )
return PRO_TK_GENERAL_ERROR;
status = ProSelectionToReference ( sel_array[0], &reference );
C_LOG( " ProSelectionToReference" );
}
else
{
status = ProModelitemInit ( model, 46, PRO_EDGE, &model_item );
C_LOG( " ProModelitemInit" );
status = ProReferenceAlloc ( &reference );
C_LOG( " ProReferenceAlloc" );
status = ProReferenceSet ( reference, NULL, &model_item );
C_LOG( " ProReferenceSet" );
}
status = ProCrvcollinstrReferenceAdd ( instr, reference );
C_LOG( " ProCrvcollinstrReferenceAdd" );
status = ProCrvcollectionInstructionAdd ( collection, instr );
C_LOG( " ProCrvcollectionInstructionAdd" );
status = ProCrvcollinstrAlloc ( PRO_CURVCOLL_ADD_TANGENT_INSTR, &instr );
C_LOG( " ProCrvcollinstrAlloc" );
status = ProCrvcollectionInstructionAdd ( collection, instr );
C_LOG( " ProCrvcollectionInstructionAdd" );
status = ProElementCollectionSet( pro_e_std_curve_collection_appl, collection );
C_LOG( " ProElementCollectionSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_references, NULL, pro_e_std_curve_collection_appl );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_COMPOUND_SPINE
|-- PRO_E_RNDCH_BALL_SPINE
|-- PRO_E_STD_CURVE_COLLECTION_APPL
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_COMPOUND_SPINE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_COMPOUND_SPINE, &pro_e_rndch_compound_spine );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_compound_spine );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_BALL_SPINE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_BALL_SPINE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_BALL_SPINE, &pro_e_rndch_ball_spine );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_ball_spine, PRO_ROUND_ROLLING_BALL );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_compound_spine, NULL, pro_e_rndch_ball_spine );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_STD_CURVE_COLLECTION_APPL
- Empty collection, currently optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_STD_CURVE_COLLECTION_APPL *** " );
status = ProElementAlloc ( PRO_E_STD_CURVE_COLLECTION_APPL, &pro_e_std_curve_collection_appl );
C_LOG( " ProElementAlloc " );
/*---------------------------------------------------------------*\
Following elements are "not used" for Round & Chamfer as listed
in ProRound.h
0- PRO_E_RNDCH_COMPOUND_EXT_OPTIONS
1- |-- PRO_E_RNDCH_AUTO_BLEND
2- |-- PRO_E_RNDCH_TERM_SURFACE
\*---------------------------------------------------------------*/
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_RADII
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_RADII *** " );
status = ProElementAlloc ( PRO_E_RNDCH_RADII, &pro_e_rndch_radii );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_set, NULL, pro_e_rndch_radii );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_RADIUS
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_RADIUS *** " );
status = ProElementAlloc ( PRO_E_RNDCH_RADIUS, &pro_e_rndch_radius );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_radii, NULL, pro_e_rndch_radius );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG1
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG1 *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG1, &pro_e_rndch_leg1 );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_radius, NULL, pro_e_rndch_leg1 );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG_TYPE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG_TYPE, &pro_e_rndch_leg_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_leg_type,
PRO_ROUND_RADIUS_TYPE_VALUE );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_leg1, NULL, pro_e_rndch_leg_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG_VALUE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG_VALUE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG_VALUE, &pro_e_rndch_leg_value );
C_LOG( " ProElementAlloc " );
status = ProElementDoubleSet ( pro_e_rndch_leg_value, 50.000000 );
C_LOG( " ProElementDoubleSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_leg1, NULL, pro_e_rndch_leg_value );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG2
- Optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG2 *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG2, &pro_e_rndch_leg2 );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_rndch_radius, NULL, pro_e_rndch_leg2 );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG_TYPE
- Optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG_TYPE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG_TYPE, &pro_e_rndch_leg_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_leg_type, 0 );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_leg2, NULL, pro_e_rndch_leg_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_LEG_VALUE
- Optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_LEG_VALUE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_LEG_VALUE, &pro_e_rndch_leg_value );
C_LOG( " ProElementAlloc " );
status = ProElementDoubleSet ( pro_e_rndch_leg_value, 0.000000 );
C_LOG( " ProElementDoubleSet " );
status = ProElemtreeElementAdd ( pro_e_rndch_leg2, NULL, pro_e_rndch_leg_value );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_STD_CURVE_COLLECTION_APPL
- Optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_STD_CURVE_COLLECTION_APPL *** " );
status = ProElementAlloc ( PRO_E_STD_CURVE_COLLECTION_APPL, &pro_e_std_curve_collection_appl );
C_LOG( " ProElementAlloc " );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_ATTACH_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_ATTACH_TYPE *** " );
status = ProElementAlloc ( PRO_E_RNDCH_ATTACH_TYPE, &pro_e_rndch_attach_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet ( pro_e_rndch_attach_type, PRO_ROUND_ATTACHED );
C_LOG( " ProElementIntegerSet " );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_rndch_attach_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_RNDCH_TRANSITIONS
- Optional
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_RNDCH_TRANSITIONS *** " );
status = ProElementAlloc ( PRO_E_RNDCH_TRANSITIONS, &pro_e_rndch_transitions );
C_LOG( " ProElementAlloc " );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_rndch_transitions );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Creating feature in the current model.
\*---------------------------------------------------------------*/
status = ProMdlToModelitem( model, &model_item );
status = ProSelectionAlloc (p_comp_path, &model_item,
&model_sel);
status = ProArrayAlloc(1,sizeof(ProFeatureCreateOptions),
1, (ProArray*)&opts);
opts[0]= PRO_FEAT_CR_DEFINE_MISS_ELEMS;
status = ProFeatureWithoptionsCreate (model_sel, pro_e_feature_tree,
opts, PRO_REGEN_NO_FLAGS, &feature, &errors);
C_LOG (" ProFeatureWithoptionsCreate");
status = ProArrayFree((ProArray*)&opts);
/*---------------------------------------------------------------*\
Free up the allocated memory.
\*---------------------------------------------------------------*/
status = ProElementFree (&pro_e_feature_tree );
C_LOG (" ProElementFree");
return (status);
}
#undef C_LOG
#undef C_PRINT