基本说明SolidWorks API的运用
2009-07-18 13:58
SolidWorks API是SolidWorks的OLE运用 程序开发接口,用户可以运用 它和支持OLE编程的开发工具,如VB、VBA(Excel,Access)、C、VC++等对SolidWorks执行 二次开发,建立适合用户须要的、专用的SolidWorks 功能模块。
  一、疑问的提出
  大多数工程图纸的标题栏中应该包括一些基本的设计信息,如零件名称、零件代号、材料以及设计人员和设计日期等,其中,零件的名称、代号、材料、数量、重量及一些主要的后处理要求等信息还应该出现在装配图的材料明细表(BOM)中。这些内容如果在工程图中一一执行 编写和修改,其工作量是很大的,并且这种处理要领也不利于保证设计信息的一致性,对模型文件(零件或装配体文件)和图纸文件的管理来讲是脱节的。SolidWorks是一个全有关的三维机械设计软件,模型文件中的设计数据,如尺寸、注释、文件属性等内容与工程图有关,因此,我们在处理上述工程图标题栏和材料明细表中的设计数据时,应该将这些内容保存在模型文件中,并且自动显示在工程图相应的位置上。当须要对工程图中的内容执行 修改时,直接修改模型文件中的相应数据即可实现。
  这样的处理要领不仅保证了设计信息的一致性,而且可以大大提高设计效率。根据这个设想,笔者将这些设计信息执行 了归纳,并将它们作为模型文件的自定义属性保存在模型文件指定配置的属性(在SolidWorks中,选择菜单"文件→属性",单击"指定配置"标签,如图1所示)中,针对模型文件指定配置的这些属性可以自动带入到工程图的标题栏和材料明细表。
  对于材料明细表模板执行 修改或建立新的明细表模板就可以在装配图中的材料明细表中显示所须要的设计信息(工程图格式文件的定义和材料明细表模板的定义,请参阅《SolidWorks2001中文版实用技能精粹》一书)。因此,无论何时须要修改设计信息,只需在SolidWorks中打开相应的模型文件,修改指定配置属性即可。然而,即使采用这样的处理要领,在修改文件当前配置属性时仍然显得有些繁琐,能否为SolidWorks建立一个工作界面,可以更加方便地添加和修改这些信息就成了疑问的关键。
  二、自定义属性Cpbom
  为了更大程度地提高工作效率,我们运用 VB6.0通过SolidWorks API建立了自定义属性配置程序--Cpbom,这个程序通过一个对话界面直接对当前模型文件的当前配置执行 添加或修改,其基本功能如下:
  ☆ 针对配置添加模型文件的自定义属性;
  ☆ 配置的项目包括:零件代号、材料名称、后处理、设计者姓名、设计日期;
 ☆ 确定自定义属性后,自动
保存文件;如当前文件还没有保存,提示文件保存路径和文件名称;
  ☆ 针对装配文件,可以选择能不能删除"材料"和"后处理"两个属性。本程序运用 VB执行 编译生成可执行文件。自定义属性界面 "自定义属性"程序就是通过SolidWorks API对当前模型文件中当前配置的自定义属性的名称和值执行 "读"和"写"的操作,程序非常基本,这里介绍一下该程序中用到的一些SolidWorks API的对象和要领。
  1.SolidWorks对象这里指的是SolidWorks API的最高级别的对象。通过该对象可以控制SolidWorks软件的执行或退出,以及SolidWorks文件的建立、打开、关上等操作。在VB中运用 CreateObject要领来获得SolidWorks对象,运用 该对象的activedoc要领可以获得当前SolidWorks文件对象,文件对象为空时,表示SolidWorks 没有打开任何文件。
  Dim swApp As ObjectDim
  activeDocument As ObjectSet swApp=CreateObject("SldWorks.Application")
getsavefilename  Set activeDocument = swApp.activedocIf (activeDocument Is Nothing) Then Dim Msg, Style, title Style = vbExclamation
  title = "模型自定义属性"
  Msg = "请首先打开一个Solidworks模型文件"
  Call MsgBox(Msg, Style, title) " Display error message
  End
  End If
  2.获取当前文件信息自定义属性程序是对模型文件配置自定义属性,与工程图文件无关,因此须要运用 GetType要领获得当前文件的类型,并运用 Gettitle()要领和Getpathname()要领获得当前文件的名称和存盘路径。
  Dim docType As LongDim
  docName As StringDim
  filename As StringDim
  FilePath as StringdocType = activeDocument.
  GetTypeIf (docType = swDocPART)
  Then docName = "零件"With CPbomfrm .deldescription.Enabled = False .delmaterial.Enabled = FalseEnd With Picture5.Picture = Picture3.Picture
ElseIf (docType = swDocASSEMBLY) Then docName = "装配" Picture5.Picture = Picture2.Picture
  ElseIf (docType = swDocDRAWING) Then Style = vbExclamation Msg = "当前文件是工程图文件,请打开零件或装配文件"
  Call MsgBox(Msg, Style, title) " Display error message
  End
  End
  If filename = activeDocument.GETTITLE()
  FilePath = pathname()
  3.获取文件配置名称SolidWorks API提供了按照配置名称访问自定义属性的要领 --CustomInfo2(读取
自定义属性的值)、deletecustominfo2(删除指定的自定义属性)、ADDcustominfo3(添加自定义属性的名称和参数值),这些要领都要求指定文件的配置名称。因此,为了对当前模型文件和当前配置设定自定义属性,必须首先要获得当前配置的名称,运用 GetActiveConfiguration()要领可以获得当前模型文件配置的对象,并运用 Name要领获得当前配置的名称。
  Dim ConfName As StringSet
  CurCFG = activeDocument.GetActiveC
onfiguration()
  ConfName = CurCFG.Name
  4.按照配置访问自定义属性在本程序中,笔者对于指定配置的属性配置按照如下的步骤:
  (1)按照配置名称读取文件中的自定义属性值,并赋值于相应的文本框;
  (2)判定当前文件和当前配置能不能已经改动,如其中之一发生变化,则提示不正确信息;
  (3)根据配置名称删除指定的自定义属性;
  (4)将相应文本框中的内容按照配置名称添加到模型文件自定义属性名称和参数值。下面对上述控制配置自定义属性的三种要领加以介绍。
  ☆ CustomInfo2:获取或配置当前文档指定配置的自定义属性的值。
  value = ModelDoc.CustomInfo2 (configuration, fieldName)
  其中,configuration为配置名称;
  fieldName为自定义属性的名称。
  ☆ deletecustominfo2:删除当前文档指定配置的自定义属性的值
  retval = ModelDoc.DeleteCustomInfo2(configuration, FieldName )
☆ ADDcustominfo3:向当前文档中指定的配置添加自定义属性以及值
  retval = ModelDoc.AddCustomInfo3 ( configuration, FieldName, FieldType, FieldValue )
  其中,FieldType为自定义属性的类型;FieldValue为自定义属性的值。
  下面这段代码是单击"确定"的子程序,为了基本,只给出了其中一个自定义属性的处理流程。
  Private Sub cmd_OK_Click()On Error GoTo ERR_91
  Dim swApp2 As ObjectDim
  activeDocument2 As ObjectDim
  curcfg2 As ObjectDim
  cfgname2 As StringDim
  retval As BooleanSet
  swApp2 = CreateObject("SldWorks.Application")
  Set activeDocument2 = swApp2.activedoc
  Set curcfg2 = activeDocument2.GetActiveConfiguration()
  cfgname2 = curcfg2.Name" 判断文件或配置能不能改动,如改动,则提示不正确。
  If cfgname2 = ConfName And FilePath = pathname() Then  " 删除属性配置
  retval = activeDocument2.deletecustominfo2(ConfName, "PartID")" 添加属性
  retval = activeDocument2.ADDcustominfo3(ConfName, "PartID", swCustomInfoText, frmPartID)  " 保存文件
  retval = activeDocument2.Save()
  Else Style = vbExclamation
  title = "模型自定义属性"
  Msg = "不正确:打开的文件或配置已经改动 !" & Chr(10) & "请重新执行本程序"
  Call MsgBox(Msg, Style, title)
  End
  End
  IfERR_91: Style = vbExclamation title = "模型自定义属性"
Msg = "程序运行不正确,文件可能已经关上 " & Chr(10) & "自定义属性不能添加,单击确定退出!"
  Call MsgBox(Msg, Style, title)
  End
  End Sub
  三、在SolidWorks界面中执行运用 程序
  对于运用 VB编译的EXE、DLL文件,目前SolidWorks还不能直接支持这些文件作为插件运用,如果要在SolidWorks 中直接调用通过VB编译的可执行程
序,可以运用 SolidWorks"宏"操作来执行 。运用 "宏"在SolidWorks界面中添加指定的运用 程序后,就好像SolidWorks调用了自身的功能一样,运用 类似的要领,可以在SolidWorks添加任何可执行的文件。下面运用 "自定义属性"程序来说明一下步骤。1.建立"宏"文件在SolidWorks中,我们运用 录制并修改"宏"的要领来建立所须要的"宏"文件。主要步骤如下:
  (1)选择菜单"工具→宏操作→录制"。
  (2)停止录制,并保存宏文件。给定文件名称,如:Cpbom.swp。
  (3)选择菜单"工具→宏操作→编辑",把Cpbom.swp "宏"文件录制的内容全部删除,并输入下面的内容。
  Sub main()MyAppID = Shell("C:", 1) AppActivate MyAppID
  End Sub
  (4)保存并退出宏编辑,返回到SolidWorks环境。
  2.指定"宏"操作在SolidWorks中可以指定宏命令的文件位置,并定制工具栏,将所执行的宏操作按钮添加到指定的位置上。
  (1)选择菜单"工具→自定义→宏",在"自定义"对话框中单击"宏"标签。
  (2)参考图4的内容添加宏,单击"运用 "完成。
  (3)在"自定义"对话框中单击"命令"标签,从"类别"列表框中选择"宏",将所定义的宏(第1个)的图标按钮拖到相应的工具栏中,如图5所示。
  (4)单击"确定"按钮,完成宏定义和工具栏定义。
3.执行运用 程序定义"宏"以后,单击相应的图标就可以在SolidWorks 中直接执行运用 程序。 在SolidWorks中执行运用 程序
  四、总结
  笔者运用 这个"自定义属性"程序,明显提高了工作效率。须要说明的是,SolidWorks API的对象和要领十分丰富,涵盖了所有SolidWorks数据模型,这里介绍的只冰山之一角。另外,程序中提及的自定义属性与企业的要求有关,根据自己的须要开发适合须要的自定义属性配置程序。
1.      SldWorks类
a)        GetActiveConfigurationName(string filePath):获取指定SldWorks文件的当前配置名称.注意一点的是,此指定文件不需要打开.
b)        IActiveDoc:获得当前操作的文档
c)        IactiveDoc.GetPathName:获得当前操作文档的路径全称,如果当前不存在文件返回null,如果当前文件未保存返回空
d)        GetConfigurationNames(string filePath):获取指定SldWorks文件的配置名称集合.此文件不需要打开
e)        GetConfigurationCount(string filePath):获得指定SldWorks文件的配置名称数量,此文件不需要打开
f)        GetOpenDocument(string fileName):获得指定文件名称(最好包含扩展名,否则可能得不到正确的结果)的ModuleDoc2. 注意,文件必须是被打开的,否则得不到正确的结果. 他和IActiveDoc返回的内容一样,不一样的是IActiveDoc返回的当前的,而此函数返回的是指定的名称的,不
一定是当前文档.
g)        GetPreviewBitmap(string filePath,string configName):获得指定文件的指定配置的预览图. 此图和打开窗口的右侧预览相同
h)        NewDocument(string tempPath,long papersize,double width,double height):利用指定的模板文件tempPath创建一个新文档.
i)        OpenDoc6(string filePath,int type,int options,string configName,ref int errors,ref int warings):以指定的参数打开指定文件.参数包括:文件名称/ 打开类型 / 打开方式 / 指定配置 / 传出错误号 / 传出警告号
j)        PreviewDoc(IntPtr handle,string filePath):将指定文件的图像预览描绘到指定Handle的窗口
k)        QuitDoc(string filePath):不经过保存,直接关闭指定文件
l)        CloseDoc(string filePath):关闭文件
m)        RevisionNumber():返回当前正在操作的SldWorks的版本号
2.      SldWorks.ModelDoc2类
a)        AddConfiguration3(string name,string memo,string lName,int options):以指定的参数添加一个新配置,参数包括:配置名称 / 配置描述 / 配置别名 / 方式
b)        DeleteConfiguration2(string name):删除指定名称的配置
c)        GetConfigurationNames():获得当前文档的所有配置名称集合
d)        AddCustomInfo3(string configName,string field,string type,string value):向当前文档的当前配置添加自定义属性
e)        DeleteCustomInfo2(string configName,string fieldName):删除指定配置的指定属性
f)        GetCustomInfoCount2(string configName):获得指定配置的自定义属性的数量
g)        GetCustomInfoNames2(string configName):获得指定配置的自定义属性的名称集合
h)        GetCustomInfoType3(string configName,string fieldName):获得指定配置指定属性名称的自定义属性的类型
i)        GetCustomInfoValue(string configName,string fieldName):获得指定配置指定属性名称的自定义属性的值
j)        Save3(int options,int error,int waring):保存当前文件
k)        GetActiveConfiguration():获得当前文档的当前配置
3.      SldWorks.ModelDoc2.AssemblyDoc类
a)        AddComponent4(string filePath,string configName,int x,int y,int z):在指定的位置插入指定配置的文件,只适用于装配体文件. 另外要插入的文件必须是被加载到内存中的,欲加载到内存中,可以通过ISldWorks::OpenDoc6函数来实现,细节问题:加载完毕后需要将文件关闭,利用ISldWorks::CloseDoc
4.      SldWorks.ModelDoc2.AssemblyDoc.Component2类
a)        GetRootComponent():获得当前根Component2
b)        IGetChildCount():获得当前装配体的子装配数量
c)        GetChildren():获得当前装配的子Component2集合
5.      SldWorks.ModelDoc2.DrawingDoc类
a)        GetFirstView():获得当前视图
b)        IView.GetNextView():获取当前sheet的第一个view,这个才是我们应用的视图
6.      SldWorks.ModelDoc2.Draw

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。