找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
打印 上一主题 下一主题

[分享] 宏-按顺序特征重命名

[复制链接]
11
发表于 2018-6-11 15:18:30 | 只看该作者
ryouss 发表于 2018-6-10 10:14
如圖所示,請教pyczt大大是用什麼樣的簡体字型,用簡繁轉譯有些字型還是沒轉成!

以下代码我在简体系统下,控制面板中修改了语言区域导出,看能不能转换正常。
  1. 'PYCZT2018/5/26下载于https://www.codestack.net,2018/6/11修改
  2. 'This macro renames all the features in active model in the order, preserving the base names.
  3. '该宏按顺序重命名活动模型中的所有特征名,保留原基本名称。
  4. 'Only indices are renamed and the base name is preserved. For example Sketch21 will be renamed to Sketch1 for
  5. 'the first appearance of the sketch feature.
  6. '只有索引被重命名,基本名称被保留。例如,对于第一次出现的草图特性Sketch21将被重命名为Sketch1.


  7. 'Notes注意事项:
  8. '1.Only features with number at the end will be renamed (e.g. Front Plane will not be renamed to Front Plane1 and My1Feature will not be renamed)
  9. '只在结尾处有编号的特征将被重命名(例如,Front Plane不会被重命名为Front Plane1,以及My1Feature也不会被重命名)---因为正则表达式为开始(任意字符)(任意数字)结束
  10. '2.Case is ignored (case insensitive search)
  11. '大小写是忽略的
  12. '3.Only modelling features are renamed (the ones created after the Origin feature)
  13. '只重命名建模用的特征名(在原点特征之后的)

  14. '*****************************************************************

  15. Dim swApp As SldWorks.SldWorks
  16. Dim swModel As SldWorks.ModelDoc2

  17. Sub main()

  18.     Set swApp = Application.SldWorks
  19.    
  20.     Set swModel = swApp.ActiveDoc
  21.    
  22.     Dim passedOrigin As Boolean    '定义一个过原点的逻辑变量
  23.     passedOrigin = False
  24.    
  25.     If Not swModel Is Nothing Then
  26.    
  27.         Dim featNamesTable As Object
  28.         Dim processedFeats As Collection    ' 定义为记录集合类(Collection)。
  29.         
  30.         Set featNamesTable = CreateObject("Scripting.Dictionary")   '变量为字典Dictionary对象
  31.         Set processedFeats = New Collection
  32.         
  33.         featNamesTable.CompareMode = vbTextCompare '比较模式为字符串(不分大小写)
  34.         
  35.         Dim swFeat As SldWorks.Feature
  36.         Set swFeat = swModel.FirstFeature
  37.         
  38.         While Not swFeat Is Nothing
  39.             
  40.             If passedOrigin Then
  41.             
  42.             Debug.Print swFeat.Name
  43.                
  44.                 If Not Contains(processedFeats, swFeat) Then '比对特征记录集合与特征
  45.                     processedFeats.Add swFeat   '将特征增加到记录集合中
  46.                     RenameFeature swFeat, featNamesTable   '改名子程序
  47.                 End If
  48.                
  49.                 Dim swSubFeat As SldWorks.Feature
  50.                 Set swSubFeat = swFeat.GetFirstSubFeature   '子特征
  51.                
  52.                 While Not swSubFeat Is Nothing
  53.                     
  54.                     If Not Contains(processedFeats, swSubFeat) Then
  55.                         processedFeats.Add swSubFeat
  56.                         RenameFeature swSubFeat, featNamesTable
  57.                     End If
  58.                     
  59.                     Set swSubFeat = swSubFeat.GetNextSubFeature
  60.                     
  61.                 Wend
  62.             
  63.             End If
  64.             
  65.             If swFeat.GetTypeName2() = "OriginProfileFeature" Then
  66.                 OriginName = swFeat.Name   '预留原点特征名,以后使用
  67.                 passedOrigin = True
  68.             End If
  69.             
  70.             Set swFeat = swFeat.GetNextFeature
  71.         Wend
  72.         
  73.     '以下语名为已顺序的特征名去除后缀$
  74.     Set swFeat = swModel.FeatureByName(OriginName)
  75.     While Not swFeat Is Nothing
  76.     Set swFeat = swFeat.GetNextFeature
  77.     If Not swFeat Is Nothing Then
  78.     If Right(swFeat.Name, 1) = "[        DISCUZ_CODE_0        ]quot; Then swFeat.Name = Left(swFeat.Name, Len(swFeat.Name) - 1)   '去除后缀$
  79.     End If
  80.     Wend
  81.       
  82.         
  83.     Else
  84.         MsgBox "Please open model请打开模型文件"
  85.     End If

  86. End Sub

  87. Sub RenameFeature(feat As SldWorks.Feature, featNamesTable As Object)

  88.     Dim regEx As Object
  89.     Set regEx = CreateObject("VBScript.RegExp")   '创建正则表达式(RegEx)对象
  90.    
  91.     regEx.Global = True       '设置全程匹配
  92.     regEx.IgnoreCase = True   '设置忽略区分大小写
  93.     regEx.Pattern = "(.+?)(\d+)[        DISCUZ_CODE_0        ]quot;    '设置正则表达式:开始(任意字符)(任意数字)结束
  94.    
  95.     Dim regExMatches As Object
  96.     Set regExMatches = regEx.Execute(feat.Name)   '用于对指定正则表达式进行匹配检测,其值返回一个Matches集合,其中
  97.                                    '包含了所有检测到匹配的Match对象。如果没有检测到任何匹配则返回一个空的Matches集合
  98.    
  99.     If regExMatches.Count = 1 Then
  100.    
  101.     Debug.Print regExMatches(0)
  102.         
  103.         If regExMatches(0).SubMatches.Count = 2 Then    'SubMatches数量为2,说明符合正则表达式
  104.         ' SubMatches 集合包含了单个的子匹配字符串,只能用 RegExp 对象的 Execute 方法创建。
  105.          'SubMatches 集合的属性是只读的。运行一个正则表达式时,当圆括号中捕捉到子表达式时可以有零个或多个子匹配。
  106.          'SubMatches 集合中的每一项是由正则表达式找到并捕获的的字符串。
  107.             
  108.             Dim baseFeatName As String
  109.             baseFeatName = regExMatches(0).SubMatches(0)  '取正则表达式的第一个子匹配字符串,也就是基本特征名
  110.             'Debug.Print baseFeatName
  111.             Dim nextIndex As Integer
  112.             
  113.             If featNamesTable.Exists(baseFeatName) Then    '如果指定的键(基本特征名)存在,返回True,否则返回False,
  114.                 nextIndex = featNamesTable.item(baseFeatName) + 1    'Items() 返回该键的条目数,增1
  115.                 featNamesTable.item(baseFeatName) = nextIndex   '将条目数赋值,即特征顺序号
  116.             Else
  117.                 nextIndex = 1
  118.                 featNamesTable.Add baseFeatName, nextIndex     '增加键到字典Dictionary,条目数为1
  119.             End If
  120.             feat.Name = baseFeatName & nextIndex & "[        DISCUZ_CODE_0        ]quot;    '原宏没有增加$后缀,可能造成改名失败
  121.             Debug.Print "已改名为:" & feat.Name
  122.         End If
  123.     End If

  124. End Sub

  125. Function Contains(coll As Collection, item As Object) As Boolean   '(比对processedFeats特征记录集合与swFeat是否相同,以免子特征改名重复)
  126.    
  127.     Dim i As Integer
  128.     Debug.Print "特征记录集合数量为" & coll.Count  '记录集合数量
  129.     For i = 1 To coll.Count
  130.         Debug.Print "比对" & item.Name & "   " & i
  131.         Debug.Print
  132.         If coll.item(i) Is item Then '记录中特征相同
  133.             Contains = True
  134.             Exit Function
  135.         End If
  136.         
  137.     Next
  138.    
  139.     Contains = False
  140.    
  141. End Function
复制代码



12
发表于 2018-6-11 17:24:44 | 只看该作者
pyczt 发表于 2018-6-11 15:00
原宏有缺陷,修改过的应该OK了,增加注释,供大家一起学习

還是不行,如圖就可.


本帖子中包含更多资源

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

x
13
发表于 2018-6-12 07:54:15 | 只看该作者
ryouss 发表于 2018-6-11 17:24
還是不行,如圖就可.

UTF-8格式的请试下

本帖子中包含更多资源

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

x
14
发表于 2018-6-12 10:42:35 | 只看该作者
pyczt 发表于 2018-6-12 07:54
UTF-8格式的请试下

也不行!

謝謝pyczt大大一再提供資料測試,
也知道了碰到這樣問題,可以直接copy譯成繁体再丟進VBA.
15
发表于 2018-6-12 12:31:27 | 只看该作者
ryouss 发表于 2018-6-11 17:24
還是不行,如圖就可.

请教这是什么工具,是否这工具的问题。

16
发表于 2018-6-12 13:22:53 | 只看该作者
本帖最后由 ryouss 于 2018-6-12 13:34 编辑
大鹿 发表于 2018-6-12 12:31
请教这是什么工具,是否这工具的问题。

https://www.skycn.com/soft/appid/5797.html
繁簡字轉譯

謝謝鹿大關心,如上參考一直以來都是用這軟件解決VBA的繁簡字亂碼.

本帖子中包含更多资源

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

x
17
发表于 2018-6-12 13:41:31 | 只看该作者
ryouss 发表于 2018-6-12 13:22
https://www.skycn.com/soft/appid/5797.html
繁簡字轉譯

试过这工具,没有问题呀!


本帖子中包含更多资源

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

x
18
发表于 2018-6-12 14:13:56 | 只看该作者
本帖最后由 ryouss 于 2018-6-12 14:15 编辑
大鹿 发表于 2018-6-12 13:41
试过这工具,没有问题呀!

是的COPY直接轉譯沒問題,
之前傻傻的COPY到VBA後再轉譯就不成,
但是之前也都是COPY諸大的宏到VBA後再轉譯都行(如12#),
所以才好奇想知道P大是用了什麼字型.
19
发表于 2018-6-16 14:16:16 | 只看该作者
如何使用?还有这是什么软件用的啊?
20
发表于 2018-9-26 22:58:01 | 只看该作者
特来支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-3 21:27 , Processed in 0.028229 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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