浅谈SolidWorks二次开发

SolidWorks增值开发案例分析

   济南凯元软件有限公司有一大批solidworks开发工程师,他们可以用程序帮您解决技术上的各种问题。


   用三维设计软件SolidWorks进行产品设计开发过程中, 为了实现设计意义上的变量化绘图和系列化设计, 有必要对SolidWorks进行本地化的二次开发. 本文阐述了利用Visual C++ 编程环境对SolidWorks进行二次开发, 根据产品设计计算的参数动态地改变模型零件尺寸, 实现产品变量化设计、三维建模绘图的思想和方法. 本方法中SolidWorks与VC+ + 相结合, 减少了编程工作量, 能够有效提高产品的设计开发效率, 对于开发系列化产品设计软件具有重要参考价值.


   SolidWorks是基于Windows平台的优秀三维设计软件, 具有用户界面友好, 上手快的优点. 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图. SolidWorks软件本身所具有的交互方式, 可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程. 但要实现设计意义上的变量化绘图和系列化设计, 需要建立设计计算获得的参数与三维图形之间的直接相关性, 这是SolidWorks软件本身所无法实现的. 所以要使SolidWorks在产品设计过程中充分有效地发挥作用,就需要对其进行专业化和本地化的二次开发工作.

   通过SolidWorks软件内嵌的应用程序接口(Application Programming Interface, API) , 可以对SolidWorks的设计参数百分之百进行修改, 实现有效的二次开发. 任何支持API的编程语言都可作为开发工具, 如VisualC++ , Visual Basic, Delphi等. 本文着重探讨基于Visual C++对SolidWorks 进行变量化设计二次开发的方法.

1、SolidWorks二次开发原理与思路

1.1 二次开发原理

   对SolidWorks进行二次开发主要通过软件内嵌的API接口, 该接口为用户提供了自由、开放、功能完整的开发工具, 其中包含了大量的功能函数. 用户借助高级编程语言作为开发平台, 在设计友好操作界面的同时, 通过在程序中调用API函数可以访问和操作SolidWorks, 对SolidWorks进行各种操作控制, 以实现产品三维模型的建立.

   SolidWorks所提供的各种API函数数以百计, 这些API函数是对SolidWorks进行二次开发的基础. 但是在用户利用编程语言开发自己的应用程序时, 需要对这些API函数进行频繁调用. 所以非常有必要利用API函数来生成成员函数, 并封装为1个类, 以简化程序的编写工作. 该类能够控制SolidWorks进行各种操作, 如启动、关闭、打开和关闭零件文件、修改草图和特征参数, 以及模型重建、零部件装配等.

1.2 二次开发思路

   通过编程调用API函数对SolidWorks进行二次开发通常有2 种方式, 一是完全编程的方式, 即在编程环境中通过对API函数的调用, 来实现在SolidWorks中进行建模所需要的全部操作. 该方法使三维模型完全实现了参数驱动, 但编程工作量大, 开发效率低, 对开发人员的要求也较高. 二是采用SolidWorks建模与在编程环境中编程相结合的方法来实现对So lidWorks 的二次开发, 首先在SolidWorks中建立初始三维模型, 确定具体设计变量; 然后在程序中调用API函数, 修改模型的设计变量并重建, 以得到最终模型. 在此方法中, 模型的设计变量是程序与模型之间相联系的纽带, 通过少量的变量化参数来控制模型, 实现快速、准确的三维图形设计.

   相对于完全编程的方式, 由于第二种方法将大部分的工作(即初始模型建立部分) 转移到了相对简易的SolidWorks中进行, 所以大大减少了相对繁琐的编程工作的工作量, 提高了开发效率. 本文中采用SolidWorks初始建模与VC++ 编程相结合的方法, 选定典型零件, 按正确的设计关系在SolidWorks环境中绘制三维模型图形并保存. 在三维建模过程中根据设计需要分析并确定模型的设计变量, 然后通过编程环境编制程序, 调用API函数打开已保存好的三维零件图形文件, 修改其设计变量并重新生成模型, 实现模型几何或拓扑信息的改变, 从而完成零件的三维变量化建模过程.

2 SolidWorks二次开发过程

以下通过对门式起重机端梁的变量化设计具体阐述基于VisualC++编程环境对SolidWorks的二次开发过程.

2.1 在SolidWorks中建立三维模型

   首先在SolidWorks中进行零件建模. 门式起重机端梁的结构比较简单, 主要由上下盖板、主副腹板组成. 在SolidWorks中, 在右视基准面上建立草图, 利用直线工具画出端梁截面草图, 并通过” 拉伸凸台/ 基体”命令, 生成端梁的拉伸特征. 创建的端梁三维模型.

   其次确定模型的设计变量, 并添加必要的约束. 在确定设计变量时应尽量减少变量的数目, 并同结构设计计算所获得的变量保持一致. 端梁的设计变量确定为6 个, 分别为盖板宽、盖板厚、腹板内侧间距、腹板外侧间距、腹板高、端梁长. 模型中其他尺寸关系及相互间的约束均在SolidWorks建模过程中予以确定, 如端梁须相对于中心线对称; 对从属参数直接添加关系式方程( 如图1 中带”∑”符号的尺寸为已添加关系式方程的尺寸) , 使之与设计变量关联等.

   最后, 对模型中的设计变量及在后期装配中需要的配合面、基准面等进行命名, 以在程序中方便调用. 在SolidWorks中进行命名非常方便, 在此不再赘述.


2.2 创建CSldWorks类库

   为了在程序中更方便地使用SolidWorksAPI函数, 通常将API函数改写为成员函数, 并封装为1个CSldWorks 类. 这里主要介绍本实例中用到的5个成员函数, 分别为启动So lidWorks、打开零件文件、修改模型尺寸、重建模型、保存零件文件, 并给出函数的实现. 其他函数可以自己编写.

//SldWorks. h

class CSldWorks

{ public: ISldWorks * m_pSldWor ks; IMo delDoc * m_pModelDoc; IPartDoc * m_pPartDo c;

HRESULT Star t( ) ; //启动So lidWor ks

HRESULT New Part ( IPartDoc * * pPartDoc) ; //新建零件文件

HRESULT SetDimValue( BST R st ringin, do uble value) ; //修改模型尺寸

HRESULT Rebuild( ) ; //重建模型

long SaveFile( BSTR Path) ;//保存零件文件

} ;

CSldWorks 类库的实现:

MSldWorks. cpp

HRESULT CSldWo rks: : Start ( )//启动SolidWorks

{ HRESU LT hr= CoCreateInstance( CLSID_SldWorks, NULL, CLSCTX_LOCAL_SERVER, IID

_ISldWor ks, ( vo id * * ) ( & m_pSldWorks) ) ;

ASSERT( hr= = S_OK& & m_pSldWorks! = NU LL) ;

m_pSldWor ks- > put_Visible( tr ue) ;

return hr;

}

HRESULT CSldWo rks: : New Part ( IPartDo c * * pPartDoc) //新建零件文件

{ HRESU LT hr= m_pSldWorks- > INew Part ( & ( * pPartDoc) ) ;

ASSERT( hr= = S_OK& & ( * pPartDoc) ! = NU LL) ;

hr= ( * pPartDoc) - > Quer yInterface( IID_IModelDoc, ( v oid * * ) & m_pModelDoc) ;

ASSERT( hr= = S_OK& & m_pModelDo c! = NU LL) ;

return hr;

}

HRESULT CSldWo rks: : SetDimValue( BSTR st ring in, double v alue) //修改模型尺寸

{ LPDIMENSION ret ;

HRESULT hr= m_pModelDoc- > IPar ameter( str ing in, & ret ) ;

ASSERT( hr= = S_OK& & ret ! = N ULL) ;

hr= ret- > put_Value( value) ;

ASSERT( hr= = S_OK) ;

ret- > Release( ) ;

return hr;

}

HRESULT CSldWo rks: : Rebuild( ) //重建模型

{ VARIANT_BOOL ret;

HRESULT hr= m_pModelDoc- > EditRebuild3( & ret ) ;

ASSERT( hr= = S_OK) ;

return hr;

}

long CSldWorks: : Sav eFile( BSTR Path) //保存零件文件

{ HRESU LT hr;

long ret= 0;

hr= m_pModelDo c- > SaveA sSilent ( Path, false, & ret) ;

ASSERT( hr= = S_OK) ;

return ret ;

}

2.3 用户界面设计与程序建模实现

   在VisualC++中制作窗体界面. 在界面的编辑框中输入端梁相应数据(或利用编程从其他数据源读入数据) , 此处数据为设计计算所获得的参数. 点击/ 端梁建模0按钮,即可运行程序, 实现端梁的三维建模.



以下为程序中实现对端梁变量化绘图的主要程序代码:

void CMo del JDLModel( )

{ CSldWorks SW;

char CurrentPath[ 200] ; //当前路径

CSt ring DangQianLuJing ;

GetCurr entDirectory( 200, CurrentPath) ;

DangQianLuJing . Fo rmat ( "% s", CurrentPath) ;

SW. Start ( ) ;

SW. Open( _bst r_t ( DangQianLuJing+ "\\ 模型\\ 端梁模型. sldprt") , swDocPART ) ;

SW. SetDimV alue( _bst r_t ( " 端梁上盖板宽@端梁草图") , JBCC[ 30] ) ;

SW. SetDimV alue( _bst r_t ( " 端梁上盖板厚@端梁草图") , JBCC[ 36] ) ;

SW. SetDimV alue( _bst r- t( "端梁腹板外侧间距@端梁草图") , JBCC[ 32] ) ;

SW. SetDimV alue( _bst r_t ( " 端梁腹板内侧间距@ 端梁草图") , JBCC[ 31] ) ;

SW. SetDimV alue( _bst r_t( " 端梁腹板高@ 端梁草图" ) , JBCC[ 34] ) ;

SW. SetDimV alue( _bst r_t ( " 端梁总长@端梁拉伸") , JBCC[ 28] ) ;

SW. Rebuild( ) ;

SW. Sav eFile( _bst r_t ( DangQianLuJing+ "\\ 模型\\ 端梁. sldprt") ) ;

}




3 结论

   本文阐述了利用面向对象的开发工具VisualC++对SolidWorks进行二次开发, 实现三维变量化建模的过程. 通过对门式起重机端梁等一些典型结构件进行设计调试证明, 上述方法简便易行. 在企业产品设计开发过程中, 运用此方法并结合生产实际, 可以定制符合企业自身需要的变量化模型库, 这将极大地提高设计效率, 缩短新产品的开发周期, 具有较强的现实意义.


   济南凯元软件有限公司目前主要从事SolidWorks定制开发服务,推出的SolidWorks通用插件凯元工具(KYTool)目前已有上万SolidWorks用户使用。

   如果您有SolidWorks方面的开发需求,相信我们是您最好的选择。


上一篇:无 下一篇:好消息!solidworks二...