'----------------------------------------------------------------------
' 前提条件:
' 1. 将Main复制并粘贴到你的项目中。
' 2. 插入一个类模块并将Class1复制并粘贴到该模块中。
' 3. 将public_documents\samples\tutorial\EDraw\claw复制到c:\test\claw。
' 4. 打开c:\test\claw\claw-mechanism.sldasm并将文件保存为claw-mechanism-copy.sldasm。
' 5. 关闭claw-mechanism-copy.sldasm并重新打开claw-mechanism.sldasm。
' 6. 打开即时窗口。
'
' 后置条件:
' 1. 将中心组件重命名为centerXXX。
' 2. 触发RenameItemNotify事件。
' 3. 保存装配体。
' 4. 触发RenamedDocumentNotify事件。
' 5. 更新引用。
' 6. 检查FeatureManager设计树和即时窗口。
' 7. 关闭claw-mechanism.sldasm并打开c:\test\claw\claw-mechanism-copy.sldasm以验证中心组件是否已重命名为centerXXX。
'---------------------------------------------------------------------
'Main
Option Explicit
' 声明SolidWorks应用程序对象
Dim swApp As SldWorks.SldWorks
' 声明模型文档对象
Dim swModel As SldWorks.ModelDoc2
' 声明模型文档扩展对象
Dim swModelDocExt As SldWorks.ModelDocExtension
' 声明装配体文档对象
Dim swAssy As SldWorks.AssemblyDoc
' 声明事件处理类对象
Dim swAssyEvents As Class1
' 声明错误计数变量
Dim errors As Long
' 声明警告计数变量
Dim warnings As Long
' 声明状态变量
Dim status As Boolean
Sub main()
' 获取SolidWorks应用程序对象
Set swApp = Application.SldWorks
' 获取当前活动文档
Set swAssy = swApp.ActiveDoc
' 设置事件
Set swAssyEvents = New Class1
' 将活动文档分配给事件处理类
Set swAssyEvents.swAssy = swApp.ActiveDoc
' 将装配体文档分配给模型文档对象
Set swModel = swAssy
' 获取模型文档扩展对象
Set swModelDocExt = swModel.Extension
' 选择组件
status = swModelDocExt.SelectByID2("center-1@claw-mechanism", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
' 重命名文档
errors = swModelDocExt.RenameDocument("centerXXX")
' 重建模型
swModelDocExt.Rebuild swRebuildOptions_e.swRebuildAll
' 保存模型
status = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, errors, warnings)
End Sub
'Class1
Option Explicit
' 声明装配体文档对象并启用事件处理
Public WithEvents swAssy As SldWorks.AssemblyDoc
' 触发项目重命名通知事件
Public Function swAssy_RenameItemNotify(ByVal entType As Long, ByVal oldName As String, ByVal newName As String) As Long
' 在即时窗口中打印消息
Debug.Print "RenameItemNotify fired"
End Function
' 触发重命名文档对话框通知事件
Public Function swAssy_RenamedDocumentNotify(ByRef swObj As Object) As Long
' 声明重命名文档引用对象
Dim swRenamedDocumentReferences As SldWorks.RenamedDocumentReferences
' 声明搜索路径变量
Dim searchPaths As Variant
' 声明路径名称变量
Dim pathNames As Variant
' 声明循环变量
Dim i As Long
' 声明数量变量
Dim nbr As Long
' 将对象分配给重命名文档引用对象
Set swRenamedDocumentReferences = swObj
' 更新使用引用
swRenamedDocumentReferences.UpdateWhereUsedReferences = True
' 包括文件位置
swRenamedDocumentReferences.IncludeFileLocations = True
' 获取搜索路径
searchPaths = swRenamedDocumentReferences.GetSearchPath
' 获取搜索路径数量
nbr = UBound(searchPaths)
' 在即时窗口中打印搜索路径标题
Debug.Print "Search paths:"
' 循环遍历搜索路径
For i = 0 To nbr
' 在即时窗口中打印每个搜索路径
Debug.Print (" " & searchPaths(i))
Next i
' 执行搜索
swRenamedDocumentReferences.Search
' 获取引用数组
pathNames = swRenamedDocumentReferences.ReferencesArray
' 获取引用数量
nbr = UBound(pathNames)
' 在即时窗口中打印引用标题
Debug.Print "References:"
' 循环遍历引用
For i = 0 To nbr
' 在即时窗口中打印每个引用
Debug.Print (" " & pathNames(i))
Next i
' 设置完成操作
swRenamedDocumentReferences.CompletionAction = swRenamedDocumentFinalAction_e.swRenamedDocumentFinalAction_Ok
' 在即时窗口中打印消息
Debug.Print "RenamedDocumentNotify fired"
End Function