找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?在线3D打印服务,一键上传,自动报价 
查看: 501|回复: 10

[原创] 数量统计与图号分离的新思路

[复制链接]
发表于 2020-3-7 23:19:17 | 显示全部楼层 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
        闷大版主分享的数量统计宏使用非常方便,但在实际使用中(经本人测试),一个大型的装配文件(20000+模型)运行宏至少要50分钟以上,如果电脑配置不好的情况下可能时间会更长。因此经过测试后,发现问题的所在:原因是当遍历到一个模型时,会进入属性去改写属性,如果这个模型在这个装配体中出现100次,则会100次去改写同一个模型的属性,如果出现次数越多,读取和写入的次数也就越多,这样在零件数量非常大的时候运行效率会降低。本人经过用GetComponents方法只须遍历装配模型两次即可统计数量,一次统计数量,第二次写入属性。而且可以方便的把分离图号也加进去。经测试,同样的装配文件(20000+),宏文件运行50分钟以上,而新的工具只要5分钟左右。
发表于 2020-3-8 21:34:04 | 显示全部楼层
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。
发表于 2020-3-9 21:06:40 | 显示全部楼层
shentu 发表于 2020-3-8 21:34
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。

有更好的方法,可以大家一起看看。
发表于 2020-3-10 13:49:19 | 显示全部楼层
我一直在用这个宏,不过加入图号分离不需要了
 楼主| 发表于 2020-3-10 13:57:32 | 显示全部楼层
本帖最后由 wenmk 于 2020-3-10 14:03 编辑

         其实代码都是差不多,只是方法不一样,用GetComponents只是不用递归调用,只遍历就行。主要的是用字典存储数量信息,第一次遍历存储统计的数量信息,第二次遍历将统计的数量写入模型。因本人不会VBA所以只能提供VB.NET代码,此代码不完整,仅供参考:
  1.       '统计数量

  2.      For i = 0 To swChidren.Length - 1
  3.             swCom = swChidren(i)
  4.             If swCom.IsVirtual Then
  5.                 Continue For
  6.             End If
  7.             If swCom.IsSuppressed Then
  8.                 Continue For
  9.             End If
  10.             If swCom.ExcludeFromBOM Then
  11.                 Continue For
  12.             End If
  13.             swGetPathName = swCom.GetPathName.ToUpper
  14.             swcomKey = swComDict.ContainsKey(swGetPathName)
  15.             If swcomKey = False Then
  16.                 'TextBox1.AppendText(vbCrLf & swGetPathName)
  17.                 swComDict.Add(swGetPathName, swComtmp)
  18.             Else
  19.                 swComtmps = swComDict.Item(swGetPathName) + 1
  20.                 swComDict.Item(swGetPathName) = swComtmps
  21.             End If
  22.         Next

  23.      '写入数量

  24.      For j = 0 To swChidren.Length - 1
  25.             swCom = swChidren(j)
  26.             If swCom.IsVirtual Then
  27.                 Continue For
  28.             End If
  29.             If swCom.IsSuppressed Then
  30.                 Continue For
  31.             End If
  32.             If swCom.ExcludeFromBOM Then
  33.                 Continue For
  34.             End If
  35.             Dim swToNama As String
  36.             Dim swTopDocName As String
  37.             Dim swReplaceName As String
  38.             Dim swTopPCode As String
  39.             Dim swTopPName As String
  40.             Dim swConfigName As String         

  41.             swConfigName = swCom.ReferencedConfiguration
  42.             swGetPathName = swCom.GetPathName.ToUpper
  43.             swPathSplit = Split(swGetPathName, "")
  44.             swToNama = swPathSplit(UBound(swPathSplit))
  45.             swTopDocName = Microsoft.VisualBasic.Left(swToNama, Len(swToNama) - 7)
  46.             Label1.Text = "打开模型:"
  47.             Label12.Text = swGetPathName
  48.             swContains = swMocName.Contains(swGetPathName)
  49.             If swContains = True Then
  50.                 Continue For
  51.             Else
  52.                 curNode = rootNode.Nodes.Add(swTopDocName)
  53.                 swcomModel = swCom.GetModelDoc2
  54.                 swMocName.Add(swGetPathName)
  55.                 swComtmpa = swComDict.Item(swGetPathName)
  56.                 If RadioButton3.Checked = True Then
  57.                     swPropMgr = swcomModel.Extension.CustomPropertyManager("")
  58.                 Else
  59.                     swPropMgr = swcomModel.Extension.CustomPropertyManager(swConfigName)
  60.                 End If
  61.                 If RadioButton7.Checked = True Then                  
  62.                     swPropMgr.Add3(CustomInfoQTY, 30, swComtmpa, 1)
  63.                     If RadioButton11.Checked = True Then
  64.                         swPropMgr.Add3(CustomInfoTTY, 30, Couu, 1)                       
  65.                     End If
  66.                 End If            
  67.            
  68.             End If
  69.             swcomModel.Save()
  70.         Next
复制代码
发表于 2020-3-10 20:20:03 | 显示全部楼层
可以分享下吗
发表于 2020-3-10 20:56:34 | 显示全部楼层
楼主好方法!
 楼主| 发表于 2020-3-10 21:37:45 | 显示全部楼层
希望有vba高手整理出宏分享上来给大家用,vb.net须打包后才能使用,我这个工具还有一些功能没有完善,现在还没有打包发行,所以暂时不能分享给大家。
发表于 2020-3-11 08:21:18 | 显示全部楼层
谢谢
发表于 2020-3-12 23:16:45 | 显示全部楼层
感谢楼主,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网 ( 粤ICP备09030954号

GMT+8, 2020-3-30 06:09 , Processed in 0.025731 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2001-2020 Comsenz Inc.

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