上面介绍了程序的登陆界面和注册页面,下面将介绍我们所需要的齿轮开发的具体步骤。
齿轮管理模块
(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",¶m1);
ProParameterInit(&feature,L"Z",¶m2);
ProParameterInit(&feature,L"ALPHA",¶m3);
ProParameterInit(&feature,L"HAX",¶m4);
ProParameterInit(&feature,L"CX",¶m5);
ProParameterInit(&feature,L"B",¶m6);
ProParameterInit(&feature,L"X",¶m7);
//为变量赋值
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(¶m1, &value1);
ProParameterValueSet(¶m2, &value2);
ProParameterValueSet(¶m3, &value3);
ProParameterValueSet(¶m4, &value4);
ProParameterValueSet(¶m5, &value5);
ProParameterValueSet(¶m6, &value6);
ProParameterValueSet(¶m7, &value7);
if(m_type=="斜齿轮"){//
ProParameterInit(&feature,L"BETA",¶m8);
value8.type=PRO_PARAM_DOUBLE;
value8.value.d_val=atof(m_beta);
ProParameterValueSet(¶m8, &value8);
}
else if(m_type=="锥齿轮"){//
ProParameterInit(&feature,L"Z_D",¶m8);
value8.type=PRO_PARAM_DOUBLE;
value8.value.d_val=atof(m_z_d);
ProParameterValueSet(¶m8, &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",¶m1);
ProParameterInit(&feature,L"Z",¶m2);
ProParameterInit(&feature,L"ALPHA",¶m3);
ProParameterInit(&feature,L"HAX",¶m4);
ProParameterInit(&feature,L"CX",¶m5);
ProParameterInit(&feature,L"B",¶m6);
ProParameterInit(&feature,L"X",¶m7);
//为变量赋值
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(¶m1, &value1);
ProParameterValueSet(¶m2, &value2);
ProParameterValueSet(¶m3, &value3);
ProParameterValueSet(¶m4, &value4);
ProParameterValueSet(¶m5, &value5);
ProParameterValueSet(¶m6, &value6);
ProParameterValueSet(¶m7, &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 -- 黄志勇的博客!. 版权所有.