/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*------------------------ ProToolkit includes ---------------------------*/
#include <ProToolkit.h>
#include <ProMdl.h>
#include <ProFeature.h>
#include <ProObjects.h>
#include <ProFeatType.h>
#include <ProUtil.h>
#include <PTApplsUnicodeUtils.h>
#include <ProAsmcomp.h>
#include <ProSolid.h>
/*----------------------- Application includes --------------------------*/
#include <TestError.h>
/*------------------------- Global definition ---------------------------*/
#define FILENAME "assembly.lst"
typedef struct user_appdata
{
FILE *fp;
int level;
} UserAppdata;
/*------------------------ Function prototypes --------------------------*/
int UserAsmCompVisit(void *dummy, int dummy2);
ProError UserAsmCompFilter(ProFeature *feature,ProAppData app_data);
ProError user_action(ProFeature *feature,ProError status,ProAppData appdata);
/*---------------------------------------------------------------------*\
Write the information to a file
\*---------------------------------------------------------------------*/
ProError user_action(
ProFeature *feature,
ProError status,
ProAppData appdata)
{
FILE *fp;
int l,level;
ProError err;
ProMdl mdl;
char name[PRO_MDLNAME_SIZE];
char type[PRO_MDLEXTENSION_SIZE];
wchar_t wname[PRO_NAME_SIZE];
UserAppdata *appd,appd1;
ProMdldata mdldata;
ProMdlName modelName;
ProMdlExtension modelExtension;
appd = (UserAppdata *)appdata;
fp = appd->fp;
level = appd->level;
err = ProAsmcompMdlGet(feature , &mdl);
ERROR_CHECK( "user_action", "ProAsmcompMdlGet", err );
err = ProMdlMdlnameGet(mdl, modelName);
ERROR_CHECK( "user_action", "ProMdlMdlnameGet", err );
err = ProMdlExtensionGet(mdl, modelExtension);
ERROR_CHECK( "user_action", "ProMdlExtensionGet", err );
ProWstringToString(name,modelName);
ProWstringToString(type,modelExtension);
for(l=0;l<level;l++)
ProTKFprintf(fp," ");
ProTKFprintf(fp,"%s %s\n",name,type);
if (strncmp(type,"ASM",3) == 0)
{
appd1.fp = appd->fp;
appd1.level = appd->level+1;
err = ProSolidFeatVisit(mdl, user_action, UserAsmCompFilter, &appd1);
ERROR_CHECK( "user_action", "ProSolidFeatVisit", err );
}
if (feature != NULL) return(PRO_TK_NO_ERROR);
return(PRO_TK_CONTINUE);
}
/*---------------------------------------------------------------------*\
Function : to write out the members of the current assembly, and display
the result in an information window.
\*---------------------------------------------------------------------*/
int UserAsmCompVisit(void *dummy, int dummy2)
{
char name[PRO_MDLNAME_SIZE];
char type[PRO_MDLEXTENSION_SIZE];
wchar_t wname[PRO_NAME_SIZE];
ProError err;
UserAppdata appdata;
FILE *fp;
ProMdl p_asm;
ProMdlName modelName;
ProMdlExtension modelExtension;
err = ProMdlCurrentGet(&p_asm);
ERROR_CHECK( "UserAsmCompVisit", "ProMdlCurrentGet", err );
/*---------------------------------------------------------------------*\
Open the text file.
\*---------------------------------------------------------------------*/
strcpy(name,FILENAME);
fp = PTApplsUnicodeFopen(name,"w");
err = ProMdlMdlnameGet(p_asm, modelName);
ERROR_CHECK( "user_action", "ProMdlMdlnameGet", err );
err = ProMdlExtensionGet(p_asm, modelExtension);
ERROR_CHECK( "user_action", "ProMdlExtensionGet", err );
ProWstringToString(name,modelName);
ProWstringToString(type,modelExtension);
ProTKFprintf(fp, "%s %s\n",name,type);
appdata.fp = fp;
appdata.level = 1;
/*---------------------------------------------------------------------*\
List the assembly members
\*---------------------------------------------------------------------*/
err = ProSolidFeatVisit(p_asm, user_action, UserAsmCompFilter, &appdata);
ERROR_CHECK( "UserAsmCompVisit", "ProSolidFeatVisit", err );
/*-------- ------------------------------------------------------------*\
Close the file, and display it.
\*---------------------------------------------------------------------*/
fclose(fp);
ProStringToWstring(wname, FILENAME);
err = ProInfoWindowDisplay(wname, NULL, NULL);
ERROR_CHECK( "UserAsmCompVisit", "ProInfoWindowDisplay", err );
return(PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION : UserAsmCompFilter()
PURPOSE : A filter used by ProSolidFeatVisit() to visit
features which are assembly components
\*====================================================================*/
ProError UserAsmCompFilter(
ProFeature *feature,
ProAppData app_data)
{
ProError status;
ProFeattype ftype;
/*--------------------------------------------------------------------*\
Get the feature type
\*--------------------------------------------------------------------*/
status = ProFeatureTypeGet(feature, &ftype);
/*--------------------------------------------------------------------*\
If the feature is an assembly component,
return NO ERROR,
else
return CONTINUE
\*--------------------------------------------------------------------*/
if(ftype == PRO_FEAT_COMPONENT)
return(PRO_TK_NO_ERROR);
return(PRO_TK_CONTINUE);
}