/*
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 "ProDtmPnt.h"
#define C_LOG(a) ProTKPrintf ("Status for %s is = %d\n", a, status ); \
ERROR_CHECK( a, "UgSktExtrusionCreate.c", status );
#define C_PRINT(a) ProTKPrintf ( "%s\n", a);
static ProFileName message_file;
/*---------------------- Function Prototypes -------------------------*/
ProError ProDemoGeneralPointCreate();
/*------------------------- External Data ----------------------------*/
/*------------------------- Global Data -----------------------------*/
/*===============================================================*\
FUNCTION : ProDemoGeneralPointCreate
PURPOSE : Demonstrates the creation of the General Datum Point
\*===============================================================*/
ProError ProDemoGeneralPointCreate()
{
ProReference REPDEP_ref3;
ProReference REPDEP_ref2;
ProReference REPDEP_ref1;
ProErrorlist errors;
ProMdl model;
ProModelitem model_item;
ProSelection model_sel;
ProFeature feature;
ProFeatureCreateOptions *opts = 0;
ProAsmcomppath *p_comp_path = NULL;
ProValue value;
char name[PRO_NAME_SIZE];
ProError status;
ProElement pro_e_feature_tree;
ProElement pro_e_feature_type;
ProElement pro_e_dpoint_type;
ProElement pro_e_std_feature_name;
ProElement pro_e_dpoint_points_array;
ProElement pro_e_dpoint_point;
ProElement pro_e_dpoint_point_name;
ProElement pro_e_dpoint_pla_constraints;
ProElement pro_e_dpoint_pla_constraint;
ProElement pro_e_dpoint_pla_constr_ref;
ProElement pro_e_dpoint_pla_constr_type;
ProElement pro_e_dpoint_pla_constr_val;
ProName wide_string;
ProValueData value_data;
ProSelection * p_select;
int n_select;
ProBoolean is_interactive = PRO_B_TRUE;
ProStringToWstring ( message_file, "utilities.txt" );
/*---------------------------------------------------------------*\
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_DATUM_POINT);
C_LOG( " ProElementIntegerSet" );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_feature_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_TYPE *** " );
status = ProElementAlloc ( PRO_E_DPOINT_TYPE, &pro_e_dpoint_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet(pro_e_dpoint_type,PRO_DPOINT_TYPE_GENERAL);
C_LOG( " ProElementIntegerSet" );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_dpoint_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_PNT0" );
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_DPOINT_POINTS_ARRAY
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_POINTS_ARRAY *** " );
status = ProElementAlloc ( PRO_E_DPOINT_POINTS_ARRAY,
&pro_e_dpoint_points_array );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_feature_tree, NULL,
pro_e_dpoint_points_array );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_POINT *** " );
status = ProElementAlloc ( PRO_E_DPOINT_POINT, &pro_e_dpoint_point );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_dpoint_points_array, NULL,
pro_e_dpoint_point );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_POINT_NAME
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_POINT_NAME *** " );
status = ProElementAlloc ( PRO_E_DPOINT_POINT_NAME,
&pro_e_dpoint_point_name );
C_LOG( " ProElementAlloc " );
ProStringToWstring ( wide_string, "PNT0" );
status = ProElementWstringSet(pro_e_dpoint_point_name,wide_string);
C_LOG( " ProElementWstringSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_point, NULL,
pro_e_dpoint_point_name );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTRAINTS *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTRAINTS,
&pro_e_dpoint_pla_constraints );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_dpoint_point, NULL,
pro_e_dpoint_pla_constraints );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTRAINT *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTRAINT,
&pro_e_dpoint_pla_constraint );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraints, NULL,
pro_e_dpoint_pla_constraint );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_REF
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_REF *** " );
status = ProMessageDisplay ( message_file, "Select a reference Surface");
C_LOG( " ProMessageDisplay" );
ProTKPrintf ( "Please select datum,surface,sldface,qltface_ID_5 type of Modelitem\n");
status = ProSelect ( "datum,surface,sldface,qltface", 1, NULL, NULL, NULL,
NULL, &p_select, &n_select );
C_LOG( " ProSelect" );
if ( n_select <= 0 ) return -1;
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_REF,
&pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElementAlloc " );
status = ProSelectionToReference( p_select[0],&REPDEP_ref1 );
status = ProElementReferenceSet(pro_e_dpoint_pla_constr_ref,REPDEP_ref1);
C_LOG( " ProElementReferenceSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_TYPE *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_TYPE,
&pro_e_dpoint_pla_constr_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet(pro_e_dpoint_pla_constr_type,PRO_DTMPNT_CONSTR_TYPE_ON);
C_LOG( " ProElementIntegerSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_VAL
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_VAL *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_VAL,
&pro_e_dpoint_pla_constr_val );
C_LOG( " ProElementAlloc " );
status = ProElementDecimalsSet( pro_e_dpoint_pla_constr_val,4 );
status = ProElementDoubleSet(pro_e_dpoint_pla_constr_val,0.000000);
C_LOG( " ProElementDoubleSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_val );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTRAINT *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTRAINT,
&pro_e_dpoint_pla_constraint );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraints, NULL,
pro_e_dpoint_pla_constraint );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_REF
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_REF *** " );
status = ProMessageDisplay ( message_file, "Select a reference Surface");
C_LOG( " ProMessageDisplay" );
ProTKPrintf ( "Please select datum,surface,sldface,qltface_ID_5 type of Modelitem\n");
status = ProSelect ( "datum,surface,sldface,qltface", 1, NULL, NULL,
NULL, NULL, &p_select, &n_select );
C_LOG( " ProSelect" );
if ( n_select <= 0 ) return -1;
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_REF,
&pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElementAlloc " );
status = ProSelectionToReference( p_select[0],&REPDEP_ref2 );
status = ProElementReferenceSet(pro_e_dpoint_pla_constr_ref,REPDEP_ref2);
C_LOG( " ProElementReferenceSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_TYPE *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_TYPE,
&pro_e_dpoint_pla_constr_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet(pro_e_dpoint_pla_constr_type,PRO_DTMPNT_CONSTR_TYPE_ON);
C_LOG( " ProElementIntegerSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_VAL
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_VAL *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_VAL,
&pro_e_dpoint_pla_constr_val );
C_LOG( " ProElementAlloc " );
status = ProElementDecimalsSet( pro_e_dpoint_pla_constr_val,4 );
status = ProElementDoubleSet(pro_e_dpoint_pla_constr_val,0.000000);
C_LOG( " ProElementDoubleSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_val );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTRAINT *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTRAINT,
&pro_e_dpoint_pla_constraint );
C_LOG( " ProElementAlloc" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraints, NULL,
pro_e_dpoint_pla_constraint );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_REF
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_REF *** " );
status = ProMessageDisplay ( message_file, "Select a reference Surface");
C_LOG( " ProMessageDisplay" );
ProTKPrintf ( "Please select datum,surface,sldface,qltface_ID_5 type of Modelitem\n");
status = ProSelect ( "datum,surface,sldface,qltface", 1, NULL, NULL,
NULL, NULL, &p_select, &n_select );
C_LOG( " ProSelect" );
if ( n_select <= 0 ) return -1;
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_REF,
&pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElementAlloc " );
status = ProSelectionToReference( p_select[0],&REPDEP_ref3 );
status = ProElementReferenceSet(pro_e_dpoint_pla_constr_ref,REPDEP_ref3);
C_LOG( " ProElementReferenceSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_ref );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_TYPE
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_TYPE *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_TYPE,
&pro_e_dpoint_pla_constr_type );
C_LOG( " ProElementAlloc " );
status = ProElementIntegerSet(pro_e_dpoint_pla_constr_type,PRO_DTMPNT_CONSTR_TYPE_ON);
C_LOG( " ProElementIntegerSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_type );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Populating element PRO_E_DPOINT_POINTS_ARRAY
-> PRO_E_DPOINT_POINT
-> PRO_E_DPOINT_PLA_CONSTRAINTS
-> PRO_E_DPOINT_PLA_CONSTRAINT
-> PRO_E_DPOINT_PLA_CONSTR_VAL
\*---------------------------------------------------------------*/
C_PRINT( " *** Processing Element PRO_E_DPOINT_PLA_CONSTR_VAL *** " );
status = ProElementAlloc ( PRO_E_DPOINT_PLA_CONSTR_VAL,
&pro_e_dpoint_pla_constr_val );
C_LOG( " ProElementAlloc " );
status = ProElementDecimalsSet( pro_e_dpoint_pla_constr_val,4 );
status = ProElementDoubleSet(pro_e_dpoint_pla_constr_val,0.000000);
C_LOG( " ProElementDoubleSet" );
status = ProElemtreeElementAdd ( pro_e_dpoint_pla_constraint, NULL,
pro_e_dpoint_pla_constr_val );
C_LOG( " ProElemtreeElementAdd" );
/*---------------------------------------------------------------*\
Create the feature in the current model.
\*---------------------------------------------------------------*/
status = ProMdlCurrentGet (&model);
if ( status != PRO_TK_NO_ERROR ) return ( status );
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);
status = ProElementFree (&pro_e_feature_tree );
C_LOG (" ProElementFree");
return (status);
}
#undef C_LOG
#undef C_PRINT