iCAx开思网

标题: 数量统计与图号分离的新思路 [打印本页]

作者: wenmk    时间: 2020-3-7 23:19
标题: 数量统计与图号分离的新思路
        闷大版主分享的数量统计宏使用非常方便,但在实际使用中(经本人测试),一个大型的装配文件(20000+模型)运行宏至少要50分钟以上,如果电脑配置不好的情况下可能时间会更长。因此经过测试后,发现问题的所在:原因是当遍历到一个模型时,会进入属性去改写属性,如果这个模型在这个装配体中出现100次,则会100次去改写同一个模型的属性,如果出现次数越多,读取和写入的次数也就越多,这样在零件数量非常大的时候运行效率会降低。本人经过用GetComponents方法只须遍历装配模型两次即可统计数量,一次统计数量,第二次写入属性。而且可以方便的把分离图号也加进去。经测试,同样的装配文件(20000+),宏文件运行50分钟以上,而新的工具只要5分钟左右。

作者: shentu    时间: 2020-3-8 21:34
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。
作者: kingkelly    时间: 2020-3-9 21:06
shentu 发表于 2020-3-8 21:34
很编程软件很历害。。。楼主共享出来啊,让这工具越来越好用,造福大家。

有更好的方法,可以大家一起看看。

作者: gdzsh    时间: 2020-3-10 13:49
我一直在用这个宏,不过加入图号分离不需要了
作者: wenmk    时间: 2020-3-10 13:57
本帖最后由 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
复制代码

作者: alicen_mo    时间: 2020-3-10 20:20
可以分享下吗
作者: qxzch    时间: 2020-3-10 20:56
楼主好方法!
作者: wenmk    时间: 2020-3-10 21:37
希望有vba高手整理出宏分享上来给大家用,vb.net须打包后才能使用,我这个工具还有一些功能没有完善,现在还没有打包发行,所以暂时不能分享给大家。
作者: alicen_mo    时间: 2020-3-11 08:21
谢谢
作者: 13993359550    时间: 2020-3-12 23:16
感谢楼主,谢谢分享
作者: shilimengma    时间: 2020-3-27 17:34
wenmk 发表于 2020-3-10 21:37
希望有vba高手整理出宏分享上来给大家用,vb.net须打包后才能使用,我这个工具还有一些功能没有完善,现在 ...

大佬,批量改名加图号最新工具能分享下吗,工作确实需要,真的感谢!!

作者: xiaocake    时间: 2020-4-12 14:18
只遍历一次就可以,遍历后记下需要修改的模型文件和及对应的数量信息,后面根据记下的信息直接依次写入。
作者: seamopan    时间: 2020-6-7 11:47
大佬分享下啊
作者: jyzas    时间: 2020-11-16 09:10
不错,支持下




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3