SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 1265|回复: 4
打印 上一主题 下一主题

如何获得当前打开的工程图的对应的零件属性

[复制链接]

10

主题

50

帖子

59

金币

天使

Rank: 2Rank: 2

积分
156
QQ
跳转到指定楼层
楼主
发表于 2015-12-5 13:16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何获得当前打开的工程图的对应的零件属性。
我想获得当前打开的工程图的对应的零件的属性。比如获得工程图的零件属性中的“名称”,“代号”等等
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞16795 拍砖拍砖202
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

9

主题

85

帖子

91

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
232
QQ
沙发
发表于 2015-12-5 13:22:35 | 只看该作者

  • '(1)基本思路:获取当前图纸的某一视图的模型,然后打开这个模型,获取他的属性
  • '(2)获取当前图纸的某一视图的思路:1,人工选择;2,判断图纸中就一个模型,选择一个视图
  • '(3)打开模型的思路:先判断格式(不然swViewModel=nothing,获取的 swModelCustPropMgr 会报错),然后在后台打开,不会显示
  • '(4)获取属性:有很多方式,具体看你有什么方式,下面的是用属性的名称。
  • '   希望有所帮助!

  • Option Explicit

  • Dim swApp As SldWorks.SldWorks
  • Dim swModel As SldWorks.ModelDoc2
  • Dim swDraw As SldWorks.DrawingDoc
  • Dim swView As SldWorks.View
  • Dim vView As Variant
  • Dim swSelMgr As SldWorks.SelectionMgr
  • Dim swModelCustPropMgr As SldWorks.CustomPropertyManager
  • Dim modelmaneCollection As New Collection
  • Dim swViewModel As SldWorks.ModelDoc2
  • Dim vCustPropNames As Variant
  • Dim swSheet As SldWorks.Sheet
  • Dim i As Integer
  • Dim strValOut As String
  • Dim strExtension As String

  • Sub main()
  •     Set swApp = Application.SldWorks
  •     Set swModel = swApp.ActiveDoc
  •    
  •     '判断当前SWapp是否打开模型
  •     If swModel Is Nothing Then
  •         MsgBox "打开一个工程图,再运行这个……", vbOKOnly + vbExclamation + vbMsgBoxSetForeground, "Warning"
  •         Exit Sub
  •     End If
  •    
  •     '判断当前模型是否是"SLDDRW"格式
  •     strExtension = Right(UCase(swModel.GetPathName), 6)
  •     If strExtension <> &quot;SLDDRW&quot; Then
  •         MsgBox &quot;打开一个工程图,再运行这个……&quot;, vbOKOnly + vbExclamation + vbMsgBoxSetForeground, &quot;Warning&quot;
  •         Exit Sub
  •     End If
  •    
  •     '判断当前图纸被选中的实体是否为 View
  •     Set swSelMgr = swModel.SelectionManager
  •     If swSelMgr.GetSelectedObjectType3(1, -1) = swSelDRAWINGVIEWS Then
  •         Set swView = swSelMgr.GetSelectedObject6(1, -1)
  •                
  •         strExtension = Right(UCase(swView.GetReferencedModelName), 6)
  •         If strExtension = &quot;SLDPRT&quot; Then
  •             Set swViewModel = swApp.OpenDoc6(swView.GetReferencedModelName, swDocPART, _
  •                 swOpenDocOptions_Silent, Empty, Empty, Empty)
  •         ElseIf strExtension = &quot;SLDASM&quot; Then
  •             Set swViewModel = swApp.OpenDoc6(swView.GetReferencedModelName, swDocPART, _
  •                 swOpenDocOptions_Silent, Empty, Empty, Empty)
  •         End If
  •         Set swModelCustPropMgr = swViewModel.Extension.CustomPropertyManager(Empty)
  •         vCustPropNames = swModelCustPropMgr.GetNames
  •         For i = 0 To UBound(vCustPropNames)
  •             strValOut = vCustPropNames(i)  '得到打开模型的属性,然后打印
  •             Debug.Print strValOut
  •         Next
  •     Else   '没有选择 或者 选择的不是View
  •          Set swDraw = swModel
  •          Set swSheet = swDraw.GetCurrentSheet
  •          vView = swSheet.GetViews
  •          Dim m As Integer
  •          For m = 0 To UBound(vView)
  •             Set swView = vView(m)
  •             modelmaneCollection.Add swView.GetReferencedModelName  '获得当前图纸所有View的模型名称
  •          Next
  •          For m = 1 To modelmaneCollection.Count - 1
  •             If modelmaneCollection(m) <> modelmaneCollection(m + 1) Then     '判断所有View的模型是否形同
  •                 MsgBox &quot;图纸中有多个模型,请选择一个视图,然后运行这个……&quot;, _
  •                     vbOKCancel + vbMsgBoxSetForeground + vbInformation, &quot;Solidwoks&quot;
  •                 Exit Sub   '有不同直接退出
  •             End If
  •          Next
  •         Set swView = vView(0)   '所有模型相同,打开其中一个
  •         strExtension = Right(UCase(swView.GetReferencedModelName), 6)
  •         If strExtension = &quot;SLDPRT&quot; Then
  •             Set swViewModel = swApp.OpenDoc6(swView.GetReferencedModelName, swDocPART, _
  •                 swOpenDocOptions_Silent, Empty, Empty, Empty)
  •         ElseIf strExtension = &quot;SLDASM&quot; Then
  •             Set swViewModel = swApp.OpenDoc6(swView.GetReferencedModelName, swDocPART, _
  •                 swOpenDocOptions_Silent, Empty, Empty, Empty)
  •         End If
  •         Set swModelCustPropMgr = swViewModel.Extension.CustomPropertyManager(Empty)
  •         vCustPropNames = swModelCustPropMgr.GetNames
  •         For i = 0 To UBound(vCustPropNames)
  •             strValOut = vCustPropNames(i)  '得到打开模型的属性,然后打印
  •             Debug.Print strValOut
  •         Next
  •     End If
  • End Sub

复制代码
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

17

主题

123

帖子

119

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
417
QQ
板凳
发表于 2015-12-5 13:33:15 | 只看该作者
因为你工程图本身就连接了零件的属性,所以直接遍历工程图文本 ,就可以获取到了啊
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

73

帖子

38

金币

天使

Rank: 2Rank: 2

积分
163
QQ
地板
发表于 2015-12-5 13:35:53 | 只看该作者
恩,是的。赞同。而且还简单。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

164

帖子

191

金币

堂主

Rank: 4

积分
580
5#
发表于 2024-4-26 13:27:46 | 只看该作者

   经典案例图书
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-6 22:22 , Processed in 0.251171 second(s), 32 queries .

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表