使用VBA进行solidworks开发指南.docx

上传人:b****5 文档编号:14488324 上传时间:2023-06-23 格式:DOCX 页数:61 大小:43.34KB
下载 相关 举报
使用VBA进行solidworks开发指南.docx_第1页
第1页 / 共61页
使用VBA进行solidworks开发指南.docx_第2页
第2页 / 共61页
使用VBA进行solidworks开发指南.docx_第3页
第3页 / 共61页
使用VBA进行solidworks开发指南.docx_第4页
第4页 / 共61页
使用VBA进行solidworks开发指南.docx_第5页
第5页 / 共61页
使用VBA进行solidworks开发指南.docx_第6页
第6页 / 共61页
使用VBA进行solidworks开发指南.docx_第7页
第7页 / 共61页
使用VBA进行solidworks开发指南.docx_第8页
第8页 / 共61页
使用VBA进行solidworks开发指南.docx_第9页
第9页 / 共61页
使用VBA进行solidworks开发指南.docx_第10页
第10页 / 共61页
使用VBA进行solidworks开发指南.docx_第11页
第11页 / 共61页
使用VBA进行solidworks开发指南.docx_第12页
第12页 / 共61页
使用VBA进行solidworks开发指南.docx_第13页
第13页 / 共61页
使用VBA进行solidworks开发指南.docx_第14页
第14页 / 共61页
使用VBA进行solidworks开发指南.docx_第15页
第15页 / 共61页
使用VBA进行solidworks开发指南.docx_第16页
第16页 / 共61页
使用VBA进行solidworks开发指南.docx_第17页
第17页 / 共61页
使用VBA进行solidworks开发指南.docx_第18页
第18页 / 共61页
使用VBA进行solidworks开发指南.docx_第19页
第19页 / 共61页
使用VBA进行solidworks开发指南.docx_第20页
第20页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

使用VBA进行solidworks开发指南.docx

《使用VBA进行solidworks开发指南.docx》由会员分享,可在线阅读,更多相关《使用VBA进行solidworks开发指南.docx(61页珍藏版)》请在冰点文库上搜索。

使用VBA进行solidworks开发指南.docx

使用VBA进行solidworks开发指南

 

第1章概述

1.1内容简介

Solidworks在提供了强大的三维建模功能的同时,也为使用者提供了开放的应用程序编程接口(API),通过调用这些API,我们可以将solidworks中一些重复单调或者规则明确的操作使用程序语言描述,通过简单的人机交互,让计算机自己来完成此类工作。

掌握了此类本领,可以在以后的工作中,开阔自己的视野,更加深入的了解软件本身工作的原理,并且,改善自己的工作,提高工作效率和质量。

本文旨在总结作者工作中获得的经验,专注于solidworks软件本身特点,文章中示例的代码基本上使用了vb语言描述,选择vb语言是因为其语法简单易懂,并且和应用程序间有很明朗的接口不需要再学习其它技术(如果使用c++,可能需要读者拥有COM知识)。

Solidworks提供了极其丰富的API,并且有很完善的帮助系统。

我们可以使用MicrosoftVBA编写SolidWorksMacros或者使用其他编程环境编写StandaloneandAdd-inApplications。

(使用visualstudio到.NET都可以)在SW的API帮助中我们可以很明了的查看API调用语法及相关的示例代码。

本文不可能对每一个API进行细致的解释,在后面章节主要指导大家如何使用软件提供的帮助来在需要时得到有用信息的手段。

本文所有API和代码都以solidworks2005sp0.0版本为准。

1.2名词解释

API:

应用编程接口ApplicationProgrammingInterface

对象:

即计算机抽象出来的一种事物,在面向对象的程序设计中它表示由数据和与该数据关联的操作组成的类的具体实现。

属性:

对象所具有的属性,识别及说明对象的特性。

方法:

对象可以使用的对数据的操作。

1.3预备知识

首先我们的读者应该有简单的VB经验。

当然如果没有也可以临时抱佛脚(VB语句是直观易懂的),边看代码边学习。

很好的掌握SW中宏的录制功能多阅读API帮助中的示例代码,是自学的最佳途径(虽然SW的宏录制功能相比EXCEl来说代码不是很清晰)。

其次solidworks软件应该非常熟练,读者应该有使用solidworks实际建模的经验,,这是能够写出良好代码的基础。

否则看到一些对象名称也不能了解它对应了软件的那个功能。

如果英文不够好,请准备及时词典,如金山词霸等。

Solidworks提供的API帮助是纯英文的,solidworks汉化的还不错,不明白为什么不顺便把API帮助也翻过来。

准备好,我们可以开始了.

第2章录制、编辑、运行宏

2.1录制、编辑、运行宏基本步骤:

开始solidworks编程的最快方式就是录制宏。

宏可以记录用户的操作将其记录为一系列solidworksAPI的调用。

在solidworks“工具”菜单“宏”中有运行、录制、新建、编辑等选项。

我们选择“录制”来开始记录用户操作,选择“停止”来结束宏的录制。

结束后会提示保存宏文件,其后缀名为.swp。

(估计是solidworksprogram的意思吧)。

录制到停止间对solidworks进行的操作都将记录到宏文件中。

但是直接录制的宏程序的可用性很差,我们需要对它进行一些合理的优化,清理多余的语句,所以在录制完成宏之后需要编辑它。

编辑宏的时候,选择“工具”菜单“宏”中的“编辑”,此时提示你选择要编辑的宏文件(swp文件)。

选择后进入编辑界面(其实就是VBA的编辑器,叫集成环境也行)。

需要说明的是,如果之前你在excel、word等软件中录制过宏程序,那么可能solidworks录制宏中的垃圾数据要更多些。

2.2一些基本的建议:

Solidworks在帮助中也有一个大体的介绍,在编辑一个新录制的宏时可以需要删除下面的多余代码(Deleteextralinesofcode):

1、ThefollowingvariablesaredeclaredautomaticallyinaSolidWorksmacro.Deleteanyvariablesnotusedinthemacro.SolidWorks对象的声明是自动产生的,可以将没用到的删除

2、Deletealllinesofcodethatchangetheview.删除切换视图的代码

ardensays:

像这样的Part.ActiveView().RotateAboutCenter0.0662574,0.0346621无情的删掉吧

3、DeleteallModelDocExtension:

:

SelectByID2callsappearingimmediatelybeforeModelDoc2:

:

ClearSelection2calls.However,donotdeleteModelDocExtension:

:

SelectByID2callsappearingimmediatelyafterModelDoc2:

:

ClearSelection2calls.DeleteallModelDoc2:

:

ClearSelection2callsappearingimmediatelybeforeModelDocExtension:

:

SelectByID2.

删除所有紧挨ModelDoc2:

:

ClearSelection2之前的ModelDocExtension:

:

SelectByID2调用,不要删除紧挨ModelDoc2:

:

ClearSelection2调用后的ModelDocExtension:

:

SelectByID2。

删除所有紧挨ModelDocExtension:

:

SelectByID2之前的ModelDoc2:

:

ClearSelection2。

下图为VBA的集成编辑环境:

编辑完成后,按照程序的要求来运行宏,在VBA编辑器中点“运行”开始执行程序,需要注意,有些宏程序的运行有前提条件,比如需要事先选择好一个特征等。

第一次运行不一定成功,这时候就要对宏代码进行调整,反复一个编辑代码、测试运行的循环,最后得到比较满意的结果。

加载宏到solidworks有很多种方法我们只介绍最简单的三种:

快捷键、菜单、工具栏按钮。

可以参考文档《SW技术文档-2005041402-加载宏到solidworks的三种方法.doc》

第3章代码格式及帮助信息

3.1代码格式:

这章中,我们给出一段完成简单功能的代码,并讨论如何从帮助中获得有用信息。

 首先,打开soliworks,选择“工具”、“宏”、“新建”,给新的宏文件起名字为“openprt.swp”。

清空vba编辑器中的内容,拷贝或者输入下面的代码,保存。

'---------------------------------

'Preconditions:

None

'Postconditions:

Specifieddocumentisopened.

'---------------------------------

OptionExplicit

DimswApp      AsSldWorks.SldWorks

Dimfileerror  AsLong

DimfilewarningAsLong

 

Submain()

SetswApp=Application.SldWorks

swApp.Visible=True

swApp.OpenDoc6"d:

/samples/hotrod.sldprt",swDocPART,swOpenDocOptions_Silent,"",fileerror,filewarning

EndSub

上面的代码来自solidworksAPI帮助,它打开d:

/samples/目录下的零件文件hotrod.sldprt。

我们来分别解释一下上面代码的内容:

'---------------------------------

'Preconditions:

None

'Postconditions:

Specifieddocumentisopened.

'---------------------------------

注释:

注释块说明了程序运行的上下文:

前提条件(Preconditions)为:

无NONE;运行结果为:

打开指定的文件。

API帮助中的示例都有这样的格式,需要大家在使用时注意其上下文约束条件。

 

 

OptionExplicit

DimswApp      AsSldWorks.SldWorks

Dimfileerror  AsLong

DimfilewarningAsLong

声明变量和对象:

swapp为一个solidworks应用程序对象。

其它两个为long型整数,用来保存错误和警告id。

 

 

Submain()这是主过程,以main为名称。

SetswApp=Application.SldWorks刚才的DIM语句只是声明了对象swapp,现在使用SET定义对象

swApp.Visible=True设置应用程序可见

swApp.OpenDoc6"d:

/samples/hotrod.sldprt",swDocPART,swOpenDocOptions_Silent,"",fileerror,filewarning

打开文件d:

/samples/hotrod.sldprt。

EndSub

 

 

3.2获得帮助:

当我们想从这个示例代码中了解打开一个文件的细节时,我们需要OpenDoc6函数的参考,可以在索引或者搜索中查找OpenDoc6,得到如下信息(汉字为我的注释):

Description:

描述此API完成的功能

Thismethodopensanexistingdocumentandreturnsapointertothedocumentobject.Italsoallowscontroloverwhetherornotto:

此方法打开一个已经存在的文档并返回指向此文档对象的指针。

它在打开文档时允许做下面控制:

∙Suppressdisplayingdialogboxes禁止对话窗口

∙Openthedocumentread-only只读打开

∙Openthedocumentview-only只看打开

∙Convertadrawingtoadetacheddrawing将工程图转换为断开的工程图

Syntax(OLEAutomation)语法:

retval=SldWorks.OpenDoc6(filename,type,options,configuration,&Errors,&Warnings)

Input:

(BSTR)Filename

Documentnameorfullpathifnotincurrentdirectory,includingextension文件全路径

Input:

(long)Type

DocumenttypeasdefinedinswDocumentTypes_e文档类型

Input:

(long)Options

ModeinwhichtoopenthedocumentasdefinedinswOpenDocOptions_e打开选项

Input:

输入

(BSTR)Configuration

Modelconfigurationinwhichtoopenthisdocument配置设置

∙Appliestopartsandassemblies,notdrawings只在零件和装配体适用

∙Ifthisargumentisemptyorthespecifiedconfigurationisnotpresentinthemodel,themodelisopenedinthelast-usedconfiguration.如果未指定任何配置将使用最后一次打开的配置。

Output:

输出

(long)Errors

LoaderrorsasdefinedinswFileLoadError_e打开错误

Output:

(long)Warnings

WarningsorextrainformationgeneratedduringtheopenoperationasdefinedinswFileLoadWarning_e打开警告

Return:

返回

(LPDISPATCH)retval

PointertoaDispatchobject,thenewlyloadedModelDoc2,orNULLiffailedtoopen

 

 

Remarks备注:

Whenopeningaparentdocument(assembly,drawing,andsoon):

∙SolidWorksalsoopensanyadditionaldocumentsthatarereferencedintheparentdocument(parts,subassemblies,andsoon).

∙SolidWorksfollowscertainrulesintryingtolocateitsreferenceddocuments.IfexplicitSearchFoldershavenotbeensetusingTools,Options,SystemOptions,ExternalReferences,thenthefirstplaceSolidWorkslooksforthereferenceddocumentsisinthecurrentworkingdirectory.IfSolidWorksfindsthereferencedfileinthecurrentworkingdirectory,thenitisloadedfromthatdirectory.……

我们应该具备的素质就是,可以按照上面的参考内容明白API的使用方法和规则。

而我们常常需要注意的焦点是语法(Syntax)知道需要输入什么参数返回什么对象就基本OK了,不要被前面一片英文所迷惑。

最后我们介绍一下API帮助的目录:

Solidworks2005APIReleaseNotes:

此文档树下为sw2005版本的新特性:

新对象新函数等

Programmer’sGuide:

此文档树目录下为sw编程向导,提供了开始编程的向导、sw对象模型总揽和实际编程中的注意事项等内容。

Examples:

此文档树目录下为sw所有示例工程,分为c++和VB两中语言大类。

我们经常需要访问的地方。

APIs:

sw提供的所有API定义及参考。

ObsoleteAPIs:

sw已过时的API。

第4章常用对象模型

4.1综述:

学会录制宏代码,并从帮助中得到代码中API使用方法后,我们介绍一些常用的对象模型,并给出一些使用方法。

这些对象是sw最基本的对象,几乎所有程序都会使用其中的几种,也是我们可以很直观想象到的对象模型:

4.2SldWorks.SldWorks:

此对象代表solidworks应用程序。

我们可以使用此对象进行应用程序层面的操作:

打开、保存、关闭文档;设置用户界面的状态等等。

一般来说我们的sw程序总是首先定义此对象才能进行其他的操作:

声明和定义示例:

DimswAppAsSldWorks.SldWorks

SetswApp=Application.SldWorks

或者

DimswAppAsSldWorks.SldWorks

SetswApp=CreateObject("SldWorks.Application")

调用属性或方法示例:

swApp.Visible=True

swApp.OpenDoc6"d:

/samples/hotrod.sldprt",swDocPART,swOpenDocOptions_Silent,"",fileerror,filewarning

4.3SldWorks.ModelDoc2:

此对象代表solidworks的文档。

Solidworks有三种最基本的文件格式:

零件、装配体、工程图。

它们各自都有自己特定的对象来表示,但是solidworks设定了一些通用的方法和属性来操作这些对象。

ModelDoc2对象可以直接对这三类文件进行操作。

声明和定义示例:

DimswmodelAsSldWorks.modeldoc2

Setswmodel=swapp.OpenDoc6"d:

/samples/hotrod.sldprt",swDocPART,swOpenDocOptions_Silent,"",fileerror,filewarning‘打开文档

或者

DimswmodelAsSldWorks.modeldoc2

Setswmodel=swapp.activedoc‘得到当前文档

调用属性或方法示例:

swmodel.GetPathName得到模型的路径

 

 

4.4SldWorks.PartDoc、SldWorks.AssemblyDoc、SldWorks.DrawingDoc:

上面三个对象分别代表solidworks三种文件格式。

使用它们来操作相应类型的文件。

声明和定义示例:

DimswpartAsSldWorks.PartDoc

DimswasmAsSldWorks.AssemblyDoc

DimswdrawAsSldWorks.DrawingDoc

Setswpart=swmodel

Setswasm=swapp.OpenDoc6"d:

/samples/hotrod.sldasm",swDocPART,swOpenDocOptions_Silent,"",fileerror,filewarning

Setswdraw=swapp.activedoc

调用属性或方法示例:

swpart.MirrorFeature镜像特征

swasm.AddMate2添加配合

swdraw.NewSheet3插入新图纸

 

 

4.5SldWorks.feature、SldWorks.Sketch:

代表solidworks中的特征和草图对象。

还有很多对象在此就不再介绍,下面的三章将针对零件、装配体和工程图分别讨论。

第5章零件PartDoc

5.1综述:

零件是sw基本文件类型之一,我们可以通过此对象创建新零件、得到零件的各种、信息控制零件中的特征属性等等。

下面是PartDoc的对象模型:

我们知道特征是组成一个零件的基本对象。

但是从上图我们可以看出来,特征对象并不是在零件对象下层的。

察看API帮助我们知道,特征是在Modeldoc对象下。

在Partdoc下只能对实体对象(Body2)进行操作。

所以很多对零件进行的操作,我们需要使用Modeldoc对象。

5.2选择对象的话题:

首先来学习两个API,这两个API完成选择对象和得到所选择对象的功能:

SelectByID2和GetSelectedObject5这两个函数,第一个通过给出对象的name选择对象。

第二个通过启用程序前已经选择的索引得到对象。

其中的SelectByID2基本上在sw录制宏时所作的选择操作都是用了这个API,但它的局限性在于,程序需要知道所要选择对象的名称、类型(在swSelectType_e中定义)并且函数并不返回所选择对象而是一个执行状态。

如果想得到我们刚才选择的对象,则需要用到另一个函数GetSelectedObject5。

使用GetSelectedObject5之前需要介绍一下SelectionMgr对象:

此对象允许你得到所选择对象的信息,对其进行一些操作。

GetSelectedObject5就是SelectionMgr对象的一个方法。

可以使用ModelDoc2.SelectionManager来得到一个SelectionMgr对象。

并且需要注意的是sw将所选择的对象进行了索引,我们可能同时选中了多个对象,通过GetSelectedObject5(index)中得index值来得到不同的选择对象。

看下面程序,它使用SelectByID2将当前打开的模型文件中的特征“拉伸1”选中,如果选择成功的话再使用GetSelectedObject5得到此特征:

‘++++++++++++++++++++++++++++++++

‘FilenameSelefeat.swp:

Selectfeature”拉伸1”

‘++++++++++++++++++++++++++++++++

OptionExplicit

DimswAppAsSldWorks.SldWorks

DimModelAsModelDoc2

DimfeatureAsfeature‘定义一个特征对象

DimboolstatusAsVariant‘定义api返回值

 

Submain()

SetswApp=Application.SldWorks

SetModel=swApp.ActiveDoc‘前面已经介绍,上面两句话基本上是固定模式

'选择叫"拉伸1"的特征

boolstatus=Model.Extension.SelectByID2("拉伸1","BODYFEATURE",0,0,0,False,0,Nothing,swSelectOptionDefault)

'主要就是这一句话,在写OptionExplicit后函数的最后一个参数swSelectOptionDefault可以使用0来代替

Ifboolstatus=TrueThen '如果有“拉伸1”这个特征下面的代码将其选中

   DimSelMgrAsSelectionMgr‘声明一个selectionmgr对象

   SetSelMgr=Model.SelectionManager‘得到当前模型的选择对象

   Setfeature=SelMgr.GetSelectedObject5

(1)'此处使用一个索引来得到特征

   Debug.Printfeature.Name‘在立即窗口打印特征的name属性

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2