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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己在用的图号分离、删除所有属性、单位,差不多5、6个宏合并到一个宏,求指导优化

  [复制链接]

19

主题

127

帖子

77

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1369

最佳新人活跃会员热心会员宣传达人灌水之王

跳转到指定楼层
楼主
 楼主| 发表于 2021-6-24 09:14:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
自己在用的图号分离、删除所有属性、单位,差不多5、6个宏合并到一个宏,求指导优化。


  1. Sub main()
  2. Dim swApp As SldWorks.SldWorks
  3. Dim swModel As SldWorks.ModelDoc2
  4. Dim Part As SldWorks.PartDoc
  5. Dim vCustInfoNameArr2, vCustInfoName2 As Variant
  6. Set swApp = Application.SldWorks
  7. Set swModel = swApp.ActiveDoc
  8. Set Part = swModel

  9. '删除所有属性
  10. vCustInfoNameArr2 = swModel.GetCustomInfoNames
  11. If Not IsEmpty(vCustInfoNameArr2) Then
  12. For Each vCustInfoName2 In vCustInfoNameArr2
  13. swModel.DeleteCustomInfo vCustInfoName2
  14. Next
  15. End If
  16. CurCFGname = Part.GetConfigurationNames
  17. CurCFGnameCount = Part.GetConfigurationCount
  18. For i = 0 To CurCFGnameCount - 1
  19. Set CusPropMgr = Part.Extension.CustomPropertyManager(CurCFGname(i))
  20. Vnamearr = CusPropMgr.GetNames
  21. If Not IsEmpty(Vnamearr) Then
  22. For Each Vnamearr2 In Vnamearr
  23. Part.DeleteCustomInfo2 CurCFGname(i), Vnamearr2
  24. Next
  25. End If
  26. Next

  27. '设置单位为"自定义"
  28.     swModel.Extension.SetUserPreferenceInteger 263, 0, 4        '设置单位为"自定"
  29.     swModel.Extension.SetUserPreferenceInteger 259, 0, 3        '最后一个值,1毫克,2克,3千克,4镑
  30.     swModel.Extension.SetUserPreferenceInteger 258, 0, 2        '长度
  31.     swModel.Extension.SetUserPreferenceInteger 260, 0, 6        '体积
  32.     swModel.ClearSelection2 True
  33.     swModel.Save '存档




  34. '展开长宽
  35. Dim swFeature As SldWorks.Feature
  36. Dim FeatName As String
  37. Dim FeatType As String
  38. Set swFeature = swModel.FirstFeature
  39. While Not swFeature Is Nothing '遍历零件FeatureManager并获取特征和属性
  40. FeatName = swFeature.Name '获取特征名称
  41. FeatType = swFeature.GetTypeName '获取特征属性
  42. If FeatType = "CutListFolder" Then
  43. swFeature.Name = "切割清单项目" '修改名称
  44. End If
  45. Set swFeature = swFeature.GetNextFeature
  46. Wend
  47. 'swModel.AddCustomInfo3 "", "长", swCustomInfoText, """SW-边界框长度@@@切割清单项目@零件.SLDPRT""" 'VB语法,两个引号组成一个引号
  48. 'swModel.AddCustomInfo3 "", "宽", swCustomInfoText, """SW-边界框宽度@@@切割清单项目@零件.SLDPRT"""

  49. '图号分离
  50. swApp.ActiveDoc.ActiveView.FrameState = 1
  51. Set CurCFG = Part.GetActiveConfiguration()
  52. ConfName = CurCFG.Name
  53. Name = swApp.ActiveDoc.GetTitle()
  54. c = Replace(Name, " ", "")
  55. b = Len(c)
  56. e = Right(c, 7)
  57. If e = ".SLDPRT" Or e = ".SLDASM" Or e = ".sldprt" Or e = ".sldasm" Then
  58. f = Left(c, b - 7)
  59. Else
  60. f = c
  61. End If
  62. k = Len(f)
  63. kk = LenB(StrConv(f, vbFromUnicode))
  64. If k = kk Then '纯数字的情况
  65. s = ""
  66. t = f
  67. Else
  68. If kk / k = 2 Then  '纯汉字的情况
  69. t = ""
  70. s = f
  71. Else
  72. For i = 1 To k
  73. If Asc(Mid$(f, i, 1)) < 0 Then
  74. w = i '确定第一个汉字的位置
  75. Exit For
  76. End If
  77. Next
  78. If w = 1 Then                '名称+代号的情况
  79. s = Left(f, kk - k)
  80. t = Right(f, k - (kk - k))
  81. Else                         '代号+名称的情况
  82. s = Right(f, k - w + 1)
  83. t = Left(f, w - 1)
  84. End If
  85. End If
  86. End If
  87. 'swModel.AddCustomInfo3 "", "图号", swCustomInfoText, t
  88. 'swModel.AddCustomInfo3 "", "名称", swCustomInfoText, s

  89. '删除以下值
  90. blnretval = swModel.DeleteCustomInfo2("", "成型规格")
  91. blnretval = swModel.DeleteCustomInfo2("", "材质")
  92. blnretval = swModel.DeleteCustomInfo2("", "钣金厚度")
  93. blnretval = swModel.DeleteCustomInfo2("", "质量")
  94. blnretval = swModel.DeleteCustomInfo2("", "体积")
  95. blnretval = swModel.DeleteCustomInfo2("", "表面积")
  96. blnretval = swModel.DeleteCustomInfo2("", "表面处理")
  97. blnretval = swModel.DeleteCustomInfo2("", "数量")
  98. blnretval = swModel.DeleteCustomInfo2("", "工序1")
  99. blnretval = swModel.DeleteCustomInfo2("", "工序2")
  100. blnretval = swModel.DeleteCustomInfo2("", "工序3")
  101. blnretval = swModel.DeleteCustomInfo2("", "工序4")
  102. blnretval = swModel.DeleteCustomInfo2("", "工序5")
  103. blnretval = swModel.DeleteCustomInfo2("", "备注")
  104. blnretval = swModel.DeleteCustomInfo2("", "折弯半径")
  105. blnretval = swModel.DeleteCustomInfo2("", "K因子")
  106. blnretval = swModel.DeleteCustomInfo2("", "型材长度")

  107. '设置属性,赋默认值
  108. swModel.AddCustomInfo3 "", "图号", swCustomInfoText, t
  109. swModel.AddCustomInfo3 "", "名称", swCustomInfoText, s
  110. blnretval = swModel.AddCustomInfo3("", "材质", swCustomInfoText, """SW-Material""")
  111. blnretval = swModel.AddCustomInfo3("", "钣金厚度", swCustomInfoText, """厚度@钣金""")
  112. blnretval = swModel.AddCustomInfo3("", "质量", swCustomInfoText, """SW-Mass""")
  113. blnretval = swModel.AddCustomInfo3("", "体积", swCustomInfoText, """SW-Volume""")
  114. blnretval = swModel.AddCustomInfo3("", "表面积", swCustomInfoText, """SW-SurfaceArea""")
  115. blnretval = swModel.AddCustomInfo3("", "表面处理", swCustomInfoText, "")
  116. blnretval = swModel.AddCustomInfo3("", "数量", swCustomInfoText, "1")
  117. blnretval = swModel.AddCustomInfo3("", "工序1", swCustomInfoText, "2D激光")
  118. blnretval = swModel.AddCustomInfo3("", "工序2", swCustomInfoText, "折弯")
  119. blnretval = swModel.AddCustomInfo3("", "工序3", swCustomInfoText, "氩焊")
  120. blnretval = swModel.AddCustomInfo3("", "工序4", swCustomInfoText, "")
  121. blnretval = swModel.AddCustomInfo3("", "工序5", swCustomInfoText, "")
  122. blnretval = swModel.AddCustomInfo3("", "备注", swCustomInfoText, "")
  123. blnretval = swModel.AddCustomInfo3("", "折弯半径", swCustomInfoText, """D1@钣金""")
  124. blnretval = swModel.AddCustomInfo3("", "K因子", swCustomInfoText, """D2@钣金""")
  125. swModel.AddCustomInfo3 "", "展开长", swCustomInfoText, """SW-边界框长度@@@切割清单项目@零件.SLDPRT"""
  126. swModel.AddCustomInfo3 "", "展开宽", swCustomInfoText, """SW-边界框宽度@@@切割清单项目@零件.SLDPRT"""
  127. blnretval = swModel.AddCustomInfo3("", "型材长度", swCustomInfoText, "")

  128. swModel.Save

  129. End Sub
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 转播转播 分享教程|习题|模型|技巧 点赞点赞 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

19

主题

127

帖子

77

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1369

最佳新人活跃会员热心会员宣传达人灌水之王

沙发
 楼主| 发表于 2021-6-24 09:32:41 | 只看该作者
1,此宏是根据多个宏整合的,存在遍历重复现象,
2,有的属性写入自定义属性,有的写入配置特定属性,全部整合统一写入自定义属性,花了些时间的,
3,开头就是删除已有的自定义属性、配置特定属性,
4,设置单位为自定义,强制设置重量为千克,体积为立方米,表面积为平方米,
5,钣金展开长宽,
6,图号分离,不管哪种情况的图号都能分离,只有中文的全部写入名称,只有英文+数字的全部写入图号,
7,删除值,不知道什么作用,但不可缺少,
8,写入自定义属性,
9,写入完成后,自动保存零件。
可按需求删减。求大神优化。
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

板凳
发表于 2021-6-24 11:57:56 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

地板
发表于 2021-6-24 16:40:23 | 只看该作者
折弯系数,展开长,经常连接不上切割清单项目,知道是什么问题吗?
偶尔有些图纸可以连接上有数字,经常都是链接不上,就显示"SW-折弯系数@@@切割清单项目@AA00 JI AADD.SLDPRT"
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

39

主题

373

帖子

3091

金币

传奇

Rank: 8Rank: 8

积分
7794

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

5#
发表于 2021-6-24 17:31:18 | 只看该作者

   经典案例图书
yni621 发表于 2021-6-24 16:40
折弯系数,展开长,经常连接不上切割清单项目,知道是什么问题吗?
偶尔有些图纸可以连接上有数字,经常都 ...

sw版本问题,sw2018以上的版本创建的文档,可以这样获取切割清单数据,在其之下的版本就链接不上,不然论坛也不会出现那么多,获取切割清单数据的贴了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

127

帖子

77

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1369

最佳新人活跃会员热心会员宣传达人灌水之王

6#
 楼主| 发表于 2021-6-24 19:04:18 | 只看该作者
yni621 发表于 2021-6-24 16:40
折弯系数,展开长,经常连接不上切割清单项目,知道是什么问题吗?
偶尔有些图纸可以连接上有数字,经常都 ...

尝试把切割清单项目改成sheet
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

181

帖子

14

金币

堂主

Rank: 4

积分
692

最佳新人活跃会员热心会员宣传达人灌水之王

7#
发表于 2021-6-25 00:00:59 | 只看该作者

   经典案例图书
很好的东西,谢谢分享这些代码!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

8#
发表于 2021-6-25 09:42:15 | 只看该作者
nmimi 发表于 2021-6-24 19:04
尝试把切割清单项目改成sheet

昨天我就发现是这个,很多切割清单项目,后面多了1,或者没有,我看你的是自动更改为切割清单项目,所以能读取,单独版本这个宏还是挺好用的。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

127

帖子

77

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1369

最佳新人活跃会员热心会员宣传达人灌水之王

9#
 楼主| 发表于 2021-6-25 10:05:15 | 只看该作者
yni621 发表于 2021-6-25 09:42
昨天我就发现是这个,很多切割清单项目,后面多了1,或者没有,我看你的是自动更改为切割清单项目,所以 ...

有什么好的宏分享一下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

37

主题

990

帖子

1万

金币

版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
19665

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

10#
发表于 2021-6-25 10:16:09 | 只看该作者
tg000057 发表于 2021-6-24 17:31
sw版本问题,sw2018以上的版本创建的文档,可以这样获取切割清单数据,在其之下的版本就链接不上,不然论 ...

估计是SW2021才能这样链接,我只有19的,就不凑合了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

11#
发表于 2021-6-25 13:38:47 | 只看该作者
nmimi 发表于 2021-6-25 10:05
有什么好的宏分享一下

都是下版主的宏用,能用的他都汇总了,你那个改单位的宏也是他出的,把他汇总你的宏里面。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

12#
发表于 2021-6-25 13:40:49 | 只看该作者
tg000057 发表于 2021-6-24 17:31
sw版本问题,sw2018以上的版本创建的文档,可以这样获取切割清单数据,在其之下的版本就链接不上,不然论 ...

我的版本没问题,不过你说的也有道理,2018以上才有,之前的没这个功能,
Dim swFeature As SldWorks.Feature
Dim FeatName As String
Dim FeatType As String
Set swFeature = swModel.FirstFeature
While Not swFeature Is Nothing '遍历零件FeatureManager并获取特征和属性
FeatName = swFeature.Name '获取特征名称
FeatType = swFeature.GetTypeName '获取特征属性
If FeatType = "CutListFolder" Then
swFeature.Name = "切割清单项目" '修改名称
End If
主要是这个代码,他默认把切割清单项目修改名称,所以能链接上,其他我就看不懂了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

425

帖子

775

金币

传奇

Rank: 8Rank: 8

积分
4502

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

13#
发表于 2021-6-25 13:43:23 | 只看该作者
tg000057 发表于 2021-6-24 17:31
sw版本问题,sw2018以上的版本创建的文档,可以这样获取切割清单数据,在其之下的版本就链接不上,不然论 ...

T大,我想知道
blnretval = swModel.AddCustomInfo3
swModel.AddCustomInfo3
两个代码有什么区别,我看了很多图号分离的文件,都有这两个代码,楼主这个版本就两个都用上了,其他都是只能用一个,换了就不能用。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

39

主题

373

帖子

3091

金币

传奇

Rank: 8Rank: 8

积分
7794

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

14#
发表于 2021-6-25 14:27:11 | 只看该作者
Allate 发表于 2021-6-25 10:16
估计是SW2021才能这样链接,我只有19的,就不凑合了。

我的也是19版的,升级前是17版的,当初想用这样链接,还觉得方便,后来发现旧文档用不了,有点晕。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

39

主题

373

帖子

3091

金币

传奇

Rank: 8Rank: 8

积分
7794

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

15#
发表于 2021-6-25 14:28:37 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

yni621 发表于 2021-6-25 13:43
T大,我想知道
blnretval = swModel.AddCustomInfo3
swModel.AddCustomInfo3

我觉得是一样的啊,你可以自己换着试试看有什么区别啊。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

160

帖子

585

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2146

最佳新人活跃会员热心会员宣传达人灌水之王

16#
发表于 2021-10-7 08:05:52 | 只看该作者

   经典案例图书
活到老学到老!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

22

主题

1537

帖子

229

金币

传奇

Rank: 8Rank: 8

积分
5845

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

17#
发表于 2021-10-7 08:55:18 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

很不错,顶一下!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

18#
发表于 2021-10-7 11:12:18 | 只看该作者

   经典案例图书
很不错,顶一下!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

786

帖子

441

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2175

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

19#
发表于 2022-5-30 10:38:41 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

223

帖子

2378

金币

版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
9599

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

20#
发表于 2022-5-30 11:29:05 | 只看该作者
看了楼主的宏,获取钣金展开长度和宽度是采用的通过切割清单属性的方式,这也是我目前发现能实现的两种方式之一。1.这种方式能获取正确数值的情况是,软件必须在文档属性中设置“自动更新切割清单”,这样才能保证每次获取的值是模型最新的值。
2.另外就是这种方法有两层循环,先依次循环零件树找到切割清单入口,再在内部再次循环找属性表达式。
3.版本较低的话在自定义属性中是不能链接切割清单的属性,我在SolidWorks2016中没有实现。另外就是建议此方法可以设置为只执行一次,自定义属性已和切割清单关联,之后会自动更新对应值。每次执行太耗时间!
3.遇到多少实体零件,比如一个钣金,一个实体,这样的情况应该获取有困难。
4.我在自己的插件中是使用通过平板型式获取,主要是考虑到不用设置自动更新切割清单,这样减小系统资源开销,让SolidWorks软件运行更快,工作中流畅性好,不受版本限制,任意SolidWorks版本都可以使用,获取效果更快(相对楼主程序中获取切割清单属性表达式,如果可以楼主可以考虑我说的只执行一次,那应该是SolidWorks原生支持的效果更好)

另外就是设置单位,这种一般只需要设置一次,不用每次设置,可以提升效率。

以上是个人看法。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-8 07:44 , Processed in 0.203657 second(s), 35 queries .

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

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

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