基于SolidWorks二次开发的榫卯家具零部件参数化设计研究
2023-04-07刘武发
王 帅 刘武发 郑 鹏
(郑州大学机械与动力工程学院 河南 郑州 450001)
0 引 言
榫卯结构作为中华民族独特的工艺制造,有着悠久的历史。被海外华人视为国粹的红木家具正是运用了这种巧妙的结构,整套家具不使用一根铁钉却能使用上百甚至上千年,堪称人类轻工制造史上的奇迹。采用榫卯结构进行连接的家具比用铁钉连接的更加结实耐用,具有许多铁钉做不到的功能,可有效限制木件之间各个方向的扭转,保障了连接结构的稳定性。
中国传统家具中的榫卯结构种类繁多,结构复杂,依靠传统建模方式工作量大且效率低下,同样类型的结构仅有尺寸不同却需要重新建模。目前,对于榫卯结构的研究绝大多数都围绕在样式设计、结构设计[1]和受力分析[2]上,而对榫卯结构的参数化设计和计算机辅助设计应用研究较少[3-4]。
因此为了提高设计资源的利用率,提高建模效率,减少重复劳动,本课题基于SolidWorks二次开发对传统家具中的榫卯结构进行参数化设计,生成榫卯家具零件参数化模型库,对榫卯结构的标准化、参数化设计具有一定的现实意义。
1 SolidWorks二次开发原理
Windows平台为SolidWorks的二次开发提供了大量OLE技术和COM技术的应用程序接口,并且SolidWorks采用面向对象的方法,所有函数都是有关对象的方法或属性[5],SolidWorks API中具有上百个函数,支持VB、VBA、Delphi、Visual C++等对其进行操作和调用,开发人员可以通过调用SolidWorks API函数对SolidWorks软件进行相应的操作控制,以实现目标三维图形的绘制和所需功能的扩展与定制,完成二次开发。
2 DLL插件设计及开发
SolidWorks插件是通过调用API函数所编写的ActiveX DLL文件,DLL(Dynamic Link Library)文件为动态链接库文件,又叫“应用程序拓展”,通过使用DLL,可以实现程序的模块化,减少资源的占用率。基于COM技术生成的DLL程序代码执行效率高,可以动态链接到应用程序,使得调用程序更加方便快捷,还能够在SolidWorks界面中添加工具条、下拉菜单、自定义属性页等功能,实现了与SolidWorks软件的无缝衔接。
SolidWorks API SDK为开发人员提供了插件开发的相关模板和文件,包含VB.NET、C#.NET和C++模板,以VB.NET模板为例,其结构分类如图1所示。
图1 SolidWorks API SDK插件模板结构图
在提供的模板中,为方便开发人员使用,已经按照功能对其进行模块化划分,具体分类如下:
(1) Local Variables模块:用于变量的声明。
(2) SolidWorks Registration模块:用于插件的注册,在注册表中添加插件的GUID,每个插件的GUID各不相同,SolidWorks通过该值对插件进行识别。
(3) ISwAddin Implementation模块:用于插件的卸载和添加,通过API函数完成与插件的连接和断开。
(4) UI Methods模块:用于用户的自定义设计,可以实现菜单栏,工具栏的添加和设置。
(5) UI Callbacks模块:用于回调函数的编写,执行按钮被触发后的事件。
(6) Event Methods模块:用于用户和SolidWorks的交互。
(7) Event Handlers模块:交互事件的函数。
在插件的开发中,UI Methods、UI Callbacks模块是最常用的,开发人员可通过此模块进行命令按钮以及回调函数设置。
2.1 环境搭建
首先,需要手动安装位于SOLIDWORKS安装目录下apisdk文件夹中的API SDK软件开发工具包,安装完成后,即可在Visual Studio中使用模板新建AddIn插件程序。操作流程如图2所示。
图2 模板使用流程
2.2 SolidWorks插件UI设计
在SolidWorks API中,通过调用CreateCommandGroup2和CreateFlyoutGroup2方法,可完成菜单栏和工具栏的创建;调用CreateFileFromResourceBitmap方法添加图标选项;调用AddCommandItem2和AddCommandItem分别为命令组和弹出式菜单添加子项。以AddCommandItem方法为例,说明函数中各参数的意义和用法,如表1所示,其他API函数参见SolidWorks API帮助文档。
表1 AddCommandItem方法返回与输入参数
菜单项和工具栏创建完成后,设置其回调函数以执行触发命令后的动作。在参数化系统设计中已创建多个窗体,启动该窗体就是执行菜单事件的响应。利用sub创建回调函数,用Function创建函数以显示控制项的状态。以CreateSunMao()为例,具体代码如下:
Dim TaskPanWinForm As Form1=NewForm1()
TaskPanWinForm.Show()
系统插件UI界面如图3所示。
3 参数化设计方法
实现SolidWorks二次开发参数化建模主要有两种方法[6]:
(1) 编程法(程序驱动法) 编程法是指零件的整个设计建模过程全部由编程实现,通过调用API函数,来实现模型的绘制和修改,此过程不需要绘制零件模板,应用程序从头到尾执行所编制的代码,从无到有地生成目标模型,此方法需要调用大量API函数,需要开发人员熟练掌握API的功能、方法及属性,操作难度较大,适用于参数较多或者形状变化较大的零部件产品。
(2) 尺寸驱动法 尺寸驱动法是指在已建立模型的基础上,不改变原有的拓扑关系,将所标注的尺寸视为变量,通过修改标注的尺寸值,来达到重建模型的目的,进而得到一系列结构相同但是尺寸不同的零部件模型,此过程不需要开发人员掌握大量API函数,仅掌握打开文档(opendoc6)、参数修改(Parameter)、模型重建(EditRebuild3)等几个简单的函数即可。此方法相较于编程法省去了代码绘制模型的步骤,建模效率更高,但是需提前建立模块化、局部标准化模型库,适用于结构相同,尺寸不同的系列零部件产品[6]。
由于传统家具中带有榫卯结构的零部件种类繁多且结构复杂、样式各有特点,故采用编程法与尺寸驱动法相结合,对其进行参数化设计。榫卯结构参数化设计流程如图4所示。
图4 榫卯结构参数化设计流程
在榫卯结构的零部件中,一部分结构固定、样式变化不大,如攒边结角榫里的大边、抹头、穿带,桌案类家具常用卡子花等零件采用尺寸驱动法,首先程序从零件模型库中选中指定参数化的三维模型,获取该零件的驱动参数,再确定尺寸约束,用户通过用户界面修改关键参数以重建模型,通过约束条件判断生成的模型是否合理,结合Access数据库实现数据的更新,弹出提示对话框,若满足要求,保存模型,退出程序;一部分样式多变、结构不一的零件,如燕尾榫(分为全隐式、半隐式、全透式、斜肩式四种)、直角榫(榫头可分为十字型、U型、L型等多种类型)、走马销(分为单斜面和双斜面两种)等采用编程法,通过newpart方法新建文档,调用API绘图函数,用if语句进行样式选择,用户通过输入参数来进行新模型的绘制。
4 实 例
4.1 燕尾榫
在众多榫卯结构中,燕尾榫被称为“万榫之母”,无论是抽屉架格的明扣暗扣,还是小木作家具中串销挂销,都利用燕尾榫的力学原理。燕尾榫是公认最牢固的榫接方式,也是抗拉性最强的榫卯结构之一。燕尾榫参数化设计中,尾榫与头榫的比例、榫头锥角的锥度、燕尾头和插接头的数量都决定着拼接的牢固程度,而木材的长宽高决定着燕尾榫整体零件的尺寸,因此,将以上参数作为设计的驱动参数,通过修改以上参数来生成不同尺寸类型的燕尾榫。其具体尺寸如图5所示,各尺寸之间约束关系如下:
a=(L/n-2H/m)/(k+1)b=2H/m+ac=ka
式中:L代表木板长度;H代表木板厚度;n代表燕尾头或插接头个数;m代表榫头锥度比值(例如1:6,m=6);k代表头榫和尾榫宽度比(例如头榫小头/尾榫小头=1:4,k=4);a代表头榫小头;b代表头榫大头;c代表尾榫小头。
图5 燕尾榫榫头简图
程序实现步骤:
(1) 连接SolidWorks软件,新建零件文档。
swApp=CreateObject("Sldworks.application")
//得到sw对象
swApp.Visible=True
//sw软件打开可见
Part=swApp.NewPart
//新建零件文档
(2) 绘制基本外形特征,根据木板整体参数绘制出起始木板结构。
Part.SketchManager.InsertSketch(True)
//绘制草图
Part.SketchManager.CreateCornerRectangle(0,0,0,L1,D1,0)
Part.FeatureManager.FeatureExtrusion2(True,False,False,0,0,H1,…)
(3) 样式选择。常用的燕尾榫可分为全隐式、半隐式、全透式、斜肩式四种,通过分析几种燕尾榫的结构特征,区分其结构层次,归纳其成型顺序,可知四种燕尾榫的基本结构相同,全隐式、半隐式、斜肩式燕尾榫均以全透式燕尾榫结构为基础,在其基本特征上的增材与变形。故采用编程法绘图时先调用ISketchSegment::EqualSegment方法、ISketchManager::CreateLinearSketchStepAndRepeat方法、ISketchManager::CreateLine方法、IFeatureManager::FeatureCut3方法绘制出全透式燕尾榫的基本结构,根据所输入的参数,如燕尾榫头或插接头的数目,榫头的锥度生成目标模型,再结合if语句,判断所进行的变形类型,调用相应绘图函数进行绘制。用户界面如图6所示。
If CheckBox2.Checked=True Then
Part.Extension.SelectByID2("","face",L1,H/2,0,False,0,Nothing,0)
Part.SelectionManager.GetSelectedObject6(1,-1)
SkSeg.EqualSegment(swSketchSegmentType_e.swSketchSegmentType_sketchpoints,n-1)
…
Line1=Part.SketchManager.CreateCenterLine(-H,(n-1)*L/n,0,0,(n-1)*L/n,0)
Line2=Part.SketchManager.CreateLine(0,(n-1)*L/n,0,0,(n-1)*L/n+a/2,0)
…
Selectmer=Part.SelectionManager
Selectda=Selectmer.CreateSelectData()
Selectda.Mark=1
Line2.Select4(True,Selectda)
Part.SketchMirror()
Part.FeatureManager.FeatureCut3(True,False,False,0,0,H,0,False,…)
4.2 攒边结角榫
在传统榫卯家具的组成结构中,几乎所有家具都由框架和面板组成。如柜架类家具中的柜门和架面、椅凳类家具中的椅面凳板、桌案类家具中的桌面等均用到了框类与板的组合,攒边结角榫在家具结构中起到了重要作用。攒边结角榫(如图7-图8所示)属于综合性部件结构,通常由“大边”、“抹头”、“面心板”、“穿带”组合拼接而成,其中:两端长且出榫称为“大边”,两端短且凿眼称为“抹头”,“穿带”横插过“面心板”与“大边”相接,形成一个受力均匀、拆卸方便、结构牢固的统一整体。此类零件结构固定,样式变化较小,故适合采用尺寸驱动法对其进行参数化设计。
图7 攒边结角榫装配界面
图8 大边参数化设计界面
考虑到攒边结角榫通常成组出现,故参数化设计中首先确定组合中各构件之间的尺寸约束关系,例如面心板短边长等于抹头内边长,穿带凸台尺寸等于面心板凹槽尺寸等。然后确定单个构件的尺寸关系,确定驱动参数,将从动参数在用户界面予以显示。最后,调用IModelDoc2::Parameter方法进行参数修改,重新刷新,保存零件即可。
程序实现步骤:
(1) 连接SolidWorks软件,打开零件库中的模型。
swApp=CreateObject("Sldworks.application")
Part=swApp.OpenDoc6(FilePath,1,0,"",myErr,myWar)
(2) 确定尺寸约束关系,获取指定参数并修改。
L1=Val(TextBox1.Text)/1000
//大边长度即为桌面长度
Part.Parameter("D1@草图1").systemvalue=L1
D1=3*L1/16
//大边宽度
…
Part.Parameter("D1@草图10").systemvalue=H3
D2=2*D1/5
Part.Parameter("D1@草图12").systemvalue=D2
(3) 重建模型,并保存。
Part.EditRebuild3()
Part.Save3(1,Errors,Warnings)
5 结 语
本文以VB.NET为开发工具,针对不同榫卯结构分别采取了尺寸驱动法和编程法建模,实现了基于SolidWorks二次开发的中国传统家具中的榫卯结构零部件的三维参数化建模。该参数化设计系统以插件的形式嵌入到SolidWorks软件中,运行效率高,与用户交互性好,同时也缩减了传统家具中的榫卯结构零部件的设计周期,减少了设计人员的重复劳动,对于继承和弘扬我国非物质文化遗产的榫卯技艺具有一定的意义,为后续的榫卯家具产品的系列化、标准化设计和生产奠定了基础。