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

下载本文档

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

文档简介

SolidWorks根据装配体生成工程图的宏程序SolidWorks根据装配体生成工程图的宏程序SolidWorks根据装配体生成工程图的宏程序xxx公司SolidWorks根据装配体生成工程图的宏程序文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度在网上看到的:在WIN7SW2014下现在不能用,看看改了能用不烦请懂的人指点下,并将文件上传到群里来:SolidWorks生成工程图纸程序下面代码是工程图助手中的“生成工程图”模块内容。它按照我们的图纸存储规范,把一个产品的每个装配体都生成一个solidworks的工程图文件。面对一个问题,我们在试图使用VBA来改善工作的时候,可以参考下面的思路来进行,当然,这也只是个人的一些经验之说,并不是最好的工作方式:首先我们需要了解实际工作情况,发现问题所在:工艺人员在试图提高solidworks工作效率的时候提到了使用SolidWorksTaskScheduler来自动出图纸的方法(具体方法就不讨论了)。大家经过一段时间的使用后发现,使用SolidWorksTaskScheduler有一定的局限性,需要问题在于,它将每个solidworks文件—包括零件、装配体—都生成了一个工程图文件。然而这样得到的结果便是一个零部件稍多的产品,将会自动生成很多的工程图文件,不便于管理。我们的习惯是,按照装配体来出图纸,将一个装配体中的零部件在一个工程图文件中表示。这样表达清楚而且便于管理。恩,这就是现实的问题所在。然后,我们要考虑可行性:思考了SolidWorksTaskScheduler的实现,发现使用VBA在技术方面可以实现此类功能,并且有一定的规律可以遵守而不需要太多的人为判断就可以达到要求。这里插一句,在使用SolidWorksTaskScheduler时我发现了一个选项:备份任务文件,而这个任务文件上所记录的正式一段使用VBA写的宏代码。 接下来,需要现场调研确定需求目标:在了解了solidworks使用相应的规范和工艺员在实际工作中的要求后我们对问题目标有了一个比较明确的概念。我们要做的项目需要完成这样的工作:它针对一个产品中的每个装配体生成一个工作图文件,每本工程图文件中需要一张装配体的三视图和其每个子零件的三视图图纸。并将它们存储在和“图纸”文件夹(存放solidworks模型)同级的目录下的“工程图”文件夹里。做好了准备工作,即可开始写程序。将需求的内容转化成软件问题描述,并描述其大致方法:1、得到产品文件的每个装配体:我们可以通过文件夹中文件的遍历,按照后缀名“.sldasm”来得到一个目录下所有的装配体;也可以通过遍历一个产品总装配体的组件来得到每一个子装配体模型。实际的编码中我们选择了后者,因为它虽然给编写代码结构带来了复杂度,但是正确性和稳定性都要好过前者。装配体的组件是一个树型结构,使用递归式是比较灵活的方法,前面章节也已经介绍过。2、生成工程图并插入零件的模型三视图:SolidWorksTaskScheduler使用预定义的模型视图来完成自动生成的功能,但是,一旦需要在原有的图纸上插入新图纸时,就不能够继承图纸模版的预定义试图了。所以需要使用CreateDrawViewFromModelView2和CreateUnfoldedViewAt3来替代。一切准备完毕后就可以设计程序框架进行编码了:这里定义了三个过程,main、traverseasm、createdraw。它们的定义和完成的作用如下:Main():模块主函数没有参数和返回值,它得到当前打开装配体的路径、设置“工程图文件夹路径”、运行traverseasm过程。Traverseasm(filepathasstring):此过程接受一个装配体的存储路径字符串参数,完成装配体的递归遍历工作,得到每一个装配体,并让每一个装配体都作为参数运行createdraw过程。Createdraw(filepathasstring):此过程接受一个装配体的存储路径字符串参数,生成此装配体的工程图。

'/************************************************************'drawcreator:根据装配体生成工程图'main:'getopenedasmmodelinfomation:'filepathname'drawpathname'makedirpathisdrawpathname'calltraverseasmwithargumentfilepathname''traverseasm:'foritselfcallcreatedrawwithargumentitself'traversetheasmmodelcomponent'foreachsubasmmodel:'calltraverseasm''createdraw:'createadrawdocwithgivenDrawTemplate'inserteachsubpartmodelcomponentasheet''************************************************************/OptionExplicit'定义部分:DimSwAppAsDimDrawPathNameAsStringDimFileAsStringDimnErrorsAsLongDimnWarningsAsLongDimStatofanNoAsBooleanDimPosAsInteger'/******************'submaingoeshere:'*******************SubMain()OnErrorResumeNextDimActModelAsDimYesOrNoAsVbMsgBoxResultSetSwApp=CreateObject("")SetActModel=IfActModelIsNothingThenMsgBox"请先打开装配体"EndIf'得到装配体文件路径File='得到工程图保存路径DrawPathName=Left(File,InStrRev(File,"\")-1)DrawPathName=Left(DrawPathName,InStrRev(DrawPathName,"\"))DrawPathName=DrawPathName+"工程图\"'创建文件夹MkDir(DrawPathName)'调试信息:DrawPathNameFile'shouldisetallobjectnothingSetActModel=NothingSetSwApp=NothingYesOrNo=MsgBox("需要自动在零件工程图中插入模型项目么",vbOKCancel,"提示")IfYesOrNo=vbOKThenStatofanNo=TrueElseStatofanNo=FalseEndIf=False'调用函数遍历装配体组件TraverseAsmFile=TrueEndSub'/************************'subtraverseasmgoeshere:''*************************SubTraverseAsm(FilePathAsString)'TraverseAsm遍历ASM文件DimSwModel2AsDimSwConf2AsDimSwRootComp2AsDimSwChildComp2AsDimvChildComp2AsVariantDimFileType2AsStringDimnAsLongSetSwApp=CreateObject("")IfSwAppIsNothingThenMsgBox"创建SW对象失败"ExitSubEndIfSetSwModel2=(FilePath,2,0,"",nErrors,nWarnings)'fileopengoodIfSwModel2IsNothingThenMsgBox"加载装配体失败"ExitSubEndIfSetSwConf2='needtochangeSwModeltotraverseSetSwRootComp2=vChildComp2=Forn=0ToUBound(vChildComp2)SetSwChildComp2=vChildComp2(n)FileType2=UCase(Right,6))IfFileType2="SLDASM"ThenTraverseAsmEndIfNextIfNotMid,1,2)="镜向"ThenCreateDrawEndIfEndSub'/**************************************************'subcreatedrawgoeshere:'**************************************************/SubCreateDraw(FilePathAsString)DimSwModelAsDimSwSaveAsDimSwDrawAsDimSwChildCompAsDimSwChildCmp2AsDimSwConfAsDimSwRootCompAsDimCurSheetAsDimSwViewAsDimvChildCompAsVariantDimSheetArrAsStringDimSpadStrAsStringDimAsmFileAsStringDimDrawFielAsStringDimDrawDirAsStringDimDrawTempAsStringDimDeStringAsStringDimtmpStringAsStringDimsTmpStrAsStringDimFileTypeAsStringDimSheetNameAsStringDimViewNameAsStringDimsFileNameAsStringDimFileAsStringDimiAsLongDimisOkAsBooleanDimwGoodAsIntegerAsmFile=FilePathDrawDir=DrawPathName'foreasytouseispecifiedatemplatefileDrawTemp=&"\lang\chinese-simplified\Tutorial\"SheetArr="ardenmakeastupidwaybutrunsok"SetSwApp=CreateObject("")IfSwAppIsNothingThenMsgBox"创建SW对象失败"ExitSubEndIfSetSwModel=(AsmFile,2,0,"",nErrors,nWarnings)IfSwModelIsNothingThenMsgBox"打开装配体失败"ExitSubEndIf'创建drawdoc文档DrawTempSetSwDraw=(DrawTemp,2,,IfSwDrawIsNothingThenMsgBox"创建工程图失败"ExitSubEndIfSetCurSheet='插入模型到预定义视图isOk=(AsmFile)IfisOk=FalseThenMsgBox"插入装配体三视图失败"EndIfDeString=tmpString=Left(DeString,InStrRev(DeString,".")-1)IfInStrRev(tmpString,"",-1,vbTextCompare)<=0ThenDeString=tmpString'notice:needtowritemoretomodifyitElseDeString=Replace(tmpString,Left(tmpString,InStrRev(tmpString,"")-1),"")EndIf'sheet名称设定规则:模型名称(不包括物料编码)+三视图(DeString+"三视图")SetSwView==True'设置为图纸比例doesitworksright'''''"thesheetnameis:"&destring+"三视图"'savedrawfilebutdonotopenitwGood=(DrawDir+tmpString+".SLDDRW",0,False,True)'''"saveasmdrawfilestate:"&wgood'''DrawDir&"\"&tmpstring&".SLDDRW"IfwGood=0ThenMsgBox"保存三视图失败"EndIf'>>>'怎样才能不覆盖保存'thentraverseallpartfilenextlevelinsertsheetonthisdraw'已经将装配体的三视图插入draw文件了'要遍历装配体:part部分',True,nErrorsSetSwConf='needtochangeSwModeltotraverse'''"activeconfigurationis:"&SetSwRootComp='''"rootcompoentis:"&vChildComp='开始对装配体下一层组建进行遍历,忽略子装配体,只将本身和子零件出图-''beginloop-'Fori=0ToUBound(vChildComp)'''"enterloop0to"&UBound(vChildComp)SetSwChildComp=vChildComp(i)'-Ifi<UBound(vChildComp)ThenSetSwChildCmp2=vChildComp(i+1)ElseSetSwChildCmp2=vChildComp(0)EndIf'''"subcomp"&i&"nameis:"&FileType=UCase(Right,6))IfFileType="SLDPRT"Then'如果是零件,插入图纸IfSwDrawIsNothingThen'''"SwDrawisnothing"Else'''"SwDrawhas:"&&"sheets"EndIf''-1)''"2:"&stmpstrsTmpStr=Right(sTmpStr,Len(sTmpStr)-InStrRev(sTmpStr,"\"))''"3:"&stmpstrIfInStr(sTmpStr,"")<=0ThenSheetName=LTrim(sTmpStr)ElseSheetName=LTrim(Replace(sTmpStr,Left(sTmpStr,InStrRev(sTmpStr,"")-1),""))EndIf'得到图纸名称lddrt",2,2,""

温馨提示

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

评论

0/150

提交评论