/*--------------- Static variables ---------------------*/
static int srf_entry_count;
/*=====================================================*\
Function: UserSurfArea()
Purpose: Compute Area of the Surface Collection
\*=====================================================*/
ProError UserSurfArea()
{
int sel_count;
ProError status;
ProCharName name;
ProModelitem model_item;
ProFileName msgfile;
ProName w_name;
ProCollection collection;
ProSelection * regen_sels;
int n_regen_sels;
double total_area = 0;
ProParameter param;
ProParamvalue param_value;
ProName param_name;
char param_name_s[PRO_NAME_SIZE];
ProSelection * coll_sels;
int coll_sels_size;
ProCollectioninstrType coll_filters[] = { PRO_SURFCOLL_SINGLE_SURF };
srf_entry_count++;
/*-----------------------------------------------------*\
Prompt user for Surface Collection
\*-----------------------------------------------------*/
ProStringToWstring(msgfile,"Message.txt");
status = ProMessageDisplay(msgfile,"USER Collect Surfaces to find total area:");
// ERROR_CHECK("UserSurfArea","ProMessageDisplay",status);
status = ProSrfcollectionAlloc ( &collection );
//ERROR_CHECK( "UserSurfArea", "ProSrfcollectionAlloc", status );
/*-----------------------------------------------------*\
Interactive Surface Collection
\*---------------------------------------------------*/
status = ProSurfacesCollect (coll_filters,
0,
(ProCollFilter ) NULL,
(ProAppData ) NULL,
collection,
&coll_sels,
&coll_sels_size );
//ERROR_CHECK( "UserSurfArea", "ProSurfacesCollect", status );
/*-----------------------------------------------------*\
Regenerating the returned collection to get the list of constituent surfaces
\*-----------------------------------------------------*/
status = ProSrfcollectionRegenerate ( collection,
®en_sels, &n_regen_sels );
if ( ( status != PRO_TK_NO_ERROR ) || ( n_regen_sels <= 0 ) )
return PRO_TK_GENERAL_ERROR;
/*-----------------------------------------------------*\
Evaluating the overall area from surface collection & assigning parameters to the individual surfaces
\*-----------------------------------------------------*/
for ( sel_count = 0; sel_count < n_regen_sels; sel_count++ )
{
ProSurface surface;
double area;
status = ProSelectionModelitemGet ( regen_sels[sel_count],
&model_item );
//ERROR_CHECK( "UserSurfArea", "ProSelectionModelitemGet", status );
status = ProGeomitemToSurface ( &model_item, &surface );
//ERROR_CHECK( "UserSurfArea", "ProGeomitemToSurface", status );
/*--------------------------------------------*\
Evaluating the area of individual surface
\*--------------------------------------------*/
status = ProSurfaceAreaEval ( surface, &area );
//ERROR_CHECK( "UserSurfArea", "ProSurfaceAreaEval", status );
total_area = total_area + area;
/*------------------------------------------*\
Initializing Parameter value
\*-----------------------------------------*/
param_value.type = PRO_PARAM_DOUBLE;
param_value.value.d_val = area;
sprintf_s ( param_name_s, "%s_%d", "srf_dbl",
srf_entry_count+sel_count );
ProStringToWstring ( param_name, param_name_s );
status = ProModelitemNameSet ( &model_item, param_name );
//ERROR_CHECK( "UserSurfArea", "ProModelitemNameSet", status );
/*-------------------------------------------*\
Creating Parameter for surface
\*-----------------------------------------*/
status = ProParameterCreate ( &model_item, param_name, ¶m_value,
¶m );
//ERROR_CHECK( "UserSurfArea", "ProParameterCreate", status );
}
status = ProMessageDisplay(msgfile,"USER Total Surface Area is %0f",&total_area);
//ERROR_CHECK( "UserSurfArea", "ProMessageDisplay", status );
/*-----------------------------------------------------*\
Freeing Memory
\*-----------------------------------------------------*/
status = ProCollectionFree ( &collection );
//ERROR_CHECK( "UserSurfArea", "ProCollectionFree", status );
status = ProSelectionarrayFree ( regen_sels );
//ERROR_CHECK( "UserSurfArea", "ProSelectionarrayFree", status );
status = ProSelectionarrayFree ( coll_sels );
//ERROR_CHECK( "UserSurfArea", "ProSelectionarrayFree", status );
ProMessageClear();
return(status);
}