版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在网上看到的:在WIN7SW2014F现在不能用,看看改了能用不?烦请懂的人指点下,并将文件上传到群里来:SolidWorks生成工程图纸程序下面代码是工程图助手中的“生成工程图”模块内容。它按照我们的图纸存储规范,把一个产品的每个装配体都生成一个solidworks的工程图文件。面对一个问题,我们在试图使用VBA来改善工作的时候,可以参考下面的思路来进行,当然,这也只是个人的一些经验之说,并不是最好的工作方式:首先我们需要了解实际工作情况,发现问题所在:工艺人员在试图提高solidworks工作效率的时候提到了使用SolidWorksTaskScheduler来自动出图纸的方法(具体方法就不
2、讨论了)。大家经过一段时间的使用后发现,使用SolidWorksTaskScheduler有一定的局限性,需要问题在于,它将每个solidworks文件一包括零件、装配体一都生成了一个工程图文件。然而这样得到的结果便是一个零部件稍多的产品,将会自动生成很多的工程图文件,不便于管理。我们的习惯是,按照装配体来出图纸,将一个装配体中的零部件在一个工程图文件中表示。这样表达清楚而且便于管理。恩,这就是现实的问题所在。然后,我们要考虑可行性:思考了SolidWorksTaskScheduler的实现,发现使用VBA在技术方面可以实现此类功能,并且有一定的规律可以遵守而不需要太多的人为判断就可以达到要求
3、。这里插一句,在使用SolidWorksTaskScheduler时我发现了一个选项:备份任务文件,而这个任务文件上所记录的正式一段使用VBA写的宏代码。接下来,需要现场调研确定需求目标:在了解了solidworks使用相应的规范和工艺员在实际工作中的要求后我们对问题目标有了一个比较明确的概念。我们要做的项目需要完成这样的工作:它针对一个产品中的每个装配体生成一个工作图文件,每本工程图文件中需要一张装配体的三视图和其每个子零件的三视图图纸。并将它们存储在和“图纸”文件夹(存放solidworks模型)同级的目录下的“工程图”文件夹里。做好了准备工作,即可开始写程序。将需求的内容转化成软件问题描
4、述,并描述其大致方法:1、得到产品文件的每个装配体:我们可以通过文件夹中文件的遍历,按照后缀名”.sldasm”来得到一个目录下所有的装配体;也可以通过遍历一个产品总装配体的组件来得到每一个子装配体模型。实际的编码中我们选择了后者,因为它虽然给编写代码结构带来了复杂度,但是正确性和稳定性都要好过前者。装配体的组件是一个树型结构,使用递归式是比较灵活的方法,前面章节也已经介绍过。2、生成工程图并插入零件的模型三视图:SolidWorksTaskScheduler使用预定义的模型视图来完成自动生成的功能,但是,一旦需要在原有的图纸上插入新图纸时,就不能够继承图纸模版的预定义试图了。所以需要使用Cr
5、eateDrawViewFromModelView2和CreateUnfoldedViewAt3来替代。一切准备完毕后就可以设计程序框架进行编码了:这里定义了三个过程,main、traverseasm、createdraw。它们的定义和完成的作用如下:Main():模块主函数没有参数和返回值,它得到当前打开装配体的路径、设置”工程图文件夹路径”、运行traverseasm过程。Traverseasm(filepathasstring):此过程接受一个装配体的存储路径字符用参数,完成装配体的递归遍历工作,得到每一个装配体,并让每一个装配体都作为参数运行createdraw过程。Createdra
6、w(filepathasstring):此过程接受一个装配体的存储路径字符串参数,生成此装配体的工程图。、产*drawcreator:根据装配体生成工程图main:getopenedasmmodelinfomation:filepathnamedrawpathnamemakedirpathisdrawpathnamecalltraverseasmwithargumentfilepathnametraverseasm:foritselfcallcreatedrawwithargumentitselftraversetheasmmodelcomponentforeachsubasmmodel:ca
7、lltraverseasmcreatedraw:createadrawdocwithgivenDrawTemplateinserteachsubpartmodelcomponentasheet*/OptionExplicit,定义部分:AsSldWorks.SldWorksDimSwAppDimDrawPathNameAsStringDimFileAsStringDimnErrorsAsLongDimnWarningsAsLongDimStatofanNoAsBooleanDimPosAsInteger|/*submaingoeshere:I*SubMain()OnErrorResumeNex
8、tDimActModelAsSldWorks.ModelDoc2DimYesOrNoAsVbMsgBoxResultSetSwApp=CreateObject(SldWorks.Application)SetActModel=SwApp.ActiveDocIfActModelIsNothingThenMsgBox请先打开装配体EndIf,得到装配体文件路径File=ActModel.GetPathName,得到工程图保存路径DrawPathName=Left(File,InStrRev(File,)-1)DrawPathName=Left(DrawPathName,InStrRev(DrawP
9、athName,)DrawPathName=DrawPathName+工程图创建文件夹MkDir(DrawPathName)调试信息:Debug.PrintDrawPathNameDebug.PrintFileshouldisetallobjectnothing?SetActModel=NothingSetSwApp=NothingYesOrNo=MsgBox(需要自动在零件工程图中插入模型项目么?,vbOKCancel,提示)IfYesOrNo=vbOKThenStatofanNo=TrueElseStatofanNo=FalseEndIfSwApp.Visible=False调用函数遍历装
10、配体组件TraverseAsmFileSwApp.Visible=TrueEndSub/*subtraverseasmgoeshere:*SubTraverseAsm(FilePathAsString)TraverseAsm遍历ASMfc件DimSwModel2AsSldWorks.ModelDoc2DimSwConf2AsSldWorks.ConfigurationDimSwRootComp2AsSldWorks.Component2DimSwChildComp2AsSldWorks.Component2DimvChildComp2AsVariantDimFileType2AsStringD
11、imnAsLongSetSwApp=CreateObject(SldWorks.Application)IfSwAppIsNothingThenMsgBox创建SW寸象失败ExitSubEndIfSetSwModel2=SwApp.OpenDoc6(FilePath,2,0,nErrors,nWarnings)fileopengoodIfSwModel2IsNothingThenMsgBox加载装配体失败ExitSubEndIfSetSwConf2=SwModel2.GetActiveConfigurationneedtochangeSwModeltotraverseSetSwRootComp
12、2=SwConf2.GetRootComponentvChildComp2=SwRootComp2.GetChildrenForn=0ToUBound(vChildComp2)SetSwChildComp2=vChildComp2(n)FileType2=UCase(Right(SwChildComp2.GetPathName,6)IfFileType2=SLDASMThenTraverseAsmSwChildComp2.GetPathNameEndIfNextDebug.PrintSwModel2.GetPathNameIfNotMid(SwModel2.GetTitle,1,2)=镜向Th
13、enCreateDrawSwModel2.GetPathNameEndIfEndSub、产*subcreatedrawgoeshere:*/SubCreateDraw(FilePathAsString)DimSwModelAsSldWorks.ModelDoc2DimSwSaveAsSldWorks.ModelDoc2DimSwDrawAsSldWorks.DrawingDocDimSwChildCompAsSldWorks.Component2DimSwChildCmp2AsSldWorks.Component2DimSwConfAsSldWorks.ConfigurationDimSwRo
14、otCompAsSldWorks.Component2DimCurSheetAsSldWorks.SheetDimSwViewAsSldWorks.ViewDimvChildCompAsVariantDimSheetArrAsStringDimSpadStrAsStringDimAsmFileAsStringDimDrawFielAsStringDimDrawDirAsStringDimDrawTempAsStringDimDeStringAsStringDimtmpStringAsStringDimsTmpStrAsStringDimFileTypeAsStringDimSheetNameA
15、sStringDimViewNameAsStringDimsFileNameAsStringDimFileAsStringDimiAsLongDimisOkAsBooleanDimwGoodAsIntegerAsmFile=FilePathDrawDir=DrawPathNameforeasytouseispecifiedatemplatefileDrawTemp=SwApp.GetExecutablePath&langchinese-simplifiedTutorialauto.DRWDOTSheetArr=ardenmakeastupidwaybutrunsok”SetSwApp=Crea
16、teObject(SldWorks.Application)IfSwAppIsNothingThenMsgBox创建SW寸象失败ExitSubEndIfSetSwModel=SwApp.OpenDoc6(AsmFile,2,0,nErrors,nWarnings)IfSwModelIsNothingThenMsgBox打开装配体失败ExitSubEndIfSwModel.EditRebuild3创建drawdoc文档Debug.PrintDrawTempSetSwDraw=SwApp.NewDocument(DrawTemp,2,0.2,0.4)IfSwDrawIsNothingThenMsg
17、Box创建工程图失败ExitSubEndIfSetCurSheet=SwDraw.GetCurrentSheet插入模型到预定义视图isOk=SwDraw.InsertModelInPredefinedView(AsmFile)IfisOk=FalseThenMsgBox插入装配体三视图失败EndIfDeString=SwModel.GetTitletmpString=Left(DeString,InStrRev(DeString,.)-1)IfInStrRev(tmpString,”,-1,vbTextCompare),怎样才能不覆盖保存?thentraverseallpartfilenex
18、tlevelinsertsheetonthisdraw,已经将装配体的三视图插入draw文件了,要遍历装配体:part部分SwApp.ActivateDoc2SwModel.GetPathName,True,nErrorsSetSwConf=SwModel.GetActiveConfigurationneedtochangeSwModeltotraversedebug.printactiveconfigurationis:&SwConf.NameSetSwRootComp=SwConf.GetRootComponentdebug.printrootcompoentis:&SwRootComp.
19、NamevChildComp=SwRootComp.GetChildren,开始对装配体下一层组建进行遍历,忽略子装配体,只将本身和子零件出图-,beginloopFori=0ToUBound(vChildComp)debug.printenterloop0to&UBound(vChildComp)SetSwChildComp=vChildComp(i)IfiUBound(vChildComp)ThenSetSwChildCmp2=vChildComp(i+1)ElseSetSwChildCmp2=vChildComp(0)EndIfdebug.printsubcomp&i&nameis:&S
20、wChildComp.NameFileType=UCase(Right(SwChildComp.GetPathName,6)IfFileType=SLDPRTThen如果是零件,插入图纸IfSwDrawIsNothingThendebug.printSwDrawisnothingElsedebug.printSwDrawhas:&SwDraw.GetSheetCount&sheetsEndIf”/得到图纸名称sTmpStr=SwChildComp.GetPathNamedebug.print1:&stmpstrsTmpStr=Left(sTmpStr,InStrRev(sTmpStr,.)-1
21、)debug.print2:&stmpstrsTmpStr=Right(sTmpStr,Len(sTmpStr)-InStrRev(sTmpStr,)debug.print3:&stmpstrIfInStr(sTmpStr,)=0ThenSheetName=LTrim(sTmpStr)ElseSheetName=LTrim(Replace(sTmpStr,Left(sTmpStr,InStrRev(sTmpStr,)-1),)EndIf得到图纸名称Debug.Printsheetname:&SheetNameDebug.PrintSheetArr&SheetArr忽略镜像零部件IfNotMid
22、(SheetName,1,2)=镜向Then/-如果重复跳过IfNotSwChildComp.GetPathName=SwChildCmp2.GetPathNameThen/-也是判断有没有这个表IfInStr(1,SheetArr,SheetName,vbTextCompare)=0ThenIfNotInStrRev(1,SheetArr,sheetname,vbTextCompare)=0ThenSwDraw.NewSheet3SheetName,12,12,1#,10#,True,美克A4横.slddrt,2,2,SheetArr=SheetArr&SheetNameDebug.Prin
23、tadd&SheetArrSwDraw.ActivateSheetSheetNameSetCurSheet=SwDraw.GetCurrentSheetCurSheet.SheetFormatVisible=TrueCurSheet.SetTemplateNameDrawTempdebug.printpartfullnameis:&SwChildComp.GetPathNameSwDraw.InsertModelInPredefinedViewSwChildComp.GetPathName/-创建三视图-SetSwView=SwDraw.CreateDrawViewFromModelView2
24、(SwChildComp.GetPathName,*前视,0.07954434782609,0.09376565217391,0)debug.printviewnameis:&SwView.NameViewName=SwView.Namedebug.printSwViewnameis:&viewnameSwDraw.Extension.SelectByID2ViewName,DRAWINGVIEW,0,0,0,False,0,Nothing,0SwDraw.ActivateViewViewNameSetSwView=SwDraw.CreateUnfoldedViewAt3(0.22249173
25、91304,0.09376565217391,0,0)上视SwDraw.ClearSelection2TrueSwDraw.Extension.SelectByID2ViewName,DRAWINGVIEW,0,0,0,False,0,Nothing,0SetSwView=SwDraw.CreateUnfoldedViewAt3(0.07954434782609,0.1534239130435,0,0)右视SwDraw.ClearSelection2TrueSwDraw.Extension.SelectByID2ViewName,DRAWINGVIEW,0,0,0,False,0,Nothing,0SetSwView=SwDraw.CreateUnfoldedViewAt3(0.1636082608696,0.1778295652174
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特岗教师招聘考试《农村教育政策与实践》(乡村振兴视域下农村教育信息化建设)考核试卷
- 2025年互联网行业元宇宙营销水平考试-虚拟城市中的用户社交场景设计与品牌植入考核试卷
- 2026年四川航天职业技术学院单招职业适应性考试必刷测试卷附答案
- 2026年上海建桥学院单招职业适应性测试必刷测试卷附答案
- 芜湖市中医院用药错误防范考核
- 宿迁市人民医院老年心力衰竭急性加重处理考核
- 大兴安岭人民医院绩效考核国考指标解读与冲刺试题
- 2026年徐州工业职业技术学院单招职业技能考试必刷测试卷及答案1套
- 大兴安岭人民医院血管内异物取出考核
- 宣城市中医院早期康复介入考核
- 2025年10月自考00226知识产权法真题及答案
- 餐饮服务员技能培训教材范本
- 标准离婚协议书范本下载
- 【《互联网广告联盟风控体系研究》17000字(论文)】
- GB/T 46199-2025非开挖铺设用球墨铸铁管
- 2025年河南省信阳市公安辅警招聘知识考试题(含答案)
- NB-T 11559.2-2024 水电工程有限元数值分析导则 第2部分:土石坝
- 房地产营销渠道策略指南
- 道路交通运输行业安全管理员专项教育培训
- 化工行业安全事故
- 2025年国防教育知识考试题库及完整答案
评论
0/150
提交评论