SolidWorks根据装配体生成工程图的宏程序_第1页
SolidWorks根据装配体生成工程图的宏程序_第2页
SolidWorks根据装配体生成工程图的宏程序_第3页
SolidWorks根据装配体生成工程图的宏程序_第4页
SolidWorks根据装配体生成工程图的宏程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、,就不能够继承图纸模版的预定义试图了。所以需要使用CreateDrawViewFromModelView2 和 CreateUnfoldedViewAt3 来替代。一切准备完毕后就可以设计程序框架进行编码了:这里定义了三个过程,main、 traverseasm、 createdraw。 它们的定义和完成的作用如下:Main ():模块主函数没有参数和返回值,它得到当前打开装配体的路径、 设置“工程图文件夹路径”、运行 traverseasm 过程。Traverseasm(filepath as string)此过程接受一个装配体的存储路径字符串参数, 完成装配体的递归遍历工作,得到每一个装配

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

7、'traverseasm:'for itself call createdraw with argumentitself'traverse the asm model component'for each sub asm model:'call traverseasm''createdraw:' create a drawdoc with given DrawTemplate ' insert each sub part model component a sheet*/*Option Explicit'定义部分:

8、AsAs StringAs StringAs LongAs LongAs BooleanDim SwAppDim DrawPathNameDim FileDim nErrorsDim nWarningsDim StatofanNoDim Pos As Integer'/*'sub main goes here:'*Sub Main()On Error Resume NextDim ActModel AsDim YesOrNo As VbMsgBoxResultSet SwApp = CreateObject("")Set ActModel =If A

9、ctModel Is Nothing ThenMsgBox "请先打开装配体"End If'得到装配体文件路径File ='得到工程图保存路径DrawPathName = Left(File, InStrRev(File, "") - 1)DrawPathName = Left(DrawPathName, InStrRev(DrawPathName, "")DrawPathName = DrawPathName + 工程图""'创建文件夹MkDir (DrawPathName)'调试

10、信息:DrawPathNameFile'should i set all object nothingSet ActModel = NothingSet SwApp = NothingYesOrNo = MsgBox("!要自动在零件工程图中插入模型项目么 ", vbOKCancel," 提示 ")If YesOrNo = vbOK ThenStatofanNo = TrueElseStatofanNo = FalseEnd If= False'调用函数遍历装配体组件TraverseAsm File= TrueEnd Sub'/*

11、'sub traverseasm goes here :''*Sub TraverseAsm(FilePath As String) 'Traverse As遍历 ASM 文件Dim SwModel2 AsDim SwConf2 AsDim SwRootComp2 AsDim SwChildComp2 AsDim vChildComp2 As VariantDim FileType2 As StringDim n As LongSet SwApp = CreateObject("")If SwApp Is Nothing ThenMsgBox

12、 "创建SW对象失败"Exit SubEnd IfSet SwModel2 = (FilePath, 2, 0, "", nErrors, nWarnings) 'file open goodIf SwModel2 Is Nothing ThenMsgBox "加载装配体失败"Exit SubEnd IfSet SwConf2 = 'need to change SwModel to traverseSet SwRootComp2 =vChildComp2 =For n = 0 To UBound(vChildComp

13、2)Set SwChildComp2 = vChildComp2(n)FileType2 = UCase(Right, 6)If FileType2 = "SLDASM" ThenTraverseAsmEnd IfNextIf Not Mid, 1, 2) = "镜向" ThenCreateDrawEnd IfEnd Sub'/*'sub createdraw goes here :'*/Sub CreateDraw(FilePath As String)Dim SwModel AsDim SwSave AsDim SwDraw

14、AsDim SwChildComp AsDim SwChildCmp2 AsDim SwConf AsDim SwRootComp AsDim CurSheet AsDim SwView AsDim vChildComp As VariantDim SheetArrAsStringDim SpadStrAsStringDim AsmFileAsStringDim DrawFielAsStringDim DrawDir As StringDim DrawTemp As StringDim DeStringAs StringDim tmpStringAs StringDim sTmpStr As

15、StringDim FileType As StringDim SheetName As StringDim ViewName As StringAs StringAs StringAs LongAs BooleanAs IntegerDim sFileNameDim FileDim iDim isOkDim wGoodAsmFile = FilePathDrawDir = DrawPathName'for easy to use i specified a template fileDrawTemp = & "langchinese-simplifiedTutori

16、al"SheetArr = "ardenmakeastupidwaybutrunsok"Set SwApp = CreateObject("")If SwApp Is Nothing ThenMsgBox "创建SW对象失败"Exit SubEnd IfSet SwModel = (AsmFile, 2, 0, "", nErrors, nWarnings)If SwModel Is Nothing ThenMsgBox "打开装配体失败"Exit SubEnd If'创建dr

17、awdoc 文档DrawTempSet SwDraw = (DrawTemp, 2, ,If SwDraw Is Nothing ThenMsgBox "创建工程图失败"Exit SubEnd IfSet CurSheet ='插入模型到预定义视图isOk = (AsmFile)If isOk = False ThenMsgBox "插入装配体三视图失败"End IfDeString =tmpString = Left(DeString, InStrRev(DeString, ".") - 1)If InStrRev(tmpS

18、tring, " ", -1, vbTextCompare) <= 0 ThenDeString = tmpString' notice : need to write more to modify itElseDeString = Replace(tmpString, Left(tmpString, InStrRev(tmpString, " ") - 1), "") End If'sheet 名称设定规则:模型名称(不包括物料编码)+三视图(DeString + "三视图")Set SwV

19、iew = True '设置为图纸比例does it works right''''' "the sheet name is : " & destring + "三视图"'save draw file but do not open itwGood = (DrawDir + tmpString + ".SLDDRW", 0, False, True)''' "save asm draw file state:" & wg

20、ood''' DrawDir & "" & tmpstring & ".SLDDRW"If wGood = 0 ThenMsgBox "保存三视图失败"End If'>>>'怎样才能不覆盖保存'then traverse all part file next level insert sheet on this draw'已经将装配体的三视图插入draw 文件了'要遍历装配体:part 部分' , True, nError

21、sSet SwConf = 'need to change SwModel to traverse''' "activeconfiguration is :" &Set SwRootComp =''' "rootcompoent is :" &vChildComp ='开始对装配体下一层组建进行遍历,忽略子装配体,只将本身和子零件出图'begin loop-For i = 0 To UBound(vChildComp)''' "ent

22、er loop 0 to " & UBound(vChildComp)Set SwChildComp = vChildComp(i) 'If i < UBound(vChildComp) ThenSet SwChildCmp2 = vChildComp(i + 1)ElseSet SwChildCmp2 = vChildComp(0)End If''' "sub comp " & i & " name is : " &FileType = UCase(Right, 6)If

23、FileType = "SLDPRT" Then ' 如果是零件,插入图纸If SwDraw Is Nothing Then''' "SwDraw is nothing"Else''' "SwDraw has :" & & "sheets" End If'' - 1)'' "2: " & stmpstrsTmpStr = Right(sTmpStr, Len(sTmpStr) - In

24、StrRev(sTmpStr, "")'' "3: " & stmpstrIf InStr(sTmpStr, " ") <= 0 ThenSheetName = LTrim(sTmpStr)ElseSheetName = LTrim(Replace(sTmpStr, Left(sTmpStr, InStrRev(sTmpStr, ") - 1), "")End If' 得到图纸名称lddrt", 2, 2, ""SheetArr = SheetArr & SheetName"add" & SheetArrSheetNameSet CurSheet = True' DrawTemp''' "

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论