上面介绍了程序的登陆界面和注册页面,下面将介绍我们所需要的齿轮开发的具体步骤。

齿轮管理模块

(1)功能要求及结构

最终要实现的功能要求及结构图如下

(2)添加对话框,如图9-1所示。

图 9-1

(3)双击对话框,创建类CMainMdlDlg,并添加相关变量。

(4)编辑齿轮详细参数。在单击了左边的列表时,在右侧同时调出齿轮的详细参数,然后点击“编辑参数”按钮就可以编辑这个齿轮的系数,并再生和保存模型。代码片段实现如下:

ProStringToWstring(name,m_fullfilename.GetBuffer());//获得所在的模型文件及其路径

//调入内存

status=ProMdlRetrieve(name,PRO_MDL_PART,∂);

//显示零件

ProMdlDisplay(part);

//获取零件id

ProMdlIdGet(part,&id);

//初始化零件特征

ProModelitemInit(part,id,PRO_PART,&feature);

//初始化个参数

ProParameterInit(&feature,L"M",&param1);

ProParameterInit(&feature,L"Z",&param2);

ProParameterInit(&feature,L"ALPHA",&param3);

ProParameterInit(&feature,L"HAX",&param4);

ProParameterInit(&feature,L"CX",&param5);

ProParameterInit(&feature,L"B",&param6);

ProParameterInit(&feature,L"X",&param7);

//为变量赋值

value1.type=PRO_PARAM_DOUBLE;

value1.value.d_val=atof(m_m);

value2.type=PRO_PARAM_DOUBLE;

value2.value.d_val=atof(m_z);

value3.type=PRO_PARAM_DOUBLE;

value3.value.d_val=atof(m_alpha);

value4.type=PRO_PARAM_DOUBLE;

value4.value.d_val=atof(m_hax);

value5.type=PRO_PARAM_DOUBLE;

value5.value.d_val=atof(m_cx);

value6.type=PRO_PARAM_DOUBLE;

value6.value.d_val=atof(m_b);

value7.type=PRO_PARAM_DOUBLE;

value7.value.d_val=atof(m_x);

ProParameterValueSet(&param1, &value1);

ProParameterValueSet(&param2, &value2);

ProParameterValueSet(&param3, &value3);

ProParameterValueSet(&param4, &value4);

ProParameterValueSet(&param5, &value5);

ProParameterValueSet(&param6, &value6);

ProParameterValueSet(&param7, &value7);

if(m_type=="斜齿轮"){//

ProParameterInit(&feature,L"BETA",&param8);

value8.type=PRO_PARAM_DOUBLE;

value8.value.d_val=atof(m_beta);

ProParameterValueSet(&param8, &value8);

}

else if(m_type=="锥齿轮"){//

ProParameterInit(&feature,L"Z_D",&param8);

value8.type=PRO_PARAM_DOUBLE;

value8.value.d_val=atof(m_z_d);

ProParameterValueSet(&param8, &value8);

}

else{//

}

//零件再生

ProSolidRegenerate((ProSolid)part, PRO_B_TRUE);

//保存模型

ProMdlSave(part);

//保存到数据库中

StrSql.Format("update geardata set m=%f,z=%f,alpha=%f,hax=%f,cx=%f,b=%f,x=%f where gearid=%ld",atof(m_m),
atof(m_z),atof(m_alpha),atof(m_hax),atof(m_cx),atof(m_b),atof(m_x),atoi(m_gearid));

//AfxMessageBox(StrSql);//测试sql

try{

m_pDb.Execute(StrSql);//执行更新数据库中齿轮参数

}

catch(CDaoException *e){

e->GetErrorMessage(m_strError.GetBuffer(512),512);

AfxMessageBox(m_strError);//显示错误信息

e->Delete();

return;

}

(5)新建齿轮系列。在点击了直齿轮、斜齿轮、锥齿轮按钮后,就会调出相关的对话框,要求用户输入齿轮的相关参数,最后点击确定后,就可以生成相关的齿轮系列模型。对话框如图9-2所示。

实现新建齿轮的代码片段如下:

filefullname="D:\\protoolkit\\Gear\\parts\\zhigear.prt.1";

ProStringToWstring(name,filefullname.GetBuffer());

status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl);

if(status!=PRO_TK_NO_ERROR){

AfxMessageBox("模型不存在,请确认标准模型是否在指定的目录中");

return;

}

//2.复制模型

ProName new_name;

ProMdl new_mdl;

ProStringToWstring(new_name,m_zhi_name.GetBuffer());//获取文件名,给新建的模型重命名

ProMdlCopy(mdl,new_name,&new_mdl);

//3.保存模型

ProMdlSave(new_mdl);

//4.将原模型从内存中拭除

ProMdlErase(mdl);

//5.显示当前模型

ProType type;

ProName w_name;

int w_id;

status=ProMdlTypeGet(new_mdl,(ProMdlType*)&type);

status=ProMdlNameGet(mdl,w_name);

//6.给模型建立一个窗口

status=ProObjectwindowCreate(w_name,type,&w_id);

status=ProMdlDisplay(new_mdl);//显示

status=ProWindowActivate(w_id);//激活

//7.将模型的参数重新修改成我们需要的参数

ProParameter param1;

ProParameter param2;

ProParameter param3;

ProParameter param4;

ProParameter param5;

ProParameter param6;

ProParameter param7;

ProParamvalue value1;

ProParamvalue value2;

ProParamvalue value3;

ProParamvalue value4;

ProParamvalue value5;

ProParamvalue value6;

ProParamvalue value7;

ProModelitem feature;

int id;

//获取零件id

ProMdlIdGet(new_mdl,&id);

//初始化零件特征

ProModelitemInit(new_mdl,id,PRO_PART,&feature);

//初始化个参数

ProParameterInit(&feature,L"M",&param1);

ProParameterInit(&feature,L"Z",&param2);

ProParameterInit(&feature,L"ALPHA",&param3);

ProParameterInit(&feature,L"HAX",&param4);

ProParameterInit(&feature,L"CX",&param5);

ProParameterInit(&feature,L"B",&param6);

ProParameterInit(&feature,L"X",&param7);

//为变量赋值

value1.type=PRO_PARAM_DOUBLE;

value1.value.d_val=m_zhi_m;

value2.type=PRO_PARAM_DOUBLE;

value2.value.d_val=m_zhi_z;

value3.type=PRO_PARAM_DOUBLE;

value3.value.d_val=m_zhi_alpha;

value4.type=PRO_PARAM_DOUBLE;

value4.value.d_val=m_zhi_hax;

value5.type=PRO_PARAM_DOUBLE;

value5.value.d_val=m_zhi_cx;

value6.type=PRO_PARAM_DOUBLE;

value6.value.d_val=m_zhi_b;

value7.type=PRO_PARAM_DOUBLE;

value7.value.d_val=m_zhi_x;

ProParameterValueSet(&param1, &value1);

ProParameterValueSet(&param2, &value2);

ProParameterValueSet(&param3, &value3);

ProParameterValueSet(&param4, &value4);

ProParameterValueSet(&param5, &value5);

ProParameterValueSet(&param6, &value6);

ProParameterValueSet(&param7, &value7);

//零件再生

ProSolidRegenerate((ProSolid)new_mdl, PRO_B_TRUE);

//最后保存修改后的模型

ProMdlSave(new_mdl);

//将模型数据插入到数据库中

CString SqlStr,filename,filepath;

CString strFieldValue,new_gearid;

COleVariant m_value;

filename=UsrGetMdlFileName(new_mdl);

filepath=UsrGetMdlPath(new_mdl);

SqlStr.Format("insert into gears (name,type,path) values('%s','直齿轮','%s')",filename,filepath);

m_pDb.Execute(SqlStr);

SqlStr.Format("select top 1 gearid from gears order by gearid desc");//获取刚刚插入的gearid

if(m_pSet->IsOpen()){

m_pSet->Close();

}

m_pSet->Open(dbOpenDynaset,SqlStr,0);

if(!m_pSet->IsEOF()){//表示数据库中有记录存在

m_pSet->GetFieldValue("gearid",m_value);//获取齿轮模数

strFieldValue=GetStringFromOleVar(m_value);//字符类型转换

new_gearid=strFieldValue;

SqlStr.Format("insert into geardata (gearid,m,z,alpha,hax,cx,b,x) values(%d,%f,%f,%f,%f,%f,%f,%f)",atoi(new_gearid),m_zhi_m,m_zhi_z,m_zhi_alpha,m_zhi_hax,m_zhi_cx,m_zhi_b,m_zhi_x);

//AfxMessageBox(new_gearid);

//AfxMessageBox(SqlStr);

m_pDb.Execute(SqlStr);

AfxMessageBox("新建齿轮成功");

}

else{

AfxMessageBox("数据记录不存在!");

}

© 2009 - 2010, Zeroun's Blog -- 黄志勇的博客!. 版权所有.

作者:
该日志由 admin 于2009年02月04日发表在C/C++/C#, ProE/二次开发分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。 | +复制链接
转载请注明: Pro/ENGINEER的二次开发(9)-齿轮管理
关键字: , , ,
【上一篇】
【下一篇】

您可能感兴趣的文章:

发表评论

[请申请gravatar头像,木有头像的评论可能不会被回复|头像相关帮助]

插入图片