📄 geardesignui.c
字号:
/*====================================================================*\FILE : GearDesignUI.cPURPOSE : UI for Gear Design Application Demo (all dialog and UI logic)\*====================================================================*/#include <GearDesign.h>#include <ProUI.h>#include <ProUIDialog.h>#include <ProParameter.h>#include <pd_prototype.h>#define GD_UI_MAIN "geardesigndlg"#define GD_UI_CLOSEBTN "CloseBtn"#define GD_UI_CLOSEBTN_M "CloseBtn_M"#define GD_UI_LOADBTN_M "LoadBtn_M"#define GD_UI_GEARTYPE_GROUP_M "GearTypeGroup_M"#define GD_UI_LOADBTN_RMB "LoadBtn_RMB"#define GD_UI_GEARTYPE_GROUP_RMB "GearTypeGroup_RMB"#define GD_UI_TOOL_DELETE_M "DeleteBtn_M"#define GD_UI_TOOL_MODIFY_M "ModifyBtn_M"#define GD_UI_TOOL_REGENERATE_M "RegenerateBtn_M"#define GD_UI_TOOL_MATERIAL_M "MaterialBtn_M"#define GD_UI_TOOL_SAVEDVIEWS_CASCADE_M "SavedViewsCascade_M"#define GD_UI_TOOL_VIEW_CHOICE_M "SavedViewsChoice_M"#define GD_UI_TOOL_VIEW_DEFAULTCREATE_M "CreateDefaultView_M"#define GD_UI_TOOL_VIEW_STORE_M "StoreView_M"#define GD_UI_GROUP_SPUR "SPUR"#define GD_UI_GROUP_RING "RING"#define GD_UI_LOADBTN "LoadBtn"#define GD_UI_CREATEBTN "CreateButton"#define GD_UI_MAINTAB "GearDesignSteps"#define GD_UI_DATUM_LAYOUT "DefaultDatums"#define GD_UI_DISK_LAYOUT "GearDisk"#define GD_UI_HOLE_LAYOUT "GearHole"#define GD_UI_HUB_LAYOUT "GearHub"#define GD_UI_BACKPLATE_LAYOUT "GearBackPlate"#define GD_UI_TEETH_LAYOUT "GearTeeth"#define GD_UI_LABEL_COMPLETED "CreatedLabel"#define GD_UI_LABEL_NOT_COMPLETED "NotCreatedLabel"#define GD_UI_STATUS_TABLE "ComponentsTable"#define GD_UI_STATUS_DONECOL "Created"#define GD_UI_STATUS_COMPCOL "Component"#define GD_UI_STATUS_REQCOL "Required"#define GD_UI_DATUM_ROW "Datums"#define GD_UI_DISK_ROW "Disk"#define GD_UI_HOLE_ROW "Hole"#define GD_UI_HUB_ROW "Hub"#define GD_UI_BACKPLATE_ROW "Back Plate"#define GD_UI_TEETH_ROW "Teeth"#define GD_UI_XOFFSET_INPUT "XOffsetInput"#define GD_UI_YOFFSET_INPUT "YOffsetInput"#define GD_UI_ZOFFSET_INPUT "ZOffsetInput"#define GD_UI_GEARDISK_W_INPUT "GearDiskWidth"#define GD_UI_GEARDISK_D_INPUT "GearDiskDiameter"#define GD_UI_GEARHOLE_D_INPUT "GearHoleDiameter"#define GD_UI_KEYWAY_W_INPUT "KeywayWidth"#define GD_UI_KEYWAY_H_INPUT "KeywayHeight"#define GD_UI_KEYWAY_W_LABEL "KeywayWidthLabel"#define GD_UI_KEYWAY_H_LABEL "KeywayHeightLabel"#define GD_UI_INCLUDE_KEYWAY "IncludeKeywayCheck"#define GD_UI_GEARHUB_D_INPUT "HubDiameter"#define GD_UI_GEARHUB_T_INPUT "HubThickness"#define GD_UI_KEY_W_INPUT "KeyWidth"#define GD_UI_KEY_H_INPUT "KeyHeight"#define GD_UI_KEY_W_LABEL "KeyWidthLabel"#define GD_UI_KEY_H_LABEL "KeyHeightLabel"#define GD_UI_INCLUDE_KEY "IncludeKeyCheck"#define GD_UI_BN_R_INPUT "BackNotchRadius"#define GD_UI_BP_D_INPUT "BackPlateDiameter"#define GD_UI_BP_T_INPUT "BackPlateThickness"#define GD_UI_BN_R_LABEL "BackNotchRadiusLabel"#define GD_UI_INCLUDE_BN "IncludeBacknotchCheck"#define GD_UI_N_TEETH_SPINBOX "NumTeeth"#define GD_UI_TOOTH_INNER_SURF_LABEL "ToothInnerSurfaceLabel"#define GD_UI_TOOTH_INNER_SURF_INPUT "ToothInnerSurface"#define GD_UI_TOOTH_PRESSURE_ANGLE "GearToothPressureAngle"#define GD_UI_TOOTH_P1_INPUT "GearToothParam1"#define GD_UI_MENUPANE_RMB "MenuPane_RMB" //Menu for Right Click static int ProTKGDUIDatumFromUIUpdate (GearParam* g_ptr);static int ProTKGDUIDatumUIUpdate (GearParam* g_ptr);static int ProTKGDUIDiskFromUIUpdate (GearParam* g_ptr);static int ProTKGDUIDiskUIUpdate (GearParam* g_ptr);static int ProTKGDUIHoleFromUIUpdate (GearParam* g_ptr);static int ProTKGDUIHoleUIUpdate (GearParam* g_ptr);static int ProTKGDUIHubFromUIUpdate (GearParam* g_ptr);static int ProTKGDUIHubUIUpdate (GearParam* g_ptr);static int ProTKGDUIBackplateFromUIUpdate (GearParam* g_ptr);static int ProTKGDUIBackplateUIUpdate (GearParam* g_ptr);static int ProTKGDUITeethFromUIUpdate (GearParam* g_ptr);static int ProTKGDUITeethUIUpdate (GearParam* g_ptr);static ProBoolean ProTKGDUICreateButtonUpdate (GearParam* g_ptr);typedef int (*ProTKGDUIInteractionFunction) (GearParam* g_ptr);/*--------------------------------------------------------------------*\ Links creation step to table and layouts in the UI.\*--------------------------------------------------------------------*/typedef struct { ProTKGDStep step; char* step_layout; char* step_row_name; ProTKGDUIInteractionFunction update_from_ui_function; ProTKGDUIInteractionFunction update_ui_function;} ProTKGDUIStepComponent;static ProTKGDUIStepComponent gd_components [] = { {PTK_GD_DATUM, GD_UI_DATUM_LAYOUT, GD_UI_DATUM_ROW, ProTKGDUIDatumFromUIUpdate, ProTKGDUIDatumUIUpdate}, {PTK_GD_DISK, GD_UI_DISK_LAYOUT, GD_UI_DISK_ROW, ProTKGDUIDiskFromUIUpdate, ProTKGDUIDiskUIUpdate}, {PTK_GD_HOLE, GD_UI_HOLE_LAYOUT, GD_UI_HOLE_ROW, ProTKGDUIHoleFromUIUpdate, ProTKGDUIHoleUIUpdate}, {PTK_GD_HUB, GD_UI_HUB_LAYOUT, GD_UI_HUB_ROW, ProTKGDUIHubFromUIUpdate, ProTKGDUIHubUIUpdate}, {PTK_GD_BACKPLATE, GD_UI_BACKPLATE_LAYOUT, GD_UI_BACKPLATE_ROW, ProTKGDUIBackplateFromUIUpdate, ProTKGDUIBackplateUIUpdate}, {PTK_GD_TEETH, GD_UI_TEETH_LAYOUT, GD_UI_TEETH_ROW, ProTKGDUITeethFromUIUpdate, ProTKGDUITeethUIUpdate},};static ProError status;/*=============================================================*\ Function: ProTKGDUIDatumUIUpdate Purpose: Datum parameters -> UI\*=============================================================*/int ProTKGDUIDatumUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_XOFFSET_INPUT, g_ptr->datum_x_offset); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_YOFFSET_INPUT, g_ptr->datum_y_offset); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_ZOFFSET_INPUT, g_ptr->datum_z_offset); ProTKGDUICreateButtonUpdate (g_ptr); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIDatumFromUIUpdate Purpose: Datum parameters <- UI\*=============================================================*/int ProTKGDUIDatumFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_XOFFSET_INPUT, &g_ptr->datum_x_offset); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_YOFFSET_INPUT, &g_ptr->datum_y_offset); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_ZOFFSET_INPUT, &g_ptr->datum_z_offset); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIDiskUIUpdate Purpose: Disk parameters -> UI\*=============================================================*/int ProTKGDUIDiskUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_GEARDISK_W_INPUT, g_ptr->gear_depth); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_GEARDISK_D_INPUT, g_ptr->gear_diam); if (ProTKGDUICreateButtonUpdate (g_ptr)) { if (g_ptr->gear_depth == 0.0 || g_ptr->gear_diam == 0.0) ProUIPushbuttonDisable (GD_UI_MAIN, GD_UI_CREATEBTN); else ProUIPushbuttonEnable (GD_UI_MAIN, GD_UI_CREATEBTN); } return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIDiskFromUIUpdate Purpose: Disk parameters <- UI\*=============================================================*/int ProTKGDUIDiskFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_GEARDISK_W_INPUT, &g_ptr->gear_depth); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_GEARDISK_D_INPUT, &g_ptr->gear_diam); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIKeywayUIUpdate Purpose: Keyway parameters -> UI\*=============================================================*/int ProTKGDUIKeywayUIUpdate (GearParam* g_ptr, ProBoolean create){ if (create) { ProUILabelEnable (GD_UI_MAIN, GD_UI_KEYWAY_W_LABEL); ProUILabelEnable (GD_UI_MAIN, GD_UI_KEYWAY_H_LABEL); ProUIInputpanelEnable (GD_UI_MAIN, GD_UI_KEYWAY_W_INPUT); ProUIInputpanelEnable (GD_UI_MAIN, GD_UI_KEYWAY_H_INPUT); } else { ProUILabelDisable (GD_UI_MAIN, GD_UI_KEYWAY_W_LABEL); ProUILabelDisable (GD_UI_MAIN, GD_UI_KEYWAY_H_LABEL); ProUIInputpanelDisable (GD_UI_MAIN, GD_UI_KEYWAY_W_INPUT); ProUIInputpanelDisable (GD_UI_MAIN, GD_UI_KEYWAY_H_INPUT); } ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_KEYWAY_W_INPUT, g_ptr->keyway_in_width); ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_KEYWAY_H_INPUT, g_ptr->keyway_in_height); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIKeywayFromUIUpdate Purpose: Keyway parameters <- UI\*=============================================================*/int ProTKGDUIKeywayFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_KEYWAY_W_INPUT, &g_ptr->keyway_in_width); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_KEYWAY_H_INPUT, &g_ptr->keyway_in_height); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIHoleUIUpdate Purpose: Hole parameters -> UI\*=============================================================*/int ProTKGDUIHoleUIUpdate (GearParam* g_ptr){ ProBoolean show_keyway; status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_GEARHOLE_D_INPUT, g_ptr->inner_diam); if (ProTKGDUICreateButtonUpdate (g_ptr)) { if (g_ptr->inner_diam == 0.0) ProUIPushbuttonDisable (GD_UI_MAIN, GD_UI_CREATEBTN); else ProUIPushbuttonEnable (GD_UI_MAIN, GD_UI_CREATEBTN); } show_keyway = (g_ptr->keyway_created)?PRO_B_TRUE:PRO_B_FALSE; ProTKGDUIKeywayUIUpdate (g_ptr, show_keyway); if (g_ptr->keyway_created) ProUICheckbuttonSet (GD_UI_MAIN, GD_UI_INCLUDE_KEYWAY); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIHoleFromUIUpdate Purpose: Hole parameters <- UI\*=============================================================*/int ProTKGDUIHoleFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_GEARHOLE_D_INPUT, &g_ptr->inner_diam); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIKeyUIUpdate Purpose: Key parameters -> UI\*=============================================================*/int ProTKGDUIKeyUIUpdate (GearParam* g_ptr, ProBoolean create){ if (create) { ProUILabelEnable (GD_UI_MAIN, GD_UI_KEY_W_LABEL); ProUILabelEnable (GD_UI_MAIN, GD_UI_KEY_H_LABEL); ProUIInputpanelEnable (GD_UI_MAIN, GD_UI_KEY_W_INPUT); ProUIInputpanelEnable (GD_UI_MAIN, GD_UI_KEY_H_INPUT); } else { ProUILabelDisable (GD_UI_MAIN, GD_UI_KEY_W_LABEL); ProUILabelDisable (GD_UI_MAIN, GD_UI_KEY_H_LABEL); ProUIInputpanelDisable (GD_UI_MAIN, GD_UI_KEY_W_INPUT); ProUIInputpanelDisable (GD_UI_MAIN, GD_UI_KEY_H_INPUT); } ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_KEY_W_INPUT, g_ptr->keyway_out_width); ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_KEY_H_INPUT, g_ptr->keyway_out_height); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIKeyFromUIUpdate Purpose: Key parameters <- UI\*=============================================================*/int ProTKGDUIKeyFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_KEY_W_INPUT, &g_ptr->keyway_out_width); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_KEY_H_INPUT, &g_ptr->keyway_out_height); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIHubUIUpdate Purpose: Hub parameters -> UI\*=============================================================*/int ProTKGDUIHubUIUpdate (GearParam* g_ptr){ ProBoolean show_key; status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_GEARHUB_D_INPUT, g_ptr->hub_out_diam); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_GEARHUB_T_INPUT, g_ptr->hub_depth); if (ProTKGDUICreateButtonUpdate (g_ptr)) { if (g_ptr->hub_out_diam == 0.0 || g_ptr->hub_depth == 0.0) ProUIPushbuttonDisable (GD_UI_MAIN, GD_UI_CREATEBTN); else ProUIPushbuttonEnable (GD_UI_MAIN, GD_UI_CREATEBTN); } show_key = (g_ptr->key_created)?PRO_B_TRUE:PRO_B_FALSE; ProTKGDUIKeyUIUpdate (g_ptr, show_key); if (g_ptr->key_created) ProUICheckbuttonSet (GD_UI_MAIN, GD_UI_INCLUDE_KEY); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIHubFromUIUpdate Purpose: Hub parameters <- UI\*=============================================================*/int ProTKGDUIHubFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_GEARHUB_D_INPUT, &g_ptr->hub_out_diam); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_GEARHUB_T_INPUT, &g_ptr->hub_depth); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIBacknotchUIUpdate Purpose: Backnotch parameters -> UI\*=============================================================*/int ProTKGDUIBacknotchUIUpdate (GearParam* g_ptr, ProBoolean create){ if (create) { ProUILabelEnable (GD_UI_MAIN, GD_UI_BN_R_LABEL); ProUIInputpanelEnable (GD_UI_MAIN, GD_UI_BN_R_INPUT); } else { ProUILabelDisable (GD_UI_MAIN, GD_UI_BN_R_LABEL); ProUIInputpanelDisable (GD_UI_MAIN, GD_UI_BN_R_INPUT); } ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_BN_R_INPUT, g_ptr->backnotch_rad); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIBacknotchFromUIUpdate Purpose: Backnotch parameters <- UI\*=============================================================*/int ProTKGDUIBacknotchFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_BN_R_INPUT, &g_ptr->backnotch_rad); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIBackplateUIUpdate Purpose: Backplate parameters -> UI\*=============================================================*/int ProTKGDUIBackplateUIUpdate (GearParam* g_ptr){ ProBoolean show_bn; status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_BP_D_INPUT, g_ptr->backplate_diam); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_BP_T_INPUT, g_ptr->backplate_depth); if (ProTKGDUICreateButtonUpdate (g_ptr)) { if (/*g_ptr->backplate_created || */g_ptr->backplate_diam == 0.0 || g_ptr->backplate_depth == 0.0) ProUIPushbuttonDisable (GD_UI_MAIN, GD_UI_CREATEBTN); else ProUIPushbuttonEnable (GD_UI_MAIN, GD_UI_CREATEBTN); } show_bn = (g_ptr->backnotch_created)?PRO_B_TRUE:PRO_B_FALSE; ProTKGDUIBacknotchUIUpdate (g_ptr, show_bn); if (g_ptr->backnotch_created) ProUICheckbuttonSet (GD_UI_MAIN, GD_UI_INCLUDE_BN); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUIBackplateFromUIUpdate Purpose: Backplate parameters <- UI\*=============================================================*/int ProTKGDUIBackplateFromUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_BP_D_INPUT, &g_ptr->backplate_diam); status = ProUIInputpanelDoubleGet (GD_UI_MAIN, GD_UI_BP_T_INPUT, &g_ptr->backplate_depth); return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUITeethUIUpdate Purpose: Teeth parameters -> UI\*=============================================================*/int ProTKGDUITeethUIUpdate (GearParam* g_ptr){ status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_TOOTH_PRESSURE_ANGLE, g_ptr->Pressure_angle); status = ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_TOOTH_P1_INPUT, g_ptr->tooth_par1); status = ProUISpinboxIntegerSet (GD_UI_MAIN, GD_UI_N_TEETH_SPINBOX, g_ptr->n_of_teeth); if (g_ptr->gear_type == RING_GEAR) { // ProUILabelShow (GD_UI_MAIN, GD_UI_TOOTH_INNER_SURF_LABEL); // ProUIInputpanelShow (GD_UI_MAIN, GD_UI_TOOTH_INNER_SURF_INPUT); ProUIInputpanelDoubleSet (GD_UI_MAIN, GD_UI_TOOTH_INNER_SURF_INPUT, g_ptr->inner_diam); } else { ProUILabelHide (GD_UI_MAIN, GD_UI_TOOTH_INNER_SURF_LABEL); ProUIInputpanelHide (GD_UI_MAIN, GD_UI_TOOTH_INNER_SURF_INPUT); } if (ProTKGDUICreateButtonUpdate (g_ptr)) { if ( g_ptr->Pressure_angle == 0.0 || g_ptr->tooth_par1 == 0.0 || g_ptr->n_of_teeth == 0) ProUIPushbuttonDisable (GD_UI_MAIN, GD_UI_CREATEBTN); else ProUIPushbuttonEnable (GD_UI_MAIN, GD_UI_CREATEBTN); } return PRO_TK_NO_ERROR;}/*=============================================================*\ Function: ProTKGDUITeethFromUIUpdate Purpose: Teeth parameters <- UI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -