QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 7313|回复: 14
收起左侧

[分享] SW 零件数量计算/遍历小工具

[复制链接]
发表于 2017-2-24 16:54:17 | 显示全部楼层 |阅读模式 来自: 中国广东佛山
安装
主题分类用于问题归类:

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
许久没发过工具了~ 发一个吧~功能:自动计算一个组件中,零件的个数。) `* V! c1 J& a% a9 S! J7 A( }; E  o
注:使用该功能时,请关闭相关的SW文档,最好直接把SW关了!
2 J, q1 |2 @% d  m7 m因为使用的是DM API !有BUG请反映~谢谢!5 e1 o+ t! \7 O% _  k1 a+ k
有BUG请反映~
: y5 q! l2 ~0 I! d+ k3 a  V5 I( Z下载地址! c! q8 l# [4 f+ P

. ~( ?2 g' ^: M5 ? QQ图片20170224164337.png + \/ {  m+ Y% t8 }: u8 }/ u8 A
# v3 g; s) f8 b" ?) k5 a  V9 a

+ V- W) {, _, h  K! \. `3 k5 n9 e4 g

! v* r7 N; U0 M- o, n! M6 a8 Y/ T! N) T/ q3 d' I9 b

$ \% L6 I0 C) }6 D& x
发表于 2019-1-27 16:24:41 | 显示全部楼层 来自: 中国广东广州
没有用过不知掉 是否好用
发表于 2019-1-23 09:34:59 | 显示全部楼层 来自: 中国广东佛山
顶一个,下载来备用 了
发表于 2018-10-5 11:50:29 | 显示全部楼层 来自: 中国广东惠州
太好用用了、客户的图纸都没数量、这个正好解决大问题、感谢
发表于 2017-6-3 09:42:54 | 显示全部楼层 来自: 中国浙江宁波
# M3 m% n9 {: j
朋友,此方法可以将单台数量显示出来,有没有好的方法将多台数量显示出来的呢,比如我要做3台,那么单台数量乘以3。。。怎么可以只输入3就可以自动出来多台数量
发表于 2017-4-2 17:20:39 | 显示全部楼层 来自: 中国四川自贡
貌似这个功能没有意义?数量软件自带统计. Q0 z: T$ N6 n( M# C
发表于 2017-3-29 22:10:12 | 显示全部楼层 来自: 中国广东中山
感谢分享,支持楼主
发表于 2017-3-11 13:34:45 | 显示全部楼层 来自: 中国天津
为什么2014不能用呢
 楼主| 发表于 2017-2-28 08:42:48 | 显示全部楼层 来自: 中国广东佛山

5 C+ @! D$ f  p: A% x谢谢,不过,我这小工具用的不是“在线API”!无参考意义!/ o2 Q) L) Z- W8 k2 [$ U: v
下个版本我会把修改的文件锁定在“本目录”,以防某些朋友“不按常规出牌~”。
发表于 2017-2-27 21:57:29 | 显示全部楼层 来自: 中国福建厦门
本帖最后由 fend5566 于 2017-2-27 22:00 编辑
1 ?# t! V2 ]' z4 g5 r7 G" d( r2 \
  1. <div><div>Dim TopDocPathOnly As String
    - a: Q6 f) L( N/ ]
  2. Dim PartsCollect() As String '遍历清单
    5 ]. U8 D1 ]6 M9 _8 U4 w/ f7 [6 v, ^
  3. Dim InCollectCount As Double '遍历清单长度, G8 A4 f6 |  y9 W% f
  4. Dim CustomInfoQTY As String7 d8 y4 }* h: A- x1 \" U  j

  5. 8 ]4 Z, k  h# l. a
  6. Sub main()2 H9 G9 B$ m0 z
  7. Set swApp = Application.SldWorks '对象; u9 h5 ^" h5 a3 D1 T7 G& m
  8. Set TopDoc = swApp.ActiveDoc '总装对象
    8 W% d8 y* i7 u1 t. W" n# ~
  9. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出! E4 L# c1 u* Q) Y  ?
  10. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    6 ^" v4 S1 ^5 M: Q* p
  11. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称4 m0 W, ^/ y  q  o9 r) H
  12. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)4 ?/ ^# c$ h& M4 a- s
  13. TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '总装目录名称
    7 f! h( _3 ]; \+ b% n  P
  14. TopConfString = TopDoc.GetActiveConfiguration.Name '总装配置名称! v7 x- q) z& O9 Q9 l
  15. CustomInfoQTY = InputBox("自定义属性名称", "遍历" & TopDocName, "数量") '  可按个人喜好修改预设值9 |1 @6 [! w0 d( v3 v) s
  16. If CustomInfoQTY = "" Then Exit Sub '按下取消离开宏3 U5 F. M# C3 P2 p
  17. InCollectCount = 1 '遍历清单长度基数
    , l" y$ g; S& M) s
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数0 [- k- a6 N, I$ u
  19. SubAsm TopDoc, TopConfString '遍历& e1 d$ Y8 x' i$ G$ @  Q
  20. End Sub7 B% _/ j$ ?: e1 s" S
  21. , T/ d" \7 n% t
  22. Function SubAsm(AsmDoc, ConfString)1 R8 C7 Z# h( a7 ^7 F. [; q
  23. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    5 _5 {! \& x. M, m/ K* e( W3 S
  24. Set RootComponent = Configuration.GetRootComponent9 ]' v) H& B$ r# @8 V6 X
  25. Components = RootComponent.GetChildren0 i' Z1 b6 S9 @+ }( f4 y& W2 U& L7 C
  26. For Each Child In Components
    $ k; S, J* q  }2 B, L- d4 w
  27.     Set ChildModel = Child.GetModelDoc
    ) e8 p4 J. r/ A* {" M
  28.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化6 B! x9 ]2 C/ q# |. e8 U
  29.     ChildConfString = Child.ReferencedConfiguration '零件配置名称5 h6 ?1 _8 B& r& z9 d
  30.         ChildType = ChildModel.GetType
    1 q+ j' I" p: U& U% z, ]
  31.             ChildPathSplit = Split(Child.GetPathName, "") '分割0 M; L! F+ M" F/ T3 j
  32.             ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    . R* N+ N/ ]# j
  33.             ChildPathOnly = ChildPathSplit(UBound(ChildPathSplit) - 1) '零件目录名称: e1 F9 m$ M/ }6 L$ v" H
  34.             If ChildPathOnly = TopDocPathOnly Then SamePath = True Else SamePath = False '是否在总装目录& e7 E2 ~3 p2 I3 B! i
  35.             If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不在总装目录及不包括在材料明细表中及封套 
    % Z3 p5 r1 j- R/ ^
  36.                 UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称8 Y/ `* r' ^" X9 d9 W
  37.                 UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量5 z" _9 Z6 K2 ~' j2 \0 Y
  38.                 If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错2 z- p; y* ]9 \7 J! M; d$ C
  39.                 inCollect = False '重置判断变量
    2 \2 \% B) n8 M; b, B. s6 B
  40.                 For Each PartinCollect In PartsCollect '判断是否已在遍历清单内. r1 H( }! l- K+ j
  41.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True. d4 a; \$ J$ H# Z4 n" M
  42.                 Next
    9 M+ y* `+ m: M: x
  43.                 If inCollect Then '已在遍历清单内. l1 S# S3 q. B
  44.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    : A3 j: K5 |& Q. X% E6 Q
  45.                     ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    ; Q: ?3 w- t$ [' G6 D
  46.                     ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty4 H: @0 `* C5 r6 `4 ^
  47.                 Else '不在遍历清单内(首次处理)- `4 u# C7 }# G0 d
  48.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY6 f; F. B% d; d" k
  49.                     ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    , v" ]) f) i7 B" M( P; G) G. ?( Y
  50.                     InCollectCount = InCollectCount + 1
    - E0 x6 x6 Y- m4 }6 d( M
  51.                     ReDim Preserve PartsCollect(InCollectCount) '重新定义数组项数(保留内含数据)
    , L% l# ?! C0 e" n3 s) n
  52.                     PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
      Q) X5 I' m- \7 C, F3 D+ j2 x1 G
  53.                     ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '单位设定为kg(可按喜好加入设定)- z7 t. _! G; [- e8 J, d
  54.                 End If, g- j9 W2 o- W" t/ ^; o9 c+ Q, s; K. I
  55.             End If
    9 [$ c7 h/ s/ D5 n0 Q
  56.             If ChildType = 2 Then
    4 p3 M# {0 p  `% j, a
  57.             SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    * B/ M6 L2 H  X
  58.         End If
    5 e* A: k" I' U0 [
  59.     End If
    4 _* r- T1 T, x( t6 \
  60. Next- T1 g8 H+ K8 I( w9 ~4 g/ G4 S
  61. End Function</div><div></div><div></div><div>新建个宏,这个是在其他网站转后修改的,可以对子装配相同零件单台用的统计,数量写入特定配置进,自定义属性是:数量。4 G; U+ [. l3 C8 x5 Y
  62. </div></div>
复制代码
发表于 2017-2-27 20:55:53 | 显示全部楼层 来自: 中国江苏苏州
bash 发表于 2017-2-27 10:54
# [) N# t2 `# s6 _8 n果然,2016版的DM API 不再线程安全!
4 D! a0 i* v8 K. z; F6 o! Y使用SW2016版本的朋友,请不要使用“线程”,否则会被删除原有属性 ...
* e; M3 o' c# c. A
果然如此,谢谢楼主,盼楼主早日更新版本!!
 楼主| 发表于 2017-2-27 10:55:17 | 显示全部楼层 来自: 中国广东佛山
正确的使用办法:先用SW把组件打包一份出来,然后再修改。
 楼主| 发表于 2017-2-27 10:54:45 | 显示全部楼层 来自: 中国广东佛山
果然,2016版的DM API 不再线程安全!
# o) o. U  X1 Y使用SW2016版本的朋友,请不要使用“线程”,否则会被删除原有属性。
# z6 Z" k* T* t这个我在下个版本中会修正,自动判断是不是2016版好了!
发表于 2017-2-26 07:41:17 | 显示全部楼层 来自: 中国辽宁丹东
谢谢楼主分享好工具,测试一下,目录在桌面上,对属性没有修改,win7 64位 SW2013 64位
发表于 2017-2-25 22:45:04 | 显示全部楼层 来自: 中国江苏苏州
本帖最后由 wenmk123 于 2017-2-26 20:16 编辑 0 a. N- o. g! u/ ^1 O9 r
8 p6 S! ]% \9 ]& }4 q
先谢过楼主,刚刚下载试用了一下,SW2016SP2,装配体的零件数量是对了,但是有个问题,幸亏我打包出来测试,不然问题大了!!就是总装配体的数量是对的,但是却把我所有的自定义属性中的所有设定参数全部删除了,只留下一个数量。麻烦楼主测试一下,如果这个问题不能解决,这个宏是不能用的……谢谢!!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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