APP下载

SolidWorks二次开发应用方法探究

2018-08-21李志雄王宗彦侯骅玲张伟

机械制造与自动化 2018年4期
关键词:明细表二次开发浏览器

李志雄,王宗彦,侯骅玲,张伟

(1. 中北大学 机械与动力工程学院, 山西 太原 030051; 2. 山西省起重机数字化设计工程技术研究中心, 山西 太原 030051)

0 引言

随着SolidWorks在国内应用领域的不断扩大,用户群体也越来越庞大,其参与企业新产品研发与高校科研也越来越普遍,因此SolidWorks的“本土化”应用需求也越来越大。对SolidWorks进行有针对性的二次开发成为当务之急。

二次开发是对软件用户化和专业化的有效手段,可以使软件更好地为用户服务,提高CAD软件的应用效率、专业性,充分发挥CAD软件的使用效益,在提高工作效率和工作质量等方面有着十分重要的意义[1]。三维软件的二次开发要遵循工程化、 模块化、标准化和继承性等一系列的原则,依据工程化的思路对二次开发进行统筹规划,具体实现模块化、标准化和继承性原则[2]。简单地说就是在现有的三维软件上进行定制修改,功能扩展,以达到开发者想要的功能。SolidWorks在二次开发后有两个主要的应用领域,一是特殊化建模,二是获取SolidWorks文件显式或隐式的信息。其中,特殊化建模又可分为两种:使用二次开发在特定条件下的直接建模与装配;参数化建模、装配与生成工程图。其中前者对开发者能力要求较高,后者要求较低。因此文中主要探究前者的二次开发方法。

1 SolidWorks二次开发综述

1.1 二次开发模式与API对象

SolidWorks具有开放的外部接口,并且在其不断更新的过程中也不断地更新二次开发的接口函数。Solidworks的API(application programming interface应用编程接口)是一个基于OLE Automation的编程接口,其中包含了数以百计的功能函数,这些函数提供了程序员直接访问Solidworks的能力,可以被VB、C/C++等编程语言调用[3]。API目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码。SolidWorks API接口函数库是SolidWorks的OLE(object linking and embedding,对象连接与嵌入)应用程序开发接口,用户可以利用它并通过支持OLE编程的开发工具,如Visual Basic、VBA(Excel,Access)、C、Visual C++、C++等对SolidWorks进行二次开发,建立满足用户需求的、专用的SolidWorks功能模块[4]。通过调用SolidWorks API接口函数开发的专用功能模块大致有两种应用模式:

1) SolidWorks内部运行模式,即开发后生成*.DLL的动态链接库文件,作为插件成为SolidWorks界面中的一部分;

2) 独立于SolidWorks存在的*.EXE的可执行程序,通过外部调用实现对SolidWorks的显式或隐式操作。

1.2 二次开发与宏录制工具

SolidWorks可以使用多种编程语言进行二次开发,C语言、Delphi、Visual C++、C#、Visual Basic6.0、VBA等均可以作为二次开发的工具。目前,较常用的开发工具为Visual C++与Visual Basic6.0。本文所采用的是二次开发工具为Visual Basic6.0。

“宏”的含义就是一系列简短命令组成的一段较长的命令代码完成某些特定的功能。SolidWorks宏录制工具可以记录用户操作SolidWorks时的“一举一动”,并将其转化为可编辑的VBA代码供二次开发人员参考。

2 SolidWorks二次开发应用方法探究

2.1 二次开发代码阅读方法探究

根据相关项目经验,总结了一套SolidWorks二次开发代码阅读方法。但需首先了解Visual Basic6.0的【对象浏览器】功能以及SolidWorks API help使用方法。

1) 在取得一段使用VB书写的二次开发代码后,应首先将检查该工程是否引用了SolidWorks的常用类型库“SolidWorks Constant Type Library”。这个类型库包含了所有公开的API接口,以及用于SolidWorks自动操作可使用成员[5]。

引用类型库之后,选择菜单中【视图】/【对象浏览器】,并在“工程/库”中选择“SldWorks”选项,对话框中显示的就是SolidWorks所有公共接口对象及其成员(如图1所示)。【对象浏览器】包含函数简要说明,能够方便地帮助开发者了解每个对象下所有的事件、方法、过程与属性。

图1 VB对象浏览器

2) SolidWorks API help是软件自带指导二次开发的帮助文件,它包含并描述了所有SolidWorks对象及其方法属性的功能、参数、返回值含义以及使用范例。每个函数的声明方法及使用范例均有由Visual Basic.net、VBA、C#、C++/CLI语言书写的版本。此帮助文件本身也提供了索引、搜索、收藏等功能,为开发者全面了解API对象提供了百科全书。该帮助文件可通过选择【帮助】下拉菜单中的【API帮助】找到,打开后如图2所示。通过API帮助文件不仅能够清晰了解各对象之间的隶属关系,而且还可以找到每个对象所包含所有属性、事件、方法的详细介绍。如图3所示就是对象“TableAnnotation”与其下属对象的结构。对于一些复杂函数使用,该帮助文件也提供了大量范例来辅助。

图2 API help

图3 TableAnnotation对象结构

熟练掌握以上两种二次开发辅助工具后就具备了二次开发读与写的基本前提。在VB与VBA编程环境下SolidWorks二次开发代码阅读方法可分为递进式的3种。

1) 于不明含义的函数处右键,选择“定义”进行查看;

2) 于【对象浏览器】中搜索该函数名,根据其上级类对象在搜索结果中选择正确的函数项进行查看;

3) 于SolidWorks API help中进行有针对性查找。对该函数进行检索,找到该函数在API help中的介绍。

2.2 二次开发代码编写方法探究

由于SolidWorks有一些较深层次的内容或新功能不提供二次开发接口,因此直接建模与二次开发相当于包含与被包含关系(两者的关系如图4所示)。这无形中增加了开发的难度。

图4 二次开发可操作范围对比

开发某项工程前,需挖掘开发内容的重点并制定最专业化、简单化的流程。因此,具有良好的建模规则与习惯成为编写二次开发代码的先决条件。以下介绍的是作者从项目经验中按照递进原则总结的两种二次开发代码编写方法。

第一种:对规划好的建模或操作步骤进行宏录制并精简出宏代码中的关键函数;

第二种:宏录制无果,分解该操作为若干步骤,查找分步骤的相关函数并进行组合。

虽然宏录制是一个便捷有效的二次开发工具,但宏录制出的代码不能直接引用。宏记录了许多诸如视角变化、窗口缩放、用户误操作等不必要的命令代码。多余的代码需要删掉才可以提取出有用的函数供二次开发者参考。剔除多余代码后,首先需要撤销已录制的各项操作,其次单步运行精简后的代码以验证剩余函数的作用。对于功能不明确的函数可采用上一节介绍的阅读方法进行查找了解。最终将所需的关键函数套用在Visual Basic6.0中,完成二次开发工作。

SolidWorks中某些操作是无法进行宏录制的,因此代码精简后可能会出现录制无果的情况。这就需要应用第二种代码编写方法(编写流程如图5所示)。比如某个操作无法用一个单独的函数来代替,便应该将这个单一的操作分为多个步骤,通过链接不同的函数完成该操作。

图5 SolidWorks二次开发代码编写方法

首先,通过对被操作对象进行一次能够被宏记录的选取操作来获取该对象类型,其次进入【对象浏览器】中浏览此对象的所有下属成员,根据成员名称与功能梗概确定疑似分步骤函数。若无法确定分步骤成员,再通过API help检索该对象所有下属数成员(属性、方法等)的解释。将功能不确定的疑似分步骤函数依次通过帮助文件中的实例验证并确定其功能。最终,将各分步骤函数的输出结果按需求进行串行或并行整合,验证是否能够分步骤完成该操作。

两种二次开发代码编写方法均需要借助API接口进行操作,有所不同的是第一种方法对SolidWorks API help的依赖程度要高于第二种,灵活程度要低于第二种。第二种方法在开发中更加充分地发挥了人的主观能动性,使二次开发更加有创新的意义。

3 SolidWorks二次开发方法应用示例

某制造企业设计部门使用SolidWorks建模工具并且二维、三维设计功能同时运用。该企业在工作流程管理中缺少工程图BOM批量导出为Excel工作簿的功能。本文针对此需求运用第2章节中的第二种代码编写方法进行解决。

此次二次开发的关键是将工程图中材料明细表自动导出为Excel工作簿。由于此功能可以在SolidWorks中通过人为操作实现,因此首先采用第一种方法,进行一次宏录制并分析所录制的代码。在一张装配图的材料明细表处右键【另存为】,选择文件保存类型为【Excel(*.xls)】即可。但录制的结果在去除非必要代码后只剩一条选择命令“SelectedByID2”(如图6中标记所示)。

图6 BOM表另存Excel工作簿宏录制结果

由此可见,这里需要采取第二种方法将该操作分为若干步骤并依次寻找分步骤的函数。笔者将该操作分为提取材料明细表数据以及Excel数据导入与保存两大步骤,最终将这两步骤串行组合即可。第二分步骤还需要运用到Excel的二次开发,将在下文进行简述。

在宏录制的结果中,经过SolidWorks API help的详细查询,SelectedByID2函数中加框标注的第二个参数就是该选中对象的类型,但此处的类型名称与该对象的名称并不相同。通过API help中的参数列表查询可知该对象就是上文提到的“TableAnnotation”。

TableAnnotation对象属性与函数中包含有行数“RowCount”、列数“ColumnCount”和指定单元格内容“Text(Row,Column)”3个可以组合循环嵌套来读取整张材料明细表内容的函数。通过记录每个单元格的内容以及位置可以将整张表复制到Excel中去,完成自动操作的目的。这种方法非常便捷,并且在数据搬动的过程中没有数据损失,保证了较高的可靠性。

在完成第一分步骤“提取材料明细表数据”后,接下来就需要对Excel进行二次开发完成Excel数据导入与保存的步骤。Excel二次开发的思路与SolidWorks二次开发思路大致是相同的,开发的目的同样是实现自动输入及保存工作簿。通过录制在不同单元格内输入字符代码时的宏,了解Excel二次开发的相关句法结构以及开发应使用的部分接口函数。使用Visual Basic6.0开发Excel前需将其对象类型库如图7所示加载至工程中,关注【对象浏览器】中【Excel】工程/库所含有的“Workbook ::Worksheets”、“Worksheet ::Range”、“Range ::Activate”、“Range ::Cells”与“Workbook ::SaveAs”等关键函数。

图7 VB引用SolidWorks与Excel对象类型库

工程图中的材料明细表数据使用以上提取方法后即可保存在指定位置的Excel中,BOM表导出为Excel工作簿程序界面如图8所示,输出结果如图9、图10所示。以下是工程图明细表提取的关键代码:

For i = TotleRow To TotleRow + swTable.RowCount - 1 '列循环

For j = 0 To swTable.ColumnCount - 1 '行循环

If InStr(1, swTable.Text(i - TotleRow, j), "") Then

InterChangeArr(j, i) = Right(swTable.Text(i - TotleRow _

, j), Len(swTable.Text(i - TotleRow, j)) - Len("")) '给数组InterChangeArr变量赋值

Else

InterChangeArr(j, i) = swTable.Text(i - TotleRow, j) '给 _数组InterChangeArr变量赋值

End If

Next

Next

TotleRow = TotleRow + swTable.RowCount '统计行数

TotleCol = swTable.ColumnCount '统计列数

图8 BOM表导出为Excel工作簿程序界面

图9 工程图内明细表

图10 明细表导出为Excel工作簿

4 结语

简要介绍了SolidWorks二次开发的应用和发展情况以及API接口函数及其对象的基本结构、开发工具以及对于开发非常重要的宏录制工具。详细介绍了Visual Basic中【对象浏览器】、SolidWorks API help帮助文件的使用方法以及SolidWorks二次开发代码的3种递进式阅读方法。借助使用二次开发解决某企业实际问题的方式,全方位的介绍了SolidWorks二次开发代码的2种递进式编写方法。希望通过对SolidWorks二次开发的详尽说明能够对其他三维建模工具的二次开发提供借鉴。

猜你喜欢

明细表二次开发浏览器
2019年中国出口石材明细表(三)
2019年中国出口石材明细表(二)
2019年中国出口量值石材明细表(一)
西门子Operate高级编程的旋转坐标系二次开发
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用
2011年十家拍卖公司秋拍1000万元以上成交拍品前50名明细表