solidworks二次开发毕业设计论文(完美版修改)

1.4.1课题研究内容及依据

课题以Windows XP中文版操作系统为支撑平台,利用SolidWorks2007结合面向对象技术,开发法兰盖标准件系统。在研究SolidWorks二次开发技术的基础上,以Visual C++为编程工具开发法兰盖三维标准件库,其研究工作主要有以下方面:

a.原理研究:对适合SolidWorks机械设计产品参数化设计的开发原理进行研究。重点对支持基于COM技术的二次开发原理进行分析。

b. SolidWorks的功能模块研究:详细了解SolidWorks基于COM的二次开发接口—API函数的特点和技术的实施要点。

c.用户界面:提供标准件库的选择界面和访问接口。使用户可以在SolidWorks 标准件库下,选择不同的标准件,并且可以选择所需要标准件的参数。

d.标准件建模:根据用户所选择的标准件,设计和分析零件的特征,找出最简单的方法来建模。

e.参数系列化:根据《机械设计手册》所提供的数据,建立EXCEL数据表格,导入SolidWorks环境下的各对应的模型,使其生成一系列的模型。

f.链接数据库模块:利用ACCESS管理数据库,运用ODBC技术建立法兰盖标准件的数据库。完成从数据库中选择标准件参数赋予相应的变量,根据新的尺寸重新调用模型。

g.法兰盖的应用:根据在SolidWorks环境下建立法兰盖标准件的三维模型,明白其设计尺寸参数。通过研究法兰盖在管道联接系统上的应用,掌握其设计和安全使用的意义。

2 SolidWorks简介及标准件库开发理论基础

2.1 SolidWorks简介

Solidworks是基于Windows操作系统的采用面向对象技术开发的三维CAD软件。其参数化和特征造型技术能方便的、快捷地创建任何复杂形状的实体,还可以把CAD/CAM/CAPP进行有效的集成,是一个优秀的三维CAD软件。

SolidWorks 软件具有如下的特点:

(1)具有独特的特征管理员,提供的特征管理员设计历史树同具体的实体模型是实时的动态联接;

(2)具有强大的实体建模功能和直观的Windows 用户界面;

(3)支持Windows 的DDE 机制和OLE 技术;

(4)支持Internet 技术,可以共享设计数据;

(5)双向关联的尺寸驱动机制;

(6)提供了VB ,VC + + 和其他支持OLE 的开发语言接口;

(7)给基于Windows 的桌面集成赋予了新的含义。

它以Windows 为平台,集成了动态仿真软件(Motionworks) 、工程分析软(CosMo- SolidWorksorks) 、数控加工软件(SurfCAM) 、以及工程数据管理软(SmarTeamWorks) 等,使它们成为SolidWorks中的一部分。这些软件的数据可以相互传递共享。而且SolidWorks 公司还设有网上站点,可方便用户快速了解此系统的最新发展情况,或获得最新的技术支持。

但SolidWorks也并非十全十美。由于该软件是由国外研发,不适合中国的国标,如标题栏、明细表、放大图的标注、剖视图的标注、装配图的序号等方面。也没有适合我国国标的标准件库,不能满足特定企业的特殊要求。因此,为了适应特定企业的特殊要求,形成企业自己的特色,使SolidWorks 在我国的企业中有效的发挥作用,并使常用或是重复的任务自动化,提高效率,就必须对其进行本土化和专业化的二次开发工作。

本节将分别对SolidWorks各个模块特点进行介绍。

图1.1 SolidWorks功能示意图

2.1.5 二次开发功能

一个企业欲全面开展CAD, 并取得积极效果,应以引入的CAD系统为基础,根据本企业的实情,进行程度不同的用户化、本地化的二次开发,建立应用绘图系统和数据库,形成具有本企业特色的产品设计CAD 系统,有效的二次开发是CAD/CAM 发挥效能的关键环节[9]。

虽然SolidWorks 所提供的功能非常强大,但要使其在我国企业中真正发挥作用,就必须对其进行本地化、专业化的二次开发工作[10][11]。

为了方便用户进行二次开发,SolidWorks提供了几百个API函数,这些API是SolidWorks的OLE或COM接口[12]。用户可以使用高级语言对其进行二次开发,建立适合用户需要的、专用的SolidWorks功能模块。SolidWorks 是一个非常开放的系统,提供了VB 、Visual C++和其他支持OLE的开发语言接口。提供给用户必要的工具(宏语言、库函数等) 以开发个人化的应用模块,并且易于将它集成到系统中去。

用VB或Visual C++调用SolidWorks 的API 函数,可以完成零件的建造、修改;零件各特征的建立、修改、删除、压缩等各项控制;零件特征信息的提取,如特征尺寸的设置与提取,特征所在面的信息提取及各种几何和拓扑信息;零件的装配信息;零件工程图纸中的各项信息;还可在SolidWorks主菜单上增加按钮,将自己开发的应用模块嵌入到它的管理系统中。

2.2 Visual C++简介

VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用C++的一个开发平台。 VC++是Windows平台上的C++编程环境。

Visual C++是一个功能强大的可视化软件开发工具,它大概可以分成三个主要的部分:

第一部分Developer Studio:它是一个集成开发环境,我们日常工作的99%都是在它上面完成的。很多人理所当然的认为,它就是Visual C++。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能。Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他语言。所以Developer Studio只是Visual C++的一个壳子。

第二部分MFC:从理论上来讲,MFC也不是专用于Visual C++。Borland C++,C++ Builder和Symantec C++同样可以处理MFC。同时,用Visual C++编写代码也并不意味着一定要用MFC,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就等于抛弃了Visual C++中很大的一部分功能。但是,Visual C++也不等于MFC。

第三部分Platform SDK:它才是Visual C++和整个Visual Studio的精华和灵魂。Platform SDK是以Microsoft C/C++编译器为核心,配合MASM,辅以其他一些工具和文档资料来完成整个程序工作的。

Visual C++的编译器、调试器、连接器、编辑器、和资源管理器都是非常强大的,在编译器中还提供了自动语句生成功能。编译器不仅仅界面友好,

而且还自动提示函数的参数、对象的成员。集成调用工具以及支持一套联机文档。

使用Developer Studio,可以完成创建、调试、修改应用程序等各种操作。Visual C++是和Windows联系最为密切的开发工具。Visual C++还提供了应用程序向导来提供用户迅速生成应用程序框架。

使用Visual C++来编写应用程序,主要的就是它的执行效率。用户可以利用Visual C++以两种方式编写Win32应用程序,一种方式是基于Windows API的C编成方式,另一种是基于MFC的C++编程方式。由于C语言程序的开发难度与开发的工作量都是非常大的。而C++编程方式相对于C编程方式,代码的运行效率稍微低一点,但是C++编程方式的开发难度小、开发的工作量小、源代码效率高。所以一般在Windows下编写应用程序追求代码的运行效率时都会采用C++编程方式。

总结起来,Visual C++与其它开发语言比较具有以下优势:

第一,与Windows紧密结合。第二,强大的类库支持和改造能力。第三,拥有高效率的运行速度。

图2.2 Visual C++菜单

2.3 Visual C++开发SolidWorks的原理

SolidWorks软件是完全基于Windows的CAD/CAE/CAM桌面集成系统,它的核心技术是在Windows环境下生成的,充分利用和发挥了Windows的强大威力和OLE技术,具有用户界面友好,上手快的优点。该软件支持Visual Basic、Visual C++或其它OLE开发语言,免费提供二次开发工具API[13]。用户二次开发的应用程序,可直接挂在SolidWorks的菜单下,形成统一的界面。然而SolidWorks与许多商品化的CAD/CAM系统如Pro/E、UG、AUTOCAD 等一样,它们虽然在设计行业中得到了广泛应用,但由于这些CAD/CAM系统都是作为通用机械设计与制造软件来设计的,不是特别有针对性,因此为了提高设计的效率,需要对其进行二次开发。

S SolidWorks 通过 OLE(Object Linking and Embedding ,对象的链接和嵌入) 技术为用户提供了强大的二次开发接口API(Application Programming Interface ,应用程序界面) ,API 中包含了数百个可以在Visual Basic、VBA(Excel 、Access 等) 、C、C++ 或 SolidWorks 宏文件调用的函数。SolidWorks API 接口采用面向对象的方法 ,所有的函数都是有关对象的方法或属性。用户通过对这些对象属性的设置和方法的调用 ,就

可以在用户自己开发的程序中对 SolidWorks 进行各种操作控制 ,完成零件草图的绘制和修改;零件各种特征的建立和修改;零件的特征信息、装配信息及工程图纸信息的提取等。

使用Visual C++开发应用程序,可以直接嵌入到SolidWorks内部,加载成功后应用程序菜单直接出现在SolidWorks主菜单上,如同SolidWorks 自带功能一样进行工作,极大地提高了设计效率。SolidWorks类库由Visual C++类库生成器生成,支持C++面向对象语言的三大特性:封装、继承和多态性。因此,利用此特性,可以派生出大量应用程序的新类,这样既能充分利用SolidWorks的类,又可以通过用户接口API用户继承并开发自己的新类[14]。

SolidWorks系统本身是由Visual C++开发的,因此,继续用Visual C++进行二次开发无疑将会提高系统本身的兼容性,二次开发的模块可以完全嵌入到SolidWorks中而没有被排斥,这种寄主开发可以作到“无缝集成”。通过Visual C++编写基于 COM的动态连接库 DLL(Dynamic Link Library)文件 ,能直接在 SolidWorks 的界面下添加菜单、工具条等 ,如图2.3所示。在注册表中注册成功即可成为 SolidWorks 的插件 ,实现了与 SolidWorks 的兼容,是众多二次开发方法中的首选。

图2.3 SolidWorks添加的菜单

2.4 Visual C++开发SolidWorks的关键技术

利用Visual C++进行SolidWorks二次开发,需要对两者各自的关键技术进行大致的了解。同时,对两者之间的链接技术,需要重点的掌握。

当的工具或者菜单命令,然后定义所需的尺寸或者特征所生成。

任何零件模型的建立都是建立特征和特征修改的结合过程。SolidWorks 参数化特征建模技术,不仅提供了功能强大的建模工具,而且为修改特征提供了最大限度的方便。在Feature Manager设计树或图形区域,通过相应的操作,可修改相应的尺寸值,可编辑当前特征的草图,可修改特征草图平面,可重新定义所选特征的有关参数,如终止条件、参数值等内容。

除此以外,SolidWorks还提供了动态修改特征工具,可以在图形区域直接用鼠标拖动来移动、旋转和调整拉伸及旋转特征的大小。在修改工程中遵循特征的父子关系和特征的先后顺序。动态修改特征工具可以修改特征的

内容如下:特征的位置和尺寸、草图的绘图平面、草图元素的尺寸和草图中的几何关系。

2.4.2 参数系列化

参数化是指对零件上的各种特征施加各种约束形式。各个特征的几何形状与尺寸大小用变量的方式表示,如果定义某个特征的变量发生了改变,则零件的这个特征的几何形状与尺寸大小,将随着参数的改变而改变。

将参数化设计应用到特征设计中去,把参数化的基本体素定义为特征,用特征通过体素拼合的方法,构造零件的几何形状,使得特征具有可调整性,这就是参数化特征建模技术。参数化设计就是将零件尺寸的设计,用参数来描述并在设计修改时通过修改的数值来更改零件的外形,从而实现尺寸对图形的驱动。其中进行驱动所需的几何信息和拓扑信息由计算机自动提取。

模块尺寸参数化处理过程中必须满足:1)零件与零件、图形元素与图形元素之间相关联,即模块的拓扑结构在参数化前后保持不变,如图形元素与图形元素之间的平行、垂直、对称、同心和相切等几何约束关系在参数化前后必须保持一致;2)零件/ 图形元素与图形尺寸以及零件/ 图形元素之间与图形尺寸相关联,如图形元素与图形尺寸以及图形元素之间和图形尺寸之间约束关系在参数化前后保持一致。同时标注的图形尺寸在图形驱动前后必须能够随新的图形自动更新。为了保持这两个关系,必须分析模块的啮合尺寸、几何信息和尺寸标注信息,以建立各类尺寸约束和驱动关系[16]。

参数化设计极大地改善了图形的修改手段,提高了设计的柔性,对产品结构设计中所要进行的概念设计、实体建模、装配、有限元分析和机构仿真有着革命性的意义。SolidWorks的参数化设计对于传统的产品结构设计工作来说,有相当大的帮助。

SolidWorks中的参数不只代表设计对象的外观相关尺寸,而且具有实质上的物理意义。可以运用体积、表面积、质心等系统参数或密度、厚度等用户自定义参数加入设计构思中,从而来表达设计思想。

这项参数式设计的功能不但改变了设计的概念,并且将设计的便捷性推进了一大步,SolidWorks的三维实体建模,除了可以将用户的设计思想以最真实的模型在计算机上表现出来之外,借助于系统参数及用户自定义参数可以计算出产品体积、面积、质心、质量和惯性大小等,以利于强度分析、应力分析等各类性能分析。而在使用SolidWorks以前,只能对所设计的产品结构作一些初步的强度分析,待产品生产出来后再进行强度试验,如发现问题,再进行补救,这样往往耗费很多财力及精力。而使用SolidWorks建模,可以在产品投入生产之前,进行较深化的分析,及时发现问题,避免不必要的浪费。

2.4.3 数据库技术

现在的管理系统往往离不开数据库,数据库的出现使我们可以非常迅速地编写出一个达到用户需求的信息管理系统。在Windows下用到的数据库一般有Access、SQL server、Oracle三种。

a.Access——面向对象关系型数据库

Microsoft Access 是 Windows 数据库应用,它提供灵活的 Windows 用户界面和方便的程序设计方法,具有处理多媒体数据的能力。已经成为世界上最流行的桌面数据库系统。通过图形化的用户界面,你能很容易地使用Microsoft Access 设置和管理数据库。用户可以根据自己定义的结构存储信息,可以用各种形式来存储数据。它使用了一种先进的方法,可将文档、声音和图形、图像均合并到具有对象连接和嵌入的数据类型的数据库中。

为了在处理数据时尽可能地精确、省时,Access 一般把数据类型分为三类:字段的数据类型、Access Basic语言的数据类型和数据库查询参数的数据类型。在 Access 中,用户可以通过建立应用程序来对数据进行分类和存储,可以使用多种方法来对数据进行筛选、查询和维护。可以通过设计窗体来查看 Access 中的数据,也可生成报表将数据打印成正式的文书报表。作为数据库管理系统,Access包括:数据库表生成器、窗体设计器、查询管理器、报表书写器、宏编辑器、数据访问页设计器和模块编辑器等工具。

(1)Access 中的表

数据库是以二维表的形式来组织数据的,表也就是关系。Access 与其他常用的数据库系统(如 FoxPro、Oracle 和 SyBase 等)一样,都属于关系数据库管理系统(RDBMS),是在许多相关的表格中存储数据。在 FoxPro 中一个数据库就是一个单独的表,而在 Access 中一个数据库则由多个表组成,通过表之间的特定“关系”——关键字,将各个表中相关的数据联系起来。用户通过数据管理工具或应用程序对数据库所做的各种操作实际上就是对表进行地操作。表被看成是一些特定主题的数据的集合,可以比喻为一个存放原始数据的容器。如果要存储数据,首先应对数据进行分类——确定主题,并为每一种类型的信息创建一个表结构——确定数据库中包含的字段、字段名称、字段类型等信息。在向表中添加数据时,录入的数据受表结构的约束和组织。—个 Access 库中允许有多个表,表与表之间的关联,由各个表中相同的字段来决定。Access 数据库管理系统就是通过表之间的关联来减少数据冗余和实现多表操作。

(2)记录和字段

像Excel 工作表一样,Access 数据库的表也是按照行和列组织的,用网格线隔开各单元格,单元格中填入存储的数据;不同的是在 Access 中,表中的每一列代表一个字段,即一个信息的类别,表中的每一行就是一个记录,它存放的是表中一个项目的所有的信息。在 Access 表中的每个字段(即每

一列)只能是一种类型的数据(文本型、数字型或货币型等)。在表中的同一列(就是字段)数据具有相似的信息,每个字段通过明确的数据类型来识别,字段具有特定的长度,每个字段在顶行有一个表明其具体信息类别的名字。

由上面可以看出 Microsoft Access 数据库软件的功能及适用性都十分强大,它实现了计算机“易于使用”的特点,用户只需进行简单操作就可以设计出一个基本的数据库系统。

b.SQL server数据库

SQL Server2000是微软公司最新的大型数据库服务器,其性能指标在各方面都有赶超Oracle数据库的趋势。在有了强大的性能和功能支持的情况下,配合Microsoft的一贯风格的易用性,SQL Server可以说已经具备大型数据库应用的功用了。

c.Oracle数据库

Oracle是以高级结构化查询语言(SQL)为基础的大型数据库,通俗的讲,它是用方便的逻辑管理的语言操纵大量有规律的数据的集合,是目前最为流行的客户机/服务器。

结合本次设计的需求,我们选用Access——面向对象关系型数据库,与SQL Server数据库、Oracle数据库相比较,Access数据库非常小巧,而且Access的数据管理是可视化的,大家容易接受和理解。所以基于Access的以上等优点结合本设计最终选择Access作为本设计的管理系统。

2.4.4 组件对象模型

在设计开发过程中,需要利用Visual C++生成*DLL文件。这要求必须了解组件对象模型技术,即COM技术。

COM 是微软公司,数字设备公司(DEC)及其他一些公司所支持的一种软件结构的“工业标准”,是ActiveX技术的重要基础[17]。COM一方面提供了一种有效的途径将软件分块,每块软件提供各自的服务,开发者能够使用面向对象的方法去设计和开发程序,简化了复杂系统;另一方面又提供了访问软件服务的一致性,不管要访问的服务是否存在于链接库,另一个进程或系统软件中,均可将它们当成COM对象,使用同一种方法去访问。

COM是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用统一的方式进行交互,它既提供了组件之间进行交互的规范,也提供了实现交互所需的环境。COM 不仅体现了组件化的程序设计思想,而且采用了面向对象的程序设计方法。在 COM 标准中,对象是一个非常活跃的元素,称为COM 对象,组件模块为 COM 对象提供了活动空间,COM 对象以接口方式提供服务,这种接口称为COM 接口。在一个软件组件中,每个组件都是 COM 对象,它们分别实现各自的功能;COM 接口是组件间进行通信的基础,是软件组件的关键。一个组件程序可以包含多个 COM 对象,每个 COM 对象可以有多个

COM 接口。当别的组件或普通程序组件的客户程序调用某个组件的功能时,它首先创建一个 COM 对象或者获得一个 COM 对象,然后通过该对象的 COM 接口调用它所提供的服务。COM 规范定义的组件模型,除了上面提到的面向对象的特性以外,还具有语言无关性,对进程的透明性和可重用机制等优点[18]。

COM程序有两种实现方式,进程外组件方式(独立的EXE文件)与进程内组件方式(DLL(Dynamic Link Library)文件)。用户可以使用Visual Basic(开发外挂模块)和Visual C++(开发内嵌模块)开发自己的应用程序。进程外组件方式就是编译生成独立的EXE文件,采用外挂的工作模式。使用Visual Basic 进行开发时,只能采用外挂的工作模式,既需要用户的应用程序和SolidWorks 之间进行前台后台切换,所以降低了设计效率。与此相反,进程内组件方式就是采用动态链接库( *.DLL )方式,本系统中采用的就是这种方式。在应用程序中,这些独立的模块利用SolidWorks提供的DLL加载接口,作为独立的动态链接库DLL文件存在.在程序运行时,DLL文件快速加载到SolidWorks 内部,通过与DLL文件接口相对应的可视化菜单来调用封装在里面的子功能,创建出用户定制的、专用的功能模块[19]。用户在应用程序加载到SolidWorks进程后,可以使用SolidWorks本身的各种命令,也可以使用应用程序实现的模块功能,该CAD系统的内外关系图如图2.5所示。

图2..5 SolidWorks系统的内外关系图

2.4.5 对象链接与嵌入

OLE是对象链接与嵌入技术的简称。利用OLE技术,用户可以通过使用来自两个或多个Windows应用程序的资源来解决复杂的应用课题。OLE 提供了方便的技术用来将文档和来自不同程序的各种类型的数据结合起来。对象链接与嵌入不是另一种编程技术,而是根植于Windows环境的一种编程模式技术,其核心在于允许一个Windows应用程序通过暴露对象的方式,控制和操作另一个Windows应用程序,即被调用的程序暴露自身的对象体系结构供调用程序引用。通过OLE技术,许多面向对象编程语言(如Visual C++、

Visual Basic、Delphi、VBA等)和应用程序可以与SolidWorks通信,从而直接操纵SolidWorks编制用户程序满足设计需要,如标准件库的建立、参数化设计等。

与SolidWorks提供的COM对象一样,SolidWorks也提供了大量的OLE 对象(拥有与COM对象相对应的全部API函数)用于二次开发,这些OLE对象涵盖了全部的SolidWorks的数据模型,通过对SolidWorks的OLE对象属性的设置和对OLE对象方法的调用,就可以在用户自己开发的系统中实现与SolidWorks相同的功能。

2.4.6 动态链接库

动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows 的程序在Windows环境下操作的许多函数和资源。

DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。

DLL是动态连接库。使用动态连接库的一些好处是:

a.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。

b.在钩子程序过滤系统消息时必须使用动态链接库。

c.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。

d.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。

VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。

DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它。

SolidWorks允许用户建立独立的可执行文件Standalone(EXE)、应用型动态链接库文件(User DLL)及扩展型动态链接库文件(Extension DLL) 。DLL 是基于Windows程序设计的一个非常重要的组成部分。在建立应用程序的可执行文件时,不必将DLL链接到程序中,而是在运行动态装载DLL,装载时DLL被映射到进程的地址空间中。在每次运行SolidWorks时,DLL文件自动装载,操作方便]20[。

独立的EXE文件和DLL文件都可以作为COM的组件,但是编写EXE 程序时,必须每次在做原型改变时都重建并测试。与此不同,可以创建较小的DLL 模块,并单独测试,客户程序在运行时很快装载并连接用户的 DLL。SolidWorks 提供了 DLL 加载的接口,能够将用户的 DLL 通过加载嵌入到SolidWorks 内部。

2.5 API函数理论

API的英文全称(Application Programming Interface), API也就是Microsoft Windows平台的应用程序编程接口。在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具就是API函数。

这些函数是WINDOWS提供给应用程序与操作系统的接口,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的WINDOWS应用程序。随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发应用程序。这些可视化编程环境操作简单、界面友好(诸如VB、VC++、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。

有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。如果要开发出更灵活、更实用、更具效率的应用程序,实现比较复杂和特殊的功能,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。

SolidWorks API是SolidWorks的OLE应用程序开发口,用户可以利用它并通过支持OLE编程的开发工具,Visual Basic 、VBA(Excel, Access)、C、C++及Visual C++等SolidWorks进行二次开发,建立适合用户需要的、专用的SolidWorks功能模块[21]。

SolidWorks对象是SolidWorks API中的最高层对象,它能够直接或者间接地访问SolidWorks API中的所有其他对象。利用它可以实现应用程序

的最基本操作,如生成、打开、关闭、结束文件、重排图标和窗口、设置当前的激活文件、生成属性定义,也可以对SolidWorks的系统环境进行设置。

3.2 Access及EXCEL数据库系统建立

Access使用与Windows完全一致的风格,采取面向对象的方式将数据库中的各种功能对象化,将数据管理的常用功能封装在个类对象的方法或属性中,通过对象的方法和属性来完成对数据库的管理与操作,从而简化了用户的开发工作。针对用户在数据库应用系统开发中的数据需要,Access 2003提供了7种用于构造数据库的对象,包括:表、查询、窗体、报表、页、宏、模块等,并将数据储存、查询制作、用户操作界面、报表打印等设计工作规范化,使数据库应用系统开发人员能够快速、方便地制作出符合使用要求的数据库系统。Access支持DAO, ODBC和ADO三种数据库接口,可以方便的使用高级程序设计语言对Access数据库进行各种操作,如创建、访问、修改、删除等操作。

依据最新版《机械设计手册》第二卷为依据,参照其规定,编辑法兰盖的各项参数。然后新建一个的Access 数据库文件,打开该数据库,选择“通过输入数据创建表”方式,编辑参数导入,创建各类法兰盖数据库表,并按国标号+系列大写首字母+类型号取名,如图3.6所示。

由于程序在访问数据库时对各参数变量的类型有要求。选取平面钢制法兰盖数据表,点击“设计视图”进入数据类型编辑窗口,将其设置为“文本”类型。

根据上述的方法,完成建立各类型各系列的数据库。

图3.6 平面钢制法兰盖A型ACCESS数据库

由于在模型的参数化的时间,SolidWorks识别为EXCELL表格。所以,在建立Access数据库后,需要将其导入EXCEL表格中。

将Access数据中的表格打开,在文件菜单下选择导出功能,保存文件类型改变为Microsoft Excel即可。由于导出的单向性,这种方法只适用于由Access导出到Excel表格。不能逆向导出,数据由Excel表格,只能利用Access“粘贴追加”功能复制到Access。所以在建立数据库的时间,应该先建立Access数据库。

3.3 法兰盖参数系列化

参数化设计是指通过修改尺寸而实现对图纸的修改的设计方法。在参数化设计的过程中,用户无需进行干预,由CAD系统对整个图形的约束集进行分析和求解。生产中最常用的系列化标准件就是属于参数化设计[23]。

参数化设计一般用于设计对象的结构形状比较定型,可以用一组参数来约定尺寸关系,参数的求解较简单,参数与设计对象的控制尺寸有显式对应关系,设计结果的修改受尺寸驱动。生产中最常用的系列化标准件就是属于这一类型。

参数化设计有一种驱动机制称为参数驱动,参数驱动机制是基于对图形数据的操作。通过参数驱动机制,可以对图形的几何数据进行参数化修改,但是,在修改的同时,还要满足图形的约束条件,需要约束间关联性的驱动手段来约束联动,约束联动是通过约束间的关系实现的驱动方法。对一个图形,可能的约束十分复杂,而且数量很大。而实际由用户控制的,即能够独立变化的参数一般只有几个,称之为主参数或主约束;其它约束可由图形结构特征确定或与主约束有确定关系,称它们为次约束。对主约束是不能简化的,对次约束的简化可以有图形特征联动和相关参数联动两种方式。

进行参数化绘图的基本手段主要有程序驱动法和尺寸驱动法两种[24]。尺寸驱动法指绘图软件本身具有一定的参数化绘图功能。用户可以先绘制草图和标注尺寸,然后利用软件的参数化功能,自动按输入的尺寸生成符合要求的图形,或者修改某些尺寸,图形自动更新。这种方法采用人机交互、尺寸驱动方式,不需用户编程,操作方便。程序驱动法指在特定的CAD图形支撑软件的基础上使二次开发的程序,具有参数化绘图功能。这种方式通过人机交互或其它形式向应用程序传递参数,采用程序驱动方式,由程序用参数化方法生成图形,用户可以对生成图形中的尺寸进行修改,程序将按新的尺寸和相关尺寸更新图形。

根据这两种参数化技术的优缺点,论文中针对不同图库的特点分别使用了这两种方法。其中本次采用的尺寸驱动法是以SolidWorks为图形系统平台,以Visual C++ 6.0为开发工具,完成系统开发要求。

将在SolidWorks 中绘制标准件的模板零件并保存为*.sldprt文件,同时对其进行尺寸驱动的尺寸命名,如“D1@草图1”。然后等用户选择完参数后,在内存中打开已存的*.sldprt文件,并用从数据库中提取的参数替换“D1@草图1”尺寸,重新建模,生成新的零件。

(a)(b)

图3.8 法兰盖EXCEL参数表格及系列化示例

4 Visual C++二次开发SolidWorks

SolidWorks分别通过COM对象和Dispatch提供其所有API(应用程序接口)功能和OLE(对象链接和嵌入)自动操作。Dispatch以Variants和IDispatch指针方式接受和返回自变量,因此Dispatch可以被VB,VBA或Visual C++等语言编译程序使用。使用COM可以使用户的应用程序直接操纵其下的对象[25]。在计算等操作中,COM提供更细微的功能,并且为每一个API 调用函数返回一个HRESULT句柄。要使SolidWorks与Visual C++无缝集成在一起,充分利用SolidWorks现有的资源来为我们开发的第三方软件服务,就要做以下几方面的工作:

4.1 Visual C++配置环境

硬件环境:

处理器:PC机具有Intel或兼容Pentium的166MHz或更高配置的处理器。

内存 (RAM):至少64MBR AM(推荐使用128MB或更大容量的内存,根据操作系统的具体要求,可能需要增加内存);硬盘及网络设备:6.4G 以上硬盘、以太网卡和总线适配卡。

软件环境:

操作系统: Windows ProfessionalXP/Server/NT;

实用软件: 要求系统装有SolidWorks2007及Microsoft office。

如果直接创建SolidWorks二次开发的工程,就必须确保连接合适的SolidWorks头文件。另外一种方法就是利用SolidWorks公司提供的二次开发模板创建工程[26]。

下载SWizard.Awx模板文件。SWizard.Awx文件分为两类,其中子目录“ SWizard不能注册有工具栏”中的SWizard.Awx能生成工具栏,但不能自动注册,需要该子目录中的小程序注册。子目录“SWizard能注册没有工具栏”中的SWizard.Awx不能生成工具栏,但能自动注册。调试成功前,最好选择不能注册的,调试成功后,再用能注册的或者修改*。Reg来注册,这样可以避免注册表日趋庞大。

无论选择哪种,都要将其复制到Visual C++安装目录:\Common\MSDev98\Template文件夹内。

同时把“\Program Files\SolidWorks\samples\appComm”文件夹下所有文件拷贝到“\Program Files\Microsoft Visual Studio\VC98\Include”

文件夹下。

4.2 用Swizard.swx生成DDL文件

具体操作流程如下:

(1)启动Visual C++,单击【File】→【New】,选择【Project】选项卡,选择【SolidWorks Add in AppWizard】,输入工程的位置和名称,如图4.1。

图4.1 SolidWorks Add in AppWizard在Visual C++中的位置

(2) 单击【OK】。检查电脑上的SolidWorks的安装目录是否与对话框中的一致,不一致的话,请改正。若在生成的DLL中想出现SolidWorks属性管理器,则勾选【Provid Sample Property Manage】。文件选项和模型视区则根据需要选择,如图4.2所示。

图4.2 选择 SolidWorks的安装目录、属性管理器、文件选项和模型视区选项

(3)单击【Next】。若想生成特征管理器视区,则勾选【Create Sample Feature Manager View】。在插件属性栏中的【Name】文本框中输入想要的名称,如【AA】,在【Description】文本框中输入想要的描述,如【Try】,若想在编译时添加注册表信息或生成*.reg文件用来以后注册插件,则选中【Register Add-In at compile time】,如图4.3所示。

图4.3 选择特征管理器视区、插件属性和注册

(4)单击【Finish】。出现新建工程信息,单击【OK】,完成DLL文件创建。如图4.4。

图4.4 新建工程信息

(5)单击【OK】。按快捷键F7,编译AA.dll,一般会出现编译成功的信息,如图4.5示。但若就此结束该工程,那么当在SolidWorks中添加此插件时,它就会什么也不做,无任何反映。

图4.5 编译AA.cpp文件

当在步骤(5)时,执行编译时可能会出现“D:add\sldworks.h(12) : fatal error C1083: Cannot open include file: 'amapp.h': No such file or directory Error executing cl.exe..这是因为在步骤(2)中采用了默认值,默认为的SolidWorks的安装位置与电脑上的不符合而造成在头文件目录中找不到amapp.h。其解决办法是:

单击【Project】→【Setting】→【Alt+F7】→选择【C/C++】,单击【category】中的下拉菜单,选择【Preprocessor】,输入\samples\amapp.h 文件夹的完整路径。如图4.6所示,然后单击【OK】。

图4.6 设置附加包含路径

在步骤(5)中,执行编译时可能会出现“LINK:fatal error LIN1104:cannot

open file “mfc42ud.lib””,这是因为VC安装时漏了一些文件。解决办法是:

到VC安装光盘上找到相应的文件后复制到相应的目录中或者重新安装VC。

4.3 编制菜单栏

具体操作流程如下:

(1)单击【File View】选项卡,单击【AA files】前的【+】,单击【Source Files】前的【+】,找到【ExampleApp.cpp】,如图4.7所示。

图4.7 查找ExampleApp.cpp文件

(2)在【ExampleApp.cpp】上,右击鼠标,在弹出菜单中选择【open】,

向下拖动鼠标到函数:

void CFalangaiApp::docCreateMenu(long DocumentType)

{

HRESULT hres;

VARIANT_BOOL bres;

LPFRAME pFrame;

hres = m_pSldWorks->IFrameObject(&pFrame);

// add menu

hres = pFrame->AddMenu(auT("标准件库"), 2, &bres);

// add menu item

hres = pFrame->AddMenuItem(

auT("标准件库"), auT("平面钢制法兰盖"), swLastPosition,

auT("Falangai@MenuItemCB, Falangai application menu item"),

&bres);

hres = pFrame->AddMenuItem(

auT("标准件库"), auT("凸面钢制法兰盖"), swLastPosition,

auT("Falangai@MenuItemCB1, Falangai application menu item"),

&bres);

// clean up

pFrame->Release();

}

将程序中的代码修改成对应的黑体代码。

(3)在Falangai.h头文件中添加如下所示的黑体代码:

void DllExport MenuItemCB(void);

void DllExport MenuItemCB1(void);

};

#endif

DllExport宏将声明为可输出函数,一旦函数被声明为可输出,其它应用程序可以通过加载库的方式调用此函数了,DllExport宏的定义为#define DllExport_declspec(dllexport)。如果我们在这里没有使用DllExport函数声明为可输出函数,我们仍然可以在ADD.def中将函数声明为可输出函数,如下所示。

(4)在ADD.def中可添加如下的黑体代码:

; InitUserDLL3 @1

; MenuItemCB @2

; MenuItemCB1 @4

(5)在ADD.cpp中添加如下所示的黑体代码:

//文件调回

Viod MenuItemCB(void)

{

Return;

}

Viod MenuItemCB1(void)

{

Return;

}

(6)单击【Build】→【build AA.DLL】,按F7编译,一般会出现编译成功。

(7)启动SolidWorks,新建一个文件(可以是零件、装配体、工程文档),单击【文件】→【打开(open)】,在出现的打开对话框中,选择【文件类型】为ADD-Ins(*.dll),在文件目录D:\AA\TryAddin_Win32_Pseudo_Debug目录下找到AA.dll,如图4.8所示:

图4.8 准备打开Falangai.dll

(7)单击【打开】.在SolidWorks的菜单中出现【标准件库】,单击它,则出现下拉菜单【平面钢制法兰】,如图4.9所示:

图4.9 运行插件的结果

4.4 建立交互式对话框

从一个程序员的观点来看,对话框允许用户交互式地设置一些参数,是为了准备完成一些基于这些参数设置的动作。在用户来说,可以按确认按钮来执行这些参数设置的动作。要是按取消按钮的话,参数恢复到先前的状

相关文档
最新文档