/*
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);
}