Cleo图纸的信息提取与反填
2020-12-02朱文伟
省教育厅课题:浙江省教育厅《PDM下图纸信息自动获取与反填技术的研究》(Y201430802)
浙江省公益性技术应用研究计划《可穿戴下肢助力机器人设计》2017C31106
摘要:图纸信息的提取与反填是实现产品数据高效管理的基础。Creo软件在工程设计制造领域应用广泛,针对Creo文件,提出一种基于VS2015平台的信息提取与反填的应用程序,既可以将Creo文件中的信息提取出来,也可以将数据反填到Creo文件。通过实例验证,表明应用程序信息提取与反填有效。
关键词:Creo;信息提取;信息反填
中图分类号:TG802 文献标识码:A 文章编号:1672-9129(2020)11-0152-03
前言:一个产品的生产过程中,会产生大量的图纸文件。随着时间的推移,企业产品的数量急剧增加,容易造成文件丢失、信息丢失,因此往往需要引入管理软件比如PDM软件,进行信息管理。但是,管理软件需要将产品信息录入到系统中,而这些信息往往存在图纸中,使用这些信息就需要打开一个个产品的图纸文件,然后将信息拷贝出来,效率非常低,且容易出错,不利于管理。同时新的图纸也有类似问题,由于设计者往往不会使用管理软件,而管理软件使用者也不会使用CAD软件,新图纸信息的获取也是费时费力。因此,如何高效且准确地提取信息,解决图纸设计软件“信息孤岛”现状成为企业负责人十分关注的问题。
为此,本文针对如何高效且准确地提取信息,开发了一个应用程序,可以将所需信息直观地显示在界面上,并可以按照一定格式生成文本文件,供任意管理软件调用。最终生成动态链接库文件,提供接口信息,嵌入到任意管理软件中,实现无缝连接。
CAD软件的类型众多,其中Creo软件是一款主流的、应用非常广泛的软件。因此,本文选用的CAD软件为Creo 4.0。
1 开发环境配置
根据Creo4.0的官方规定,其二次开发的应用软件为VS2015,因此,本文将通过VS2015设计开发应用程序,实现Creo4.0文件的信息提取與反填,其中信息的提取与反填可以定制化。
(1)API开发包。随着Creo软件的发展,其二次开发的库由ProToolkit向Creo Object TOOLKIT C++转变,但是ProToolkit的部分功能还是能应用的,因此,本文将同时使用ProToolkit与OTK进行二次开发。
(2)环境变量。为了实现高效且独立的信息提取,将采用异步模式对Creo进行开发,因此,需要设置环境变量PRO_COMM_MSG_EXE,它的值设定为pro_comm_msg的绝对路径。
(3)VS2015开发环境设置。配置Creo4.0库,包含目录和库目录,将工程中的包含目录设定软件安装目录下~\\Common Files\\\\otk\\otk_cpp\\include和~\\Common Files\\protoolkit\\includes。
将工程中的库目录设定为软件安装目录下~\\Common Files\\otk\\otk_cpp\\x86e_win64\\obj和~\\Common Files\\protoolkit\\x86e_win64\\obj。
同时,将Creo4.0库的附加依赖项,如:otk_cpp_async.lib、otk_222.lib、pt_asynchronous.lib、protoolkit_NU.lib、ucore.lib、udata.lib等。
2 信息提取与反填
2.1信息提取算法。
首先,明确信息来源,输入工程文件的绝对地址或者选择一个工程文件;
接着,根据输入的不同工程文件,取不同的信息。具体如下:1)零件图,提取标题栏信息;2)装配图,提取标题栏信息和子图的信息;3)工程图,提取标题栏信息和明细表信息。
最后,将信息按照一定格式保存。
信息提取算法的流程图如图1所示。
2.2信息提取的实现。
首先,检查是否已经启动Creo,如果已经启动,获取其会话对象;如果没有启动Creo,则以异步模式下不可见方式启动Creo。利用pfcAsyncConnection::Start(“pro -g:no_graphics -i:rpc_input”)来实现非交互式、无界面的启动Creo。其中pro是启动Creo Parametric的命令。
connection= pfcAsyncConnection::GetActiveConnection();
if (!connection)
{
connection = pfcAsyncConnection::Start("C:\\\\Program Files\\\\PTC\\\\Creo 4.0\\\\M080\\\\Parametric\\\\bin\\\\parametric.exe -g:no_graphics -i:rpc_input", "");
if(!connection)
{
::MessageBox(NULL, _T("Creo启动错误!"), _T("Fail"), NULL);
return;
}
}
else
{
::MessageBox(NULL, _T("Creo已经启动,获取成功!"), _T("Get"), NULL);
}
然后,通过函数ProMdlFiletypeLoad打开文件;
GetDlgItemText(IDC_EDIT1, filename);
ProStringToWstring(proPath, filename);
status = ProMdlFiletypeLoad(proPath, PRO_MDLFILE_PART, b, &proMdl);
if (status != PRO_TK_NO_ERROR)
{
::MessageBox(NULL, _T("打开文件错误!"), _T("Get"), NULL);
}
其次,判断文件类型,根据文件扩展名的不同判断当前文件是装配图还是工程图还是零件图。
接着,根据不同文件,提取不同信息;
status=ProMdlToModelitem(proMdl, &item);
GetSolidParam(item, &appdata);
ProArraySizeGet((ProArray)appdata, ¶mCount);
for (int i = 0;i { char name[PRO_NAME_SIZE]; char value[PRO_TYPE_SIZE]; ProParamvalue proval; ProParameterValueGet(appdata + i, &proval); Num = m_MyListBox.GetCount(); CString strTemp, strTemp1; strTemp1 = " = "; if (proval.type == PRO_PARAM_DOUBLE) { strTemp.Format(_T("%.4f"), proval.value.d_val); strTemp = ((appdata + i)->id) + strTemp1+ strTemp; m_MyListBox.InsertString(Num, strTemp); } else { strTemp = ((appdata + i)->id) + strTemp1 + proval.value.s_val; m_MyListBox.InsertString(Num, strTemp); } } 最后,将信息保存成可以让管理软件使用的文本格式。 2.3信息反填算法。 首先,明确信息反填对象,输入工程文件的绝对地址或者选择一个工程文件; 接着,判断信息是否已经存在,如果存在,更改属性内容;如果不存在,新建属性及其设定值。 最后,保存文件。 信息反填算法的流程图如图2所示。 2.4信息反填的实现。 首先,检查是否已经启动Creo,此过程类似信息提取算法; 然后,通过函数ProMdlFiletypeLoad打开文件; 其次,判断反填信息是否已经存在,存在则修改,不存在则新建; status = ProParameterInit(&item, strParam1.AllocSysString(), &new_param); if (status != PRO_TK_NO_ERROR) { ProParamvalueSet(&new_value, &plTemp1, PRO_PARAM_STRING); status = ProParameterWithUnitsCreate(&item, name1, &new_value,NULL,&new_param); if (status != PRO_TK_NO_ERROR) { AfxMessageBox(_T("属性参数创建失败!")); } } else//反填信息已存在,更新之 { ProParamvalueSet(&new_value, &plTemp1, PRO_PARAM_STRING); status = ProParameterValueWithUnitsSet(&new_param, &new_value,NULL); } 最后,保存文件。 3 实例验证 本文所述的信息提取与反填算法将通过MFC应用程序来验证。以某一个零件图为对象,根据测试要求,在零件图的参数对话框中设置属性,如图3所示: 设置属性完毕,运行MFC程序,点击选择文件按钮,在弹出的文件选择对话框中,将上述文件选中,再点击开始提取,经过后台自动提取,将零件图中的参数信息提取出来,并按照一定形式显示在显示框内,显示形式可以自定义。比较程序提取出来的信息与零件图中的信息,两者一致。如图4所示 提取完毕后,在信息反填中,将需要修改的属性内容与添加的内容填写上去,如将材料修改为45号钢,购买者修改为赵张武,添加一个新的属性,如新属性=测试。然后点击开始反填按钮,经过后台自动反填,完成属性的修改与添加。同时,为了更好观察是否反填完毕,再次点击开始提取,比对发现信息已经反填成功。最后通过打开零件图的参数对话框验证,信息反填成功。如图5所示: 4 结论 本文通过VS2015实现Creo图纸信息的提取与反填,可以自动分辨图纸的种类,根据定制需求提取出定制形式信息。在本文论述过程中,通过MFC应用程序方式完成。推广到实际应用上的时候,可以将实现过程用MFC DLL的形式,提供出信息提取与信息反填2个接口,生成动链接库文件,从而方便其他管理软件的调用。 参考文献: [1]晏恒兵,仲梁维,基于Creo的智能模型库插件研究与开发[J].软件工程,2020,23(4):12-14 [2]张文晓,基于Excel VBA对Creo进行异步模式下的二次开发[J].电脑知识与技术,2019,15(7):212-214. [3]宫潘威,时小磊,陶高周等,CREO环境下三维模型及信息集成共享实现方法研究[J],机械设计与制造,2019,0(2):218-221. [4] Creo Object TOOLKIT C++ Users Guide (4.0 M080),PTC,2019. [5]張文彬,沈精虎,姜兆康,基于Creo二次开发的零件参数化变型设计[J],微型电脑应用,2018,34(2):48-50. 作者简介:朱文伟,1983.12.27,男,汉,浙江瑞安市人,硕士,温州大学瓯江学院,研究方向:机电一体化、数字化设计。 李美琴,1982.06.30,女,浙江温州人,硕士,温州大学瓯江学院,研究方向:机械设计及理论。