/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include "ProToolkit.h" #include "ProGeomitem.h" #include "ProMenu.h" #include "ProMdl.h" #include "ProSelection.h" #include "ProUtil.h" /*--------------------------------------------------------------------*\ C System includes \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "TestFiletypes.h" #include "UtilFiles.h" #include "UtilMessage.h" #include <PTApplsUnicodeUtils.h> #include <ProTKRunTime.h> #include <ProSurface.h> /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #define USER_ANGLE_EVAL 0 #define USER_DISTANCE_EVAL 1 #define USER_DIAMETER_EVAL 2 /*====================================================================*\ FUNCTION : ProTestMeasureMenu() PURPOSE : Commands for testing Geomitem...Eval in Pro/TOOLKIT \*====================================================================*/ int ProTestMeasureMenu() { ProMdl model; ProError status; int action, menu_id; int ProTestMeasure(ProAppData, int); status = ProMdlCurrentGet(&model); TEST_CALL_REPORT("ProMdlCurrentGet()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenuFileRegister((char*)"TkMeasure", (char*)"tkmeasure.mnu", &menu_id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkMeasure", (char*)"Angle", (ProMenubuttonAction)ProTestMeasure, model, USER_ANGLE_EVAL); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkMeasure", (char*)"Distance", (ProMenubuttonAction)ProTestMeasure, model, USER_DISTANCE_EVAL); TEST_CALL_REPORT((char*)"ProMenubuttonActionSet()", (char*)"ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkMeasure", (char*)"Diameter", (ProMenubuttonAction)ProTestMeasure, model, USER_DIAMETER_EVAL); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkMeasure", (char*)"TkMeasure", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); /* Display Menu and set it into action. */ status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkMeasure", &menu_id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"TkTkMeasure", &action); TEST_CALL_REPORT("ProMenuProcess()", "ProTestMeasureMenu()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_FOUND); return(1); } /*====================================================================*\ FUNCTION : ProTestMeasure PURPOSE : Commands for testing Geomitem...Eval in Pro/TOOLKIT \*====================================================================*/ int ProTestMeasure(ProAppData app_data, int option) { ProMdl model = (ProMdl) app_data; ProError status; int allow, p_count; ProCharLine string; char *ch; double dist, diam; ProSelection *p_sel_arr; ProModelitem mod_item; ProSurface surf; ProUvParam uv_par; ProCharLine fname; FILE *fp; ProTestQcrName(&model, (char*)".msr", fname); if ( (fp = PTApplsUnicodeFopen(fname,"a")) == NULL ) return(-1); dist = 0.0; switch(option) { case USER_ANGLE_EVAL: ch = (char*)"edge"; allow =2; break; case USER_DISTANCE_EVAL: ch =(char*)"surface,point,axis"; allow = 2; break; case USER_DIAMETER_EVAL: ch = (char*)"surface"; allow = 1; break; default: return (-1); } /* Get the user's selection */ ProUtilMsgPrint("gen", "TEST %0s", "Select a geometry"); status = ProSelect(ch, allow, NULL, NULL, NULL, NULL, &p_sel_arr, &p_count); TEST_CALL_REPORT("ProSelect()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); if (status != PRO_TK_NO_ERROR || p_count < allow) return (0); switch (option) { case USER_ANGLE_EVAL: status = ProGeomitemAngleEval(p_sel_arr[0], p_sel_arr[1], &dist); TEST_CALL_REPORT("ProGeomitemAngleEval()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); ch = (char*)"Angle"; break; case USER_DISTANCE_EVAL: status = ProGeomitemDistanceEval(p_sel_arr[0], p_sel_arr[1], &dist); TEST_CALL_REPORT("ProGeomitemDistanceEval()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); ch = (char*)"Distance"; break; case USER_DIAMETER_EVAL: status = ProSelectionModelitemGet(p_sel_arr[0], &mod_item); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); status = ProSelectionUvParamGet(p_sel_arr[0], uv_par); TEST_CALL_REPORT("ProSelectionUvParamGet()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); status = ProGeomitemToSurface((ProGeomitem*)&mod_item, &surf); TEST_CALL_REPORT("ProGeomitemToSurface()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); status = ProSurfaceDiameterEval(surf, uv_par, &diam); TEST_CALL_REPORT("ProSurfaceDiameterEval()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); status = ProGeomitemDiameterEval(p_sel_arr[0], &dist); TEST_CALL_REPORT("ProGeomitemDiameterEval()", "ProTestMeasure()", status, status != PRO_TK_NO_ERROR); if (dist != diam) ProTKFprintf(fp, "Error: ProSurfaceDiameterEval and " "ProGeomitemDiameterEval return different value!\n"); ch = (char*)"Diameter"; break; } ProTKSprintf(string, "%s = %7.3f", ch, dist); ProUtilMsgPrint("gen", "TEST %0s", string); ProTKFprintf(fp, "%s\n", string); fclose(fp); return (0); }