/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*----------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*----------------------------------------------------------------------------*/ #include <ProToolkit.h> #include <ProMenu.h> #include <ProMdl.h> #include <ProArray.h> #include <ProUtil.h> #include <ProWindows.h> #include <ProArray.h> #include <ProNotify.h> #include <ProFeatType.h> #include <ProSolid.h> /*----------------------------------------------------------------------------*\ C System includes \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application includes \*----------------------------------------------------------------------------*/ #include "UtilMessage.h" #include "UtilMenu.h" #include "PTApplsUnicodeUtils.h" #include <UtilFiles.h> #include <UtilVisit.h> #include <TestError.h> #include <TestMisc.h> /*----------------------------------------------------------------------------*\ Application macros \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application prototypes \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application global/external data \*----------------------------------------------------------------------------*/ FUNCTION : ProTestMultiCADFile PURPOSE : Setup menu for testing ProError ProMultiCADRetrievePreAction (ProMdl p_retrieved_mdl); ProError ProMultiCADSavePreAction (ProPath r_model_path); ProError ProMultiCADSavePostAction (ProPath r_model_path); ProError ProTestMultiCADFile() { ProError status; int menu_id, menu_action; FILE *MultiCAD_fp; status = ProMenuFileRegister((char *)"MULTI-CAD",(char *)"tkmulticad.mnu", &menu_id); status = ProMenubuttonActionSet((char *)"MULTI-CAD", (char *)"Retrieve", (ProMenubuttonAction)ProMultiCADFileRetrieve, NULL, 0); status = ProMenubuttonActionSet((char *)"MULTI-CAD", (char *)"Info", (ProMenubuttonAction)ProMultiCADFileInfo, NULL, 0); status = ProMenubuttonActionSet((char *)"MULTI-CAD",(char *)"Done/Return", (ProMenubuttonAction)ProMenuDelete,NULL,0); status = ProMenubuttonActionSet((char *)"MULTI-CAD",(char *)"MULTI-CAD", (ProMenubuttonAction)ProMenuDelete,NULL,0); /*--------------------------------------------------------------------*\ Make main menu visible \*--------------------------------------------------------------------*/ status = ProMenuCreate( PROMENUTYPE_MAIN, (char *)"MULTI-CAD", &menu_id ); TEST_CALL_REPORT( "ProMenuCreate()", "ProTestMultiCADFile()", status, status != PRO_TK_NO_ERROR ); if( status == PRO_TK_NO_ERROR ) { status = ProMenuProcess( (char *)"MULTI-CAD", &menu_action ); TEST_CALL_REPORT( "ProMenuProcess()", "ProTestMultiCADFile()", status, status != PRO_TK_NO_ERROR ); } MultiCAD_fp = PTApplsUnicodeFopen ("MultiCAD_Notifications.inf", "w"); /* Sets notification PRO_MODEL_SAVE_PRE */ status = ProNotificationSet(PRO_MODEL_SAVE_PRE, ProMultiCADSavePreAction); TEST_CALL_REPORT( "ProNotificationSet()", "ProTestMultiCADFile()", status, status != PRO_TK_NO_ERROR ); /* Sets notification PRO_MODEL_SAVE_POST */ status = ProNotificationSet(PRO_MODEL_SAVE_POST, ProMultiCADSavePostAction); TEST_CALL_REPORT( "ProNotificationSet()", "ProTestMultiCADFile()", status, status != PRO_TK_NO_ERROR ); /* Sets notification PRO_MODEL_SAVE_POST_ALL */ status = ProNotificationSet(PRO_MODEL_SAVE_POST_ALL, ProMultiCADSavePostAction); TEST_CALL_REPORT( "ProNotificationSet()", "ProTestMultiCADFile()", status, status != PRO_TK_NO_ERROR ); fclose(MultiCAD_fp); return (status); } FUNCTION : ProMultiCADSavePreAction PURPOSE : Callback function for notification PRO_MODEL_SAVE_PRE ProError ProMultiCADSavePreAction (ProPath r_model_path) { FILE *MultiCAD_fp; MultiCAD_fp = PTApplsUnicodeFopen ("MultiCAD_Notifications.inf", "a"); ProTKFprintf ( MultiCAD_fp, "Called Notification PRO_MODEL_SAVE_PRE. \n"); fclose(MultiCAD_fp); return (PRO_TK_NO_ERROR); } FUNCTION : ProMultiCADSavePostAction PURPOSE : Callback function for notification PRO_MODEL_SAVE_POST ProError ProMultiCADSavePostAction (ProPath r_model_path) { FILE *MultiCAD_fp; MultiCAD_fp = PTApplsUnicodeFopen ("MultiCAD_Notifications.inf", "a"); ProTKFprintf ( MultiCAD_fp, "Called Notification PRO_MODEL_SAVE_POST. \n"); fclose(MultiCAD_fp); return (PRO_TK_NO_ERROR); } FUNCTION : ProMultiCADSavePostAction PURPOSE : Callback function for notification PRO_MODEL_SAVE_POST_ALL ProError ProMultiCADSavePostAllAction (ProPath r_model_path) { FILE *MultiCAD_fp; MultiCAD_fp = PTApplsUnicodeFopen ("MultiCAD_Notifications.inf", "a"); ProTKFprintf ( MultiCAD_fp, "Called Notification PRO_MODEL_SAVE_POST_ALL. \n"); fclose(MultiCAD_fp); return (PRO_TK_NO_ERROR); } FUNCTION : TkMultiCADFileRetrieve PURPOSE : Action function for Retrieve (main->MULTI-CAD->Retreive) ProError ProMultiCADFileRetrieve () { ProError status; ProMdlfileType *fileTypeArray, fileType; ProPath filePath; ProMdl mdlHandle; int i, winId; ProMdlfileType retrieveFileType; ProMdlName fileName; /* File types allowed/shown in toolkits file open dialog. */ int multiCADTypes[9] = {PRO_MDLFILE_PART, PRO_MDLFILE_ASSEMBLY, PRO_MDLFILE_UG, PRO_MDLFILE_SW_PART, PRO_MDLFILE_SW_ASSEM, PRO_MDLFILE_CATIA_MODEL, PRO_MDLFILE_CATIA_CGR, PRO_MDLFILE_CATIA_PART, PRO_MDLFILE_CATIA_PRODUCT}; status = ProArrayAlloc(0, sizeof(ProMdlfileType), 1, (ProArray*)&fileTypeArray); TEST_CALL_REPORT( "ProArrayAlloc()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); for (i = 0; i < 9; i++) { fileType = multiCADTypes[i]; status = ProArrayObjectAdd ((ProArray*)&fileTypeArray, PRO_VALUE_UNUSED, 1, &fileType); TEST_CALL_REPORT( "ProArrayObjectAdd()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); } /* Opens toolkit's file open Dialog */ status = ProFileMdlfiletypeOpen(L"TKMultiCAD Open", fileTypeArray, NULL, NULL, NULL, NULL, filePath); TEST_CALL_REPORT( "ProFileMdlfiletypeOpen()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_USER_ABORT); if(status == PRO_TK_NO_ERROR) { /* Gets file type from input file path */ status = ProFileSubtypeGet(filePath, &retrieveFileType, NULL, NULL); TEST_CALL_REPORT( "ProFileSubtypeGet()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); /* Gets file name from input file path */ status = ProFileMdlnameParse(filePath, NULL, fileName, NULL, NULL); TEST_CALL_REPORT( "ProFileMdlnameParse()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); /* File names having more than 80 chars are not supported in Creo3 */ status = ProMdlnameRetrieve(fileName, retrieveFileType, &mdlHandle); TEST_CALL_REPORT( "ProMdlnameRetrieve()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); status = ProMdlDisplay(mdlHandle); TEST_CALL_REPORT( "ProMdlFiletypeLoad()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); /* Gets window ID for retreived model */ status = ProMdlWindowGet(mdlHandle, &winId); TEST_CALL_REPORT( "ProMdlWindowGet()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); /* Activates model window */ status = ProWindowActivate(winId); TEST_CALL_REPORT( "ProWindowActivate()", "TkMultiCADFileRetrieve()", status, status != PRO_TK_NO_ERROR); } return (status); } FUNCTION : TkMultiCADFileInfo PURPOSE : Action function for Info (main->MULTI-CAD->Info) ProError ProMultiCADFileInfo (ProMdl model) { ProError status; ProPath file_name; char file_cname[PRO_NAME_SIZE]; FILE *MultiCADInfo_fp; strcpy(file_cname, "MultiCAD_Info.inf"); ProStringToWstring (file_name, file_cname); MultiCADInfo_fp = PTApplsUnicodeFopen (file_cname, "w"); /* Gets current model handle */ status = ProMdlCurrentGet (&model); TEST_CALL_REPORT( "ProMdlCurrentGet()", "ProMultiCADFileInfo()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_BAD_CONTEXT); if(status != PRO_TK_NO_ERROR) return (status); ProTKFprintf (MultiCADInfo_fp,"*********************************** \n"); ProTKFprintf (MultiCADInfo_fp," -MULTI-CAD File info \n"); ProTKFprintf (MultiCADInfo_fp,"*********************************** \n"); /* Utility to write current model info */ status = ProUtilMultiCADFileInfo(model, MultiCADInfo_fp); TEST_CALL_REPORT( "ProUtilMultiCADFileInfo()", "ProMultiCADFileInfo()", status, status != PRO_TK_NO_ERROR ); fclose(MultiCADInfo_fp); status = ProInfoWindowDisplay(file_name, NULL, NULL); TEST_CALL_REPORT( "ProInfoWindowDisplay()", "ProMultiCADFileInfo()", status, status != PRO_TK_NO_ERROR ); return (status); }