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

在网上看到的:在WIN7 SW2014下现在不能用,看看改了能用不烦请懂的人指点下,并将文件上传到群里来:SolidWorks 生成工程图纸程序下面代码是工程图助手中的“生成工程图”模块内容。
它按照我们的图纸存储规范,把一个产品的每个装配体都生成一个solidworks的工程图文件。
面对一个问题,我们在试图使用VBA来改善工作的时候,可以参考下面的思路来进行,当然,这也只是个人的一些经验之说,并不是最好的工作方式:首先我们需要了解实际工作情况,发现问题所在:工艺人员在试图提高solidworks工作效率的时候提到了使用SolidWorks Task Scheduler来自动出图纸的方法(具体方法就不讨论了)。
大家经过一段时间的使用后发现,使用SolidWorks Task Scheduler有一定的局限性,需要问题在于,它将每个solidworks文件—包括零件、装配体—都生成了一个工程图文件。
然而这样得到的结果便是一个零部件稍多的产品,将会自动生成很多的工程图文件,不便于管理。
我们的习惯是,按照装配体来出图纸,将一个装配体中的零部件在一个工程图文件中表示。
这样表达清楚而且便于管理。
恩,这就是现实的问题所在。
然后,我们要考虑可行性:思考了SolidWorks Task Scheduler的实现,发现使用VBA在技术方面可以实现此类功能,并且有一定的规律可以遵守而不需要太多的人为判断就可以达到要求。
这里插一句,在使用SolidWorks Task Scheduler 时我发现了一个选项:备份任务文件,而这个任务文件上所记录的正式一段使用VBA写的宏代码。
接下来,需要现场调研确定需求目标:在了解了solidworks使用相应的规范和工艺员在实际工作中的要求后我们对问题目标有了一个比较明确的概念。
我们要做的项目需要完成这样的工作:它针对一个产品中的每个装配体生成一个工作图文件,每本工程图文件中需要一张装配体的三视图和其每个子零件的三视图图纸。
Solidworks工程图教程-从零件装配体制作工程图

Solidworks⼯程图教程-从零件装配体制作⼯程图
Solidworks⼯程图教程
——从零件/装配体制作⼯程图
学习⽬标:
●从零件/装配体制作⼯程图
曹顺辉
2017-08-04
除了采⽤“新建”命令来创建⼀个新的⼯程图⽂件外,还可以在零件或装配体环境中选择“从零件/装配体制作⼯程图”命令,直接创建⼯程图,本⽂讲解从零件/装配体创建⼯程图的⼀般步骤。
1、⾸先打开⼀个零件图或者装配体⽂件,如下图1所⽰:
图1
2、选择下拉菜单“⽂件”-“从零件制作⼯程图”命令。
如图2所⽰。
图2
在弹出的“新建solidworks⽂件”对话框中选择合适的⼯程图模板,并确定,如图3所⽰。
然后进⼊⼯程图环境,且在图形区域右侧的任务窗格中显⽰图4所⽰的“视图调⾊板”对话框。
图3
图4
3、从调⾊板中插⼊视图。
确认“视图调⾊板”中的“⾃动开始投影视图”
的复选框处于选中状态,如图5所⽰。
选中“视图调⾊板”中的某⼀视图作为主视图,拖动⾄图形区域放置(如图6所⽰),通过⾃动投影来⽣成俯视图和左视图,如图7所⽰。
图5
图6
图7。
SolidWorks宏编程的基础知识与技巧

SolidWorks宏编程的基础知识与技巧SolidWorks是一款广泛应用于工程设计和制造的计算机辅助设计软件。
宏编程是SolidWorks中的一项强大功能,通过使用宏,可以自动化设计过程,提高工作效率,并且可以根据用户的特定需求进行定制开发。
本文将介绍SolidWorks宏编程的基础知识与技巧,帮助初学者快速入门。
1. 什么是SolidWorks宏编程?SolidWorks宏是一系列的命令和操作,可以通过VBA(Visual Basic for Applications)编写,用于自动化SolidWorks软件的功能。
宏可以运行在SolidWorks环境中,并且可以与CAD模型进行交互,实现设计自动化和定制开发。
2. 如何创建宏?在SolidWorks中,可以使用宏记录器来记录用户的操作并生成相应的宏代码。
打开SolidWorks软件,选择“工具”菜单下的“宏”选项,然后点击“记录”按钮开始录制宏。
当完成相关操作后,点击“结束录制”按钮,系统将自动生成相应的宏代码。
3. 如何编辑宏代码?通过VBA编辑器可以对宏代码进行编辑和修改。
打开SolidWorks软件,在宏编辑器中,可以查看和修改宏的代码。
VBA编辑器提供了丰富的功能和语法提示,可轻松编写和修改宏代码。
4. SolidWorks宏编程的基本语法宏编程主要使用VBA语言,以下是一些常用的基本语法:- 变量:使用“Dim”关键字来声明变量,例如:Dim i As Integer- 循环结构:使用“For...Next”和“Do...Loop”来实现循环功能- 条件判断:使用“If...Then...Else”和“Select...Case”来进行条件判断- 函数和过程:使用“Function”和“Sub”来定义函数和过程- 对象操作:使用“Set”关键字来引用和操作SolidWorks中的对象5. SolidWorks宏编程的常用应用- 批量操作:通过编写宏来批量执行某项操作,如批量导出图纸或模型数据等。
使用VBA进行solidworks开发指南

目录第1章概述 (2)1.1内容简介 (2)1.2名词解释 (2)1.3预备知识 (3)第2章录制、编辑、运行宏 (3)2.1录制、编辑、运行宏基本步骤: (3)2.2一些基本的建议: (3)第3章代码格式及帮助信息 (5)3.1代码格式: (5)3.2获得帮助: (6)第4章常用对象模型 (7)4.1综述: (7)4.2SldWorks.SldWorks : (8)4.3SldWorks.ModelDoc2: (8)4.4SldWorks.PartDoc、SldWorks.AssemblyDoc、SldWorks.DrawingDoc: (9)4.5SldWorks.feature、SldWorks.Sketch : (9)第5章零件 PartDoc (9)5.1综述: (9)5.2选择对象的话题: (10)5.3访问并修改特征: (12)5.4草图的话题: (17)第6章装配体 (18)6.1综述: (18)6.2组件的话题:插入零部件到装配体 (19)6.3配合的话题:在装配体中添加配合 (22)6.4由于说到参考,顺便讨论一下配合参考: (26)第7章工程图 (28)7.1综述: (28)7.2注释的话题: (29)7.3生成图纸的话题:并讨论如何解决实际问题 (30)第8章总结: (40)第1章概述1.1内容简介Solidworks在提供了强大的三维建模功能的同时,也为使用者提供了开放的应用程序编程接口(API),通过调用这些API,我们可以将solidworks中一些重复单调或者规则明确的操作使用程序语言描述,通过简单的人机交互,让计算机自己来完成此类工作。
掌握了此类本领,可以在以后的工作中,开阔自己的视野,更加深入的了解软件本身工作的原理,并且,改善自己的工作,提高工作效率和质量。
本文旨在总结作者工作中获得的经验,专注于solidworks软件本身特点,文章中示例的代码基本上使用了vb语言描述,选择vb语言是因为其语法简单易懂,并且和应用程序间有很明朗的接口不需要再学习其它技术(如果使用c++,可能需要读者拥有COM知识)。
solidworks出工程图教程

solidworks出工程图教程SolidWorks是一款广泛应用于机械设计和CAD工程的软件。
它具有强大的建模功能,能够帮助工程师轻松创建和修改复杂的三维模型。
在这个教程中,我们将向您展示如何使用SolidWorks制作工程图。
让我们开始吧!第一步是打开SolidWorks软件。
一旦软件打开,您将看到一个空白的三维空间,这是您后续工作的舞台。
接下来,我们需要选择合适的视图模式。
SolidWorks提供了多种不同的视图模式,如正投影、透视和截面视图等。
选择任何一种视图模式都取决于您的设计需求。
我们将以正投影视图作为例子。
在“视图”菜单下,选择“正视图”并选择“前视图”。
然后点击“确定”。
此时,您将看到屏幕上出现了一个前视图的二维投影。
接下来,我们需要添加尺寸和标注。
在工程图中,尺寸和标注是非常重要的,它们描述了模型的尺寸和特征。
您可以通过在“注释”菜单中选择“尺寸”工具来添加尺寸。
选择要添加尺寸的两个点,然后单击鼠标左键。
然后,根据需要调整尺寸的位置和大小。
在添加完尺寸后,您可以使用添加呼吸或表格等其他注释工具对模型进行更详细的标注。
将鼠标悬停在“注释”菜单上,然后选择适当的工具进行添加。
除了标注,工程图还需要添加标题和图例。
这可以通过在工程图的适当位置添加文本和图形来实现。
您可以使用SolidWorks中的“注释”工具栏来添加这些元素。
完成标注和注释后,您可以选择文件的输出格式。
在SolidWorks中,您可以将工程图导出为多种格式,如PDF或DWG。
选择适当的格式并保存文件。
这只是SolidWorks创建工程图的基本步骤。
实际上,每个工程图都有其独特的需求和规范,您可能需要使用更高级的功能和工具来满足这些需求。
但是,通过这个简单的教程,您可以开始了解SolidWorks的基本工程图制作过程。
总结一下,SolidWorks是一款功能强大的软件,可以帮助工程师轻松创建和修改复杂的三维模型。
通过选择适当的视图模式,添加标注和注释,并导出工程图,您可以使用SolidWorks制作出详细和精确的工程图。
solidworks出工程图模板

solidworks出工程图模板
第一步(零件模板)、新建零件修改“文档属性”和“文件属性”。
文档属性:根据要求或者自己习惯修改注释尺寸的样式等。
文件属性:用于链接工程图中标题栏的相关参数,具体内容根据标题栏需要修改。
第二步(零件模板)、随意画一个模型(后续用于链接属性),保存零件,保存零件模板。
第三步(装配体模板)、参照第一步,保存装配体模板。
第四步(工程图模板)、第二步模型用默认制作工程图(可以是任意图纸大小),随意做一个投影视图,右键点击空白位置编辑图纸格式,将系统模板的标题栏删除,画出想要的标题栏,并在每个具体位置插入注释调整好字体大小及位置等属性,选择右侧链接到属性,按图示选择所填的属性。
(具体选择什么属性,看标题栏相应位置需要填写什么属性。
)
第五步(工程图模板)、选中制作的标题栏及注释,将其制作为“块”(用于后续不同图纸格式的模板制作),并保存块。
第六步(工程图模板)、爆炸块,点击“标题块”字段,选中所有注释。
(这一步是为了后续制作工程图的时候可以直接双击标题栏某一属性直接进行修改)
第七步(工程图模板)、保存工程图模板、保存图纸格式。
第八步(工程图模板)、选择其他大小的工程图图纸,将系统模板的标题栏删除,插入块(即之前保存的块),放置合适的位置。
第九步(工程图模板)、重复第六步和第七步,直至做完其它图纸大小的模板。
solidworks减速器装配体工程图的生成(原创)

减速器装配体工程图的生成【学习目标】学习装配体工程图的生成,材料明细表的制作,零件序号的标注。
【重点】材料明细表的制作,零件序号的标注。
【难点】材料明细表的制作,零件序号的标注。
图 9-1利用项目8(图8-1)创建的 “减速器装配体.SLDASM”,生成如图9-1所示的工程图。
(1)新建工程图(2)设置图纸属性(3)生成三视图(4)在主视图中添加局部剖视图(5)在俯视图中添加局部剖视图(6)插入材料明细表(7)添加零件序号(1)新建工程图菜单【文件】--【新建】--【工程图】(2)设置【图纸属性】在设计树中右键单击【图纸1】,选择【图纸属性】,进入【图纸属性】设置对话框,如图6-2,根据零件尺寸,设置【图纸比例】:1:4,【图纸格式大小】中选择标准图纸:A1(GB),其他采用默认设置。
(3)生成三视图在【视图布局】工具栏中,选择【模型视图】,在【模型视图】对话框中单击【浏览】按钮,找到“减速器装配体.SLDASM”文件,单击【打开】,返回到【模型视图】对话框。
勾选【预览】,在标准视图中选择【下视图】作为主视图,向右拖动鼠标,在合适的位置单击左键生成右视图,然后向下拖动鼠标,在合适的位置单击左键,生成俯视图。
如图9-2所示。
(4)在主视图中添加断开的剖视图在主视图中螺栓连接处添加局部剖视图。
在【视图布局】工具栏中,选择【断开的剖视图】,在要剖切的位置绘制一条封闭的样条曲线,如图9-3所示。
在出现的【剖面范围】对话框中,【不包括零部件/筋特征】中选择螺栓、螺母和垫片,如图9-4所示,单击【确定】后出现【断开的剖视图】对话框,如图9-5所示,勾选【预览】选项,【深度参考】选择俯视图中对应剖切位置处的螺栓顶圆边线,剖切结果如图9-6所示。
图 9-2 图 9-3图 9-4 图 9-5(5)在俯视图中添加局部剖视图绘制如图9-7所示的封闭的样条曲线,选中该曲线,选择【断开的剖视图】命令,系统弹出【剖面视图】属性管理器,选择不包括的零部件,在图中选择高速轴,低速轴,螺栓作为不剖零件,选定主视图中下箱体和上箱盖结合面处的边线为参考剖切深度,剖切结果如图9-8所示。
solidwork中由零件转换为工程制图步骤

第一步首先打开已经建好的零件,然后选择文件选项中的从零件到工程图选项
第二步新建模板单击确定
第三步根据个人需要选择合适的纸张一般选为A4 这里选为A4
第四步将右端不同角度的视图拖动到左端的纸张当中并点击键盘上的ESC键及时退出拖动操作
拖动完成后如下图所示
第五步鼠标左键点击图纸中的视图,在图纸左端出现工程图视图对话框,然后根据自己的需要选择,选择不同的正方体显示的零件的隐藏的线条,可以通过点击发现不同也可以选择不同的比例。
第六步显示尺寸点击注解并且点击注解中的模型项目选项打开模型项目对话框并勾选将项目输入到所有视图选项如图所示
里是以米来显示的,所以需要修改为所需要的单位
第七步选择需要的单位点击工具并选择其中的选项打开选项对话框并选择文档属性——》单位——>毫米。
若是已经是毫米需要先选择厘米或者其他单位再选择毫米才会生效最后选择确定即可如图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在网上看到的:在WIN7 SW2014下现在不能用,看看改了能用不?烦请懂的人指点下,并将文件上传到群里来:SolidWorks 生成工程图纸程序下面代码是工程图助手中的“生成工程图”模块内容。
它按照我们的图纸存储规范,把一个产品的每个装配体都生成一个solidworks的工程图文件。
面对一个问题,我们在试图使用VBA来改善工作的时候,可以参考下面的思路来进行,当然,这也只是个人的一些经验之说,并不是最好的工作方式:首先我们需要了解实际工作情况,发现问题所在:工艺人员在试图提高solidworks工作效率的时候提到了使用SolidWorks Task Scheduler来自动出图纸的方法(具体方法就不讨论了)。
大家经过一段时间的使用后发现,使用SolidWorks Task Scheduler有一定的局限性,需要问题在于,它将每个solidworks文件—包括零件、装配体—都生成了一个工程图文件。
然而这样得到的结果便是一个零部件稍多的产品,将会自动生成很多的工程图文件,不便于管理。
我们的习惯是,按照装配体来出图纸,将一个装配体中的零部件在一个工程图文件中表示。
这样表达清楚而且便于管理。
恩,这就是现实的问题所在。
然后,我们要考虑可行性:思考了SolidWorks Task Scheduler的实现,发现使用VBA在技术方面可以实现此类功能,并且有一定的规律可以遵守而不需要太多的人为判断就可以达到要求。
这里插一句,在使用SolidWorks Task Scheduler时我发现了一个选项:备份任务文件,而这个任务文件上所记录的正式一段使用VBA写的宏代码。
接下来,需要现场调研确定需求目标:在了解了solidworks使用相应的规范和工艺员在实际工作中的要求后我们对问题目标有了一个比较明确的概念。
我们要做的项目需要完成这样的工作:它针对一个产品中的每个装配体生成一个工作图文件,每本工程图文件中需要一张装配体的三视图和其每个子零件的三视图图纸。
并将它们存储在和“图纸”文件夹(存放solidworks模型)同级的目录下的“工程图”文件夹里。
做好了准备工作,即可开始写程序。
将需求的内容转化成软件问题描述,并描述其大致方法:1、得到产品文件的每个装配体:我们可以通过文件夹中文件的遍历,按照后缀名“.sldasm”来得到一个目录下所有的装配体;也可以通过遍历一个产品总装配体的组件来得到每一个子装配体模型。
实际的编码中我们选择了后者,因为它虽然给编写代码结构带来了复杂度,但是正确性和稳定性都要好过前者。
装配体的组件是一个树型结构,使用递归式是比较灵活的方法,前面章节也已经介绍过。
2、生成工程图并插入零件的模型三视图:SolidWorks Task Scheduler使用预定义的模型视图来完成自动生成的功能,但是,一旦需要在原有的图纸上插入新图纸时,就不能够继承图纸模版的预定义试图了。
所以需要使用CreateDrawViewFromModelView2和CreateUnfoldedViewAt3来替代。
一切准备完毕后就可以设计程序框架进行编码了:这里定义了三个过程,main、traverseasm、createdraw。
它们的定义和完成的作用如下:Main():模块主函数没有参数和返回值,它得到当前打开装配体的路径、设置“工程图文件夹路径”、运行traverseasm过程。
Traverseasm(filepath as string):此过程接受一个装配体的存储路径字符串参数,完成装配体的递归遍历工作,得到每一个装配体,并让每一个装配体都作为参数运行createdraw过程。
Createdraw(filepath as string): 此过程接受一个装配体的存储路径字符串参数,生成此装配体的工程图。
'/************************************************************'drawcreator :根据装配体生成工程图'main:' get opened asm model infomation:' filepathname' drawpathname' make dir path is drawpathname' call traverseasm with argument filepathname''traverseasm:' for itself call createdraw with argument itself' 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'定义部分:Dim SwApp As SldWorks.SldWorksDim DrawPathName As StringDim File As StringDim nErrors As LongDim nWarnings As 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 = SwApp.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 DrawPathNameDebug.Print File'should 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 traverseasm goes here :''*************************Sub TraverseAsm(FilePath As String) 'Traverse Asm 遍历ASM文件Dim SwModel2 As SldWorks.ModelDoc2Dim SwConf2 As SldWorks.ConfigurationDim SwRootComp2 As ponent2Dim SwChildComp2 As ponent2Dim vChildComp2 As VariantDim FileType2 As StringDim n As LongSet SwApp = CreateObject("SldWorks.Application")If SwApp Is Nothing ThenMsgBox "创建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 traverseSet SwRootComp2 = SwConf2.GetRootComponentvChildComp2 = 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.GetPathNameIf 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 ponent2Dim SwChildCmp2 As ponent2Dim SwConf As SldWorks.ConfigurationDim SwRootComp As ponent2Dim CurSheet As SldWorks.SheetDim SwView As SldWorks.ViewDim vChildComp As VariantDim SheetArr As StringDim SpadStr As StringDim AsmFile As StringDim DrawFiel As StringDim DrawDir As StringDim DrawTemp As StringDim DeString As StringDim tmpString As StringDim sTmpStr As StringDim FileType As StringDim SheetName As StringDim ViewName As StringDim sFileName As StringDim File As StringDim i As LongDim isOk As BooleanDim wGood As IntegerAsmFile = FilePathDrawDir = DrawPathName'for easy to use i specified a template fileDrawTemp = SwApp.GetExecutablePath &"\lang\chinese-simplified\Tutorial\auto.DRWDOT"SheetArr = "ardenmakeastupidwaybutrunsok"Set SwApp = CreateObject("SldWorks.Application")If SwApp Is Nothing ThenMsgBox "创建SW对象失败"Exit SubEnd IfSet SwModel = SwApp.OpenDoc6(AsmFile, 2, 0, "", nErrors, nWarnings) If SwModel Is Nothing ThenMsgBox "打开装配体失败"Exit SubEnd IfSwModel.EditRebuild3'创建drawdoc文档Debug.Print DrawTempSet SwDraw = SwApp.NewDocument(DrawTemp, 2, 0.2, 0.4)If SwDraw Is Nothing ThenMsgBox "创建工程图失败"Exit SubEnd IfSet CurSheet = SwDraw.GetCurrentSheet'插入模型到预定义视图isOk = SwDraw.InsertModelInPredefinedView(AsmFile)If isOk = False ThenMsgBox "插入装配体三视图失败"End IfDeString = SwModel.GetTitletmpString = Left(DeString, InStrRev(DeString, ".") - 1)If InStrRev(tmpString, " ", -1, vbTextCompare) <= 0 ThenDeString = tmpString' notice : need to write more to modify itElseDeString = Replace(tmpString, Left(tmpString, InStrRev(tmpString, " ") - 1), "")End If'sheet名称设定规则:模型名称(不包括物料编码)+三视图CurSheet.SetName (DeString + "三视图")Set SwView = SwDraw.GetFirstVieweSheetScale = True '设置为图纸比例 does it works right?''debug.print eSheetScale'''debug.print "the sheet name is : " & destring + "三视图"'save draw file but do not open itwGood = SwModel.SaveAs2(DrawDir + tmpString + ".SLDDRW", 0, False, True)'''debug.print "save asm draw file state:" & wgood'''debug.print DrawDir & "\" & tmpstring & ".SLDDRW"If wGood = 0 ThenMsgBox "保存三视图失败"End If'>>>'怎样才能不覆盖保存?'then traverse all part file next level insert sheet on this draw '已经将装配体的三视图插入draw文件了'要遍历装配体:part部分'SwApp.ActivateDoc2 SwModel.GetPathName, True, nErrorsSet SwConf = SwModel.GetActiveConfiguration 'need to change SwModel to traverse'''debug.print "activeconfiguration is :" & Set SwRootComp = SwConf.GetRootComponent'''debug.print "rootcompoent is :" & vChildComp = SwRootComp.GetChildren'开始对装配体下一层组建进行遍历,忽略子装配体,只将本身和子零件出图-''begin loop-'For i = 0 To UBound(vChildComp)'''debug.print "enter loop 0 to " & UBound(vChildComp)Set SwChildComp = vChildComp(i)'-If i < UBound(vChildComp) ThenSet SwChildCmp2 = vChildComp(i + 1)ElseSet SwChildCmp2 = vChildComp(0)End If'''debug.print "sub comp " & i & " name is : " & FileType = UCase(Right(SwChildComp.GetPathName, 6))If FileType = "SLDPRT" Then ' 如果是零件,插入图纸If SwDraw Is Nothing Then'''debug.print "SwDraw is nothing"Else'''debug.print "SwDraw has :" & SwDraw.GetSheetCount & "sheets"End If''// 得到图纸名称sTmpStr = SwChildComp.GetPathName''debug.print "1: " & stmpstrsTmpStr = Left(sTmpStr, InStrRev(sTmpStr, ".") - 1)''debug.print "2: " & stmpstrsTmpStr = Right(sTmpStr, Len(sTmpStr) - InStrRev(sTmpStr, "\")) ''debug.print "3: " & stmpstrIf InStr(sTmpStr, " ") <= 0 ThenSheetName = LTrim(sTmpStr)ElseSheetName = LTrim(Replace(sTmpStr, Left(sTmpStr,InStrRev(sTmpStr, " ") - 1), ""))End If' 得到图纸名称//Debug.Print "sheetname:" & SheetNameDebug.Print "SheetArr" & SheetArr' 忽略镜像零部件If Not Mid(SheetName, 1, 2) = "镜向" Then'//-如果重复跳过If Not SwChildComp.GetPathName =SwChildCmp2.GetPathName Then'//-也是判断有没有这个表If InStr(1, SheetArr, SheetName, vbTextCompare) = 0 Then' If Not InStrRev(1, SheetArr, sheetname, vbTextCompare) = 0 ThenSwDraw.NewSheet3 SheetName, 12, 12, 1#, 10#, True, "美克A4横.slddrt", 2, 2, ""SheetArr = SheetArr & SheetNameDebug.Print "add" & SheetArrSwDraw.ActivateSheet SheetNameSet CurSheet = SwDraw.GetCurrentSheetCurSheet.SheetFormatVisible = True'CurSheet.SetTemplateName DrawTemp'''debug.print "part fullname is :" & SwChildComp.GetPathName'SwDraw.InsertModelInPredefinedView SwChildComp.GetPathName'//- 创建三视图-Set SwView =SwDraw.CreateDrawViewFromModelView2(SwChildComp.GetPathName, "*前视", 0.07954434782609, 0.09376565217391, 0)'''debug.print "viewname is :" & ViewName = '''debug.print "SwView name is :" & viewnameSwDraw.Extension.SelectByID2 ViewName, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0SwDraw.ActivateView ViewNameSet SwView = SwDraw.CreateUnfoldedViewAt3(0.2224917391304,0.09376565217391, 0, 0) '上视SwDraw.ClearSelection2 TrueSwDraw.Extension.SelectByID2 ViewName, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0Set SwView = SwDraw.CreateUnfoldedViewAt3(0.07954434782609, 0.1534239130435, 0, 0) '右视SwDraw.ClearSelection2 TrueSwDraw.Extension.SelectByID2 ViewName, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0Set SwView = SwDraw.CreateUnfoldedViewAt3(0.1636082608696,0.1778295652174, 0, 0) '斜视SwDraw.ClearSelection2 True'SwDraw.ActivateView viewname'SwDraw.Extension.SelectByID2 SwView.GetName2, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0If Not SwView Is Nothing Then''debug.print "SwView name : " & SwView.GetName2SwView.SetDisplayMode3 False, 3, False, True ' 隐藏线可见''debug.print "scale : " & SwView.ScaleRatio(1)Else''debug.print "SwView is nothing "End IfIf StatofanNo = True Then'insert annotationSwDraw.InsertModelAnnotations3 0, 1605656, True, True, False, False '斜视图为带边线上色Else'donothingEnd If' 创建三视图//End If'//-也是判断有没有这个表End If'//如果重复跳过-End If'End IfSwDraw.ForceRebuild3 FalseNext i ''-end loopSwDraw.ForceRebuild3 FalseSet SwSave = SwDraw'isok = SwSave.SaveAs4(SwSave.GetTitle, 0, 0, nErrors, nWarnings) sFileName = DrawDir + tmpString + ".SLDDRW"isOk = SwSave.SaveAs2(sFileName, 0, False, True)'''debug.print "save " & sfilename & " state : " & isokIf isOk = False Then''debug.print "保存" & sfilename & "失败"End IfSwApp.CloseDoc SwSave.GetTitleSet SwDraw = NothingEnd Sub。