/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*---------------------- Pro/Toolkit Includes ------------------------*/ #include <ProToolkit.h> #include <ProNotify.h> #include <ProPopupmenu.h> #include <ProSelbuffer.h> #include <ProMenuBar.h> #include <ProUtil.h> #include <ProMessage.h> /*---------------------- Application Includes ------------------------*/ #include <TestError.h> /*---------------------- Function Prototypes -------------------------*/ ProError UserPopupmenuNotification( const char*); /*------------------------- External Data ----------------------------*/ int UserAsmcompConstraintsHighlight_OA(); uiCmdAccessState UserAsmcompConstraintsHighlight_TestMdlTree(uiCmdAccessMode); uiCmdAccessState UserAsmcompConstraintsHighlight_TestPM(uiCmdCmdId, ProAppData, ProSelection*); int UserFeatXMLWrite_OA(); uiCmdAccessState UserFeatXMLWrite_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserFeatXMLWrite_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); int UserPartInfoMass_OA(); uiCmdAccessState UserPartInfoMass_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserPartInfoMass_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); int UserApplyMaterial_OA(); uiCmdAccessState UserApplyMaterial_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserApplyMaterial_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); int UserSmtFlgWallCreate_OA_CreateISec(); int UserSmtFlgWallCreate_OA_CreateUserDefSec(); uiCmdAccessState UserSmtFlgWallCreate_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserSmtFlgWallCreate_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); int UserSmtFlatWallCreate_OA_CreateRectSec(); int UserSmtFlatWallCreate_OA_CreateUserDefSec(); uiCmdAccessState UserSmtFlatWallCreate_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserSmtFlatWallCreate_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); int UserSmtExtendWallCreate_OA_Thickness (); uiCmdAccessState UserSmtExtendWallCreate_TestMdlTree (uiCmdAccessMode mode); uiCmdAccessState UserSmtExtendWallCreate_TestPM (uiCmdCmdId id, ProAppData data, ProSelection* sels); static int UserAdditionalPopupmenusSetup(); static ProError UserAdditionalPopupmenuNotification (const char* name); #define OA_MSGFILE "pt_ug_oa.txt" #define MDLTREE_MENU "ActionMenu" #define CMD_UGASMCOMPCONSTRSHIGHLIGHT "UGAsmcompConstrsHighlight" #define CMD_UGFEATXMLWRITE "UGFeatXMLWrite" #define CMD_UGPARTINFOMASS "UGPartInfoMass" #define CMD_UGSMTFLGCREATE_ISEC "UGSmtFlgWallCreate_ISec" #define CMD_UGSMTFLGCREATE_USERDEFSEC "UGSmtFlgWallCreate_UserDefSec" #define CMD_UGSMTFLATCREATE_RECTSEC "UGSmtFlatWallCreate_RectSec" #define CMD_UGSMTFLATCREATE_USERDEFSEC "UGSmtFlatWallCreate_UserDefSec" #define CMD_UGSMTEXTENDWALLCREATE "UGSmtExtendWallCreate" #define CMD_UGAPPLYMATERIAL "UGApplyMaterial" /*====================================================================*\ Function : UserPopupmenusSetup Purpose : Setup popup menus for selected examples \*====================================================================*/ int UserPopupmenusSetup() { ProError status; uiCmdCmdId cmd_id; ProFileName oa_msgfile; ProStringToWstring (oa_msgfile, OA_MSGFILE); /*--------------------------------------------------------------------*\ Create commands for Object/Action wrappers around old-style examples that aren't setup for Object/Action \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGASMCOMPCONSTRSHIGHLIGHT, (uiCmdCmdActFn)UserAsmcompConstraintsHighlight_OA, uiProe2ndImmediate, UserAsmcompConstraintsHighlight_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Add Object/Action commands to the model tree popup menu \*--------------------------------------------------------------------*/ status = ProMenubarmenuPushbuttonAdd (MDLTREE_MENU, "UGMdlTree.ConstrsHighlight", "UGAsmcompConstrsHighlightLabel", "UGAsmcompConstrsHighlightHelp", NULL, PRO_B_TRUE, cmd_id, oa_msgfile); ERROR_CHECK ("UserPopupmenusSetup", "ProMenubarmenuPushbuttonAdd()", status); UserAdditionalPopupmenusSetup(); /*--------------------------------------------------------------------*\ Add the popup menu notification to the session \*--------------------------------------------------------------------*/ status = ProNotificationSet (PRO_POPUPMENU_CREATE_POST, (ProFunction)UserPopupmenuNotification); ERROR_CHECK ("UserPopupmenusSetup", "ProNotificationSet()", status); return(0); } /*====================================================================*\ Function : UserPopupmenuNotification Purpose : Add buttons to popup menus when they are created. \*====================================================================*/ ProError UserPopupmenuNotification (const char* name) { ProPopupMenuId menu_id; uiCmdCmdId cmd_id; ProError status; ProLine label; ProLine help; ProFileName oa_msgfile; ProStringToWstring (oa_msgfile, OA_MSGFILE); /*--------------------------------------------------------------------*\ Check if the menu being created matches the menu name we want. \*--------------------------------------------------------------------*/ if (strcmp (name, "Sel Obj Menu") == 0) { status = ProCmdCmdIdFind (CMD_UGASMCOMPCONSTRSHIGHLIGHT, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGAsmcompConstrsHighlightLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGAsmcompConstrsHighlightHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuIdGet (name, &menu_id); status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.ConstrsHighlight", label, help, cmd_id, UserAsmcompConstraintsHighlight_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); } UserAdditionalPopupmenuNotification(name); return PRO_TK_NO_ERROR; } /*====================================================================*\ Function : UserAdditionalPopupmenusSetup Purpose : Setup popup menus for selected examples (Split from UserPopupmenusSetup so that the latter can be extracted as an example to paste into the User Guide). \*====================================================================*/ static int UserAdditionalPopupmenusSetup() { ProError status; uiCmdCmdId cmd_id; ProFileName oa_msgfile; ProStringToWstring (oa_msgfile, OA_MSGFILE); /*--------------------------------------------------------------------*\ Create commands for Object/Action wrappers around old-style examples that aren't setup for Object/Action \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGFEATXMLWRITE, (uiCmdCmdActFn)UserFeatXMLWrite_OA, uiProe2ndImmediate, UserFeatXMLWrite_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Add Object/Action commands to the model tree popup menu \*--------------------------------------------------------------------*/ status = ProMenubarmenuPushbuttonAdd (MDLTREE_MENU, "UGMdlTree.FeatXMLWrite", "UGFeatXMLWriteLabel", "UGFeatXMLWriteHelp", NULL, PRO_B_TRUE, cmd_id, oa_msgfile); ERROR_CHECK ("UserPopupmenusSetup", "ProMenubarmenuPushbuttonAdd()", status); /*--------------------------------------------------------------------*\ Create commands for Object/Action wrappers around old-style examples that aren't setup for Object/Action \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGPARTINFOMASS, (uiCmdCmdActFn)UserPartInfoMass_OA, uiProe2ndImmediate, UserPartInfoMass_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Add Object/Action commands to the model tree popup menu \*--------------------------------------------------------------------*/ status = ProMenubarmenuPushbuttonAdd (MDLTREE_MENU, "UGMdlTree.PartInfoMass", "UGPartInfoMassLabel", "UGPartInfoMassHelp", NULL, PRO_B_TRUE, cmd_id, oa_msgfile); ERROR_CHECK ("UserPopupmenusSetup", "ProMenubarmenuPushbuttonAdd()", status); /*--------------------------------------------------------------------*\ Create command for Object/Action Apply Material action \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGAPPLYMATERIAL, (uiCmdCmdActFn)UserApplyMaterial_OA, uiProe2ndImmediate, UserApplyMaterial_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Add Object/Action commands to the model tree popup menu \*--------------------------------------------------------------------*/ status = ProMenubarmenuPushbuttonAdd (MDLTREE_MENU, "UGMdlTree.ApplyMaterial", "UGApplyMaterialLabel", "UGApplyMaterialHelp", NULL, PRO_B_TRUE, cmd_id, oa_msgfile); ERROR_CHECK ("UserPopupmenusSetup", "ProMenubarmenuPushbuttonAdd()", status); /*--------------------------------------------------------------------*\ Create commands for sheetmetal flange wall creation. This command requires selected geometry and so is not added to the model tree. \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGSMTFLGCREATE_ISEC, (uiCmdCmdActFn)UserSmtFlgWallCreate_OA_CreateISec, uiProe2ndImmediate, UserSmtFlgWallCreate_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); status = ProCmdActionAdd (CMD_UGSMTFLGCREATE_USERDEFSEC, (uiCmdCmdActFn)UserSmtFlgWallCreate_OA_CreateUserDefSec, uiProe2ndImmediate, UserSmtFlgWallCreate_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Create commands for sheetmetal flat wall creation. This command requires selected geometry and so is not added to the model tree. \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGSMTFLATCREATE_RECTSEC, (uiCmdCmdActFn)UserSmtFlatWallCreate_OA_CreateRectSec, uiProe2ndImmediate, UserSmtFlatWallCreate_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); status = ProCmdActionAdd (CMD_UGSMTFLATCREATE_USERDEFSEC, (uiCmdCmdActFn)UserSmtFlatWallCreate_OA_CreateUserDefSec, uiProe2ndImmediate, UserSmtFlatWallCreate_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); /*--------------------------------------------------------------------*\ Create command for sheetmetal extend wall creation. This command requires selected geometry and so is not added to the model tree. \*--------------------------------------------------------------------*/ status = ProCmdActionAdd (CMD_UGSMTEXTENDWALLCREATE, (uiCmdCmdActFn)UserSmtExtendWallCreate_OA_Thickness, uiProe2ndImmediate, UserSmtExtendWallCreate_TestMdlTree, PRO_B_FALSE, PRO_B_FALSE, &cmd_id); ERROR_CHECK ("UserPopupmenusSetup", "ProCmdActionAdd()", status); return (0); } /*====================================================================*\ Function : UserAdditionalPopupmenuNotification Purpose : Add buttons to popup menus when they are created. (Split from UserPopupmenuNotification so that the latter can be extracted as an example to paste into the User Guide). \*====================================================================*/ static ProError UserAdditionalPopupmenuNotification (const char* name) { ProPopupMenuId menu_id; uiCmdCmdId cmd_id; ProError status; ProLine label; ProLine help; ProFileName oa_msgfile; ProStringToWstring (oa_msgfile, OA_MSGFILE); /*--------------------------------------------------------------------*\ Check if the menu being created matches the menu name we want. \*--------------------------------------------------------------------*/ if (strcmp (name, "Sel Obj Menu") == 0) { status = ProCmdCmdIdFind (CMD_UGFEATXMLWRITE, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGFeatXMLWriteLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGFeatXMLWriteHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuIdGet (name, &menu_id); status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.FeatXMLWrite", label, help, cmd_id, UserFeatXMLWrite_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGPARTINFOMASS, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGPartInfoMassLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGPartInfoMassHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.PartInfoMass", label, help, cmd_id, UserPartInfoMass_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGAPPLYMATERIAL, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGApplyMaterialLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGApplyMaterialHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.ApplyMaterial", label, help, cmd_id, UserApplyMaterial_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGSMTFLGCREATE_ISEC, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGSmtFlgWall_ISecLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGSmtFlgWall_ISecHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.ISecSmtFlgWall", label, help, cmd_id, UserSmtFlgWallCreate_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGSMTFLGCREATE_USERDEFSEC, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGSmtFlgWall_UserSecLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGSmtFlgWall_UserSecHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.UserSecSmtFlgWall", label, help, cmd_id, UserSmtFlgWallCreate_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGSMTFLATCREATE_RECTSEC, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGSmtFlatWall_RectSecLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGSmtFlatWall_RectSecHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.RectSecSmtFlatWall", label, help, cmd_id, UserSmtFlatWallCreate_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); status = ProCmdCmdIdFind (CMD_UGSMTFLATCREATE_USERDEFSEC, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGSmtFlatWall_UserSecLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGSmtFlatWall_UserSecHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.UserSecSmtFlatWall", label, help, cmd_id, UserSmtFlatWallCreate_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); } status = ProCmdCmdIdFind ( CMD_UGSMTEXTENDWALLCREATE, &cmd_id); /*--------------------------------------------------------------------*\ Extract the button label and helptext from a message file. \*--------------------------------------------------------------------*/ status = ProMessageToBuffer (label, oa_msgfile, "UGSmtExtendWallLabel"); status = ProMessageToBuffer (help, oa_msgfile, "UGSmtExtendWallHelp"); /*--------------------------------------------------------------------*\ Add the button to the end of the popup menu. \*--------------------------------------------------------------------*/ status = ProPopupmenuIdGet (name, &menu_id); status = ProPopupmenuButtonAdd (menu_id, PRO_VALUE_UNUSED, "UGPM.UserSmtExtendWall", label, help, cmd_id, UserSmtExtendWallCreate_TestPM, NULL); ERROR_CHECK ("UserPopupmenuNotification", "ProPopupmenuButtonAdd()", status); return PRO_TK_NO_ERROR; }