/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*---------------------- Pro/Toolkit Includes ------------------------*/ #include "ProToolkit.h" #include "ProAxis.h" #include "ProFeature.h" #include "ProFeatType.h" #include "ProGeomitem.h" #include "ProMdl.h" #include "ProModelitem.h" #include "ProObjects.h" #include "ProSelection.h" #include "ProSizeConst.h" #include "ProSolid.h" #include "ProUtil.h" /*---------------------- Application Includes ------------------------*/ #include "TestError.h" /*---------------------- Global Data ------------------------*/ typedef struct surface_visit_data { FILE *fp; ProSolid part; } AxisVisitData_t; /*---------------------- Function Prototypes -------------------------*/ ProError UserDemoAxisAct(); ProError UserDemoHoleList(); int UserVisitDemo(); /*====================================================================*\ FUNCTION : UserDemoAxisAct() PURPOSE : Axis-visit action function, to write the axis name to a file. \*====================================================================*/ ProError UserDemoAxisAct( ProAxis axis, ProError filt_status, ProAppData app_data) { ProError status; AxisVisitData_t *p_data = (AxisVisitData_t*)app_data; ProSolid part=p_data->part; FILE *fp=p_data->fp; int id; ProModelitem modelitem; ProFeature feature; ProFeattype ftype; ProName wname; char name[PRO_NAME_SIZE]; ProSelection selection; /*--------------------------------------------------------------------*\ Get the axis id \*--------------------------------------------------------------------*/ status = ProAxisIdGet(axis, &id); if(status != PRO_TK_NO_ERROR) return(status); /*--------------------------------------------------------------------*\ Make a Modelitem handle for the axis \*--------------------------------------------------------------------*/ status = ProModelitemInit(part, id, PRO_AXIS, &modelitem); if(status != PRO_TK_NO_ERROR) return(status); /*--------------------------------------------------------------------*\ Get the feature the axis belongs to \*--------------------------------------------------------------------*/ status = ProGeomitemFeatureGet(&modelitem, &feature); if(status != PRO_TK_NO_ERROR) return(status); /*--------------------------------------------------------------------*\ Get the type of the feature \*--------------------------------------------------------------------*/ status = ProFeatureTypeGet(&feature, &ftype); if(status != PRO_TK_NO_ERROR) return(status); /*--------------------------------------------------------------------*\ If the type was not HOLE, skip \*--------------------------------------------------------------------*/ if(ftype != PRO_FEAT_HOLE) return(PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ Get the name of the axis \*--------------------------------------------------------------------*/ status = ProModelitemNameGet(&modelitem, wname); if(status != PRO_TK_NO_ERROR) return(status); ProWstringToString(name,wname); /*--------------------------------------------------------------------*\ Print out the axis name and hole id \*--------------------------------------------------------------------*/ ProTKFprintf(fp, "Axis %s belongs to hole feature %d\n", name, feature.id); /*--------------------------------------------------------------------*\ Highlight the owning hole \*--------------------------------------------------------------------*/ ProSelectionAlloc(NULL, &feature, &selection); ProSelectionHighlight(selection, PRO_COLOR_HIGHLITE); ProSelectionFree(&selection); return(PRO_TK_NO_ERROR); } /*====================================================================*\ FUNCTION : UserDemoHoleList() PURPOSE : Function to list the axes which belong to hole features in a part, and report their names \*====================================================================*/ ProError UserDemoHoleList( ProSolid part) { ProError status; AxisVisitData_t data; data.part = part; /*--------------------------------------------------------------------*\ Open the text file \*--------------------------------------------------------------------*/ data.fp = PTApplsUnicodeFopen("visit_test.dat","w"); /*--------------------------------------------------------------------*\ Visit all the axes using the visit and filter functions above. Pass the owning sold, and the text file pointer using the app_data argument. \*--------------------------------------------------------------------*/ status = ProSolidAxisVisit(part, UserDemoAxisAct, NULL, (ProAppData)&data); ERROR_CHECK("UserDemoHoleList","ProSolidAxisVisit",status); /*--------------------------------------------------------------------*\ Close the file \*--------------------------------------------------------------------*/ fclose(data.fp); return( PRO_TK_NO_ERROR ); } /*====================================================================*\ FUNCTION : UserVisitDemo PURPOSE : call UserDemoHoleList on current model \*====================================================================*/ int UserVisitDemo( ) { ProMdl model; ProError status; status = ProMdlCurrentGet( &model ); ERROR_CHECK( "UserDemoVisit", "ProMdlCurrentGet", status ); if ( status == PRO_TK_NO_ERROR ) status = UserDemoHoleList( (ProSolid)model ); return( (int)status ); }