QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 7317|回复: 14
收起左侧

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

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

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

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

x
许久没发过工具了~ 发一个吧~功能:自动计算一个组件中,零件的个数。, n- M7 ]5 |9 l* O0 _
注:使用该功能时,请关闭相关的SW文档,最好直接把SW关了!
7 {# _% j' m, [/ a, a! c/ b+ y, D因为使用的是DM API !有BUG请反映~谢谢!1 x% `5 R& A, F' l$ Z9 Q/ _; Q2 A
有BUG请反映~
/ }8 R, e" }, a) G0 x4 _! [下载地址* I4 Q* s; P9 H- N4 G8 Z0 j/ B2 x
1 E) h+ |: R: `; v, t
QQ图片20170224164337.png
4 ]- }0 C& F. Z2 P, k& ~  v2 c5 U8 X" `" P$ K7 l; n

, c- A+ Z. v% K& K
' c8 A" K- I0 ^" J% D9 c$ `% s9 l/ i6 G& ~) k. @# ]

) ~. p2 x3 m5 T! I
$ G% n' P3 p4 ^( L
发表于 2019-1-27 16:24:41 | 显示全部楼层 来自: 中国广东广州
没有用过不知掉 是否好用
发表于 2019-1-23 09:34:59 | 显示全部楼层 来自: 中国广东佛山
顶一个,下载来备用 了
发表于 2018-10-5 11:50:29 | 显示全部楼层 来自: 中国广东惠州
太好用用了、客户的图纸都没数量、这个正好解决大问题、感谢
发表于 2017-6-3 09:42:54 | 显示全部楼层 来自: 中国浙江宁波
) r( n2 o' g8 o; I7 @
朋友,此方法可以将单台数量显示出来,有没有好的方法将多台数量显示出来的呢,比如我要做3台,那么单台数量乘以3。。。怎么可以只输入3就可以自动出来多台数量
发表于 2017-4-2 17:20:39 | 显示全部楼层 来自: 中国四川自贡
貌似这个功能没有意义?数量软件自带统计
* B8 H2 b  K+ S- }# E3 p; h. Y
发表于 2017-3-29 22:10:12 | 显示全部楼层 来自: 中国广东中山
感谢分享,支持楼主
发表于 2017-3-11 13:34:45 | 显示全部楼层 来自: 中国天津
为什么2014不能用呢
 楼主| 发表于 2017-2-28 08:42:48 | 显示全部楼层 来自: 中国广东佛山

; k* I+ h- g9 O# A谢谢,不过,我这小工具用的不是“在线API”!无参考意义!
4 {6 u& l; M6 \! G7 l下个版本我会把修改的文件锁定在“本目录”,以防某些朋友“不按常规出牌~”。
发表于 2017-2-27 21:57:29 | 显示全部楼层 来自: 中国福建厦门
本帖最后由 fend5566 于 2017-2-27 22:00 编辑 ! D7 l, D4 V2 Q' L: K* h3 j) {
  1. <div><div>Dim TopDocPathOnly As String2 H: O( F7 j/ ~0 @1 G) M
  2. Dim PartsCollect() As String '遍历清单
    . ?1 o" ~6 q: \* e
  3. Dim InCollectCount As Double '遍历清单长度
    $ _/ f8 U6 D' _
  4. Dim CustomInfoQTY As String
    8 |+ y& d5 [% h4 f. Y

  5. 9 ?- k& y, e* V5 @8 |
  6. Sub main()5 F& P. f5 q) R) J/ J
  7. Set swApp = Application.SldWorks '对象
    2 H% X& ]4 s# J& a
  8. Set TopDoc = swApp.ActiveDoc '总装对象4 t5 L* f0 _& u8 K
  9. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    # g  [3 W, d3 V4 V
  10. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割8 A2 K& N4 R( z: o: C( Z; d; T1 L" f0 [
  11. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称6 |7 t) T4 b1 c1 ^9 U' e
  12. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)( [% W( C1 p/ K6 c4 ^4 Z
  13. TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '总装目录名称
    * a2 E% ?3 U4 Q8 S3 H% r& x
  14. TopConfString = TopDoc.GetActiveConfiguration.Name '总装配置名称- ^6 R7 w: D6 V; p. ]9 z
  15. CustomInfoQTY = InputBox("自定义属性名称", "遍历" & TopDocName, "数量") '  可按个人喜好修改预设值$ h1 a$ A! p% @& f4 v9 b1 o
  16. If CustomInfoQTY = "" Then Exit Sub '按下取消离开宏5 ~3 `# D& q. [. @! ?: y. v
  17. InCollectCount = 1 '遍历清单长度基数8 g; `  M. z6 y1 e% h! n, X
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    4 P: g7 {. s' w3 `; C1 V: ?
  19. SubAsm TopDoc, TopConfString '遍历
    & e3 z6 ~9 A& Y& y7 L4 `
  20. End Sub: F; B+ G8 l* [4 G7 O' a% \" h% J6 n
  21. $ Y7 ?( j* w9 G& M; Y0 _/ [
  22. Function SubAsm(AsmDoc, ConfString)# I6 g9 l* {* ]2 |, X6 U
  23. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    & ~2 R) X* j( G& h; q. B* ^
  24. Set RootComponent = Configuration.GetRootComponent
    4 p6 {9 @9 Q' y, e# V
  25. Components = RootComponent.GetChildren' E, ~- X& p( |  O
  26. For Each Child In Components5 a' D1 P! Q7 |# I1 @! |5 b- ~
  27.     Set ChildModel = Child.GetModelDoc
    8 B8 z- y  E3 r7 V' r  E
  28.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化9 S2 @# h7 d$ ], u; ]* q+ O+ \7 t
  29.     ChildConfString = Child.ReferencedConfiguration '零件配置名称6 s' Z- o" G5 w6 I2 \
  30.         ChildType = ChildModel.GetType
    # w& B0 w# r' H
  31.             ChildPathSplit = Split(Child.GetPathName, "") '分割- u" D- Q, V+ ]0 b0 d
  32.             ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    * w! \& n/ H5 G5 y2 e
  33.             ChildPathOnly = ChildPathSplit(UBound(ChildPathSplit) - 1) '零件目录名称6 f+ a2 X& l: e+ w) ^
  34.             If ChildPathOnly = TopDocPathOnly Then SamePath = True Else SamePath = False '是否在总装目录
    0 [9 d! h5 y/ c; V4 W5 q" U
  35.             If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不在总装目录及不包括在材料明细表中及封套 7 M0 E' i/ v  Z4 j! o$ U
  36.                 UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称: e% e1 M) I6 E. O! _1 o% \% g
  37.                 UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量* |) |# v* h/ z/ q
  38.                 If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错2 F) l# ]7 Z4 C* k
  39.                 inCollect = False '重置判断变量2 ^8 Q( U! w7 ]( p0 u
  40.                 For Each PartinCollect In PartsCollect '判断是否已在遍历清单内
    , _0 P; e  H8 W* p: y
  41.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True* h+ {! i6 X. D3 K+ c
  42.                 Next
    4 e8 D1 R) C' P- N/ ~
  43.                 If inCollect Then '已在遍历清单内' g6 v% Q1 G* K& X6 A
  44.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE+ E, I. E( l0 |( T) V4 P- L  a
  45.                     ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY5 H7 s, o: j3 n* A* M8 L& s( ?0 v
  46.                     ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    9 H+ F$ F9 B- X1 T
  47.                 Else '不在遍历清单内(首次处理)
    1 f9 |- K; U) i6 M7 {5 W
  48.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY9 U' [. P7 ]* d: ^* J5 _& d) ^/ G: M" V
  49.                     ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    : d0 g1 r% ]$ ]4 Z
  50.                     InCollectCount = InCollectCount + 1
    $ T& C' I/ O, U+ G
  51.                     ReDim Preserve PartsCollect(InCollectCount) '重新定义数组项数(保留内含数据)
    6 J: d2 @- [4 L; b7 B1 |  p" ~, c
  52.                     PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中3 T  V& p" x% G1 ^4 l1 J
  53.                     ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '单位设定为kg(可按喜好加入设定)
    7 y/ [7 i' x% k
  54.                 End If
    & H- {- ]: d% w% e: u& x3 j4 x
  55.             End If
    : j9 ?6 }9 |4 h6 p% ~
  56.             If ChildType = 2 Then
    5 ~% _6 j; Y8 S* |
  57.             SubAsm ChildModel, ChildConfString '如果是装配则向下遍历, {) j+ p" V# s* J+ Q+ [! _
  58.         End If* s6 p3 {+ [7 J% ]) k" I+ R/ ?# f; P
  59.     End If2 K8 ?+ t" {' b; R5 m
  60. Next
    : h& T) t, E  i- [3 a% {
  61. End Function</div><div></div><div></div><div>新建个宏,这个是在其他网站转后修改的,可以对子装配相同零件单台用的统计,数量写入特定配置进,自定义属性是:数量。
    1 G2 s6 T# D" H3 H9 c6 d- U, E
  62. </div></div>
复制代码
发表于 2017-2-27 20:55:53 | 显示全部楼层 来自: 中国江苏苏州
bash 发表于 2017-2-27 10:54
6 R7 `: f; e* i; @- w. c- R果然,2016版的DM API 不再线程安全!
) K* M3 j0 @0 @) I. `  g, t使用SW2016版本的朋友,请不要使用“线程”,否则会被删除原有属性 ...
0 c3 p7 t( z# a7 y
果然如此,谢谢楼主,盼楼主早日更新版本!!
 楼主| 发表于 2017-2-27 10:55:17 | 显示全部楼层 来自: 中国广东佛山
正确的使用办法:先用SW把组件打包一份出来,然后再修改。
 楼主| 发表于 2017-2-27 10:54:45 | 显示全部楼层 来自: 中国广东佛山
果然,2016版的DM API 不再线程安全!
  r& [; J: t8 ~& W使用SW2016版本的朋友,请不要使用“线程”,否则会被删除原有属性。
5 ~7 T3 l; H( `; M9 |" u这个我在下个版本中会修正,自动判断是不是2016版好了!
发表于 2017-2-26 07:41:17 | 显示全部楼层 来自: 中国辽宁丹东
谢谢楼主分享好工具,测试一下,目录在桌面上,对属性没有修改,win7 64位 SW2013 64位
发表于 2017-2-25 22:45:04 | 显示全部楼层 来自: 中国江苏苏州
本帖最后由 wenmk123 于 2017-2-26 20:16 编辑 . D8 K$ T( q4 p& R
/ A$ ~* {( X% X7 {" n7 {
先谢过楼主,刚刚下载试用了一下,SW2016SP2,装配体的零件数量是对了,但是有个问题,幸亏我打包出来测试,不然问题大了!!就是总装配体的数量是对的,但是却把我所有的自定义属性中的所有设定参数全部删除了,只留下一个数量。麻烦楼主测试一下,如果这个问题不能解决,这个宏是不能用的……谢谢!!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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