Solidworks中的零件,装配体,图纸都是一个文档,每一个文件都是一个ModelDoc2的实例对象。通过文档对象,我们可以直接或间接地自动操作文档中的各类元素。
1.各类文档对象关系
如下图所示,在Solidworks中,与文档有关的对象有ModelDoc2(通用文档对象),ModelDocExtension(通用文档扩展对象),PartDoc(零件文档对象),AssemblyDoc(装配体文档对象)以及DrawingDoc(图纸文档对象)
从上述文档对象的名称上可以理解,文档类的通用操作方法或属性,一般可以在ModelDoc2或ModelDocExtension对象的属性或方法中寻找。而PartDoc,AssemblyDoc以及DrawingDoc则更对应地提供了分别操作零件,装配体,图纸等特有功能的属性或方法。
2.自动化操作文档思路
通过上述的图解,我们可以得出以下思路:
a.自动操作零件:主线通过ModelDoc2,ModelDocExtension以及PartDoc实现自动化。
b.自动操作装配体:主线通过ModelDoc2,ModelDocExtension以及AssemblyDoc实现自动化。
c.自动操作装配体:主线通过ModelDoc2,ModelDocExtension以及DrawingDoc实现自动化。
3.各类文档对象的获取步骤
当我们获得了通用文档对象ModelDoc2后,可以通过如下步骤获得其他对应的文档对象:
a.判断文档的类型,使用ModelDoc2的GetType方法。
b.直接获得文档类型对应的零件,装配体,或图纸的文档对象。
c.【按需】通过ModelDoc2的Extension属性获得文档扩展对象ModelDocExtension
4.代码实例
在Solidworks中任意打开一个Solidworks文档后,运行如下C#代码。
public static void GetDocObject(SldWorks iswApp)
{
StringBuilder sb = new StringBuilder("");
ModelDoc2 SwDoc = iswApp.ActiveDoc;//获得当前激活的文档
sb.Append("文档:"+ SwDoc.GetTitle()+"\r\n");
int DocType = SwDoc.GetType();//获得激活的文档类型
if (DocType == (int)swDocumentTypes_e.swDocPART)//若类型是零件
{
PartDoc SwPart = (PartDoc)SwDoc;
sb.Append("文档类型:零部件\r\n");
}
else if (DocType == (int)swDocumentTypes_e.swDocASSEMBLY)//若类型是装配体
{
AssemblyDoc SwAssem = (AssemblyDoc)SwDoc;
sb.Append("文档类型:装配体\r\n");
}
else if (DocType == (int)swDocumentTypes_e.swDocDRAWING)//若类型是工程图
{
DrawingDoc SwAssem = (DrawingDoc)SwDoc;
sb.Append("文档类型:工程图\r\n");
}
ModelDocExtension SwDocEx = SwDoc.Extension;//获得扩展文档对象
if (SwDocEx!=null)
{
sb.Append("扩展文档:已获得");
}
MessageBox.Show(sb.ToString().Trim());
}
5.运行结果
6.注意点
在获得PartDoc,AssemblyDoc,DrawingDoc之前,一定要先通过ModelDoc2的GetType方法判断文档类型,再将文档转化为对应的零件,装配体或工程图文档对象。
如下图为本文的示例程序,源码可上我的Github下载。操作步骤可见文章《公众号源码Github分享库》