相对其他的开发方法是最简单的,思路大概就是:
01 在nx中间表达式,生成渐开线,之后拉伸齿根圆,拉伸齿部分,阵列;
02 做交互界面
03 写代码了,vs创建代码模板,获取界面值,转换参数,导入部件,表达式赋值,编辑表达式
04 编译,调试
大概就是这样子。
做之前,在网上也看了很多论文,技术文稿;有使用,API与grip结合的,这个难度不算太大;也有纯grip; 貌似没有纯api 和 nx open做的; nx再带的齿轮工具箱,看了一下,大概是,生成曲线之后离散点,在拟合起来;这个难度最大;
代码
//获取NX的安装路径
char *translation;
UF_translate_variable("UGII_BASE_DIR", &translation);
CString s1 = translation;
CString s2 = "\\SYTool\\application\\CHILUN.prt";
CString s3 = s1+s2;
char mm[200];
CString2Char(s3 ,mm); //CString转char
//获取UI参数
// 获取 UI 的参数
UF_STYLER_item_value_type_t data[5];
double Mvalue,Zvalue,ARFvalue,Bvalue,DDvalue;
data[0].item_attr=UF_STYLER_VALUE;
data[0].item_id = CHANGE_M;
UF_STYLER_ask_value(dialog_id,&data[0]);
data[1].item_attr=UF_STYLER_VALUE;
data[1].item_id = CHANGE_Z;
UF_STYLER_ask_value(dialog_id,&data[1]);
data[2].item_attr=UF_STYLER_VALUE;
data[2].item_id = CHANGE_ARF;
UF_STYLER_ask_value(dialog_id,&data[2]);
data[3].item_attr=UF_STYLER_VALUE;
data[3].item_id = CHANGE_B;
UF_STYLER_ask_value(dialog_id,&data[3]);
data[4].item_attr=UF_STYLER_VALUE;
data[4].item_id = CHANGE_REAL_5;
UF_STYLER_ask_value(dialog_id,&data[4]);
Mvalue = data[0].value.real;
Zvalue = data[1].value.real;
ARFvalue = data[2].value.real;
Bvalue = data[3].value.real;
DDvalue = data[4].value.real;
//创建字符串数组,用来存放转换后的值
char M1[300],Z1[300],ARF1[300],BB1[300],DD1[300];
//浮点型 转换 字符串型
sprintf(M1, "m'2=%f",Mvalue);
sprintf(Z1, "z'2=%f",Zvalue);
sprintf(ARF1, "arf'2=%f",ARFvalue);
sprintf(BB1, "B'2=%f",Bvalue);
sprintf(DD1, "dd=%f",DDvalue);
//导入部件
UF_import_part_modes_t modes;
modes.layer_mode = 0;
modes.group_mode = 0;
modes.view_mode = 0;
modes.cam_mode = false;
double dest_csys[6] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0};
double dest_point[3] = {0.0, 0.0, 0.0};
tag_t group = NULL_TAG;
UF_PART_import(mm, &modes, dest_csys, dest_point, 1.0, &group);
//编辑表达式
UF_MODL_edit_exp (M1);
UF_MODL_edit_exp (Z1);
UF_MODL_edit_exp (ARF1);
UF_MODL_edit_exp (BB1);
UF_MODL_edit_exp (DD1);
UF_MODL_update();
我认为这个还有许多优化的地方,等在学习几天,做的更完美一些