机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 26081|回复: 27

关于solidworks 的二次开发

[复制链接]
发表于 2011-2-6 21:54:05 | 显示全部楼层 |阅读模式
我在其他网站上看到的  觉得挺有价值  分享下  希望对大家有所帮助!* X+ A  U% W4 x2 b* H, f' N1 [

. z) w1 t+ G: ?; i2 N9 _5 G4 `+ k( Y* p- \& }% b$ W) k
/ U; L3 k' X8 W
0 引言
( n, X# }6 l# s  K
   
* _( y( e- a7 W3 ]: C5 `    SolidWorks是一套基于Windows的CAD桌面集成系统,支持参数化和特征造型技术。虽然SolidWorks所提供的功能非常强大,但要使其在我国企业中真正发挥作用,使常用的或重复的任务自动化,提高效率,就必须对其进行本地化、专业化的二次开发工作。本文是在基于轴系结构设计系统的研制上产生的,应用Solidworks二次开发来自动生成零件,并在Solidworks环境下完成自动装配。- v; e& a; U) ^; M1 \
    : ]! c0 u6 e) I* _
    1 SolidWorks二次开发原理
$ y6 ]# k4 z) z# n; t   
( @8 W; G& c4 e( N, t# k    SolidWorks基于COM(Component Object Model,组件对象模型),完全支持OLE(Object Linking and Embed-ding,对象的链接与嵌入)标准,实现了OLE自动化。为方便用户进行二次开发,SolidWorks提供了几百个删(Application Programming Interface,应用程序接口),这些API函数是SolidWorks的OLE或COM接口。SolidWorks的API接口分为两种:一种是基于OLE Au-tomation的IDispatch技术,通过IDispatch接口暴露对象的属性和方法,以便在客户程序中使用这些属性并调用它所支持的方法。另一种开发方式是基于Windows基础的COM。  q0 ^4 I- ^# A
    0 O4 H+ j. h. _, c: a( H: o9 |" W
    SolidWorks API为用户提供了完全面向对象的类体系,是一个自上而下的多层次的树型网络结构,其部分组织结构关系如图l所示。它包括对象的类型、属性和方法。SldWorks是根目录对象类,位于应用程序的底层,是访问SolidWorks API所有对象的入口。开发者通过操纵对象的属性和调用对象的方法建立自己的应用程序。
( Q  v* {& a3 F; a$ b3 v   
. {% n/ l9 n# ]% U. w! Z+ J     2 W+ Y( M/ G9 x! o& {
& M1 Y8 _# V* I7 }5 ~+ n; f! Z
    % D  l2 D' z) `3 D  h* z2 j& i
    2 SolidWorks二次开发工具
  M) E; N2 L1 P   
, w& T, k$ Q. {* n    任何支持COM和OLE的编程语言都可以成为S0lidWorks的开发工具,如VB、VBA、C、VC++等。开发者可以根据自身的条件、工具的特点,选择一种适合的开发工具.
# A# t' O& \: }6 j6 H) F    2 W2 E) j6 U  m& R  l/ [3 i" F  _1 j
    Visual Baic(VB)是运行在Windows环境下的一种可视化编程语言,使用面向对象的编程方法(OOP),它所具有的图形设计工具、结构化的事件驱动编程模式和开放的环境,可以使用户即快又方便地编写出Windows下的应用程序.& @# U0 {3 j! a2 }$ i
    ! A1 B, F5 W" q* B! D  y
    在SolidWorks中通过宏录制可以记录SolidWorks用户的整个产品设计过程,把用户的界面菜单操作所用到的SolidWorks对象、方法都一一记录下来,其语法完全符合Visual Basic。根据宏文件中的对象和方法在自己的应用程序中合理调用,通过对变量的控制就可实现产品的参数化设计。在二次开发过程中,宏录制文件中的许多对象、方法可以直接在Visual Basic应用程序中应用,简化了开发过程。
9 W/ }3 Q. {0 y" a$ u2 {   
% ]6 ?: ?/ {9 B2 G2 x    3 机械零件参数化设计实现
8 S6 C; Z' x" U! f  h    9 g/ j7 e3 t* a( q
    3.1 零件二次开发的过程主要论述通过VB语言对SolidWorks进行二次开发,其主要流程如下:+ h3 \, I$ N( n) U& y
    2 |- B/ H0 J- j4 P. o" a
    3.1.1 建立零件的数据库首先分析机械零件有关数据,利用VB的默认数据库Access为每一种零件建立数据库,如齿轮参数数据库,联轴器参数数据库等。在数据库建成后,可以在应用程序中通过数据控件与特定的数据表连接起来。利用用户输入的主参数作为索引,用Findfirst方法即可读出对应的数据。4 d" U0 ^8 u* e
   
$ @, N% \& F: o    3.1.2 分析零件的结构特征,建立实体模型首先,针对要建立的实体,需要先分析其结构,区别特征的主次,利用SolidWorks建立零件特征,建立宏文件,有些操作宏文件无法记录,需要调用相关API绘图函数。实现关键数据变量化,如齿轮分度圆自径、齿轮宽度等,而这些变量的数据来源即为齿轮数据库下的某种齿轮类型数据表。建模完成后,使用AddComponent4方法即可将零件插入当前装配图中.! W% c+ t/ E  }. A( g* ?. e
   
* H' U' k% N# q, @    3.1.3 建立应用程序VB开发的程序作为客户方(client),而SolidWorks作为服务方(server),VB程序可建立与SolidWorks各级对象(object)的关联;另外,还必须在VB中通过“引用”(reference)JJll载SolidWorks类型库,使VB识别程序使用的SolidWorks对像类型、属性和方法。) u: ~( ~& Y. q4 {$ J
    4 E  L. W1 w% z0 h! v
    3.2 齿轮联轴器二次开发中的关键技术
6 c; H* V5 z! D0 y; M! N   
. p* a4 O( A; @! n! |5 f- k    以机械零件中的齿轮联轴器为例介绍二次开发中的关键技术。
5 C, I3 i9 H0 A   
% h: p0 V2 C* C' C3 [    3.2.1 联轴器数据库技术CL6型号齿式联轴器的部分标准数据如表1所示。
- M3 m( O8 P# s: x) _. A, z3 e* X   
& N4 n- v9 p9 J' X4 @- s# q5 O0 }, a% K9 F0 n
    " z( a  D& ?1 {8 A0 g0 \1 C
    建立数据库,在VB程序中引用数据库,就可以通过程序查询联轴器的国家机械标准信息。选择联轴器需要参考联轴器的转矩和转速等信息,需要在程序中将联轴器的数据信息加载到联轴器设计的人机界面当中,供设计人员参考。
+ f* p1 h, o* n' p- K   
5 ]- x; w! v& x1 W( g" Q

7 m3 w% t' |9 x    齿轮联轴器需要做到全参数化的有齿数、模数、压力角、轴径、键槽尺寸及相关安装尺寸等。
4 B/ t: D( E1 E1 }4 y% Y   
; t: R3 m4 o6 \/ O    实现模型创建,需通过VB环境下的数学模型计算,得出重要数据。对于齿轮联轴器,最重要的是齿轮渐开线的计算。在VB环境中,建立渐开线直角坐标方程. 联立方程组,利用循环语句来实现渐开线的计算。再将数据传递给ModelDoc2:SketchSpline方法绘制轮齿草图, .调用FeatureManager::FeatureExtmsion2方法拉伸轮齿。# i) ^. s7 t2 y( e: H0 Y3 V, H
    : X$ W& R$ U2 A2 ?7 h
& A6 j9 {, Y3 K  t7 e
    图2 联轴器数据流程
   
8 N: o/ r: ]( H' q5 Y2 K% V# P5 T    3.2.2 零件、装配文档的创建SldWorks对象是SolidWorks API中最高级的对象,它提供了SolidWorksAPI中所有对象的直接或间接接口。通过该对象可以控制SolidWorks软件的执行或退出。在VB中利用Create Object方法来获得Sldworks对象,利用该对象的activedoc方法可以获得当前Solidworks文件对象。( p; @. {/ e- _/ A% F
    ( C, B0 Q/ y# M5 D; S# u- X
3.2.3 零件自动建模实现创建了新的零件文档后,通过定义对象与数据,调用创建草图、实体的API函数来进行零件参数化建模代码的编写。0 ~% G2 F5 z! f0 k4 T2 E
   
( G, {2 K) t& @. e" q

+ `  G: ^5 U1 N& B5 s  I9 y3 K    3.2.4 自动装配实现创建了新的装配文档后,向装配体中添加组件。先调用SldWorks::OpenDoc6方法打开所要添加的组件,再使用AssemblyDoc::addcomponent4函数往装配体中插入零部件。
$ p. ]0 Z1 k, I9 O   
8 s# x7 L% m/ a* L5 N( N: h/ q* _    在Solidworks中,可以使用变换确定或者移动一个部件在装配体中的物理位置。所有零件和装配体都有它们各自的原点,当装配体空间与部件空间不一致时,要使用变换来设置或获得部件相对于装配体的距离和旋转角度。如果半联轴节原点与装配体原点不同且不同轴,那么AddComponent4方法的位置参数必须由半联轴节中心乘以半联轴节部件相对于装配体原点的变换来确定。调用MathUtility:;CreateTransform方法用来创建MathTransform对象,MathTransform对象是用于操作部件变换信息的接口。# s& C! p/ j% A* K1 V- Y7 k4 L
   
, q1 d8 |. J' z+ m2 k7 W2 @    对零件添加配合关系之前先使用ModelDocExtension::SelectByID方法选中待配合的零件上的几何元素,然后使用AssemblyDoc::Addmate3方法定义配合关系。如果之前已经定义过相应的用于配合的基准面和基准轴,会使配合时选取待配合元素变得更为容易。做配合时,需要经常选择到零件的面、线等,所以主要的问题在于如何选择合适的面、线,同时需要熟练掌握AsemblyDoc::AddMate3函数的使用。在得到一个组件(component)或者一个特征(feature)时,可以使用Igetfaces、Igeflirstface、Igetnextface等方法遍历一个组件或特征等的各个面,来达到选择面的目的。
1 o2 h: _+ s/ Y' O8 ?   
$ m' K5 X# ]3 _7 H+ ~9 ?
$ v9 ^  O3 H% A( C5 H" B% o
    4 开发人机交互界面及运行结果( |% @, G; P( |( R2 F
    / F: Z4 `% l; m8 q* b6 Q
    本示例基于作者研制的轴系结构设计系统。以Vistud Basic语言为开发平台通过调用SolidWorks API函数建立齿轮联轴器模型,操作界面如图3所示。选择需要的齿轮联轴器类型,点击“三维模型建立”即可实现在SolidWorks中自动创建相应型号的联轴器模型。重新选择型号,点击按钮,新的模型将在Solidworks环境中重生,程序无需更改。CL6齿式联轴器装配操作界面如图4所示。添加装配实体,选择配合元素与方式,即可在Solidworks环境下实现联轴器零件的自动装配。
/ ?* ?$ N5 j) N* h     
( W' u+ J8 ~0 R* g# v  K$ `' o* k

. P' P/ z% T3 z3 p! T4 T
( Y( Q% `$ s. A, Z) L- e& N+ s7 F
    5 结语5 W1 S- E) D- l% A! @
    9 N( j- L4 p3 k- }# ]# d& G
        论述了SolidWorks软件的二次开发原理,介绍了利用VB语言在SolidWorks环境下实现机械零件自动建模与装配的可能性及方法,使机械零部件的建模、装配实现了参数化、自动化。我们研究的SolidWorks的二次开发技术对于减轻设计人员的工作强度、实现工程设计的自动化、开发集成化的CAD系统有很大的作用。
3 ?1 I; i$ c) s6 b. ?; b9 m
回复

使用道具 举报

发表于 2011-2-7 00:15:42 | 显示全部楼层
问了好几天,总算有大侠回应啦1 H. T- m, J. u- z  D9 T$ X
只是市面上这样的书籍资料很难找到
  M0 V  G; H0 F6 {9 R9 c3 R7 I而且做的话自己VB或VC++能力不能差,挺纠结的
回复 支持 反对

使用道具 举报

发表于 2011-2-10 09:11:34 | 显示全部楼层
不用纠结,找人做就行了啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-11 19:05:55 | 显示全部楼层
对啊。。。这种东西一般都不会是单人搞的。。。要么是企业要么是团队。。。。做好自己所擅长的才是正道!!
回复 支持 反对

使用道具 举报

发表于 2011-2-11 22:48:47 | 显示全部楼层
我认识的人里至少有5,6个会SOLIDWORKS二次开发,他们都是在校研究生
回复 支持 反对

使用道具 举报

发表于 2011-5-19 16:28:16 | 显示全部楼层
求助:怎么调用solidworks自带的“工具-方程式”功能,就是我点个按钮,弹出的对话框和点击方程式菜单一模一样。谢谢了!

点评

北京爱情故事 http://www.kk321.cc/aiqing/20348/ 星月传奇 http://www.kk321.cc/dalu/20470/  发表于 2013-12-30 22:16
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-23 22:25:11 | 显示全部楼层
谢谢各位的回答!!!
回复 支持 反对

使用道具 举报

发表于 2011-5-28 17:40:08 | 显示全部楼层
专业计算机学的不是很好,不过也想学学。
回复 支持 反对

使用道具 举报

发表于 2011-10-13 21:33:33 | 显示全部楼层
现在关系到一个课题,不知道对于任意空间曲线(任意比较简单的三维曲线即可)的solidworks模型,能否提取出曲线的方程或者根据自己的需要,每个一定的间隔取一个点得坐标,这个间隔要比较小,并且可以任意调节就最好。
; q* f1 H6 D9 ]& C+ [例如:已知曲面A和曲面B的交线,如何从solidworks中提取这条交线的方程或者在这条交线上,我自己设定每个1mm或者0.1mm的距离上,我取一个点得坐标,从而得到这条曲线上的N个点的坐标值。
% A+ Q1 W9 d9 Y! t! C6 s出了solidworks,其他软件要是能实现此功能也可以,比如CAD/PROE/UG等。
# i- h+ J* }( [  K3 r6 f联系方式:QQ782355668。5 Y: L5 k3 b+ C$ S, Q
不甚感激!
回复 支持 反对

使用道具 举报

发表于 2012-3-11 12:58:31 | 显示全部楼层
目前正在学习中,感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-2-19 05:55 , Processed in 0.067889 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表