钻模参数化设计示例.docx

上传人:b****8 文档编号:30517776 上传时间:2023-08-16 格式:DOCX 页数:21 大小:248.18KB
下载 相关 举报
钻模参数化设计示例.docx_第1页
第1页 / 共21页
钻模参数化设计示例.docx_第2页
第2页 / 共21页
钻模参数化设计示例.docx_第3页
第3页 / 共21页
钻模参数化设计示例.docx_第4页
第4页 / 共21页
钻模参数化设计示例.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

钻模参数化设计示例.docx

《钻模参数化设计示例.docx》由会员分享,可在线阅读,更多相关《钻模参数化设计示例.docx(21页珍藏版)》请在冰豆网上搜索。

钻模参数化设计示例.docx

钻模参数化设计示例

ProToolKit+ADO模式的钻模三维参数化设计(示例)

孙光华2011.2.16

软件开发环境:

pro/E4.0+vs2005+SQLServer2000

设计目标:

根据工件钻孔直径,设计相应的钻模(仅为示例)。

钻模参数化设计程序开发完成后的Pro/E工作界面:

主菜单

对话框

参数输入对话框界面钻模板参数修改对话框界面

设计步骤

1.建立pro/E的模型文件

建立两个pro/E零件,一个是固定钻套zuantao.prt,另一个是钻模板zuanmoban.prt,将它们装配成组件asm0001.asm,并保存在某文件夹下。

(因为是示例,这三个文件就代表某套钻模的所有模型文件。

钻套钻模板钻模组件

为固定钻套设置4个参数,分别是:

钻套孔径Dhole,外径Doutter,肩径Dshoulder和钻套长度H。

为钻模板设置3个参数,分别是:

孔径Dhole,孔中心到底边距离L和钻模板厚度H。

2.建立工程数据库和固定钻套数据表

使用SQLServer2000建立一个“Engineering”数据库,并在其中建立一个“固定钻套”数据表,表结构为:

并输入以下数据:

以上数据根据“国家标准JB/T8045.1-1999固定钻套”而确定。

下面是“国家标准JB/T8045.1-1999固定钻套”摘录。

……

3.Vs2005配置

启动vs2005。

在“项目和解决方案”中选择“VC++目录”,在“显示以下内容的目录”中选择“包含文件”,加入以下文件(其中,D:

是pro/E的安装盘符):

   D:

\proeWildfire4.0\protoolkit\includes

   D:

\proeWildfire4.0\protoolkit\protk_appls\includes

D:

\proeWildfire4.0\prodevelop\includes 

在“显示以下内容的目录”中选择“库文件”,加入以下文件:

D:

\proeWildfire4.0\protoolkit\i486_nt\obj

D:

\proeWildfire4.0\prodevelop\i486_nt\obj

(注:

请认真检查pro/E的安装目录(路径名)。

在以上配置中,输入路径名时不能有空格,比如在以上设置中输入“D:

\ProgramFiles\proeWildfire4.0”是不对的,要把路径中的空格去掉,如“D:

\proeWildfire4.0”。

如果已经按默认设置安装了pro/E(此时安装目录中是有空格的),则必须用D:

\Progra~1\proeWi~1.0输入。

(以上工作仅做一次。

4.建立新项目,并做项目配置

在vs2005中,建立一个新项目,使用MFCDLL模板,项目名称为ZuanMo。

vs2005会自动建立名为ZuanMo的文件夹。

配置以下三个项目属性:

(1)常规——字符集,将其中的默认“使用Unicode字符集”改为“使用多字节字符集”

(2)C/C++——预处理器,在“预处理器定义”里加入:

PRO_USE_VAR_ARGS

(3)连接器——输入,在“附加依赖项”里加入:

wsock32.lib

mpr.lib

psapi.lib

protk_dllmd.lib

(如果新建项目,则项目属性配置必须每次都做一遍。

5.建立信息和菜单文件

在项目所在目录下,建立一个text目录:

在text目录下,新建一个信息文本文件,取名为msg.txt,文件内容为:

MyHello

&

欢迎使用基于pro/Toolkit的机床夹具三维参数化设计系统!

#

MyBye

&

再见!

#

在text目录下,再新建一个菜单文本文件,取名为menu.txt,文件内容为:

m_zuanmo

&

钻模设计

#

b_para

&

工件参数输入

#

paratip

&

输入工件的孔径等参数

#

b_zuanmoban

&

钻模板

#

zuanmobantip

&

修改钻模板参数

#

6.源代码输入

在ZuanMo.cpp文件中,输入以下代码(删除所有已有代码):

//ZuanMo.cpp:

定义DLL的初始化例程。

#include"stdafx.h"

#include"ZuanMo.h"

#include"dlg_para.h"

#include"dlg_zuanmoban.h"

#include//包含pro/Toolkit必要的头文件

#include

#include

#include

#include

ProFileNamemsgfil;//定义文件类型的变量,用于显示消息

//这三个函数的定义在后面,此处仅说明函数原型

voidMyDLG();

voidMyDLGZuanMoBan();

staticuiCmdAccessStateUserAccessTestMenu(uiCmdAccessMode);

//初始化函数,此函数将在启动钻模设计辅助应用程序时被调用执行

extern"C"intuser_initialize(){

AfxEnableControlContainer();

ProErrorstatus;

ProNamemenumsgfile;//定义名称类型的变量,用于生成菜单

uiCmdCmdIdcmd_id;//定义菜单项标识类型的变量

//在pro/E的主菜单栏上添加一个新的菜单

ProStringToWstring(menumsgfile,"menu.txt");

status=ProMenubarMenuAdd("zuanmo","m_zuanmo","Help",PRO_B_FALSE,menumsgfile);

//添加新菜单下的第一个菜单项

status=ProCmdActionAdd("MyDLG",(uiCmdCmdActFn)MyDLG,uiCmdPrioDefault,UserAccessTestMenu,PRO_B_TRUE,PRO_B_TRUE,&cmd_id);

//先指定回调函数,即点击此菜单后要执行什么动作(本菜单项的功能是打开工件参数输入对话框)

status=ProMenubarmenuPushbuttonAdd("zuanmo","para","b_para","paratip",NULL,PRO_B_TRUE,cmd_id,menumsgfile);

//然后才添加菜单项

//再添加第二个菜单项

status=ProCmdActionAdd("MyDLGZuanMoBan",(uiCmdCmdActFn)MyDLGZuanMoBan,uiCmdPrioDefault,UserAccessTestMenu,PRO_B_TRUE,PRO_B_TRUE,&cmd_id);

status=ProMenubarmenuPushbuttonAdd("zuanmo","zuanmoban","b_zuanmoban","zuanmobantip","para",PRO_B_TRUE,cmd_id,menumsgfile);

//在pro/E的消息区显示消息

ProStringToWstring(msgfil,"msg.txt");

ProMessageDisplay(msgfil,"MyHello");

return(0);

}

//菜单可访问性(此函数的定义一般不需修改!

staticuiCmdAccessStateUserAccessTestMenu(uiCmdAccessModeaccess_mode)

{

return(ACCESS_AVAILABLE);

}

voidMyDLG()//自定义的第一个菜单项的菜单回调函数

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

dlg_paradlg_para;//先定义一个对话框类对象

dlg_para.DoModal();//以模态方式打开工件尺寸参数输入对话框(其中内容视对话框类的名称而变)

}

voidMyDLGZuanMoBan()//自定义的第二个菜单项的菜单回调函数

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

dlg_zuanmobandlg_zuanmoban;

dlg_zuanmoban.DoModal();//打开钻模板参数设置对话框

}

//结束函数,此函数将在停止钻模设计辅助应用程序时被调用执行

extern"C"voiduser_terminate()

{

ProMessageDisplay(msgfil,"MyBye");//在pro/E的消息区显示消息

return;

}

(函数用法可参见帮助文档:

D:

\proeWildfire4.0\protoolkit\protkdoc\index.html)

7.加入工件参数输入对话框

事先做好下面这幅图,并保存成位图(BMP)格式的文件:

添加一个位图资源(使用“添加资源”对话框中的“导入”按钮,导入位图):

添加一个对话框资源:

在上面的原始对话框中,添加静态文本控件(StaticText)、编辑控件(EditControl)和图片控件(PictureControl),并将对话框界面修改成以下布局(图片控件的Type属性设为“Bitmap”,Image属性右边下拉列表中选“IDB_BITMAP1”):

8.为工件参数输入对话框添加类并为编辑控件关联成员变量

在对话框空白处点击鼠标右键,在弹出的快捷菜单中选择“添加类”,类名称为dlg_para。

选中编辑控件,点击鼠标右键,在弹出的快捷菜单中选择“添加变量”,为IDC_EDIT1添加一个double类型的变量,变量名取为m_DHole。

这个成员变量的初始值为零,下面改变初始值。

打开dlg_para.cpp源程序文件,找到如下代码段:

dlg_para:

:

dlg_para(CWnd*pParent/*=NULL*/)

:

CDialog(dlg_para:

:

IDD,pParent)

m_DHole(0)

{

}

将其中的m_DHole(0)改为m_DHole(D_HOLE),其中D_HOLE变量的声明在第10步。

9.为“确定”按钮添加消息处理代码

回到对话框设计界面,双击“确定”按钮,会出现以下程序段(这是“确定”按钮的单击事件过程代码):

//dlg消息处理程序

voiddlg_para:

:

OnBnClickedOk()

{

//TODO:

在此添加控件通知处理程序代码

OnOK();

}

将其中的两行代码删除,并用以下的程序段替换:

voiddlg_para:

:

OnBnClickedOk()//OK按钮处理程序

{

UpdateData(true);//将编辑框中的数据(工件孔径)传送到关联变量m_DHole

//根据SQL语句生成记录集

m_pRecordset.CreateInstance(__uuidof(Recordset));

_variant_tRecordsAffected;

CStringvSQL;

vSQL.Format("SELECT*FROM固定钻套WHERE孔径大于<'%f'and孔径到>='%f'",m_DHole,m_DHole);

m_pRecordset=m_pConnection->Execute(_bstr_t(vSQL),&RecordsAffected,adCmdText);

if((m_pRecordset->adoBOF)&&(m_pRecordset->adoEOF))

{

AfxMessageBox("没有满足条件的记录!

");

m_pRecordset->Close();

return;

}

//从记录集获取相应的值,并赋给变量

//while(!

m_pRecordset->adoEOF)//如果要处理多条记录,则可用循环语句

//{//目前记录集中只会有一条记录

//doubled;//存钻套孔径

CStringD,D1,H;//存钻套外径,肩径及长度。

暂时全部设为串类型,后面再进行转换

_variant_tvFieldValue;

D_HOLE=m_DHole;//直接取用文本框中所输入的钻孔直径(关联变量的值)

vFieldValue=m_pRecordset->GetCollect("D");//获取钻套外径

D=(char*)_bstr_t(vFieldValue);//赋给变量

vFieldValue=m_pRecordset->GetCollect("D1");//获取钻套肩径

D1=(char*)_bstr_t(vFieldValue);//赋给变量

vFieldValue=m_pRecordset->GetCollect("H1");//获取钻套长度

H=(char*)_bstr_t(vFieldValue);//赋给变量

//m_pRecordset->MoveNext();//将记录指针移到下一条记录

//}

//声明变量

ProMdlmodel;//模型

ProFamilyNamepartname;//零件模型文件名

intnWindowID;//窗口标识

ProModelitemfeature;//特征

ProParameterparam1,param2,param3,param4;//参数(变量个数应以所有模型中参数最多的为准)

ProParamvaluevalue1,value2,value3,value4;//参数值(同上)

//打开钻套模型

ProStringToWstring(partname,"zuantao.prt");

ProMdlRetrieve(partname,PRO_MDL_PART,&model);//提取工作目录中的零件模型

ProMdlDisplay(model);//显示模型

ProMdlWindowGet(model,&nWindowID);//获取模型窗口标识符

ProWindowActivate(nWindowID);//激活模型窗口

//初始化钻套参数

inti;

ProMdlIdGet(model,&i);

ProModelitemInit(model,i,PRO_PART,&feature);

ProParameterInit(&feature,L"Dhole",¶m1);//这些参数在零件模型中应提前设置好

ProParameterInit(&feature,L"Doutter",¶m2);

ProParameterInit(&feature,L"Dshoulder",¶m3);

ProParameterInit(&feature,L"H",¶m4);

//为钻套参数赋新值(一定要对应上面个参数的顺序)

value1.type=PRO_PARAM_DOUBLE;//在pro/E中,所有的参数都是实数类型

value1.value.d_val=D_HOLE;//钻套孔径即为工件钻孔直径

ProParameterValueSet(¶m1,&value1);//设置新的参数值

value2.type=PRO_PARAM_DOUBLE;

value2.value.d_val=atof(D);//钻套外径,atof函数将串类型转换成实数类型

ProParameterValueSet(¶m2,&value2);

value3.type=PRO_PARAM_DOUBLE;

value3.value.d_val=atof(D1);//钻套肩径

ProParameterValueSet(¶m3,&value3);

value4.type=PRO_PARAM_DOUBLE;

value4.value.d_val=atof(H);//钻套长度

ProParameterValueSet(¶m4,&value4);

ProSolidRegenerate((ProSolid)model,PRO_B_TRUE);//再生模型

//ProMdlSave(model);//保存模型

//////////////////////////以上钻套处理完毕////////////////////////

//打开钻模板

ProStringToWstring(partname,"zuanmoban.prt");

ProMdlRetrieve(partname,PRO_MDL_PART,&model);

ProMdlDisplay(model);

ProMdlWindowGet(model,&nWindowID);

ProWindowActivate(nWindowID);

//初始化钻模板参数

ProMdlIdGet(model,&i);

ProModelitemInit(model,i,PRO_PART,&feature);

ProParameterInit(&feature,L"Dhole",¶m1);

ProParameterInit(&feature,L"L",¶m2);

ProParameterInit(&feature,L"H",¶m3);

//为钻模板的参数赋新值

value1.type=PRO_PARAM_DOUBLE;

value1.value.d_val=atof(D);//钻模板孔径等于钻套外径

ProParameterValueSet(¶m1,&value1);

value2.type=PRO_PARAM_DOUBLE;

value2.value.d_val=88;//目前任意(应根据情况而定)

ProParameterValueSet(¶m2,&value2);

value3.type=PRO_PARAM_DOUBLE;

value3.value.d_val=atof(H);//钻模板厚度等于钻套长度

ProParameterValueSet(¶m3,&value3);

ProSolidRegenerate((ProSolid)model,PRO_B_TRUE);

//ProMdlSave(model);//保存模型

//////////////////////////以上钻模板处理完毕////////////////////////

//打开装配文件

ProMdlRetrieve(L"asm0001.asm",PRO_MDL_ASSEMBLY,&model);

ProMdlDisplay(model);

ProSolidRegenerate((ProSolid)model,PRO_B_TRUE);//一定要再生装配模型

OnOK();//关闭对话框

}

10.为dlg_para.cpp源程序添加必要的头文件、添加ADO类支持和相关变量

将以下代码复制到dlg_para.cpp文件头部:

#include"stdafx.h"

#include"ZuanMo.h"//包含主头文件(这两行顺序不可调换!

#include"dlg_para.h"//包含对话框头文件

#include//包含pro/Toolkit必要的头文件

#include

#include

#include"ProParameter.h"

#include"ProSolid.h"

#include"ProMdl.h"

#include"ProModelItem.h"

#include"ProUIInputpanel.h"

#include

#import"c:

\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")

//上面一行导入ADO相关的类声明

staticdoubleD_HOLE=18;//静态变量,存对话框中输入的工件钻孔直径

_ConnectionPtrm_pConnection;//定义数据库连接对象

_RecordsetPtrm_pRecordset;//定义记录集对象

11.为dlg_para类重载OnInitDialog()函数

在类视图下,选中dlg_para类,在属性面板中点击“重写”按钮,在下方找到OnInitDialog,选择右边的“添加OnInitDialog”:

此时代码窗口中会显示以下内容:

BOOLdlg_para:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

在此添加额外的初始化

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//异常:

OCX属性页应返回FALSE

}

这个函数在对话框显示之前被调用执行。

添加代码到“returnTRUE;”这一行的上方,添加后的代码为:

BOOLdlg_para:

:

OnInitDialog()//重载的对话框初始化函数

{

CDialog:

:

OnInitDialog();

//TODO:

在此添加额外的初始化

/////////////////连接数据库//////////////////////

:

:

CoInitialize(NULL);

HRESULThr;

try

{

hr=m_pConnection.CreateInstance(__uuidof(Connection));

if(SUCCEEDED(hr))

{

m_pConnection->ConnectionString="Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=Engineering;DataSource=PC-2010

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1