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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数量统计与图号分离的新思路

  [复制链接]

7

主题

52

帖子

43

金币

天使

Rank: 2Rank: 2

积分
143
QQ
跳转到指定楼层
楼主
发表于 2020-3-7 23:19:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
版大版主分享的数量统计宏使用非常方便,但在实际使用中(经本人测试),一个大型的装配文件(20000+模型)运行宏至少要50分钟以上,如果电脑配置不好的情况下可能时间会更长。因此经过测试后,发现问题的所在:原因是当遍历到一个模型时,会进入属性去改写属性,如果这个模型在这个装配体中出现100次,则会100次去改写同一个模型的属性,如果出现次数越多,读取和写入的次数也就越多,这样在零件数量非常大的时候运行效率会降低。本人经过用GetComponents方法只须遍历装配模型两次即可统计数量,一次统计数量,第二次写入属性。而且可以方便的把分离图号也加进去。经测试,同样的装配文件(20000+),宏文件运行50分钟以上,而新的工具只要5分钟左右。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播 分享教程|习题|模型|技巧 点赞点赞 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

0

主题

44

帖子

0

金币

混混

Rank: 1

积分
8
QQ
推荐
发表于 2020-3-10 13:49:19 | 只看该作者
我一直在用这个宏,不过加入图号分离不需要了
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 1 反对 0

使用道具 举报

4

主题

36

帖子

22

金币

天使

Rank: 2Rank: 2

积分
75
QQ
推荐
发表于 2020-3-10 13:57:32 | 只看该作者
其实代码都是差不多,只是方法不一样,用GetComponents只是不用递归调用,只遍历就行。主要的是用字典存储数量信息,第一次遍历存储统计的数量信息,第二次遍历将统计的数量写入模型。因本人不会VBA所以只能提供VB.NET代码,此代码不完整,仅供参考:
'统计数量
For i = 0 To swChidren.Length - 1
  swCom = swChidren(i)
  If swCom.IsVirtual Then
  Continue For
  End If
  If swCom.IsSuppressed Then
  Continue For
  End If
  If swCom.ExcludeFromBOM Then
  Continue For
  End If
  swGetPathName = swCom.GetPathName.ToUpper
  swcomKey = swComDict.ContainsKey(swGetPathName)
  If swcomKey = False Then
  'TextBox1.AppendText(vbCrLf & swGetPathName)
  swComDict.Add(swGetPathName, swComtmp)
  Else
  swComtmps = swComDict.Item(swGetPathName) + 1
  swComDict.Item(swGetPathName) = swComtmps
  End If
Next
'写入数量
For j = 0 To swChidren.Length - 1
  swCom = swChidren(j)
  If swCom.IsVirtual Then
  Continue For
  End If
  If swCom.IsSuppressed Then
  Continue For
  End If
  If swCom.ExcludeFromBOM Then
  Continue For
  End If
  Dim swToNama As String
  Dim swTopDocName As String
  Dim swReplaceName As String
  Dim swTopPCode As String
  Dim swTopPName As String
  Dim swConfigName As String  
  swConfigName = swCom.ReferencedConfiguration
  swGetPathName = swCom.GetPathName.ToUpper
  swPathSplit = Split(swGetPathName, "")
  swToNama = swPathSplit(UBound(swPathSplit))
  swTopDocName = Microsoft.VisualBasic.Left(swToNama, Len(swToNama) - 7)
  Label1.Text = "打开模型:"
  Label12.Text = swGetPathName
  swContains = swMocName.Contains(swGetPathName)
  If swContains = True Then
  Continue For
  Else
  curNode = rootNode.Nodes.Add(swTopDocName)
  swcomModel = swCom.GetModelDoc2
  swMocName.Add(swGetPathName)
  swComtmpa = swComDict.Item(swGetPathName)
  If RadioButton3.Checked = True Then
  swPropMgr = swcomModel.Extension.CustomPropertyManager("")
  Else
  swPropMgr = swcomModel.Extension.CustomPropertyManager(swConfigName)
  End If
  If RadioButton7.Checked = True Then  
  swPropMgr.Add3(CustomInfoQTY, 30, swComtmpa, 1)
  If RadioButton11.Checked = True Then
  swPropMgr.Add3(CustomInfoTTY, 30, Couu, 1)   
  End If
  End If  

  End If
  swcomModel.Save()
Next
复制代码
SolidWorks机械工程师网
回复 支持 1 反对 0

使用道具 举报

6

主题

47

帖子

30

金币

天使

Rank: 2Rank: 2

积分
121
QQ
推荐
发表于 2020-3-10 13:49:19 | 只看该作者
我一直在用这个宏,不过加入图号分离不需要了
SolidWorks机械工程师网
回复 支持 1 反对 0

使用道具 举报

2

主题

45

帖子

14

金币

天使

Rank: 2Rank: 2

积分
76
QQ
推荐
发表于 2020-3-8 21:34:04 | 只看该作者

   经典案例图书
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。
SolidWorks机械工程师网
回复 支持 1 反对 0

使用道具 举报

3

主题

37

帖子

24

金币

天使

Rank: 2Rank: 2

积分
97
QQ
6#
发表于 2020-3-8 21:34:04 | 只看该作者
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

43

帖子

51

金币

天使

Rank: 2Rank: 2

积分
147
QQ
7#
发表于 2020-3-9 21:06:40 | 只看该作者

   经典案例图书
有更好的方法,可以大家一起看看。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

42

帖子

24

金币

天使

Rank: 2Rank: 2

积分
79
QQ
8#
发表于 2020-3-9 21:06:40 | 只看该作者
有更好的方法,可以大家一起看看。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

40

帖子

35

金币

天使

Rank: 2Rank: 2

积分
125
QQ
9#
发表于 2020-3-10 13:57:32 | 只看该作者
其实代码都是差不多,只是方法不一样,用GetComponents只是不用递归调用,只遍历就行。主要的是用字典存储数量信息,第一次遍历存储统计的数量信息,第二次遍历将统计的数量写入模型。因本人不会VBA所以只能提供VB.NET代码,此代码不完整,仅供参考:
'统计数量
For i = 0 To swChidren.Length - 1
  swCom = swChidren(i)
  If swCom.IsVirtual Then
  Continue For
  End If
  If swCom.IsSuppressed Then
  Continue For
  End If
  If swCom.ExcludeFromBOM Then
  Continue For
  End If
  swGetPathName = swCom.GetPathName.ToUpper
  swcomKey = swComDict.ContainsKey(swGetPathName)
  If swcomKey = False Then
  'TextBox1.AppendText(vbCrLf & swGetPathName)
  swComDict.Add(swGetPathName, swComtmp)
  Else
  swComtmps = swComDict.Item(swGetPathName) + 1
  swComDict.Item(swGetPathName) = swComtmps
  End If
Next
'写入数量
For j = 0 To swChidren.Length - 1
  swCom = swChidren(j)
  If swCom.IsVirtual Then
  Continue For
  End If
  If swCom.IsSuppressed Then
  Continue For
  End If
  If swCom.ExcludeFromBOM Then
  Continue For
  End If
  Dim swToNama As String
  Dim swTopDocName As String
  Dim swReplaceName As String
  Dim swTopPCode As String
  Dim swTopPName As String
  Dim swConfigName As String  
  swConfigName = swCom.ReferencedConfiguration
  swGetPathName = swCom.GetPathName.ToUpper
  swPathSplit = Split(swGetPathName, "")
  swToNama = swPathSplit(UBound(swPathSplit))
  swTopDocName = Microsoft.VisualBasic.Left(swToNama, Len(swToNama) - 7)
  Label1.Text = "打开模型:"
  Label12.Text = swGetPathName
  swContains = swMocName.Contains(swGetPathName)
  If swContains = True Then
  Continue For
  Else
  curNode = rootNode.Nodes.Add(swTopDocName)
  swcomModel = swCom.GetModelDoc2
  swMocName.Add(swGetPathName)
  swComtmpa = swComDict.Item(swGetPathName)
  If RadioButton3.Checked = True Then
  swPropMgr = swcomModel.Extension.CustomPropertyManager("")
  Else
  swPropMgr = swcomModel.Extension.CustomPropertyManager(swConfigName)
  End If
  If RadioButton7.Checked = True Then  
  swPropMgr.Add3(CustomInfoQTY, 30, swComtmpa, 1)
  If RadioButton11.Checked = True Then
  swPropMgr.Add3(CustomInfoTTY, 30, Couu, 1)   
  End If
  End If  

  End If
  swcomModel.Save()
Next
复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

34

帖子

19

金币

天使

Rank: 2Rank: 2

积分
93
QQ
10#
发表于 2020-3-10 20:20:03 | 只看该作者
可以分享下吗solidworks网,必须顶一下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

51

帖子

27

金币

天使

Rank: 2Rank: 2

积分
103
QQ
11#
发表于 2020-3-10 20:20:03 | 只看该作者
可以分享下吗solidworks网,必须顶一下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

33

帖子

26

金币

天使

Rank: 2Rank: 2

积分
76
QQ
12#
发表于 2020-3-10 20:56:34 | 只看该作者
楼主好方法!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

52

帖子

26

金币

天使

Rank: 2Rank: 2

积分
109
QQ
13#
发表于 2020-3-10 20:56:34 | 只看该作者
楼主好方法!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

41

帖子

30

金币

天使

Rank: 2Rank: 2

积分
109
QQ
14#
发表于 2020-3-10 21:37:45 | 只看该作者
希望有vba高手整理出宏分享上来给大家用,vb.net须打包后才能使用,我这个工具还有一些功能没有完善,现在还没有打包发行,所以暂时不能分享给大家。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

5

主题

48

帖子

26

金币

天使

Rank: 2Rank: 2

积分
108
QQ
15#
发表于 2020-3-10 21:37:45 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

希望有vba高手整理出宏分享上来给大家用,vb.net须打包后才能使用,我这个工具还有一些功能没有完善,现在还没有打包发行,所以暂时不能分享给大家。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

47

帖子

6

金币

混混

Rank: 1

积分
40
QQ
16#
发表于 2020-3-11 08:21:18 | 只看该作者

   经典案例图书
谢谢solidworks网,必须顶一下
solidworks网,必须顶一下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

50

帖子

40

金币

天使

Rank: 2Rank: 2

积分
141
QQ
17#
发表于 2020-3-12 23:16:45 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

感谢楼主,谢谢分享
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

5

主题

43

帖子

29

金币

天使

Rank: 2Rank: 2

积分
98
QQ
18#
发表于 2020-3-12 23:16:45 | 只看该作者

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

使用道具 举报

5

主题

49

帖子

27

金币

天使

Rank: 2Rank: 2

积分
103
QQ
19#
发表于 2020-11-16 09:10:22 | 只看该作者
不错,支持下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

32

帖子

116

金币

堂主

Rank: 4

积分
823

最佳新人活跃会员宣传达人

20#
发表于 2022-5-4 16:06:44 | 只看该作者
楼主你好,我想把数量统计宏里面增加图号分离可以吗
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2024-5-30 22:20 , Processed in 0.283648 second(s), 34 queries .

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

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

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