📄 geardesign.c
字号:
/*====================================================================*\FILE : GearDesign.cPURPOSE : Gear Design Application Demo \*====================================================================*//*--------------------------------------------------------------------*\ Pro/TOOLKIT includes\*--------------------------------------------------------------------*/#include "GearDesign.h"#include "ProDimension.h"#include "ProDtmPln.h"#include "ProDtmCrv.h"#include "ProElement.h"#include "ProElempath.h"#include "ProExtrude.h"#include "ProFeature.h"#include "ProFeatForm.h"#include "ProFeatType.h"#include "ProGroup.h"#include "ProHole.h"#include "ProLayer.h"#include "ProMdl.h"#include "ProMenu.h"#include "ProMenuBar.h"#include "ProMessage.h"#include "ProModelitem.h"#include "ProModFeat.h"#include "ProParameter.h"#include "ProParamval.h"#include "ProPattern.h"#include "ProSecdim.h"#include "ProSelection.h"#include "ProSolid.h"#include "ProSurface.h"#include "ProStdSection.h"#include "ProUtil.h"/*--------------------------------------------------------------------*\ Pro/DEVELOP includes\*--------------------------------------------------------------------*/#include "prodevelop.h"#include "pro_unit.h"/*--------------------------------------------------------------------*\ C System includes\*--------------------------------------------------------------------*/#include <malloc.h>#include <math.h>/*--------------------------------------------------------------------*\ Application includes\*--------------------------------------------------------------------*/#include "TestError.h"#include "UtilMessage.h"#include "UtilString.h"#include "UtilMath.h"#include "UtilMenu.h"#include "UtilTree.h"#include "UtilCollect.h"/*--------------------------------------------------------------------*\ Macros\*--------------------------------------------------------------------*/#define SIZEOFARR(a) (sizeof(a)/sizeof(a[0]))#define STR_PARAM 0#define INT_PARAM 1#define DOUB_PARAM 2#define TAB_PARAM 3static ProError status;typedef struct tableraw{ char *string_val; int int_val;} TableRaw;typedef struct param{ int type; /* 0 - string, 1 - int, 2 - double, 3 - table */ int length; /* for string - max lenght */ char *param_name; ProBool required; /* 1 - required, 0 - optional */ TableRaw *table; /* for table only */ int tablesize; /* for table only */ ProBool set; void *value;} Param;/*--------------------------------------------------------------------*\ Application global/external data\*--------------------------------------------------------------------*/static TableRaw Length_unit[] = { {"cm", UNIT_CM}, {"foot", UNIT_FOOT}, {"inch", UNIT_INCH}, {"m", UNIT_M}, {"mm", UNIT_MM}};static TableRaw Yes_no_tab[] = { {"no", 0}, {"yes", 1}};static TableRaw GearType [] = { {"spur", SPUR_GEAR}, {"ring", RING_GEAR}};static Param param_def[] = { {STR_PARAM, PRO_NAME_SIZE, "Name_of_model", 1}, {TAB_PARAM, 0, "Units", 1, Length_unit, SIZEOFARR(Length_unit)}, {STR_PARAM, PRO_NAME_SIZE, "Material", 0}, {TAB_PARAM, 0, "GearType", 0, GearType, SIZEOFARR(GearType)}, {DOUB_PARAM, 0, "Datum_X_Offset", 0}, {DOUB_PARAM, 0, "Datum_Y_Offset", 0}, {DOUB_PARAM, 0, "Datum_Z_Offset", 0}, {DOUB_PARAM, 0, "Gear_Outer_Diameter", 1}, {DOUB_PARAM, 0, "Gear_Disk_Depth", 1}, {DOUB_PARAM, 0, "Outer_Plate_Diameter", 0}, {DOUB_PARAM, 0, "Outer_Plate_Depth", 0}, {DOUB_PARAM, 0, "Support_Hub_Outer_Diameter", 0}, {DOUB_PARAM, 0, "Support_Hub_Depth", 0}, {DOUB_PARAM, 0, "Inner_Diameter", 1}, {INT_PARAM, 0, "Number_of_teeth", 1}, {DOUB_PARAM, 0, "Keyway_inner_width", 0}, {DOUB_PARAM, 0, "Keyway_inner_height", 0}, {DOUB_PARAM, 0, "Key_outer_width", 0}, {DOUB_PARAM, 0, "Key_outer_height", 0}, {DOUB_PARAM, 0, "GearTooth_param1", 1}, {DOUB_PARAM, 0, "GearTooth_param2", 0}, {DOUB_PARAM, 0, "GearTooth_param3", 0}, {DOUB_PARAM, 0, "Backnotch_Radius", 0}, {DOUB_PARAM, 0, "Pressure_angle", 1},};static int ProUserFeatsReorder(GearParam *g_ptr);/*=============================================================*\ Function: ProUserDeleteDesign Purpose: delete current design\*=============================================================*/int ProUserDeleteDesign(GearParam *g_ptr) { int n_sel, *feat_ids, i; ProSelection *p_sel; ProFeatureDeleteOptions opt[]= {PRO_FEAT_DELETE_CLIP}; ProModelitem modelitem; ProError err; ProMessageDisplay(MSGFIL , "PROTKGD Select feature(s) to be deleted"); err = ProSelect("feature", -1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel<=0) return 0; feat_ids = (int *)calloc(n_sel, sizeof(int)); for (i=0; i<n_sel; i++) { ProSelectionModelitemGet(p_sel[i], &modelitem); feat_ids[i] = modelitem.id; } ProFeatureDelete((ProSolid)g_ptr->model, feat_ids, n_sel, opt, 1); ProTreetoolRefresh(g_ptr->model); ProSolidDisplay((ProSolid)g_ptr->model); free (feat_ids); return (0);}/*=============================================================*\ Function: ProUserModifyDesign Purpose: modify current design\*=============================================================*/int ProUserModifyDesign(GearParam *g_ptr){ int dim_id; ProSelection *p_sel; int n_sels; int err, brk=0; double value, drange[2]; ProModelitem item; do { ProMessageDisplay(MSGFIL , "PROTKGD Select feature or dimension"); if (ProSelect("dimension,feature", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sels) != PRO_TK_NO_ERROR) return 0; ProSelectionModelitemGet (p_sel [0], &item); if (item.type == PRO_FEATURE) { ProFeatureParamsDisplay(p_sel[0], PRO_DIM_PARAM); } else { ProDimensionValueGet (&item, &value); ProMessageDisplay(MSGFIL , "PROTKGD Enter new value for dimension [%0f]", &value); drange[0] = 0; drange[1] = 1e10; if (ProMessageDoubleRead(drange, &value)==PRO_TK_NO_ERROR) { ProDimensionValueSet (&item, value); ProDimensionDisplayUpdate (&item); } } } while (!brk);
return(0);}/*=============================================================*\ Function: ProUserRegenerate Purpose: regenerate model\*=============================================================*/int ProUserRegenerate(GearParam *g_ptr){ if (g_ptr->model != NULL) ProSolidRegenerate((ProSolid)g_ptr->model, PRO_B_FALSE); ProSolidDisplay((ProSolid)g_ptr->model); return (0);}/*=============================================================*\ Function: ProUserMaterial Purpose: change material for gear\*=============================================================*/int ProUserMaterial(GearParam *g_ptr){ ProName name; ProError err; err = ProPartMaterialNameGet((ProPart)g_ptr->model, name); if (err != PRO_TK_NO_ERROR) ProStringToWstring(name, ""); do { err = PRO_TK_NO_ERROR; ProMessageDisplay(MSGFIL, "PROTKGD Enter material name [%0w]", name); if (ProMessageStringRead(PRO_NAME_SIZE, name) == PRO_TK_NO_ERROR) { err = ProPartMaterialSet((ProPart)g_ptr->model, name); if (err != PRO_TK_NO_ERROR) ProMessageDisplay(MSGFIL, "PROTKGD Unable assign material %0w", name); else ProMessageDisplay(MSGFIL, "PROTKGD Material %0w was assigned to part", name); } } while (err!=PRO_TK_NO_ERROR); return (0);}/*=============================================================*\ Function: ProUserCreateViewAuto Purpose: Create "FRONT", "SIDE" and "BOTTOM" views\*=============================================================*/int ProUserCreateViewAuto(GearParam *g_ptr){ ProView view; ProName name; int i; static char *names[]={"FRONT", "SIDE", "BOTTOM"}; ProMatrix ident={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}}; double m[4]; for (i=0; i<3; i++) { ProStringToWstring(name, names[i]); ProViewStore(g_ptr->model, name, &view); ProViewMatrixSet(g_ptr->model, view, ident); memcpy(m, ident[0], 3*sizeof(double)); memcpy(ident[0], ident[1], 3*sizeof(double)); memcpy(ident[1], ident[2], 3*sizeof(double)); memcpy(ident[2], m, 3*sizeof(double)); } return (0);}/*=============================================================*\ Function: ProUserCreateViewManual Purpose: Create an user defined view\*=============================================================*/int ProUserCreateViewManual(GearParam *g_ptr){ ProView view; ProName name; ProError err; ProMessageDisplay(MSGFIL, "PROTKGD Enter a view name"); err = ProMessageStringRead(PRO_NAME_SIZE, name); if (err == PRO_TK_NO_ERROR) { err = ProViewStore(g_ptr->model, name, &view); } return (err);}/*=============================================================*\ Function: ProUserCreateDatum Purpose: create "FRONT", "SIDE", "BOTTOM" datum planes \*=============================================================*/int ProUserCreateDatum(GearParam *g_ptr){ static ElemTreeData def_tree[]={ {0, PRO_E_FEATURE_TREE, {(ProValueDataType)-1}}, {1, PRO_E_FEATURE_TYPE, {PRO_VALUE_TYPE_INT, PRO_FEAT_DATUM}}, {1, PRO_E_DTMPLN_CONSTRAINTS, {(ProValueDataType)-1}}, {2, PRO_E_DTMPLN_CONSTRAINT, {(ProValueDataType)-1}}, {3, PRO_E_DTMPLN_CONSTR_TYPE, {PRO_VALUE_TYPE_INT, PRO_DTMPLN_DEF_X}} }; static ElemTreeData offs_tree[]={ {0, PRO_E_FEATURE_TREE, {(ProValueDataType)-1}}, {1, PRO_E_FEATURE_TYPE, {PRO_VALUE_TYPE_INT, PRO_FEAT_DATUM}}, {1, PRO_E_DTMPLN_CONSTRAINTS, {(ProValueDataType)-1}}, {2, PRO_E_DTMPLN_CONSTRAINT, {(ProValueDataType)-1}}, {3, PRO_E_DTMPLN_CONSTR_TYPE, {PRO_VALUE_TYPE_INT, PRO_DTMPLN_OFFS}}, {3, PRO_E_DTMPLN_CONSTR_REF, {PRO_VALUE_TYPE_SELECTION, NULL}}, {3, PRO_E_DTMPLN_CONSTR_REF_OFFSET, {PRO_VALUE_TYPE_DOUBLE, 0.0}} }; int axes[3] = { PRO_DTMPLN_DEF_X, PRO_DTMPLN_DEF_Y, PRO_DTMPLN_DEF_Z }; wchar_t *names[]={L"GD_SIDE",L"GD_BOTTOM",L"GD_FRONT"}; int i, *id[3], *dim_id[3]; ProSelection featsel; ProModelitem modelitem; ProFeature f; ProErrorlist errs; ProError err; ProElement elem_tree; double offset; if (!g_ptr->datum_created) { id[0] = &g_ptr->side_surface_id; id[1] = &g_ptr->bottom_surface_id; id[2] = &g_ptr->front_surface_id; dim_id[0] = &g_ptr->datum_x_offset_dim_id; dim_id[1] = &g_ptr->datum_y_offset_dim_id; dim_id[2] = &g_ptr->datum_z_offset_dim_id; for (i=0; i<3; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -