SolidWorks软件是完全基于 Windows 的 CAD/CAE/ CAM/ PDM 桌面集成系统 ,它的核心技术是在 Windows 环境下生成的 ,充分利用和发挥了Windows的强大威力和OLE技术,具有用户界面友好,上手快的优点。该软件支持 Visual Basic、Visual C++或其它 OLE 开发语言,免费提供二次开发工具API,用户二次开发的应用程序,可直接挂在SolidWorks菜单下,形成统一的界面。然而SolidWorks 与许多商品化的 CAD/ CAM 系统如PRO/E、UG、AUTOCAD 等一样 ,它们虽然在模具行业中得到了广泛应用 ,但由于这些 CAD/ CAM 系统都是作为通用机械设计与制造软件来设计的,不是特别针对模具的,因此为了提高模具设计的效率,需要对其进行二次开发。
1用VISUAL C++ 开发 SolidWorks 的原理
SolidWorks 通过 OL E 技术为用户提供强大的二次开发接口 API ,其中包括含有数以百计的功能函数。API 接口采用面向对象的方法 ,所有的函数都是有关对象的方法或属性。这些对象涵盖了所有 SolidWorks的数据模型 ,通过这些对象属性的设置和方法的调用 ,用户可以在自己开发的 DLL 中实现与 SolidWorks 相同的功能。
这些 API 函数可被 Visual C++ 、Visual Basic、Delphi、VBA ( EXCEL 、ACCESS) C、C++ 或 SolidWorks 的宏文件调用 ,使得开发出的程序具有直接访问 SolidWorks的能力。当使用 Visual Basic 进行开发时 ,只能采用外挂的工作模式 ,即需要用户的应用程序和 SolidWorks之间进行前台后台切换 ,所以降低了设计效率。而使用 Visual C++ 开发的应用程序可以直接嵌入到 SolidWorks 内部 ,加载成功后应用程序菜单直接出现在 SolidWorks 的主菜单上 ,如同 SolidWorks的自带功能一样进行工作 ,极大地提高了设计效率。
2用VISUAL C++ 开发 SolidWorks 的关键技术
2. 1 组件对象模型(COM)
开发 *.DLL 需要了解 COM 技术。COM 是微软公司、数字设备公司(DEC) 及其他一些公司所支持的一种软件结构的"工业标准"。SolidWorks 作为基于 Windows 的原创软件 ,为便于用户开发的程序与 SolidWorks通信 ,提供了采用 COM 技术开发应用程序的方法。用户开发的代码可以作为独立的EXE 文件或 DLL 文件存在 ,它们就是 COM 模块。采用 COM 技术在 SolidWorks 平台上作二次开发时 ,通过直接访问 SolidWorks 底层对象可以方便地扩充 SolidWorks的功能。
2. 2 动态链接库(DLL) 的建立
独立的 EXE 文件和 DLL 文件都可以作为COM 的组件 ,但是编写 EXE 程序时 ,必须每次在做原型改变时都重建并测试。与此不同 ,可以创建较小的 DLL 模块 ,并单独测试 ,客户程序在运行时很快装载并连接用户的 DLL。SolidWorks 提供了DLL 加载的接口 ,能够将用户的 DLL 通过加载嵌入到 SolidWorks内部。
2. 3 数据库的创建
系统采用 Access 作为管理数据库的工具。使用DAO (Data Access Objects) 技术对数据库操作。Visual C++ 开发 DAO 数据库应用的方法和步骤与ODBC(Open Data Base Connectivity) 基本类似 ,但Visual C++ 的 MFC 包含的 DAO 类比 ODBC 类更加丰富 ,使得利用 DAO 实现某些数据库操作(如数据库查询)更加简单、方便。
3 开发思路及技巧
3. 1 开发思路
SolidWorks 是基于参数化和特征造型技术的软件 ,对其进行二次开发应遵循参数化 CAD 的原则。即对于企业中系列化、通用化和标准程度高的产品 ,其包含的拓扑信息基本上是一样的 ,不同的仅是几何信息。对于这类产品 ,可以将已知条件及其它随着产品规格而变化的基本参数用相应的变量代替 ,然后根据这些已知条件和基本参数 ,由 SolidWorks查询数据库 ,或由 SolidWorks 计算出所需的全部数据 ,自动完成设计 ,并在屏幕上显示出来。
3. 2 开发方式的选择
采用参数化原则设计标准件库大体分两种:程序驱动法;尺寸参数驱动法。选用程序驱动法时 ,可在用户界面的对话框中输入初始参数并对数据库进行查询 ,然后用从数据库中提取的参数进行绘图。其中绘图部分代码要靠程序员完成 ,程序驱动法可以借助SolidWorks 的宏记录功能。SolidWorks 的宏可以记录标准件模板生成的全部过程并生成 VBScript 程序代码 ,然后由人工转换为 Visual C++程序。
选用尺寸参数驱动法时 ,首先在 SolidWorks 中绘制标准件的模板零件并保存为*.sldprt 文件 ,同时对要进行尺寸驱动的尺寸命名 ,如"L @草图 1"。然后等用户选择完参数后 ,在内存中打开已存的 *.sldprt 文件 ,并用从数据库中提取的参数替换"L @草图 1"尺寸 ,重新建模 ,生成新的零件。
3. 3 开发步骤及技巧
(1) 从 SolidWorks 公司网站下载向导文件SWIZARD. awx ,将其添加到 MicrosoftVisualstudio/Common/ MSDev98/ Template 目录下。然后 ,在 Visual C++ 中用该向导创建工程 ,添加相关代码 ,编译生成 *.DLL 文件。
(2) 若使用程序驱动法 , 如果开发者本身对于 SolidWorks API函数不是很了解 ,可以用宏录制标准件生成的过程并保存为*.swp 文件 ,再用菜单里工具/ 宏操作/ 编辑打开 VB 界面 ,只需把这里的代码改为 Visual C++的代码就可以了。而且 VB 与Visual C++ 的函数名基本相同 ,只是参数有所不同。
(3) 调试的时候可以设置断点跟踪 ,也可以在有可能出错的地方放置如 AfxMessageBox(- T("提取参数 ") ,MB-OK,0) 的语句 ,以便在程序调试运行时确定问题所在。
4 系统组成
4. 1 界面的设计
系统界面的设计应遵循用户界面友好的原则。一个用户界面的友好属性应包括:使用方便、界面熟悉、有灵活的提示帮助信息、良好的交互方式、良好的出错处理等。
4. 2 系统的使用
单击上述菜单将会出现如图所示的标准件导入对话框。对话框界面由几个属性页组成 ,选择尺寸规格后按查询按钮 ,系统会根据数据输入控件里的数据(如 4.00 ×20 的圆柱头卸料螺钉) 去查询标准件的数据库文件 ,查询所得的数据将出现在标准件属性表里 ,点击确定 ,零件将被导入。如果用户需要调整尺寸 r 和 r1 可以点击相应的按钮进行微调。 4. 3 系统数据库的使用
如果需要浏览当前零件所有的数据 ,只需要点击上图中的浏览按钮。例如用户当前界面是"带柄圆形上模座",点击浏览 ,则出现如图所示的数据库管理对话框 ,在此可以浏览带柄圆形上模座的所有数据 ,并为有权限的用户提供可以添加、删除或修改数据的功能选项。 5 一个实现程序驱动法的例子
(1) 用 SolidWorks Add - In AppWizard 向导创建 Example1 例子
(2) 添加对话框资源 ,属性设置如下 :IDD-DIALO G1 CAPTION 为"立方体例子",添加控件调整。
(3) 添加对话框类 CL IFAN GTI 和数据成员变量
IDC- EDIT1 double m-x
IDC- EDIT2 double m-y
IDC- EDIT3 double m-l
(4) 在工作区 CLASSV IEW 中 ,添加 CExample1 的公有成员函数void lifangti (double ca , double cb ,double cl)
(5) 在 EXAMPL EAPP. APP 中添加 # include "Resource. h"头文件 ,并完成程序驱动法绘图代码如下:
void CExample1App : : lifangti (double ca , double cb , double cl)
{ L PMODELDOC pModDoc = NULL ;
LPPARTDOC ret ;
TheApplication - > m-pSldWorks - >INewPart ( &ret) ;
HRESUL T res = TheApplication - >GetSWApp () - > get- IActiveDoc( &pModDoc) ;
if (pModDoc = = NULL)
return FALSE;
LPPARTDOC pPartDoc = NULL ;
res = pModDoc - > QueryInterface (IID-IPartDoc ,(L PVOID 3 ) &pPartDoc) ;
ASSERT(res = = S-OK) ;
VARIANT-BOOL retval ;pModDoc - > SelectByID(auT ("前视") ,auT ("PLANE") ,0 ,0 ,0 , &retval) ;
pModDoc - > ShowNamedView2 (auT ("3 Normal To") ,0) ;
pModDoc - > GridOptions(0 ,0. 001 ,0 ,0 ,10 ,1 ,0 ,0 ,0. 1 ,1) ;
pModDoc - > InsertSketch() ;
pModDoc - > CreateLineVB ( - ca , cb , 0 , - ca+ cl , cb , 0) ;
pModDoc - > CreateLineVB ( - ca + cl , cb , 0 ,- ca + cl , cb - cl , 0) ;
pModDoc - > CreateLineVB ( - ca + cl , cb - cl ,0 , - ca , cb - cl , 0) ;
pModDoc - > CreateLineVB ( - ca , cb - cl , 0 ,- ca , cb , 0) ;
pModDoc - > ClearSelection() ;
pPartDoc - > FeatureExtrusion (1 , 0 , 0 , 0 , 0 ,cl , 0. 01 , 0 , 0 , 0 , 0 , 0. 01745329251994 ,0. 01745329251994 , 0 , 0) ;
pModDoc - > ShowNamedView2 (auT ("3 Iso2metric") ,7) ;
pModDoc - > ViewZoomtofit () ;
pModDoc - > Release() ;
pPartDoc - > Release() ;
return TRU E ;
}
在 Example1. cpp 中添加 # include "LIFAN GTI. h"头文件 ,并在菜单响应函数 MenuItemCB (void) 里添加如下程序段
void MenuItemCB(void)
{ CL IFAN GTI dlg ;int n = dlg. DoModal () ; TheApplication - > lifangti (dlg. m-x ,dlg. m-y ,dlg. m-l) ;
return ;
}
(7) 编译后用 SolidWorks 打开文件 ,选择加载 Example1. dll 文件。在左下角 X 和右下角 Y中输入位置坐标 ,边长 L 中输入 20 ,点击确定。(end)
|