SolidWorks根据装配体生成工程图的宏程序

上传人:cn****1 文档编号:455357228 上传时间:2023-10-14 格式:DOC 页数:9 大小:104.50KB
返回 下载 相关 举报
SolidWorks根据装配体生成工程图的宏程序_第1页
第1页 / 共9页
SolidWorks根据装配体生成工程图的宏程序_第2页
第2页 / 共9页
SolidWorks根据装配体生成工程图的宏程序_第3页
第3页 / 共9页
SolidWorks根据装配体生成工程图的宏程序_第4页
第4页 / 共9页
SolidWorks根据装配体生成工程图的宏程序_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《SolidWorks根据装配体生成工程图的宏程序》由会员分享,可在线阅读,更多相关《SolidWorks根据装配体生成工程图的宏程序(9页珍藏版)》请在金锄头文库上搜索。

1、在网上看到的:在 WIN7SW2014F现在不能用,看看改了能用不?烦请懂的人指 点下,并将文件上传到群里来:SolidWorks 生成工程图纸程序下面代码是工程图助手中的 “生成工程图” 模块内容。 它按照我们的图纸存 储规范,把一个产品的每个装配体都生成一个 solidworks 的工程图文件。面对一个问题,我们在试图使用VBA来改善工作的时候,可以参考下面的思 路来进行,当然,这也只是个人的一些经验之说,并不是最好的工作方式:首先我们需要了解实际工作情况,发现问题所在:工艺人员在试图提高 solidworks 工作效率的时候提到了使用 SolidWorks Task Scheduler

2、来自动出 图纸的方法(具体方法就不讨论了)。大家经过一段时间的使用后发现,使用 SolidWorks Task Scheduler 有一定的局限性,需要问题在于,它将每个 solidworks 文件包括零件、装配体都生成了一个工程图文件。然而这样得 到的结果便是一个零部件稍多的产品, 将会自动生成很多的工程图文件, 不便于 管理。我们的习惯是, 按照装配体来出图纸, 将一个装配体中的零部件在一个工 程图文件中表示。这样表达清楚而且便于管理。恩,这就是现实的问题所在。然后,我们要考虑可行性:思考了 SolidWorks Task Scheduler 的实现,发 现使用VBA在技术方面可以实现此类

3、功能,并且有一定的规律可以遵守而不需要 太多的人为判断就可以达到要求。这里插一句,在使用 SolidWorks Task Scheduler 时我发现了一个选项:备份任务文件,而这个任务文件上所记录的正 式一段使用VBA写的宏代码。接下来,需要现场调研确定需求目标:在了解了 solidworks 使用相应的规 范和工艺员在实际工作中的要求后我们对问题目标有了一个比较明确的概念。 我 们要做的项目需要完成这样的工作: 它针对一个产品中的每个装配体生成一个工 作图文件,每本工程图文件中需要一张装配体的三视图和其每个子零件的三视图 图纸。并将它们存储在和“图纸”文件夹(存放 solidworks 模

4、型)同级的目录 下的“工程图”文件夹里。做好了准备工作,即可开始写程序。将需求的内容转化成软件问题描述,并 描述其大致方法:1、 得到产品文件的每个装配体: 我们可以通过文件夹中文件的遍历, 按照后 缀名“ .sldasm ”来得到一个目录下所有的装配体;也可以通过遍历一个产品总 装配体的组件来得到每一个子装配体模型。 实际的编码中我们选择了后者, 因为 它虽然给编写代码结构带来了复杂度, 但是正确性和稳定性都要好过前者。 装配 体的组件是一个树型结构, 使用递归式是比较灵活的方法, 前面章节也已经介绍 过。2、 生成工程图并插入零件的模型三视图:SolidWorks Task Schedul

5、er 使用 预定义的模型视图来完成自动生成的功能, 但是,一旦需要在原有的图纸上插入 新图纸时,就不能够继承图纸模版的预定义试图了。所以需要使用CreateDrawViewFromModelView2和 CreateUnfoldedViewAt3 来替代。一切准备完毕后就可以设计程序框架进行编码了:这里定义了三个过程, main、traverseasm 、createdraw 。它们的定义和完成的作用如下:Main():模块主函数没有参数和返回值,它得到当前打开装配体的路径、 设置“工程图文件夹路径”、运行 traverseasm 过程。Traverseasm(filepath as stri

6、ng): 此过程接受一个装配体的存储路径字符 串参数,完成装配体的递归遍历工作, 得到每一个装配体, 并让每一个装配体都 作为参数运行 createdraw 过程。Createdraw(filepath as string): 此过程接受一个装配体的存储路径字符串参 数,生成此装配体的工程图。/*drawcreator : 根据装配体生成工程图main: get opened asm model infomation: filepathname drawpathname make dir path is drawpathname call traverseasm with argument f

7、ilepathnametraverseasm: for itself call createdraw with argument itself traverse the asm model component for each sub asm model:call traverseasmcreatedraw: create a drawdoc with given DrawTemplate insert each sub part model component a sheetI*/Option Explicit 定义部分:Dim SwAppAs SldWorks.SldWorksDim Dr

8、awPathName As StringDim FileAs StringDim nErrorsAs LongDim nWarningsAs LongDim StatofanNo As BooleanDim Pos As Integer /* sub main goes here:*Sub Main()On Error Resume NextDim ActModel As SldWorks.ModelDoc2Dim YesOrNo As VbMsgBoxResultSet SwApp = CreateObject(SldWorks.Application)Set ActModel = SwAp

9、p.ActiveDocIf ActModel Is Nothing ThenMsgBox 请先打开装配体 End If 得到装配体文件路径File = ActModel.GetPathName 得到工程图保存路径DrawPathName = Left(File, InStrRev(File, ) - 1)DrawPathName = Left(DrawPathName, InStrRev(DrawPathName, )DrawPathName = DrawPathName + 工程图 创建文件夹MkDir (DrawPathName) 调试信息 :Debug.Print DrawPathNam

10、eDebug.Print Fileshould i set all object nothing ?Set ActModel = NothingSet SwApp = NothingYesOrNo = MsgBox( 需要自动在零件工程图中插入模型项目么? , vbOKCancel, 提示 )If YesOrNo = vbOK ThenStatofanNo = TrueElseStatofanNo = FalseEnd IfSwApp.Visible = False 调用函数遍历装配体组件TraverseAsm FileSwApp.Visible = TrueEnd Sub /*sub tra

11、verseasm goes here :H*Sub TraverseAsm(FilePath As String) Traverse Asm遍历 ASM文件Dim SwModel2 As SldWorks.ModelDoc2Dim SwConf2 As SldWorks.ConfigurationDim SwRootComp2 As SldWorks.Component2Dim SwChildComp2 As SldWorks.Component2Dim vChildComp2 As VariantDim FileType2 As StringDim n As LongSet SwApp =

12、CreateObject(SldWorks.Application)If SwApp Is Nothing Then MsgBox 创建SW对象失败 Exit SubEnd IfSet SwModel2 = SwApp.OpenDoc6(FilePath, 2, 0, , nErrors, nWarnings) file open goodIf SwModel2 Is Nothing ThenMsgBox 加载装配体失败 Exit SubEnd IfSet SwConf2 = SwModel2.GetActiveConfiguration need to change SwModel to t

13、raverseSet SwRootComp2 = SwConf2.GetRootComponent vChildComp2 = SwRootComp2.GetChildrenFor n = 0 To UBound(vChildComp2)Set SwChildComp2 = vChildComp2(n)FileType2 = UCase(Right(SwChildComp2.GetPathName, 6)If FileType2 = SLDASM ThenTraverseAsm SwChildComp2.GetPathNameEnd IfNextDebug.Print SwModel2.Get

14、PathNameIf Not Mid(SwModel2.GetTitle, 1, 2) = 镜向 ThenCreateDraw SwModel2.GetPathNameEnd IfEnd Sub /*sub createdraw goes here :*/Sub CreateDraw(FilePath As String)Dim SwModel As SldWorks.ModelDoc2Dim SwSave As SldWorks.ModelDoc2Dim SwDraw As SldWorks.DrawingDocDim SwChildComp As SldWorks.Component2Dim SwChildCmp2 As SldWorks.Component2Dim SwConf As SldWorks.ConfigurationDim SwRootComp As SldWorks.Component2Dim CurSheet As SldWorks.SheetDim SwView As SldWorks.ViewDim vChil

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号