solidworks-mcp-server 3.0.8 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/CHANGELOG.md +175 -98
  2. package/LICENSE +20 -20
  3. package/README.md +195 -423
  4. package/dist/adapters/circuit-breaker.d.ts +84 -0
  5. package/dist/adapters/circuit-breaker.d.ts.map +1 -0
  6. package/dist/adapters/circuit-breaker.js +228 -0
  7. package/dist/adapters/circuit-breaker.js.map +1 -0
  8. package/dist/adapters/connection-pool.d.ts +83 -0
  9. package/dist/adapters/connection-pool.d.ts.map +1 -0
  10. package/dist/adapters/connection-pool.js +282 -0
  11. package/dist/adapters/connection-pool.js.map +1 -0
  12. package/dist/adapters/edge-adapter.d.ts +43 -0
  13. package/dist/adapters/edge-adapter.d.ts.map +1 -0
  14. package/dist/adapters/edge-adapter.js +417 -0
  15. package/dist/adapters/edge-adapter.js.map +1 -0
  16. package/dist/adapters/factory.d.ts +60 -0
  17. package/dist/adapters/factory.d.ts.map +1 -0
  18. package/dist/adapters/factory.js +212 -0
  19. package/dist/adapters/factory.js.map +1 -0
  20. package/dist/adapters/feature-complexity-analyzer.d.ts +102 -0
  21. package/dist/adapters/feature-complexity-analyzer.d.ts.map +1 -0
  22. package/dist/adapters/feature-complexity-analyzer.js +322 -0
  23. package/dist/adapters/feature-complexity-analyzer.js.map +1 -0
  24. package/dist/adapters/macro-generator.d.ts +30 -0
  25. package/dist/adapters/macro-generator.d.ts.map +1 -0
  26. package/dist/adapters/macro-generator.js +524 -0
  27. package/dist/adapters/macro-generator.js.map +1 -0
  28. package/dist/adapters/mock-solidworks-adapter.d.ts +92 -0
  29. package/dist/adapters/mock-solidworks-adapter.d.ts.map +1 -0
  30. package/dist/adapters/mock-solidworks-adapter.js +367 -0
  31. package/dist/adapters/mock-solidworks-adapter.js.map +1 -0
  32. package/dist/adapters/types.d.ts +376 -0
  33. package/dist/adapters/types.d.ts.map +1 -0
  34. package/dist/adapters/types.js +261 -0
  35. package/dist/adapters/types.js.map +1 -0
  36. package/dist/adapters/winax-adapter-enhanced.d.ts +55 -0
  37. package/dist/adapters/winax-adapter-enhanced.d.ts.map +1 -0
  38. package/dist/adapters/winax-adapter-enhanced.js +601 -0
  39. package/dist/adapters/winax-adapter-enhanced.js.map +1 -0
  40. package/dist/adapters/winax-adapter.d.ts +55 -0
  41. package/dist/adapters/winax-adapter.d.ts.map +1 -0
  42. package/dist/adapters/winax-adapter.js +667 -0
  43. package/dist/adapters/winax-adapter.js.map +1 -0
  44. package/dist/api/stainless-api.d.ts +29 -0
  45. package/dist/api/stainless-api.d.ts.map +1 -0
  46. package/dist/api/stainless-api.js +408 -0
  47. package/dist/api/stainless-api.js.map +1 -0
  48. package/dist/cache/manager.d.ts.map +1 -1
  49. package/dist/cache/manager.js +4 -3
  50. package/dist/cache/manager.js.map +1 -1
  51. package/dist/core/interfaces/core-abstractions.d.ts.map +1 -1
  52. package/dist/core/interfaces/core-abstractions.js.map +1 -1
  53. package/dist/db/connection.js +4 -4
  54. package/dist/db/connection.js.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +86 -79
  57. package/dist/index.js.map +1 -1
  58. package/dist/knowledge/chromadb.d.ts.map +1 -1
  59. package/dist/knowledge/chromadb.js +5 -3
  60. package/dist/knowledge/chromadb.js.map +1 -1
  61. package/dist/macro/recorder.d.ts +1 -1
  62. package/dist/macro/recorder.d.ts.map +1 -1
  63. package/dist/macro/recorder.js +10 -10
  64. package/dist/macro/recorder.js.map +1 -1
  65. package/dist/resources/base.js +10 -10
  66. package/dist/resources/base.js.map +1 -1
  67. package/dist/resources/design-table.d.ts +10 -12
  68. package/dist/resources/design-table.d.ts.map +1 -1
  69. package/dist/resources/design-table.js +42 -39
  70. package/dist/resources/design-table.js.map +1 -1
  71. package/dist/resources/pdm.d.ts +44 -45
  72. package/dist/resources/pdm.d.ts.map +1 -1
  73. package/dist/resources/pdm.js +118 -79
  74. package/dist/resources/pdm.js.map +1 -1
  75. package/dist/resources/registry.d.ts +1 -1
  76. package/dist/resources/registry.d.ts.map +1 -1
  77. package/dist/resources/registry.js +1 -1
  78. package/dist/shared/constants/solidworks-constants.d.ts.map +1 -1
  79. package/dist/shared/constants/solidworks-constants.js +9 -9
  80. package/dist/shared/constants/solidworks-constants.js.map +1 -1
  81. package/dist/solidworks/api.d.ts +8 -6
  82. package/dist/solidworks/api.d.ts.map +1 -1
  83. package/dist/solidworks/api.js +614 -188
  84. package/dist/solidworks/api.js.map +1 -1
  85. package/dist/state/store.d.ts +1 -1
  86. package/dist/state/store.d.ts.map +1 -1
  87. package/dist/state/store.js +14 -14
  88. package/dist/state/store.js.map +1 -1
  89. package/dist/tools/analysis.d.ts +12 -2
  90. package/dist/tools/analysis.d.ts.map +1 -1
  91. package/dist/tools/analysis.js +141 -31
  92. package/dist/tools/analysis.js.map +1 -1
  93. package/dist/tools/diagnostics.d.ts +1 -1
  94. package/dist/tools/diagnostics.d.ts.map +1 -1
  95. package/dist/tools/diagnostics.js +2 -2
  96. package/dist/tools/diagnostics.js.map +1 -1
  97. package/dist/tools/drawing.d.ts +2 -2
  98. package/dist/tools/drawing.d.ts.map +1 -1
  99. package/dist/tools/drawing.js +94 -10
  100. package/dist/tools/drawing.js.map +1 -1
  101. package/dist/tools/enhanced-drawing.d.ts +1 -1
  102. package/dist/tools/enhanced-drawing.d.ts.map +1 -1
  103. package/dist/tools/enhanced-drawing.js +10 -13
  104. package/dist/tools/enhanced-drawing.js.map +1 -1
  105. package/dist/tools/export.d.ts +1 -1
  106. package/dist/tools/export.d.ts.map +1 -1
  107. package/dist/tools/export.js +88 -14
  108. package/dist/tools/export.js.map +1 -1
  109. package/dist/tools/extrusion-helper.d.ts +15 -0
  110. package/dist/tools/extrusion-helper.d.ts.map +1 -0
  111. package/dist/tools/extrusion-helper.js +61 -0
  112. package/dist/tools/extrusion-helper.js.map +1 -0
  113. package/dist/tools/macro-security.d.ts +2 -2
  114. package/dist/tools/macro-security.d.ts.map +1 -1
  115. package/dist/tools/macro-security.js +2 -2
  116. package/dist/tools/macro-security.js.map +1 -1
  117. package/dist/tools/modeling.d.ts +2 -2
  118. package/dist/tools/modeling.d.ts.map +1 -1
  119. package/dist/tools/modeling.js +6 -6
  120. package/dist/tools/modeling.js.map +1 -1
  121. package/dist/tools/native-macro.d.ts +1 -1
  122. package/dist/tools/native-macro.d.ts.map +1 -1
  123. package/dist/tools/native-macro.js +246 -239
  124. package/dist/tools/native-macro.js.map +1 -1
  125. package/dist/tools/sketch.d.ts +28 -28
  126. package/dist/tools/sketch.d.ts.map +1 -1
  127. package/dist/tools/sketch.js +202 -136
  128. package/dist/tools/sketch.js.map +1 -1
  129. package/dist/tools/template-manager.d.ts +5 -5
  130. package/dist/tools/template-manager.d.ts.map +1 -1
  131. package/dist/tools/template-manager.js +66 -65
  132. package/dist/tools/template-manager.js.map +1 -1
  133. package/dist/tools/vba-advanced.d.ts +10 -10
  134. package/dist/tools/vba-advanced.d.ts.map +1 -1
  135. package/dist/tools/vba-advanced.js +791 -708
  136. package/dist/tools/vba-advanced.js.map +1 -1
  137. package/dist/tools/vba-assembly.d.ts +10 -10
  138. package/dist/tools/vba-assembly.d.ts.map +1 -1
  139. package/dist/tools/vba-assembly.js +562 -500
  140. package/dist/tools/vba-assembly.js.map +1 -1
  141. package/dist/tools/vba-drawing.d.ts +12 -12
  142. package/dist/tools/vba-drawing.d.ts.map +1 -1
  143. package/dist/tools/vba-drawing.js +681 -572
  144. package/dist/tools/vba-drawing.js.map +1 -1
  145. package/dist/tools/vba-file-management.d.ts +12 -12
  146. package/dist/tools/vba-file-management.d.ts.map +1 -1
  147. package/dist/tools/vba-file-management.js +662 -589
  148. package/dist/tools/vba-file-management.js.map +1 -1
  149. package/dist/tools/vba-part.d.ts +10 -10
  150. package/dist/tools/vba-part.d.ts.map +1 -1
  151. package/dist/tools/vba-part.js +484 -426
  152. package/dist/tools/vba-part.js.map +1 -1
  153. package/dist/tools/vba.d.ts +361 -361
  154. package/dist/tools/vba.d.ts.map +1 -1
  155. package/dist/tools/vba.js +67 -81
  156. package/dist/tools/vba.js.map +1 -1
  157. package/dist/utils/config.js +2 -2
  158. package/dist/utils/config.js.map +1 -1
  159. package/dist/utils/environment.d.ts +243 -0
  160. package/dist/utils/environment.d.ts.map +1 -0
  161. package/dist/utils/environment.js +207 -0
  162. package/dist/utils/environment.js.map +1 -0
  163. package/dist/utils/logger.d.ts.map +1 -1
  164. package/dist/utils/logger.js +6 -6
  165. package/dist/utils/logger.js.map +1 -1
  166. package/dist/utils/solidworks-config.d.ts +39 -0
  167. package/dist/utils/solidworks-config.d.ts.map +1 -0
  168. package/dist/utils/solidworks-config.js +156 -0
  169. package/dist/utils/solidworks-config.js.map +1 -0
  170. package/package.json +84 -84
  171. package/scripts/setup.js +70 -70
  172. package/dist/application/services/command-bus.d.ts +0 -39
  173. package/dist/application/services/command-bus.d.ts.map +0 -1
  174. package/dist/application/services/command-bus.js +0 -88
  175. package/dist/application/services/command-bus.js.map +0 -1
  176. package/dist/application/services/event-bus.d.ts +0 -31
  177. package/dist/application/services/event-bus.d.ts.map +0 -1
  178. package/dist/application/services/event-bus.js +0 -83
  179. package/dist/application/services/event-bus.js.map +0 -1
  180. package/dist/application/services/query-bus.d.ts +0 -30
  181. package/dist/application/services/query-bus.d.ts.map +0 -1
  182. package/dist/application/services/query-bus.js +0 -59
  183. package/dist/application/services/query-bus.js.map +0 -1
  184. package/dist/application/services/tool-registry.d.ts +0 -53
  185. package/dist/application/services/tool-registry.d.ts.map +0 -1
  186. package/dist/application/services/tool-registry.js +0 -81
  187. package/dist/application/services/tool-registry.js.map +0 -1
  188. package/dist/application/use-cases/analysis/index.d.ts +0 -13
  189. package/dist/application/use-cases/analysis/index.d.ts.map +0 -1
  190. package/dist/application/use-cases/analysis/index.js +0 -17
  191. package/dist/application/use-cases/analysis/index.js.map +0 -1
  192. package/dist/application/use-cases/drawing/index.d.ts +0 -13
  193. package/dist/application/use-cases/drawing/index.d.ts.map +0 -1
  194. package/dist/application/use-cases/drawing/index.js +0 -17
  195. package/dist/application/use-cases/drawing/index.js.map +0 -1
  196. package/dist/application/use-cases/export/index.d.ts +0 -13
  197. package/dist/application/use-cases/export/index.d.ts.map +0 -1
  198. package/dist/application/use-cases/export/index.js +0 -17
  199. package/dist/application/use-cases/export/index.js.map +0 -1
  200. package/dist/application/use-cases/macro/index.d.ts +0 -13
  201. package/dist/application/use-cases/macro/index.d.ts.map +0 -1
  202. package/dist/application/use-cases/macro/index.js +0 -17
  203. package/dist/application/use-cases/macro/index.js.map +0 -1
  204. package/dist/application/use-cases/modeling/index.d.ts +0 -56
  205. package/dist/application/use-cases/modeling/index.d.ts.map +0 -1
  206. package/dist/application/use-cases/modeling/index.js +0 -385
  207. package/dist/application/use-cases/modeling/index.js.map +0 -1
  208. package/dist/index.refactored.d.ts +0 -7
  209. package/dist/index.refactored.d.ts.map +0 -1
  210. package/dist/index.refactored.js +0 -254
  211. package/dist/index.refactored.js.map +0 -1
  212. package/dist/infrastructure/config/configuration-manager.d.ts +0 -381
  213. package/dist/infrastructure/config/configuration-manager.d.ts.map +0 -1
  214. package/dist/infrastructure/config/configuration-manager.js +0 -566
  215. package/dist/infrastructure/config/configuration-manager.js.map +0 -1
  216. package/dist/infrastructure/container/service-locator.d.ts +0 -14
  217. package/dist/infrastructure/container/service-locator.d.ts.map +0 -1
  218. package/dist/infrastructure/container/service-locator.js +0 -38
  219. package/dist/infrastructure/container/service-locator.js.map +0 -1
  220. package/dist/infrastructure/logging/logger.d.ts +0 -24
  221. package/dist/infrastructure/logging/logger.d.ts.map +0 -1
  222. package/dist/infrastructure/logging/logger.js +0 -65
  223. package/dist/infrastructure/logging/logger.js.map +0 -1
  224. package/dist/infrastructure/solidworks/solidworks-adapter.d.ts +0 -43
  225. package/dist/infrastructure/solidworks/solidworks-adapter.d.ts.map +0 -1
  226. package/dist/infrastructure/solidworks/solidworks-adapter.js +0 -527
  227. package/dist/infrastructure/solidworks/solidworks-adapter.js.map +0 -1
  228. package/dist/presentation/mcp/request-handler.d.ts +0 -41
  229. package/dist/presentation/mcp/request-handler.d.ts.map +0 -1
  230. package/dist/presentation/mcp/request-handler.js +0 -100
  231. package/dist/presentation/mcp/request-handler.js.map +0 -1
  232. package/dist/presentation/transformers/error-transformer.d.ts +0 -16
  233. package/dist/presentation/transformers/error-transformer.d.ts.map +0 -1
  234. package/dist/presentation/transformers/error-transformer.js +0 -44
  235. package/dist/presentation/transformers/error-transformer.js.map +0 -1
  236. package/dist/presentation/transformers/response-transformer.d.ts +0 -24
  237. package/dist/presentation/transformers/response-transformer.d.ts.map +0 -1
  238. package/dist/presentation/transformers/response-transformer.js +0 -102
  239. package/dist/presentation/transformers/response-transformer.js.map +0 -1
  240. package/dist/tools/drawing-analysis.d.ts +0 -9
  241. package/dist/tools/drawing-analysis.d.ts.map +0 -1
  242. package/dist/tools/drawing-analysis.js +0 -239
  243. package/dist/tools/drawing-analysis.js.map +0 -1
@@ -9,499 +9,546 @@ export const fileManagementVBATools = [
9
9
  description: 'Generate VBA for batch file operations',
10
10
  inputSchema: z.object({
11
11
  operation: z.enum([
12
- 'open_all', 'save_all', 'export_all', 'convert_format',
13
- 'update_references', 'pack_and_go', 'rename_files'
12
+ 'open_all',
13
+ 'save_all',
14
+ 'export_all',
15
+ 'convert_format',
16
+ 'update_references',
17
+ 'pack_and_go',
18
+ 'rename_files',
14
19
  ]),
15
20
  sourcePath: z.string().describe('Source folder path'),
16
21
  destinationPath: z.string().optional().describe('Destination folder path'),
17
22
  fileFilter: z.string().optional().describe('File filter (e.g., "*.sldprt")'),
18
23
  exportFormat: z.enum(['step', 'iges', 'stl', 'pdf', 'dwg', 'parasolid']).optional(),
19
24
  includeSubfolders: z.boolean().optional().default(false),
20
- options: z.record(z.any()).optional()
25
+ options: z.record(z.any()).optional(),
21
26
  }),
22
27
  handler: (args) => {
23
28
  const operations = {
24
- open_all: `
25
- Sub BatchOpenFiles()
26
- Dim swApp As SldWorks.SldWorks
27
- Dim swModel As SldWorks.ModelDoc2
28
- Dim fso As Object
29
- Dim folder As Object
30
- Dim file As Object
31
- Dim filePath As String
32
- Dim errors As Long, warnings As Long
33
- Dim processedCount As Integer
34
-
35
- Set swApp = Application.SldWorks
36
- Set fso = CreateObject("Scripting.FileSystemObject")
37
- Set folder = fso.GetFolder("${args.sourcePath}")
38
-
39
- processedCount = 0
40
-
41
- ' Process each file
42
- For Each file In folder.Files
43
- If file.Name Like "${args.fileFilter || '*.sld*'}" Then
44
- filePath = file.Path
45
-
46
- ' Open file
47
- Set swModel = swApp.OpenDoc6( _
48
- filePath, _
49
- GetDocumentType(filePath), _
50
- swOpenDocOptions_e.swOpenDocOptions_Silent, _
51
- "", errors, warnings)
52
-
53
- If Not swModel Is Nothing Then
54
- processedCount = processedCount + 1
55
- Debug.Print "Opened: " & file.Name
56
- End If
57
- End If
58
- Next file
59
-
60
- ${args.includeSubfolders ? `
61
- ' Process subfolders
62
- Dim subfolder As Object
63
- For Each subfolder In folder.SubFolders
64
- ' Recursive call for subfolders
65
- ' Add recursive processing logic here
66
- Next subfolder` : ''}
67
-
68
- MsgBox "Batch open complete. Processed " & processedCount & " files"
69
- End Sub
70
-
71
- Function GetDocumentType(filePath As String) As Integer
72
- Dim ext As String
73
- ext = LCase(Right(filePath, 6))
74
-
75
- If InStr(ext, "sldprt") > 0 Then
76
- GetDocumentType = swDocumentTypes_e.swDocPART
77
- ElseIf InStr(ext, "sldasm") > 0 Then
78
- GetDocumentType = swDocumentTypes_e.swDocASSEMBLY
79
- ElseIf InStr(ext, "slddrw") > 0 Then
80
- GetDocumentType = swDocumentTypes_e.swDocDRAWING
81
- Else
82
- GetDocumentType = swDocumentTypes_e.swDocNONE
83
- End If
29
+ open_all: `
30
+ Sub BatchOpenFiles()
31
+ Dim swApp As SldWorks.SldWorks
32
+ Dim swModel As SldWorks.ModelDoc2
33
+ Dim fso As Object
34
+ Dim folder As Object
35
+ Dim file As Object
36
+ Dim filePath As String
37
+ Dim errors As Long, warnings As Long
38
+ Dim processedCount As Integer
39
+
40
+ Set swApp = Application.SldWorks
41
+ Set fso = CreateObject("Scripting.FileSystemObject")
42
+ Set folder = fso.GetFolder("${args.sourcePath}")
43
+
44
+ processedCount = 0
45
+
46
+ ' Process each file
47
+ For Each file In folder.Files
48
+ If file.Name Like "${args.fileFilter || '*.sld*'}" Then
49
+ filePath = file.Path
50
+
51
+ ' Open file
52
+ Set swModel = swApp.OpenDoc6( _
53
+ filePath, _
54
+ GetDocumentType(filePath), _
55
+ swOpenDocOptions_e.swOpenDocOptions_Silent, _
56
+ "", errors, warnings)
57
+
58
+ If Not swModel Is Nothing Then
59
+ processedCount = processedCount + 1
60
+ Debug.Print "Opened: " & file.Name
61
+ End If
62
+ End If
63
+ Next file
64
+
65
+ ${args.includeSubfolders
66
+ ? `
67
+ ' Process subfolders
68
+ Dim subfolder As Object
69
+ For Each subfolder In folder.SubFolders
70
+ ' Recursive call for subfolders
71
+ ' Add recursive processing logic here
72
+ Next subfolder`
73
+ : ''}
74
+
75
+ MsgBox "Batch open complete. Processed " & processedCount & " files"
76
+ End Sub
77
+
78
+ Function GetDocumentType(filePath As String) As Integer
79
+ Dim ext As String
80
+ ext = LCase(Right(filePath, 6))
81
+
82
+ If InStr(ext, "sldprt") > 0 Then
83
+ GetDocumentType = swDocumentTypes_e.swDocPART
84
+ ElseIf InStr(ext, "sldasm") > 0 Then
85
+ GetDocumentType = swDocumentTypes_e.swDocASSEMBLY
86
+ ElseIf InStr(ext, "slddrw") > 0 Then
87
+ GetDocumentType = swDocumentTypes_e.swDocDRAWING
88
+ Else
89
+ GetDocumentType = swDocumentTypes_e.swDocNONE
90
+ End If
84
91
  End Function`,
85
- export_all: `
86
- Sub BatchExportFiles()
87
- Dim swApp As SldWorks.SldWorks
88
- Dim swModel As SldWorks.ModelDoc2
89
- Dim fso As Object
90
- Dim folder As Object
91
- Dim file As Object
92
- Dim filePath As String
93
- Dim exportPath As String
94
- Dim errors As Long, warnings As Long
95
- Dim exportCount As Integer
96
-
97
- Set swApp = Application.SldWorks
98
- Set fso = CreateObject("Scripting.FileSystemObject")
99
- Set folder = fso.GetFolder("${args.sourcePath}")
100
-
101
- ' Create destination folder if needed
102
- If Not fso.FolderExists("${args.destinationPath || args.sourcePath + '\\Exported'}") Then
103
- fso.CreateFolder("${args.destinationPath || args.sourcePath + '\\Exported'}")
104
- End If
105
-
106
- exportCount = 0
107
-
108
- For Each file In folder.Files
109
- If file.Name Like "${args.fileFilter || '*.sld*'}" Then
110
- filePath = file.Path
111
-
112
- ' Open file
113
- Set swModel = swApp.OpenDoc6( _
114
- filePath, GetDocumentType(filePath), _
115
- swOpenDocOptions_e.swOpenDocOptions_Silent, _
116
- "", errors, warnings)
117
-
118
- If Not swModel Is Nothing Then
119
- ' Generate export path
120
- exportPath = "${args.destinationPath || args.sourcePath + '\\Exported'}\\" & _
121
- fso.GetBaseName(file.Name) & ".${args.exportFormat || 'step'}"
122
-
123
- ' Export based on format
124
- ${args.exportFormat === 'step' ? `
125
- swModel.Extension.SaveAs3 exportPath, 0, _
126
- swSaveAsOptions_e.swSaveAsOptions_Silent, _
127
- Nothing, Nothing, errors, warnings` : ''}
128
- ${args.exportFormat === 'stl' ? `
129
- swModel.Extension.SaveAs3 exportPath, 0, _
130
- swSaveAsOptions_e.swSaveAsOptions_Silent, _
131
- Nothing, Nothing, errors, warnings` : ''}
132
- ${args.exportFormat === 'pdf' ? `
133
- Dim swExportPDFData As SldWorks.ExportPdfData
134
- Set swExportPDFData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
135
- swModel.Extension.SaveAs3 exportPath, 0, _
136
- swSaveAsOptions_e.swSaveAsOptions_Silent, _
137
- swExportPDFData, Nothing, errors, warnings` : ''}
138
-
139
- exportCount = exportCount + 1
140
- Debug.Print "Exported: " & exportPath
141
-
142
- ' Close file
143
- swApp.CloseDoc swModel.GetPathName
144
- End If
145
- End If
146
- Next file
147
-
148
- MsgBox "Batch export complete. Exported " & exportCount & " files"
92
+ export_all: `
93
+ Sub BatchExportFiles()
94
+ Dim swApp As SldWorks.SldWorks
95
+ Dim swModel As SldWorks.ModelDoc2
96
+ Dim fso As Object
97
+ Dim folder As Object
98
+ Dim file As Object
99
+ Dim filePath As String
100
+ Dim exportPath As String
101
+ Dim errors As Long, warnings As Long
102
+ Dim exportCount As Integer
103
+
104
+ Set swApp = Application.SldWorks
105
+ Set fso = CreateObject("Scripting.FileSystemObject")
106
+ Set folder = fso.GetFolder("${args.sourcePath}")
107
+
108
+ ' Create destination folder if needed
109
+ If Not fso.FolderExists("${args.destinationPath || `${args.sourcePath}\\Exported`}") Then
110
+ fso.CreateFolder("${args.destinationPath || `${args.sourcePath}\\Exported`}")
111
+ End If
112
+
113
+ exportCount = 0
114
+
115
+ For Each file In folder.Files
116
+ If file.Name Like "${args.fileFilter || '*.sld*'}" Then
117
+ filePath = file.Path
118
+
119
+ ' Open file
120
+ Set swModel = swApp.OpenDoc6( _
121
+ filePath, GetDocumentType(filePath), _
122
+ swOpenDocOptions_e.swOpenDocOptions_Silent, _
123
+ "", errors, warnings)
124
+
125
+ If Not swModel Is Nothing Then
126
+ ' Generate export path
127
+ exportPath = "${args.destinationPath || `${args.sourcePath}\\Exported`}\\" & _
128
+ fso.GetBaseName(file.Name) & ".${args.exportFormat || 'step'}"
129
+
130
+ ' Export based on format
131
+ ${args.exportFormat === 'step'
132
+ ? `
133
+ swModel.Extension.SaveAs3 exportPath, 0, _
134
+ swSaveAsOptions_e.swSaveAsOptions_Silent, _
135
+ Nothing, Nothing, errors, warnings`
136
+ : ''}
137
+ ${args.exportFormat === 'stl'
138
+ ? `
139
+ swModel.Extension.SaveAs3 exportPath, 0, _
140
+ swSaveAsOptions_e.swSaveAsOptions_Silent, _
141
+ Nothing, Nothing, errors, warnings`
142
+ : ''}
143
+ ${args.exportFormat === 'pdf'
144
+ ? `
145
+ Dim swExportPDFData As SldWorks.ExportPdfData
146
+ Set swExportPDFData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
147
+ swModel.Extension.SaveAs3 exportPath, 0, _
148
+ swSaveAsOptions_e.swSaveAsOptions_Silent, _
149
+ swExportPDFData, Nothing, errors, warnings`
150
+ : ''}
151
+
152
+ exportCount = exportCount + 1
153
+ Debug.Print "Exported: " & exportPath
154
+
155
+ ' Close file
156
+ swApp.CloseDoc swModel.GetPathName
157
+ End If
158
+ End If
159
+ Next file
160
+
161
+ MsgBox "Batch export complete. Exported " & exportCount & " files"
162
+ End Sub`,
163
+ pack_and_go: `
164
+ Sub BatchPackAndGo()
165
+ Dim swApp As SldWorks.SldWorks
166
+ Dim swModel As SldWorks.ModelDoc2
167
+ Dim swPackAndGo As SldWorks.PackAndGo
168
+ Dim fso As Object
169
+ Dim folder As Object
170
+ Dim file As Object
171
+ Dim filePath As String
172
+ Dim errors As Long, warnings As Long
173
+ Dim packCount As Integer
174
+
175
+ Set swApp = Application.SldWorks
176
+ Set fso = CreateObject("Scripting.FileSystemObject")
177
+ Set folder = fso.GetFolder("${args.sourcePath}")
178
+
179
+ packCount = 0
180
+
181
+ For Each file In folder.Files
182
+ If file.Name Like "${args.fileFilter || '*.sldasm'}" Then
183
+ filePath = file.Path
184
+
185
+ ' Open assembly
186
+ Set swModel = swApp.OpenDoc6( _
187
+ filePath, swDocumentTypes_e.swDocASSEMBLY, _
188
+ swOpenDocOptions_e.swOpenDocOptions_Silent, _
189
+ "", errors, warnings)
190
+
191
+ If Not swModel Is Nothing Then
192
+ ' Get Pack and Go
193
+ Set swPackAndGo = swModel.Extension.GetPackAndGo
194
+
195
+ ' Configure Pack and Go
196
+ swPackAndGo.IncludeDrawings = ${args.options?.includeDrawings ? 'True' : 'False'}
197
+ swPackAndGo.IncludeSimulationResults = ${args.options?.includeSimulation ? 'True' : 'False'}
198
+ swPackAndGo.IncludeToolboxComponents = ${args.options?.includeToolbox ? 'True' : 'False'}
199
+ swPackAndGo.FlattenToSingleFolder = ${args.options?.flattenFolders ? 'True' : 'False'}
200
+
201
+ ' Set destination
202
+ Dim destFolder As String
203
+ destFolder = "${args.destinationPath || `${args.sourcePath}\\PackAndGo`}\\" & _
204
+ fso.GetBaseName(file.Name)
205
+
206
+ If Not fso.FolderExists(destFolder) Then
207
+ fso.CreateFolder(destFolder)
208
+ End If
209
+
210
+ swPackAndGo.SetSaveToName True, destFolder
211
+
212
+ ' Execute Pack and Go
213
+ Dim pgStatus As Long
214
+ pgStatus = swModel.Extension.SavePackAndGo(swPackAndGo)
215
+
216
+ If pgStatus = 0 Then
217
+ packCount = packCount + 1
218
+ Debug.Print "Packed: " & file.Name & " to " & destFolder
219
+ End If
220
+
221
+ swApp.CloseDoc swModel.GetPathName
222
+ End If
223
+ End If
224
+ Next file
225
+
226
+ MsgBox "Pack and Go complete. Processed " & packCount & " assemblies"
149
227
  End Sub`,
150
- pack_and_go: `
151
- Sub BatchPackAndGo()
152
- Dim swApp As SldWorks.SldWorks
153
- Dim swModel As SldWorks.ModelDoc2
154
- Dim swPackAndGo As SldWorks.PackAndGo
155
- Dim fso As Object
156
- Dim folder As Object
157
- Dim file As Object
158
- Dim filePath As String
159
- Dim errors As Long, warnings As Long
160
- Dim packCount As Integer
161
-
162
- Set swApp = Application.SldWorks
163
- Set fso = CreateObject("Scripting.FileSystemObject")
164
- Set folder = fso.GetFolder("${args.sourcePath}")
165
-
166
- packCount = 0
167
-
168
- For Each file In folder.Files
169
- If file.Name Like "${args.fileFilter || '*.sldasm'}" Then
170
- filePath = file.Path
171
-
172
- ' Open assembly
173
- Set swModel = swApp.OpenDoc6( _
174
- filePath, swDocumentTypes_e.swDocASSEMBLY, _
175
- swOpenDocOptions_e.swOpenDocOptions_Silent, _
176
- "", errors, warnings)
177
-
178
- If Not swModel Is Nothing Then
179
- ' Get Pack and Go
180
- Set swPackAndGo = swModel.Extension.GetPackAndGo
181
-
182
- ' Configure Pack and Go
183
- swPackAndGo.IncludeDrawings = ${args.options?.includeDrawings ? 'True' : 'False'}
184
- swPackAndGo.IncludeSimulationResults = ${args.options?.includeSimulation ? 'True' : 'False'}
185
- swPackAndGo.IncludeToolboxComponents = ${args.options?.includeToolbox ? 'True' : 'False'}
186
- swPackAndGo.FlattenToSingleFolder = ${args.options?.flattenFolders ? 'True' : 'False'}
187
-
188
- ' Set destination
189
- Dim destFolder As String
190
- destFolder = "${args.destinationPath || args.sourcePath + '\\PackAndGo'}\\" & _
191
- fso.GetBaseName(file.Name)
192
-
193
- If Not fso.FolderExists(destFolder) Then
194
- fso.CreateFolder(destFolder)
195
- End If
196
-
197
- swPackAndGo.SetSaveToName True, destFolder
198
-
199
- ' Execute Pack and Go
200
- Dim pgStatus As Long
201
- pgStatus = swModel.Extension.SavePackAndGo(swPackAndGo)
202
-
203
- If pgStatus = 0 Then
204
- packCount = packCount + 1
205
- Debug.Print "Packed: " & file.Name & " to " & destFolder
206
- End If
207
-
208
- swApp.CloseDoc swModel.GetPathName
209
- End If
210
- End If
211
- Next file
212
-
213
- MsgBox "Pack and Go complete. Processed " & packCount & " assemblies"
214
- End Sub`
215
228
  };
216
229
  return operations[args.operation] || operations.open_all;
217
- }
230
+ },
218
231
  },
219
232
  {
220
233
  name: 'vba_custom_properties',
221
234
  description: 'Generate VBA for managing custom properties',
222
235
  inputSchema: z.object({
223
236
  operation: z.enum(['add', 'modify', 'delete', 'copy', 'export', 'import']),
224
- properties: z.array(z.object({
237
+ properties: z
238
+ .array(z.object({
225
239
  name: z.string(),
226
240
  value: z.string(),
227
241
  type: z.enum(['text', 'date', 'number', 'yesno']).optional(),
228
- configuration: z.string().optional()
229
- })).optional(),
242
+ configuration: z.string().optional(),
243
+ }))
244
+ .optional(),
230
245
  sourcePath: z.string().optional(),
231
246
  templatePath: z.string().optional(),
232
- exportFormat: z.enum(['excel', 'csv', 'xml']).optional()
247
+ exportFormat: z.enum(['excel', 'csv', 'xml']).optional(),
233
248
  }),
234
249
  handler: (args) => {
235
- return `
236
- Sub ManageCustomProperties_${args.operation}()
237
- Dim swApp As SldWorks.SldWorks
238
- Dim swModel As SldWorks.ModelDoc2
239
- Dim swCustPropMgr As SldWorks.CustomPropertyManager
240
- Dim propType As Long
241
- Dim propValue As String
242
- Dim evalValue As String
243
- Dim bRet As Boolean
244
-
245
- Set swApp = Application.SldWorks
246
- Set swModel = swApp.ActiveDoc
247
-
248
- If swModel Is Nothing Then
249
- MsgBox "No active document"
250
- Exit Sub
251
- End If
252
-
253
- ${args.operation === 'add' || args.operation === 'modify' ? `
254
- ' Add/Modify properties
255
- ${args.properties ? args.properties.map((prop) => `
256
- ' Get property manager for configuration
257
- Set swCustPropMgr = swModel.Extension.CustomPropertyManager("${prop.configuration || ''}")
258
-
259
- ' Determine property type
260
- ${prop.type === 'date' ? 'propType = swCustomInfoType_e.swCustomInfoDate' :
261
- prop.type === 'number' ? 'propType = swCustomInfoType_e.swCustomInfoNumber' :
262
- prop.type === 'yesno' ? 'propType = swCustomInfoType_e.swCustomInfoYesOrNo' :
263
- 'propType = swCustomInfoType_e.swCustomInfoText'}
264
-
265
- ' Add or modify property
266
- bRet = swCustPropMgr.Add3( _
267
- "${prop.name}", _
268
- propType, _
269
- "${prop.value}", _
270
- swCustomPropertyAddOption_e.swCustomPropertyReplaceValue)
271
-
272
- If bRet Then
273
- Debug.Print "${args.operation === 'add' ? 'Added' : 'Modified'} property: ${prop.name} = ${prop.value}"
274
- End If`).join('\n ') : ''}
275
-
276
- MsgBox "Properties ${args.operation === 'add' ? 'added' : 'modified'} successfully"` : ''}
277
-
278
- ${args.operation === 'delete' ? `
279
- ' Delete properties
280
- Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
281
-
282
- ${args.properties ? args.properties.map((prop) => `
283
- bRet = swCustPropMgr.Delete2("${prop.name}")
284
- If bRet Then
285
- Debug.Print "Deleted property: ${prop.name}"
286
- End If`).join('\n ') : ''}
287
-
288
- MsgBox "Properties deleted"` : ''}
289
-
290
- ${args.operation === 'export' ? `
291
- ' Export properties to Excel
292
- Dim xlApp As Object
293
- Dim xlBook As Object
294
- Dim xlSheet As Object
295
- Dim propNames As Variant
296
- Dim i As Integer
297
-
298
- Set xlApp = CreateObject("Excel.Application")
299
- Set xlBook = xlApp.Workbooks.Add
300
- Set xlSheet = xlBook.Sheets(1)
301
- xlApp.Visible = True
302
-
303
- ' Headers
304
- xlSheet.Cells(1, 1).Value = "Property Name"
305
- xlSheet.Cells(1, 2).Value = "Value"
306
- xlSheet.Cells(1, 3).Value = "Evaluated Value"
307
- xlSheet.Cells(1, 4).Value = "Type"
308
-
309
- ' Get all properties
310
- Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
311
- propNames = swCustPropMgr.GetNames
312
-
313
- If Not IsEmpty(propNames) Then
314
- For i = 0 To UBound(propNames)
315
- swCustPropMgr.Get4 propNames(i), False, propValue, evalValue
316
-
317
- xlSheet.Cells(i + 2, 1).Value = propNames(i)
318
- xlSheet.Cells(i + 2, 2).Value = propValue
319
- xlSheet.Cells(i + 2, 3).Value = evalValue
320
- xlSheet.Cells(i + 2, 4).Value = swCustPropMgr.GetType2(propNames(i))
321
- Next i
322
- End If
323
-
324
- xlSheet.Columns.AutoFit
325
-
326
- ${args.sourcePath ? `
327
- xlBook.SaveAs "${args.sourcePath}"
328
- MsgBox "Properties exported to: ${args.sourcePath}"` : ''}` : ''}
329
-
330
- ${args.operation === 'copy' ? `
331
- ' Copy properties from another file
332
- Dim swSourceModel As SldWorks.ModelDoc2
333
- Dim swSourceCustPropMgr As SldWorks.CustomPropertyManager
334
- Dim errors As Long, warnings As Long
335
-
336
- ' Open source file
337
- Set swSourceModel = swApp.OpenDoc6( _
338
- "${args.sourcePath}", _
339
- GetDocumentType("${args.sourcePath}"), _
340
- swOpenDocOptions_e.swOpenDocOptions_Silent, _
341
- "", errors, warnings)
342
-
343
- If Not swSourceModel Is Nothing Then
344
- Set swSourceCustPropMgr = swSourceModel.Extension.CustomPropertyManager("")
345
- Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
346
-
347
- propNames = swSourceCustPropMgr.GetNames
348
-
349
- If Not IsEmpty(propNames) Then
350
- For i = 0 To UBound(propNames)
351
- swSourceCustPropMgr.Get4 propNames(i), False, propValue, evalValue
352
- propType = swSourceCustPropMgr.GetType2(propNames(i))
353
-
354
- swCustPropMgr.Add3 propNames(i), propType, propValue, _
355
- swCustomPropertyAddOption_e.swCustomPropertyReplaceValue
356
-
357
- Debug.Print "Copied property: " & propNames(i)
358
- Next i
359
- End If
360
-
361
- swApp.CloseDoc swSourceModel.GetPathName
362
- MsgBox "Properties copied from source file"
363
- End If` : ''}
250
+ return `
251
+ Sub ManageCustomProperties_${args.operation}()
252
+ Dim swApp As SldWorks.SldWorks
253
+ Dim swModel As SldWorks.ModelDoc2
254
+ Dim swCustPropMgr As SldWorks.CustomPropertyManager
255
+ Dim propType As Long
256
+ Dim propValue As String
257
+ Dim evalValue As String
258
+ Dim bRet As Boolean
259
+
260
+ Set swApp = Application.SldWorks
261
+ Set swModel = swApp.ActiveDoc
262
+
263
+ If swModel Is Nothing Then
264
+ MsgBox "No active document"
265
+ Exit Sub
266
+ End If
267
+
268
+ ${args.operation === 'add' || args.operation === 'modify'
269
+ ? `
270
+ ' Add/Modify properties
271
+ ${args.properties
272
+ ? args.properties
273
+ .map((prop) => `
274
+ ' Get property manager for configuration
275
+ Set swCustPropMgr = swModel.Extension.CustomPropertyManager("${prop.configuration || ''}")
276
+
277
+ ' Determine property type
278
+ ${prop.type === 'date'
279
+ ? 'propType = swCustomInfoType_e.swCustomInfoDate'
280
+ : prop.type === 'number'
281
+ ? 'propType = swCustomInfoType_e.swCustomInfoNumber'
282
+ : prop.type === 'yesno'
283
+ ? 'propType = swCustomInfoType_e.swCustomInfoYesOrNo'
284
+ : 'propType = swCustomInfoType_e.swCustomInfoText'}
285
+
286
+ ' Add or modify property
287
+ bRet = swCustPropMgr.Add3( _
288
+ "${prop.name}", _
289
+ propType, _
290
+ "${prop.value}", _
291
+ swCustomPropertyAddOption_e.swCustomPropertyReplaceValue)
292
+
293
+ If bRet Then
294
+ Debug.Print "${args.operation === 'add' ? 'Added' : 'Modified'} property: ${prop.name} = ${prop.value}"
295
+ End If`)
296
+ .join('\n ')
297
+ : ''}
298
+
299
+ MsgBox "Properties ${args.operation === 'add' ? 'added' : 'modified'} successfully"`
300
+ : ''}
301
+
302
+ ${args.operation === 'delete'
303
+ ? `
304
+ ' Delete properties
305
+ Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
306
+
307
+ ${args.properties
308
+ ? args.properties
309
+ .map((prop) => `
310
+ bRet = swCustPropMgr.Delete2("${prop.name}")
311
+ If bRet Then
312
+ Debug.Print "Deleted property: ${prop.name}"
313
+ End If`)
314
+ .join('\n ')
315
+ : ''}
316
+
317
+ MsgBox "Properties deleted"`
318
+ : ''}
319
+
320
+ ${args.operation === 'export'
321
+ ? `
322
+ ' Export properties to Excel
323
+ Dim xlApp As Object
324
+ Dim xlBook As Object
325
+ Dim xlSheet As Object
326
+ Dim propNames As Variant
327
+ Dim i As Integer
328
+
329
+ Set xlApp = CreateObject("Excel.Application")
330
+ Set xlBook = xlApp.Workbooks.Add
331
+ Set xlSheet = xlBook.Sheets(1)
332
+ xlApp.Visible = True
333
+
334
+ ' Headers
335
+ xlSheet.Cells(1, 1).Value = "Property Name"
336
+ xlSheet.Cells(1, 2).Value = "Value"
337
+ xlSheet.Cells(1, 3).Value = "Evaluated Value"
338
+ xlSheet.Cells(1, 4).Value = "Type"
339
+
340
+ ' Get all properties
341
+ Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
342
+ propNames = swCustPropMgr.GetNames
343
+
344
+ If Not IsEmpty(propNames) Then
345
+ For i = 0 To UBound(propNames)
346
+ swCustPropMgr.Get4 propNames(i), False, propValue, evalValue
347
+
348
+ xlSheet.Cells(i + 2, 1).Value = propNames(i)
349
+ xlSheet.Cells(i + 2, 2).Value = propValue
350
+ xlSheet.Cells(i + 2, 3).Value = evalValue
351
+ xlSheet.Cells(i + 2, 4).Value = swCustPropMgr.GetType2(propNames(i))
352
+ Next i
353
+ End If
354
+
355
+ xlSheet.Columns.AutoFit
356
+
357
+ ${args.sourcePath
358
+ ? `
359
+ xlBook.SaveAs "${args.sourcePath}"
360
+ MsgBox "Properties exported to: ${args.sourcePath}"`
361
+ : ''}`
362
+ : ''}
363
+
364
+ ${args.operation === 'copy'
365
+ ? `
366
+ ' Copy properties from another file
367
+ Dim swSourceModel As SldWorks.ModelDoc2
368
+ Dim swSourceCustPropMgr As SldWorks.CustomPropertyManager
369
+ Dim errors As Long, warnings As Long
370
+
371
+ ' Open source file
372
+ Set swSourceModel = swApp.OpenDoc6( _
373
+ "${args.sourcePath}", _
374
+ GetDocumentType("${args.sourcePath}"), _
375
+ swOpenDocOptions_e.swOpenDocOptions_Silent, _
376
+ "", errors, warnings)
377
+
378
+ If Not swSourceModel Is Nothing Then
379
+ Set swSourceCustPropMgr = swSourceModel.Extension.CustomPropertyManager("")
380
+ Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
381
+
382
+ propNames = swSourceCustPropMgr.GetNames
383
+
384
+ If Not IsEmpty(propNames) Then
385
+ For i = 0 To UBound(propNames)
386
+ swSourceCustPropMgr.Get4 propNames(i), False, propValue, evalValue
387
+ propType = swSourceCustPropMgr.GetType2(propNames(i))
388
+
389
+ swCustPropMgr.Add3 propNames(i), propType, propValue, _
390
+ swCustomPropertyAddOption_e.swCustomPropertyReplaceValue
391
+
392
+ Debug.Print "Copied property: " & propNames(i)
393
+ Next i
394
+ End If
395
+
396
+ swApp.CloseDoc swSourceModel.GetPathName
397
+ MsgBox "Properties copied from source file"
398
+ End If`
399
+ : ''}
364
400
  End Sub`;
365
- }
401
+ },
366
402
  },
367
403
  {
368
404
  name: 'vba_pdm_operations',
369
405
  description: 'Generate VBA for PDM vault operations',
370
406
  inputSchema: z.object({
371
- operation: z.enum([
372
- 'check_in', 'check_out', 'get_latest', 'add_file',
373
- 'change_state', 'search', 'copy_tree'
374
- ]),
407
+ operation: z.enum(['check_in', 'check_out', 'get_latest', 'add_file', 'change_state', 'search', 'copy_tree']),
375
408
  vaultName: z.string(),
376
409
  filePath: z.string().optional(),
377
410
  comment: z.string().optional(),
378
411
  stateName: z.string().optional(),
379
412
  searchCriteria: z.record(z.string()).optional(),
380
- includeChildren: z.boolean().optional().default(true)
413
+ includeChildren: z.boolean().optional().default(true),
381
414
  }),
382
415
  handler: (args) => {
383
- return `
384
- Sub PDMOperation_${args.operation}()
385
- Dim pdmVault As Object ' EdmVault5
386
- Dim pdmFile As Object ' IEdmFile5
387
- Dim pdmFolder As Object ' IEdmFolder5
388
- Dim pdmSearch As Object ' IEdmSearch5
389
- Dim pdmSearchResult As Object ' IEdmSearchResult5
390
- Dim bRet As Boolean
391
-
392
- ' Create PDM vault object
393
- Set pdmVault = CreateObject("ConisioLib.EdmVault")
394
-
395
- ' Login to vault
396
- pdmVault.LoginAuto "${args.vaultName}", 0
397
-
398
- If Not pdmVault.IsLoggedIn Then
399
- MsgBox "Failed to login to PDM vault: ${args.vaultName}"
400
- Exit Sub
401
- End If
402
-
403
- ${args.operation === 'check_out' ? `
404
- ' Check out file
405
- Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
406
- Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
407
-
408
- If Not pdmFile Is Nothing Then
409
- ' Check if already checked out
410
- If Not pdmFile.IsLocked Then
411
- pdmFile.LockFile pdmFolder.ID, 0
412
- MsgBox "File checked out: " & pdmFile.Name
413
- Else
414
- MsgBox "File is already checked out"
415
- End If
416
- Else
417
- MsgBox "File not found in vault"
418
- End If` : ''}
419
-
420
- ${args.operation === 'check_in' ? `
421
- ' Check in file
422
- Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
423
- Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
424
-
425
- If Not pdmFile Is Nothing Then
426
- If pdmFile.IsLocked Then
427
- ' Check in with comment
428
- pdmFile.UnlockFile 0, "${args.comment || 'Checked in via VBA'}", _
429
- ${args.includeChildren ? '1' : '0'}
430
- MsgBox "File checked in: " & pdmFile.Name
431
- Else
432
- MsgBox "File is not checked out"
433
- End If
434
- End If` : ''}
435
-
436
- ${args.operation === 'get_latest' ? `
437
- ' Get latest version
438
- Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
439
- Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
440
-
441
- If Not pdmFile Is Nothing Then
442
- pdmFile.GetFileCopy 0
443
- MsgBox "Got latest version of: " & pdmFile.Name
444
- End If` : ''}
445
-
446
- ${args.operation === 'change_state' ? `
447
- ' Change workflow state
448
- Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
449
- Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
450
-
451
- If Not pdmFile Is Nothing Then
452
- Dim pdmStateMgr As Object
453
- Set pdmStateMgr = pdmFile.GetNextState("${args.stateName}")
454
-
455
- If Not pdmStateMgr Is Nothing Then
456
- pdmFile.ChangeState pdmStateMgr.ID, pdmFolder.ID, _
457
- "${args.comment || 'State changed via VBA'}", 0, 0
458
- MsgBox "State changed to: ${args.stateName}"
459
- Else
460
- MsgBox "State not found: ${args.stateName}"
461
- End If
462
- End If` : ''}
463
-
464
- ${args.operation === 'search' ? `
465
- ' Search vault
466
- Set pdmSearch = pdmVault.CreateSearch
467
-
468
- ' Set search criteria
469
- ${args.searchCriteria ? Object.entries(args.searchCriteria).map(([key, value]) => `
470
- pdmSearch.SetToken EdmSearchToken_e.${key}, "${value}"`).join('\n ') : ''}
471
-
472
- ' Execute search
473
- Set pdmSearchResult = pdmSearch.GetFirstResult
474
-
475
- Dim results As String
476
- results = "Search Results:" & vbCrLf
477
-
478
- While Not pdmSearchResult Is Nothing
479
- results = results & pdmSearchResult.Path & vbCrLf
480
- Set pdmSearchResult = pdmSearch.GetNextResult
481
- Wend
482
-
483
- MsgBox results` : ''}
484
-
485
- ' Logout
486
- pdmVault.Logout
487
- End Sub
488
-
489
- ' Helper function for file type
490
- Private Function GetDocumentType(filePath As String) As Integer
491
- Dim ext As String
492
- ext = LCase(Right(filePath, 6))
493
-
494
- If InStr(ext, "sldprt") > 0 Then
495
- GetDocumentType = 1 ' Part
496
- ElseIf InStr(ext, "sldasm") > 0 Then
497
- GetDocumentType = 2 ' Assembly
498
- ElseIf InStr(ext, "slddrw") > 0 Then
499
- GetDocumentType = 3 ' Drawing
500
- Else
501
- GetDocumentType = 0 ' Unknown
502
- End If
416
+ return `
417
+ Sub PDMOperation_${args.operation}()
418
+ Dim pdmVault As Object ' EdmVault5
419
+ Dim pdmFile As Object ' IEdmFile5
420
+ Dim pdmFolder As Object ' IEdmFolder5
421
+ Dim pdmSearch As Object ' IEdmSearch5
422
+ Dim pdmSearchResult As Object ' IEdmSearchResult5
423
+ Dim bRet As Boolean
424
+
425
+ ' Create PDM vault object
426
+ Set pdmVault = CreateObject("ConisioLib.EdmVault")
427
+
428
+ ' Login to vault
429
+ pdmVault.LoginAuto "${args.vaultName}", 0
430
+
431
+ If Not pdmVault.IsLoggedIn Then
432
+ MsgBox "Failed to login to PDM vault: ${args.vaultName}"
433
+ Exit Sub
434
+ End If
435
+
436
+ ${args.operation === 'check_out'
437
+ ? `
438
+ ' Check out file
439
+ Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
440
+ Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
441
+
442
+ If Not pdmFile Is Nothing Then
443
+ ' Check if already checked out
444
+ If Not pdmFile.IsLocked Then
445
+ pdmFile.LockFile pdmFolder.ID, 0
446
+ MsgBox "File checked out: " & pdmFile.Name
447
+ Else
448
+ MsgBox "File is already checked out"
449
+ End If
450
+ Else
451
+ MsgBox "File not found in vault"
452
+ End If`
453
+ : ''}
454
+
455
+ ${args.operation === 'check_in'
456
+ ? `
457
+ ' Check in file
458
+ Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
459
+ Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
460
+
461
+ If Not pdmFile Is Nothing Then
462
+ If pdmFile.IsLocked Then
463
+ ' Check in with comment
464
+ pdmFile.UnlockFile 0, "${args.comment || 'Checked in via VBA'}", _
465
+ ${args.includeChildren ? '1' : '0'}
466
+ MsgBox "File checked in: " & pdmFile.Name
467
+ Else
468
+ MsgBox "File is not checked out"
469
+ End If
470
+ End If`
471
+ : ''}
472
+
473
+ ${args.operation === 'get_latest'
474
+ ? `
475
+ ' Get latest version
476
+ Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
477
+ Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
478
+
479
+ If Not pdmFile Is Nothing Then
480
+ pdmFile.GetFileCopy 0
481
+ MsgBox "Got latest version of: " & pdmFile.Name
482
+ End If`
483
+ : ''}
484
+
485
+ ${args.operation === 'change_state'
486
+ ? `
487
+ ' Change workflow state
488
+ Set pdmFolder = pdmVault.GetFolderFromPath(Left("${args.filePath}", InStrRev("${args.filePath}", "\\")))
489
+ Set pdmFile = pdmFolder.GetFile(Mid("${args.filePath}", InStrRev("${args.filePath}", "\\") + 1))
490
+
491
+ If Not pdmFile Is Nothing Then
492
+ Dim pdmStateMgr As Object
493
+ Set pdmStateMgr = pdmFile.GetNextState("${args.stateName}")
494
+
495
+ If Not pdmStateMgr Is Nothing Then
496
+ pdmFile.ChangeState pdmStateMgr.ID, pdmFolder.ID, _
497
+ "${args.comment || 'State changed via VBA'}", 0, 0
498
+ MsgBox "State changed to: ${args.stateName}"
499
+ Else
500
+ MsgBox "State not found: ${args.stateName}"
501
+ End If
502
+ End If`
503
+ : ''}
504
+
505
+ ${args.operation === 'search'
506
+ ? `
507
+ ' Search vault
508
+ Set pdmSearch = pdmVault.CreateSearch
509
+
510
+ ' Set search criteria
511
+ ${args.searchCriteria
512
+ ? Object.entries(args.searchCriteria)
513
+ .map(([key, value]) => `
514
+ pdmSearch.SetToken EdmSearchToken_e.${key}, "${value}"`)
515
+ .join('\n ')
516
+ : ''}
517
+
518
+ ' Execute search
519
+ Set pdmSearchResult = pdmSearch.GetFirstResult
520
+
521
+ Dim results As String
522
+ results = "Search Results:" & vbCrLf
523
+
524
+ While Not pdmSearchResult Is Nothing
525
+ results = results & pdmSearchResult.Path & vbCrLf
526
+ Set pdmSearchResult = pdmSearch.GetNextResult
527
+ Wend
528
+
529
+ MsgBox results`
530
+ : ''}
531
+
532
+ ' Logout
533
+ pdmVault.Logout
534
+ End Sub
535
+
536
+ ' Helper function for file type
537
+ Private Function GetDocumentType(filePath As String) As Integer
538
+ Dim ext As String
539
+ ext = LCase(Right(filePath, 6))
540
+
541
+ If InStr(ext, "sldprt") > 0 Then
542
+ GetDocumentType = 1 ' Part
543
+ ElseIf InStr(ext, "sldasm") > 0 Then
544
+ GetDocumentType = 2 ' Assembly
545
+ ElseIf InStr(ext, "slddrw") > 0 Then
546
+ GetDocumentType = 3 ' Drawing
547
+ Else
548
+ GetDocumentType = 0 ' Unknown
549
+ End If
503
550
  End Function`;
504
- }
551
+ },
505
552
  },
506
553
  {
507
554
  name: 'vba_design_table',
@@ -509,147 +556,173 @@ End Function`;
509
556
  inputSchema: z.object({
510
557
  operation: z.enum(['create', 'update', 'export', 'import', 'link_excel']),
511
558
  tableName: z.string(),
512
- parameters: z.array(z.object({
559
+ parameters: z
560
+ .array(z.object({
513
561
  name: z.string(),
514
562
  type: z.enum(['dimension', 'feature', 'component', 'custom_property']),
515
- configurations: z.record(z.any()).optional()
516
- })).optional(),
563
+ configurations: z.record(z.any()).optional(),
564
+ }))
565
+ .optional(),
517
566
  excelPath: z.string().optional(),
518
- linkToExternal: z.boolean().optional()
567
+ linkToExternal: z.boolean().optional(),
519
568
  }),
520
569
  handler: (args) => {
521
- return `
522
- Sub ManageDesignTable_${args.operation}()
523
- Dim swApp As SldWorks.SldWorks
524
- Dim swModel As SldWorks.ModelDoc2
525
- Dim swDesignTable As SldWorks.DesignTable
526
- Dim swFeature As SldWorks.Feature
527
- Dim xlApp As Object
528
- Dim xlBook As Object
529
- Dim xlSheet As Object
530
- Dim i As Integer, j As Integer
531
-
532
- Set swApp = Application.SldWorks
533
- Set swModel = swApp.ActiveDoc
534
-
535
- If swModel Is Nothing Then
536
- MsgBox "No active document"
537
- Exit Sub
538
- End If
539
-
540
- ${args.operation === 'create' ? `
541
- ' Create design table
542
- Set xlApp = CreateObject("Excel.Application")
543
- Set xlBook = xlApp.Workbooks.Add
544
- Set xlSheet = xlBook.Sheets(1)
545
-
546
- ' Set up headers
547
- xlSheet.Cells(1, 1).Value = "Configuration"
548
-
549
- ${args.parameters ? args.parameters.map((param, i) => `
550
- ' Add parameter header
551
- xlSheet.Cells(1, ${i + 2}).Value = "${param.name}@${param.type === 'dimension' ? 'Sketch1' : param.type === 'feature' ? 'Feature' : 'CustomProperty'}"
552
-
553
- ' Add configuration values
554
- ${param.configurations ? Object.entries(param.configurations).map(([config, value], j) => `
555
- xlSheet.Cells(${j + 2}, 1).Value = "${config}"
556
- xlSheet.Cells(${j + 2}, ${i + 2}).Value = "${value}"`).join('\n ') : ''}`).join('\n ') : ''}
557
-
558
- ' Save Excel file
559
- Dim tempPath As String
560
- tempPath = Environ("TEMP") & "\\DesignTable_${args.tableName}.xlsx"
561
- xlBook.SaveAs tempPath
562
- xlApp.Quit
563
-
564
- ' Insert design table
565
- Set swDesignTable = swModel.InsertDesignTable( _
566
- ${args.linkToExternal ? 'True' : 'False'}, _
567
- ${args.linkToExternal ? 'True' : 'False'}, _
568
- ${args.linkToExternal ? '2' : '1'}, _
569
- tempPath)
570
-
571
- If Not swDesignTable Is Nothing Then
572
- MsgBox "Design table created: ${args.tableName}"
573
- End If` : ''}
574
-
575
- ${args.operation === 'update' ? `
576
- ' Update existing design table
577
- Set swDesignTable = swModel.GetDesignTable
578
-
579
- If Not swDesignTable Is Nothing Then
580
- ' Edit design table
581
- swDesignTable.Edit
582
-
583
- ' Get Excel object
584
- Set xlApp = GetObject(, "Excel.Application")
585
- Set xlBook = xlApp.ActiveWorkbook
586
- Set xlSheet = xlBook.ActiveSheet
587
-
588
- ' Update values
589
- ${args.parameters ? args.parameters.map((param) => `
590
- ' Find and update parameter column
591
- For j = 1 To xlSheet.UsedRange.Columns.Count
592
- If xlSheet.Cells(1, j).Value = "${param.name}@Sketch1" Then
593
- ${param.configurations ? Object.entries(param.configurations).map(([config, value], i) => `
594
- ' Update configuration value
595
- For i = 2 To xlSheet.UsedRange.Rows.Count
596
- If xlSheet.Cells(i, 1).Value = "${config}" Then
597
- xlSheet.Cells(i, j).Value = "${value}"
598
- End If
599
- Next i`).join('\n ') : ''}
600
- End If
601
- Next j`).join('\n ') : ''}
602
-
603
- ' Close design table
604
- swDesignTable.UpdateModel swDesignTableUpdateOptions_e.swUpdateDesignTableAll
605
-
606
- MsgBox "Design table updated"
607
- Else
608
- MsgBox "No design table found"
609
- End If` : ''}
610
-
611
- ${args.operation === 'export' ? `
612
- ' Export design table
613
- Set swDesignTable = swModel.GetDesignTable
614
-
615
- If Not swDesignTable Is Nothing Then
616
- ' Edit to access Excel
617
- swDesignTable.Edit
618
-
619
- Set xlApp = GetObject(, "Excel.Application")
620
- Set xlBook = xlApp.ActiveWorkbook
621
-
622
- ' Save to new location
623
- xlBook.SaveAs "${args.excelPath || 'C:\\Temp\\ExportedDesignTable.xlsx'}"
624
-
625
- ' Close design table
626
- swDesignTable.UpdateModel swDesignTableUpdateOptions_e.swUpdateDesignTableAll
627
-
628
- MsgBox "Design table exported to: ${args.excelPath || 'C:\\Temp\\ExportedDesignTable.xlsx'}"
629
- End If` : ''}
630
-
631
- ${args.operation === 'link_excel' ? `
632
- ' Link to external Excel file
633
- Set swDesignTable = swModel.GetDesignTable
634
-
635
- If Not swDesignTable Is Nothing Then
636
- ' Delete existing table
637
- Set swFeature = swDesignTable
638
- swFeature.Select2 False, 0
639
- swModel.EditDelete
640
- End If
641
-
642
- ' Insert linked design table
643
- Set swDesignTable = swModel.InsertDesignTable( _
644
- True, True, 2, "${args.excelPath}")
645
-
646
- If Not swDesignTable Is Nothing Then
647
- MsgBox "Design table linked to: ${args.excelPath}"
648
- End If` : ''}
649
-
650
- swModel.EditRebuild3
570
+ return `
571
+ Sub ManageDesignTable_${args.operation}()
572
+ Dim swApp As SldWorks.SldWorks
573
+ Dim swModel As SldWorks.ModelDoc2
574
+ Dim swDesignTable As SldWorks.DesignTable
575
+ Dim swFeature As SldWorks.Feature
576
+ Dim xlApp As Object
577
+ Dim xlBook As Object
578
+ Dim xlSheet As Object
579
+ Dim i As Integer, j As Integer
580
+
581
+ Set swApp = Application.SldWorks
582
+ Set swModel = swApp.ActiveDoc
583
+
584
+ If swModel Is Nothing Then
585
+ MsgBox "No active document"
586
+ Exit Sub
587
+ End If
588
+
589
+ ${args.operation === 'create'
590
+ ? `
591
+ ' Create design table
592
+ Set xlApp = CreateObject("Excel.Application")
593
+ Set xlBook = xlApp.Workbooks.Add
594
+ Set xlSheet = xlBook.Sheets(1)
595
+
596
+ ' Set up headers
597
+ xlSheet.Cells(1, 1).Value = "Configuration"
598
+
599
+ ${args.parameters
600
+ ? args.parameters
601
+ .map((param, i) => `
602
+ ' Add parameter header
603
+ xlSheet.Cells(1, ${i + 2}).Value = "${param.name}@${param.type === 'dimension' ? 'Sketch1' : param.type === 'feature' ? 'Feature' : 'CustomProperty'}"
604
+
605
+ ' Add configuration values
606
+ ${param.configurations
607
+ ? Object.entries(param.configurations)
608
+ .map(([config, value], j) => `
609
+ xlSheet.Cells(${j + 2}, 1).Value = "${config}"
610
+ xlSheet.Cells(${j + 2}, ${i + 2}).Value = "${value}"`)
611
+ .join('\n ')
612
+ : ''}`)
613
+ .join('\n ')
614
+ : ''}
615
+
616
+ ' Save Excel file
617
+ Dim tempPath As String
618
+ tempPath = Environ("TEMP") & "\\DesignTable_${args.tableName}.xlsx"
619
+ xlBook.SaveAs tempPath
620
+ xlApp.Quit
621
+
622
+ ' Insert design table
623
+ Set swDesignTable = swModel.InsertDesignTable( _
624
+ ${args.linkToExternal ? 'True' : 'False'}, _
625
+ ${args.linkToExternal ? 'True' : 'False'}, _
626
+ ${args.linkToExternal ? '2' : '1'}, _
627
+ tempPath)
628
+
629
+ If Not swDesignTable Is Nothing Then
630
+ MsgBox "Design table created: ${args.tableName}"
631
+ End If`
632
+ : ''}
633
+
634
+ ${args.operation === 'update'
635
+ ? `
636
+ ' Update existing design table
637
+ Set swDesignTable = swModel.GetDesignTable
638
+
639
+ If Not swDesignTable Is Nothing Then
640
+ ' Edit design table
641
+ swDesignTable.Edit
642
+
643
+ ' Get Excel object
644
+ Set xlApp = GetObject(, "Excel.Application")
645
+ Set xlBook = xlApp.ActiveWorkbook
646
+ Set xlSheet = xlBook.ActiveSheet
647
+
648
+ ' Update values
649
+ ${args.parameters
650
+ ? args.parameters
651
+ .map((param) => `
652
+ ' Find and update parameter column
653
+ For j = 1 To xlSheet.UsedRange.Columns.Count
654
+ If xlSheet.Cells(1, j).Value = "${param.name}@Sketch1" Then
655
+ ${param.configurations
656
+ ? Object.entries(param.configurations)
657
+ .map(([config, value], _i) => `
658
+ ' Update configuration value
659
+ For i = 2 To xlSheet.UsedRange.Rows.Count
660
+ If xlSheet.Cells(i, 1).Value = "${config}" Then
661
+ xlSheet.Cells(i, j).Value = "${value}"
662
+ End If
663
+ Next i`)
664
+ .join('\n ')
665
+ : ''}
666
+ End If
667
+ Next j`)
668
+ .join('\n ')
669
+ : ''}
670
+
671
+ ' Close design table
672
+ swDesignTable.UpdateModel swDesignTableUpdateOptions_e.swUpdateDesignTableAll
673
+
674
+ MsgBox "Design table updated"
675
+ Else
676
+ MsgBox "No design table found"
677
+ End If`
678
+ : ''}
679
+
680
+ ${args.operation === 'export'
681
+ ? `
682
+ ' Export design table
683
+ Set swDesignTable = swModel.GetDesignTable
684
+
685
+ If Not swDesignTable Is Nothing Then
686
+ ' Edit to access Excel
687
+ swDesignTable.Edit
688
+
689
+ Set xlApp = GetObject(, "Excel.Application")
690
+ Set xlBook = xlApp.ActiveWorkbook
691
+
692
+ ' Save to new location
693
+ xlBook.SaveAs "${args.excelPath || 'C:\\Temp\\ExportedDesignTable.xlsx'}"
694
+
695
+ ' Close design table
696
+ swDesignTable.UpdateModel swDesignTableUpdateOptions_e.swUpdateDesignTableAll
697
+
698
+ MsgBox "Design table exported to: ${args.excelPath || 'C:\\Temp\\ExportedDesignTable.xlsx'}"
699
+ End If`
700
+ : ''}
701
+
702
+ ${args.operation === 'link_excel'
703
+ ? `
704
+ ' Link to external Excel file
705
+ Set swDesignTable = swModel.GetDesignTable
706
+
707
+ If Not swDesignTable Is Nothing Then
708
+ ' Delete existing table
709
+ Set swFeature = swDesignTable
710
+ swFeature.Select2 False, 0
711
+ swModel.EditDelete
712
+ End If
713
+
714
+ ' Insert linked design table
715
+ Set swDesignTable = swModel.InsertDesignTable( _
716
+ True, True, 2, "${args.excelPath}")
717
+
718
+ If Not swDesignTable Is Nothing Then
719
+ MsgBox "Design table linked to: ${args.excelPath}"
720
+ End If`
721
+ : ''}
722
+
723
+ swModel.EditRebuild3
651
724
  End Sub`;
652
- }
653
- }
725
+ },
726
+ },
654
727
  ];
655
728
  //# sourceMappingURL=vba-file-management.js.map