/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*---------------------- Pro/Toolkit Includes ------------------------*/ #include "ProToolkit.h" #include "ProMdl.h" #include "ProFeature.h" #include "ProMenu.h" #include "ProSolid.h" #include "ProArray.h" #include "ProFeatType.h" #include "ProUtil.h" /*---------------------- Application Includes ------------------------*/ #include "TestError.h" /*---------------------- Function Prototypes -------------------------*/ int UserFeatCollectExample(); int UserFeatureCollect(ProFeature **fArray); ProError FeatFilterAction(ProFeature* pFeature, ProAppData aData); ProError FeatVisitAction(ProFeature* pFeature, ProError eStatus, ProAppData aData); /* ========================================================================== *\ Function: UserButtonAction() Purpose: Write feature type and id to file on disk and diplays in Info Window \* ========================================================================== */ int UserFeatCollectExample() { ProFeature *fList; ProFeattype fType; int status, eStatus, aSize, i; FILE *fp; ProPath w_filename; status = ProArrayAlloc(0, sizeof(ProFeature), 1, (ProArray *)&fList); ERROR_CHECK("UserButtonAction", "ProArrayAlloc", status); eStatus = UserFeatureCollect(&fList); fp = PTApplsUnicodeFopen("fCollect.txt", "w"); status = ProArraySizeGet(fList, &aSize); ERROR_CHECK("UserButtonAction", "ProArraySizeGet", status); for ( i = 0; i < aSize; i++) { status = ProFeatureTypeGet(&fList[i], &fType); ProTKFprintf(fp, "\nFeature type: %d\tFeature id: %d\n", fType, fList[i].id); } eStatus = fclose(fp); ProStringToWstring(w_filename, "fCollect.txt"); status = ProInfoWindowDisplay(w_filename, NULL, NULL); status = ProArrayFree((ProArray*)&fList); ERROR_CHECK("UserButtonAction", "ProArrayFree", status); return(eStatus); } /* ========================================================================== *\ Function: UserFeatureCollect() Purpose: Visit all features in part \* ========================================================================== */ int UserFeatureCollect(ProFeature **fArray) { ProMdl model; int status; status = ProMdlCurrentGet(&model); ERROR_CHECK("UserFeatureCollect", "ProMdlCurrentGet", status); status = ProSolidFeatVisit((ProSolid)model, FeatVisitAction, FeatFilterAction, (ProAppData)fArray); ERROR_CHECK("UserFeatureCollect", "ProSolidFeatureVisit", status); return(status); } /* ========================================================================== *\ Function: FeatFilterAction() Purpose: Eliminates parts that are not visible from visit action \* ========================================================================== */ ProError FeatFilterAction(ProFeature* pFeature, ProAppData aData) { int status; ProBoolean iVisible; status = ProFeatureVisibilityGet(pFeature, &iVisible); ERROR_CHECK("FeatFilterAction", "ProFeatureVisibilityGet", status); if (iVisible == PRO_B_TRUE) return(PRO_TK_NO_ERROR); else return(PRO_TK_CONTINUE); } /* ========================================================================== *\ Function: FeatVisitAction() Purpose: Collects feature handles in expandable array \* ========================================================================== */ ProError FeatVisitAction(ProFeature *pFeature, ProError eStatus, ProAppData aData) { int status; status = ProArrayObjectAdd((ProArray *)aData, PRO_VALUE_UNUSED, 1, pFeature); ERROR_CHECK("FeatVisitAction", "ProArrayObjectAdd", status); return(status); }