/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkit.h>
#include <ProMfg.h>
#include <ProSolid.h>
#include <ProAsmcomppath.h>
#include <ProFeatType.h>
#include <ProUtil.h>
#include <TestError.h>
ProLine msg_fil17;
#define MSG_FIL ProStringToWstring(msg_fil17,"msg_ugmfg.txt")
/*+++++++++++++++++UG_ENTRY_STARTS_HERE++++++++++++++++++++++*/
/*====================================================================*\
Function : UserMfgWcellCollect
Purpose : Add workcell feature pointer to array of workcells
\*====================================================================*/
ProError UserMfgWcellCollect (
ProFeature *wcell,
ProError err,
ProAppData wcell_array )
{
err = ProArrayObjectAdd((ProArray*)wcell_array, PRO_VALUE_UNUSED,
1, (void*)wcell);
ERROR_CHECK("UserMfgWcellCollect","ProArrayObjectAdd",err);
return err;
}
/*====================================================================*\
Function : UserFeatNonWcellFilter
Purpose : Filter out non workcell features
\*====================================================================*/
ProError UserFeatNonWcellFilter (
ProFeature *feature,
ProAppData unused )
{
ProError status = PRO_TK_NO_ERROR;
ProFeattype feat_type;
status = ProFeatureTypeGet(feature, &feat_type);
ERROR_CHECK("UserFeatNonWcellFilter","ProFeatureTypeGet",status);
if ( status != PRO_TK_NO_ERROR || feat_type != PRO_FEAT_WORKCELL)
return PRO_TK_CONTINUE; /* Don't visit this item */
else
return PRO_TK_NO_ERROR; /* Do visit this one! */
}
/*====================================================================*\
Function : UserMfgWcellList
Purpose : Collects an array of Workcells that belong to a manufacturing
model.
\*====================================================================*/
int UserMfgWcellList ()
{
ProError err = PRO_TK_NO_ERROR;
ProFeature *wcell_array = (ProFeature*)NULL;
ProMdl mfg_model;
ProSolid mfg_solid;
int num_wcells = -1;
err = ProMdlCurrentGet(&mfg_model);
ERROR_CHECK("UserMfgWcellList","ProMdlCurrentGet",err);
err = ProArrayAlloc(0, sizeof(ProFeature*), 1, (ProArray*)&wcell_array);
ERROR_CHECK("UserMfgWcellList","ProArrayAlloc",err);
if (err == PRO_TK_NO_ERROR)
{
err = ProMfgSolidGet ((ProMfg)mfg_model, &mfg_solid);
ERROR_CHECK("UserMfgWcellList","ProMfgSolidGet",err);
err = ProSolidFeatVisit(mfg_solid, UserMfgWcellCollect,
UserFeatNonWcellFilter, (ProAppData)&wcell_array );
ERROR_CHECK("UserMfgWcellList","ProSolidFeatVisit",err);
if (err == PRO_TK_NO_ERROR)
{
err = ProArraySizeGet((ProArray)wcell_array, &num_wcells);
ERROR_CHECK("UserMfgWcellList","ProSolidFeatVisit",err);
if (err == PRO_TK_NO_ERROR )
{
err = ProMessageDisplay(MSG_FIL,
"USER There are %0d workcells in this model", &num_wcells );
ERROR_CHECK("UserMfgWcellList","ProMessageDisplay",err);
}
}
err = ProArrayFree((ProArray*)&wcell_array);
ERROR_CHECK("UserMfgWcellList","ProArrayFree",err);
}
if ( num_wcells == -1 )
{
err = ProMessageDisplay(MSG_FIL,
"USER Error determining the number of workcells");
ERROR_CHECK("UserMfgWcellList","ProMessageDisplay",err);
}
return ((int)err);
}
/*++++++++++++++++++++++++++++++++UG_ENTRY_ENDS_HERE++++++++++*/
#undef MSG_FIL