/* 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 <ProIntfimport.h> #include <ProUI.h> #include <ProUIDialog.h> #include <ProUIPushbutton.h> #include <ProUIInputpanel.h> #include <ProMessage.h> #include <ProUtil.h> /*---------------------- Application Includes ------------------------*/ #include <TestError.h> #include <UgUtilUI.h> #include <UtilString.h> #define MSGFIL L##"msg_uginterface.txt" int UserIGESImportNewModelViaFilter(ProPath input_file, ProMdlName new_model_name, ProName excluded_layer, ProMdl* model); /*====================================================================*\ FUNCTION: UserIGESImportViaFilter() PURPOSE: Import an IGES model into session and display it \*====================================================================*/ int UserIGESImportViaFilter() { ProError status; ProMdl model; ProPath input_file; ProMdlName new_model_name; ProName excluded_layer; ProLine filter_string; wchar_t* input; /*--------------------------------------------------------------------*\ Prompt for IGES file to import \*--------------------------------------------------------------------*/ ProMessageDisplay (MSGFIL, "USER Select an IGES file to import"); ProStringToWstring (filter_string, "*.igs"); status = ProFileMdlnameOpen (NULL, filter_string, NULL, NULL, NULL, NULL, input_file); if (status != PRO_TK_NO_ERROR) return status; /*--------------------------------------------------------------------*\ Prompt for new model name \*--------------------------------------------------------------------*/ status = UserPromptUI ("Create new model", "Enter new model name for IGES import", PRO_NAME_SIZE, &input); if (status != PRO_TK_NO_ERROR) return status; else { ProUtilWstrcpy (new_model_name, input); ProWstringFree (input); } /*--------------------------------------------------------------------*\ Prompt for the name of a layer that should be blanked \*--------------------------------------------------------------------*/ status = UserPromptUI ("Import layer filter", "Enter name of imported layer to blank", PRO_NAME_SIZE, &input); if (status != PRO_TK_NO_ERROR) return status; else { ProUtilWstrcpy (excluded_layer, input); ProWstringFree (input); } status = UserIGESImportNewModelViaFilter (input_file, new_model_name, excluded_layer, &model); if (status == PRO_TK_NO_ERROR) { ProMdlDisplay (model); } return(PRO_TK_NO_ERROR); } /*====================================================================*\ STRUCTURE: UserImportLayerFilterdata PURPOSE: Contains user data to be passed to the import layer filter function. \*====================================================================*/ typedef struct { ProName find_layer; } UserImportLayerFilterdata; /*====================================================================*\ FUNCTION: UserLayerFilter PURPOSE: Blanks and renames an unneeded layer \*====================================================================*/ ProError UserLayerFilter ( ProLayerfilterdata data, ProAppData application_data) { ProName layer_name; ProError status; UserImportLayerFilterdata* filterdata = (UserImportLayerFilterdata*)application_data; /*--------------------------------------------------------------------*\ Check if the current layer is the target \*--------------------------------------------------------------------*/ status = ProLayerfilterdataNameGet (data, layer_name); if (ProUtilWstrcmp (filterdata->find_layer, layer_name) == 0) { /*--------------------------------------------------------------------*\ Blank the found layer \*--------------------------------------------------------------------*/ status = ProLayerfilterdataActionSet (data, PRO_LAYER_IMPORT_BLANK); /*--------------------------------------------------------------------*\ Rename the found layer \*--------------------------------------------------------------------*/ status = ProLayerfilterdataNameSet (data, L"FOUND"); } return PRO_TK_NO_ERROR; } /*====================================================================*\ FUNCTION: UserIGESImportNewModelViaFilter() PURPOSE: Imports an IGES assembly file to an new model while filtering layers \*====================================================================*/ int UserIGESImportNewModelViaFilter(ProPath input_file, ProMdlName new_model_name, ProName excluded_layer, ProMdl* model) { ProError status; ProMdl created_model; ProIntfImportType import_type = PRO_INTF_IMPORT_IGES; ProMdlType mdl_type; /*--------------------------------------------------------------------*\ Set up the layer filter data - search for needed layer \*--------------------------------------------------------------------*/ UserImportLayerFilterdata data; ProUtilWstrcpy (data.find_layer, excluded_layer); *model = NULL; /*--------------------------------------------------------------------*\ Check for proper import model type \*--------------------------------------------------------------------*/ status = ProIntfimportSourceTypeGet (input_file, import_type, &mdl_type); if (status != PRO_TK_NO_ERROR) return PRO_TK_GENERAL_ERROR; /*--------------------------------------------------------------------*\ Import IGES file \*--------------------------------------------------------------------*/ status = ProIntfimportModelWithOptionsMdlnameCreate(input_file, NULL, import_type, mdl_type, PRO_IMPORTREP_MASTER, new_model_name, UserLayerFilter, &data, &created_model); if (status == PRO_TK_NO_ERROR) { *model = created_model; return PRO_TK_NO_ERROR; } else return status; } #undef MSGFIL