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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

SW 零件数量计算/遍历小工具

[复制链接]

17

主题

76

帖子

90

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
267
QQ
跳转到指定楼层
楼主
发表于 2017-2-24 16:54:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
许久没发过工具了~ 发一个吧~功能:自动计算一个组件中,零件的个数。
注:使用该功能时,请关闭相关的SW文档,最好直接把SW关了!
因为使用的是DM API !有BUG请反映~谢谢!
有BUG请反映~
下载地址
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

18

主题

73

帖子

123

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
288
QQ
沙发
发表于 2017-2-24 20:33:31 | 只看该作者
朋友,此方法可以将单台数量显示出来,有没有好的方法将多台数量显示出来的呢,比如我要做3台,那么单台数量乘以3。。。怎么可以只输入3就可以自动出来多台数量
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

13

主题

68

帖子

102

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
233
QQ
板凳
发表于 2017-2-25 00:25:15 | 只看该作者
貌似这个功能没有意义?数量软件自带统计
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

78

帖子

102

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
250
QQ
地板
发表于 2017-2-25 19:13:44 | 只看该作者
感谢分享,支持楼主
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

23

主题

90

帖子

170

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
5#
发表于 2017-2-26 11:07:41 | 只看该作者

   经典案例图书
为什么2014不能用呢
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

75

帖子

138

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
314
QQ
6#
发表于 2017-2-27 13:53:31 | 只看该作者
谢谢,不过,我这小工具用的不是“在线API”!无参考意义!
下个版本我会把修改的文件锁定在“本目录”,以防某些朋友“不按常规出牌~”。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

57

帖子

60

金币

天使

Rank: 2Rank: 2

积分
168
QQ
7#
发表于 2017-2-28 00:18:04 | 只看该作者

   经典案例图书
    <div><div>Dim TopDocPathOnly As String
    Dim PartsCollect() As String '遍历清单
    Dim InCollectCount As Double '遍历清单长度
    Dim CustomInfoQTY As String
    Sub main()
    Set swApp = Application.SldWorks '对象
    Set TopDoc = swApp.ActiveDoc '总装对象
    If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '总装目录名称
    TopConfString = TopDoc.GetActiveConfiguration.Name '总装配置名称
    CustomInfoQTY = InputBox("自定义属性名称", "遍历" & TopDocName, "数量") '  可按个人喜好修改预设值
    If CustomInfoQTY = "" Then Exit Sub '按下取消离开
    InCollectCount = 1 '遍历清单长度基数
    ReDim PartsCollect(InCollectCount) '定义阵列项数
    SubAsm TopDoc, TopConfString '遍历
    End Sub
    Function SubAsm(AsmDoc, ConfString)
    Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    Set RootComponent = Configuration.GetRootComponent
    Components = RootComponent.GetChildren
    For Each Child In Components
        Set ChildModel = Child.GetModelDoc
        If Not (ChildModel Is Nothing) Then '排除抑制及轻化
        ChildConfString = Child.ReferencedConfiguration '零件配置名称
            ChildType = ChildModel.GetType
                ChildPathSplit = Split(Child.GetPathName, "") '分割
                ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
                ChildPathOnly = ChildPathSplit(UBound(ChildPathSplit) - 1) '零件目录名称
                If ChildPathOnly = TopDocPathOnly Then SamePath = True Else SamePath = False '是否在总装目录
                If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不在总装目录及不包括在材料明细表中及封套 ?
                    UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
                    UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量
                    If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错
                    inCollect = False '重置判断变量
                    For Each PartinCollect In PartsCollect '判断是否已在遍历清单内
                    If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
                    Next
                    If inCollect Then '已在遍历清单内
                    ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
                        ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
                        ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
                    Else '不在遍历清单内(首次处理)
                    ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
                        ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
                        InCollectCount = InCollectCount + 1
                        ReDim Preserve PartsCollect(InCollectCount) '重新定义数组项数(保留内含数据)
                        PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
                        ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '单位设定为kg(可按喜好加入设定)
                    End If
                End If
                If ChildType = 2 Then
                SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
            End If
        End If
    Next
    End Function</div><div></div><div></div><div>新建个,这个是在其他网站转后修改的,可以对子装配相同零件单台用的统计,数量写入特定配置进,自定义属性是:数量。
    </div></div>

复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

69

帖子

52

金币

天使

Rank: 2Rank: 2

积分
174
QQ
8#
发表于 2017-3-1 10:45:33 | 只看该作者
果然如此,谢谢楼主,盼楼主早日更新版本!!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

14

主题

77

帖子

101

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
246
QQ
9#
发表于 2017-3-1 11:09:14 | 只看该作者
正确的使用办法:先用SW把组件打包一份出来,然后再修改。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

74

帖子

75

金币

天使

Rank: 2Rank: 2

积分
187
QQ
10#
发表于 2017-3-2 09:28:20 | 只看该作者
果然,2016版的DM API 不再线程安全!
使用SW2016版本的朋友,请不要使用“线程”,否则会被删除原有属性。
这个我在下个版本中会修正,自动判断是不是2016版好了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

17

主题

72

帖子

91

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
262
QQ
11#
发表于 2017-3-2 15:17:03 | 只看该作者
谢谢楼主分享好工具,测试一下,目录在桌面上,对属性没有修改,win7 64位 SW2013 64位
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

18

主题

74

帖子

136

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
313
QQ
12#
发表于 2017-3-2 21:01:45 | 只看该作者
先谢过楼主,刚刚下载试用了一下,SW2016SP2,装配体的零件数量是对了,但是有个问题,幸亏我打包出来测试,不然问题大了!!就是总装配体的数量是对的,但是却把我所有的自定义属性中的所有设定参数全部删除了,只留下一个数量。麻烦楼主测试一下,如果这个问题不能解决,这个是不能用的……谢谢!!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

金币

混混

Rank: 1

积分
22
13#
发表于 2021-5-28 13:50:50 | 只看该作者
楼主很专业,写得很好!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-28 01:50 , Processed in 0.210273 second(s), 36 queries .

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

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

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