/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*---------------------- Pro/Toolkit Includes ------------------------*/
#include <ProToolkit.h>
#include <ProMdl.h>
#include <ProElement.h>
#include <ProFeatType.h>
#include <ProFeatForm.h>
#include <ProFeature.h>
#include <ProSection.h>
#include <ProRemoveSurf.h>
/*---------------------- Pro/Develop Includes ------------------------*/
/*---------------------- Application Includes ------------------------*/
#include <TestError.h>
#include <UtilTree.h>
#include <UtilFeats.h>
/*---------------------- Application Typedefs ------------------------*/
/*---------------------- Prototypes ----------------------------------*/
ProError UtilCreateRemoveSurfaceFeature(ProMdl model, ProSelection *p_sel);
ProError CreateFeature(ProAsmcomppath *p_comp_path ,ProMdl model,
ProElement pro_e_feature_tree,
ProFeature *feature);
ProError FeatRemoveSurfExample();
/*===============================================================*\
FUNCTION : FeatRemoveSurfExample
PURPOSE : Example to create a remove surface feature
returns :
PRO_TK_NO_ERROR - Successfully executed
\*===============================================================*/
ProError FeatRemoveSurfExample()
{
ProError status;
ProMdl model;
ProSelection *surf_sels = NULL;
int n_select = 0;
status = ProMdlCurrentGet (&model);
ERROR_CHECK( "FeatRemoveSurfExample", "ProMdlCurrentGet", status );
if(status != PRO_TK_NO_ERROR)
return status;
ProStringToWstring ( message_file, "msg_ugfeatcreat.txt" );
status = ProMessageDisplay ( message_file, "USER Select remove surfaces :" );
ERROR_CHECK("ProMessageDisplay", "FeatRemoveSurfExample", status);
status = ProSelect ( "surface", -1, NULL, NULL,
NULL, NULL, &surf_sels, &n_select );
ERROR_CHECK("ProSelect", "FeatRemoveSurfExample", status);
if ( n_select <= 0 ) return PRO_TK_GENERAL_ERROR;
status = UtilCreateRemoveSurfaceFeature(model, surf_sels);
if(PRO_TK_NO_ERROR != status)
status = ProMessageDisplay ( message_file,
"USER Feature created successfully" );
else
status = ProMessageDisplay ( message_file,
"USER Feature creation failed");
return status;
}
/*===============================================================*\
FUNCTION : UtilCreateRemoveSurfaceFeature
PURPOSE : Create a remove surface feature from the selection input.
\*===============================================================*/
ProError UtilCreateRemoveSurfaceFeature(ProMdl model, ProSelection *p_sel)
{
ProFeature feature;
ProSection section;
ProAsmcomppath *p_comp_path = NULL;
int no_sels;
int i;
ProValueData value_data;
ProSrfcollinstr instr;
ProReference reference;
ProSrfcollref isntr_ref;
ProName wide_string;
ProError status, rem_surf_status;
ProElement pro_e_feature_tree;
ProElement pro_e_std_feature_name;
ProElement pro_e_rm_surf_ref_type;
ProElement pro_e_rm_surf_srf_refs;
ProElement pro_e_std_excl_cntrs;
ProCollection srf_collection = NULL;
ProCollection collection;
if(p_sel == NULL)
{
return PRO_TK_BAD_INPUTS;
}
/*
PRO_E_FEATURE_TREE
|
|
|-- PRO_E_FEATURE_TYPE
|
|-- PRO_E_STD_FEATURE_NAME
|
|-- PRO_E_RM_SURF_REF_TYPE
|
|-- PRO_E_RM_SURF_ATTACH_TYPE */
/*-----------------------------------------------------*\
Populating root element PRO_E_FEATURE_TREE
\*-----------------------------------------------------*/
status = ProElementAlloc ( PRO_E_FEATURE_TREE, &pro_e_feature_tree );
/*-----------------------------------------------------*\
Populating root element PRO_E_FEATURE_TYPE
\*-----------------------------------------------------*/
value_data.v.i = PRO_FEAT_RM_SURF;
status = ProUtilElemtreeElementAdd( pro_e_feature_tree, PRO_E_FEATURE_TYPE,
ELEM_VALUE_TYPE_INT, &value_data.v.i);
/*-----------------------------------------------------*\
Populating element PRO_E_STD_FEATURE_NAME
\*-----------------------------------------------------*/
/*status = ProElementAlloc ( PRO_E_STD_FEATURE_NAME,
&pro_e_std_feature_name );
ProStringToWstring ( wide_string, "REMOVE_1" );
status = ProElementWstringSet ( pro_e_std_feature_name,
wide_string );
status = ProElemtreeElementAdd ( pro_e_feature_tree,
NULL, pro_e_std_feature_name ); */
/*-----------------------------------------------------*\
Populating element PRO_E_RM_SURF_REF_TYPE
\*-----------------------------------------------------*/
value_data.v.i = PRO_RM_SURF_SRF_REF;
status = ProUtilElemtreeElementAdd( pro_e_feature_tree, PRO_E_RM_SURF_REF_TYPE,
ELEM_VALUE_TYPE_INT, &value_data.v.i);
/*-----------------------------------------------------*\
Populating element PRO_E_RM_SURF_ATTACH_TYPE
\*-----------------------------------------------------*/
value_data.v.i = FM_RM_SURF_ATTACH_SAME;
status = ProUtilElemtreeElementAdd( pro_e_feature_tree, PRO_E_RM_SURF_ATTACH_TYPE,
ELEM_VALUE_TYPE_INT, &value_data.v.i);
/*
|
|-- PRO_E_RM_SURF_SRF_REFS
| |
| |-- PRO_E_STD_SURF_COLLECTION_APPL
| |
| |-- PRO_E_STD_EXCL_CNTRS
| |
| |-- PRO_E_STD_EXCL_CNTRS_ONE_CNTR
| |
| |-- PRO_E_STD_EXCL_CNTR_SRF_REF
| |
| |-- PRO_E_STD_EXCL_CNTR_EDGE_REF
|
|-- PRO_E_RM_SURF_CRV_REFS
| |
| |-- PRO_E_STD_CURVE_COLLECTION_APPL
*/
/*-----------------------------------------------------*\
Populating element PRO_E_RM_SURF_SRF_REFS
\*-----------------------------------------------------*/
status = ProElementAlloc ( PRO_E_RM_SURF_SRF_REFS,
&pro_e_rm_surf_srf_refs );
status = ProElemtreeElementAdd ( pro_e_feature_tree,
NULL, pro_e_rm_surf_srf_refs );
/*-----------------------------------------------------*\
Creating the collection object and setting the instructions
\*-----------------------------------------------------*/
status = ProSrfcollectionAlloc ( &collection );
/* status = ProCrvcollinstrAlloc ( PRO_CURVCOLL_ADD_ONE_INSTR, &instr ); */
status = ProSrfcollinstrAlloc ( 1, PRO_B_TRUE, &instr );
status = ProSrfcollinstrIncludeSet ( instr, 1 );
status = ProArraySizeGet ( p_sel, &no_sels);
for (i=0; i<no_sels; i++)
{
status = ProSelectionToReference ( p_sel[i], &reference );
ERROR_CHECK("ProMdlToModelitem", "UtilCreateRemoveSurfaceFeature", status);
status = ProSrfcollrefAlloc ( PRO_SURFCOLL_REF_SINGLE,
reference, &isntr_ref );
status = ProSrfcollinstrReferenceAdd ( instr, isntr_ref );
ERROR_CHECK("ProSrfcollinstrReferenceAdd", "UtilCreateRemoveSurfaceFeature", status);
}
status = ProSrfcollectionInstructionAdd ( collection, instr );
status = ProSrfcollectionCopy ( collection, &srf_collection );
if ( status != PRO_TK_NO_ERROR )
{
return status;
}
/*-----------------------------------------------------*\
Populating element PRO_E_STD_SURF_COLLECTION_APPL
\*-----------------------------------------------------*/
status = ProUtilElemtreeElementAdd( pro_e_rm_surf_srf_refs, PRO_E_STD_SURF_COLLECTION_APPL,
ELEM_VALUE_TYPE_COLLECTION, srf_collection);
/*-----------------------------------------------------*\
Populating element PRO_E_STD_EXCL_CNTRS
\*-----------------------------------------------------*/
status = ProElementAlloc ( PRO_E_STD_EXCL_CNTRS, &pro_e_std_excl_cntrs );
status = ProElemtreeElementAdd ( pro_e_rm_surf_srf_refs,
NULL, pro_e_std_excl_cntrs );
/*-----------------------------------------------------*\
Creating feature in the model.
\*-----------------------------------------------------*/
rem_surf_status = ProUtilFeatCreate(p_comp_path,
model, pro_e_feature_tree, &feature);
/*-----------------------------------------------------*\
Free up the allocated memory.
\*-----------------------------------------------------*/
status = ProElementFree (&pro_e_feature_tree);
return rem_surf_status;
}