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
@@ -14,223 +14,265 @@ export const advancedVBATools = [
14
14
  features: z.array(z.string()).optional(),
15
15
  properties: z.record(z.any()).optional(),
16
16
  suppressStates: z.record(z.boolean()).optional(),
17
- displayStates: z.array(z.string()).optional()
17
+ displayStates: z.array(z.string()).optional(),
18
18
  }),
19
19
  handler: (args) => {
20
- return `
21
- Sub ManageConfiguration_${args.operation}()
22
- Dim swApp As SldWorks.SldWorks
23
- Dim swModel As SldWorks.ModelDoc2
24
- Dim swConfig As SldWorks.Configuration
25
- Dim swConfigMgr As SldWorks.ConfigurationManager
26
- Dim swFeature As SldWorks.Feature
27
- Dim bRet As Boolean
28
-
29
- Set swApp = Application.SldWorks
30
- Set swModel = swApp.ActiveDoc
31
-
32
- If swModel Is Nothing Then
33
- MsgBox "No active document"
34
- Exit Sub
35
- End If
36
-
37
- Set swConfigMgr = swModel.ConfigurationManager
38
-
39
- ${args.operation === 'create' ? `
40
- ' Create new configuration
41
- Set swConfig = swModel.AddConfiguration3( _
42
- "${args.configName}", _
43
- "Created via VBA", _
44
- "", _
45
- swConfigurationOptions2_e.swConfigOption_LinkToParent + _
46
- swConfigurationOptions2_e.swConfigOption_InheritProperties, _
47
- "${args.parentConfig || ''}")
48
-
49
- If Not swConfig Is Nothing Then
50
- ' Activate configuration
51
- swModel.ShowConfiguration2 "${args.configName}"
52
-
53
- ${args.features && args.features.length > 0 ? `
54
- ' Suppress/Unsuppress features
55
- ${args.features.map((feat) => `
56
- Set swFeature = swModel.FeatureByName("${feat}")
57
- If Not swFeature Is Nothing Then
58
- swFeature.SetSuppression2 _
59
- ${args.suppressStates && args.suppressStates[feat] ?
60
- 'swFeatureSuppressionAction_e.swSuppressFeature' :
61
- 'swFeatureSuppressionAction_e.swUnSuppressFeature'}, _
62
- swInConfigurationOpts_e.swThisConfiguration, Nothing
63
- End If`).join('\n ')}` : ''}
64
-
65
- ${args.properties ? `
66
- ' Set configuration properties
67
- Dim swCustPropMgr As SldWorks.CustomPropertyManager
68
- Set swCustPropMgr = swConfig.CustomPropertyManager
69
-
70
- ${Object.entries(args.properties).map(([key, value]) => `
71
- swCustPropMgr.Add3 "${key}", swCustomInfoType_e.swCustomInfoText, _
72
- "${value}", swCustomPropertyAddOption_e.swCustomPropertyReplaceValue`).join('\n ')}` : ''}
73
-
74
- MsgBox "Configuration '${args.configName}' created"
75
- End If` : ''}
76
-
77
- ${args.operation === 'derive' ? `
78
- ' Create derived configuration
79
- Dim parentConfig As SldWorks.Configuration
80
- Set parentConfig = swModel.GetConfigurationByName("${args.parentConfig || 'Default'}")
81
-
82
- If Not parentConfig Is Nothing Then
83
- Set swConfig = parentConfig.GetDerivedConfiguration3( _
84
- "${args.configName}", _
85
- swConfigurationOptions2_e.swConfigOption_LinkToParent + _
86
- swConfigurationOptions2_e.swConfigOption_InheritProperties, _
87
- "Derived configuration")
88
-
89
- If Not swConfig Is Nothing Then
90
- swModel.ShowConfiguration2 "${args.configName}"
91
- MsgBox "Derived configuration created: ${args.configName}"
92
- End If
93
- End If` : ''}
94
-
95
- ${args.operation === 'suppress_features' ? `
96
- ' Suppress features in configuration
97
- swModel.ShowConfiguration2 "${args.configName}"
98
-
99
- ${args.features ? args.features.map((feat) => `
100
- Set swFeature = swModel.FeatureByName("${feat}")
101
- If Not swFeature Is Nothing Then
102
- swFeature.SetSuppression2 _
103
- swFeatureSuppressionAction_e.swSuppressFeature, _
104
- swInConfigurationOpts_e.swThisConfiguration, Nothing
105
- Debug.Print "Suppressed: ${feat}"
106
- End If`).join('\n ') : ''}
107
-
108
- MsgBox "Features suppressed in configuration"` : ''}
109
-
110
- swModel.EditRebuild3
20
+ return `
21
+ Sub ManageConfiguration_${args.operation}()
22
+ Dim swApp As SldWorks.SldWorks
23
+ Dim swModel As SldWorks.ModelDoc2
24
+ Dim swConfig As SldWorks.Configuration
25
+ Dim swConfigMgr As SldWorks.ConfigurationManager
26
+ Dim swFeature As SldWorks.Feature
27
+ Dim bRet As Boolean
28
+
29
+ Set swApp = Application.SldWorks
30
+ Set swModel = swApp.ActiveDoc
31
+
32
+ If swModel Is Nothing Then
33
+ MsgBox "No active document"
34
+ Exit Sub
35
+ End If
36
+
37
+ Set swConfigMgr = swModel.ConfigurationManager
38
+
39
+ ${args.operation === 'create'
40
+ ? `
41
+ ' Create new configuration
42
+ Set swConfig = swModel.AddConfiguration3( _
43
+ "${args.configName}", _
44
+ "Created via VBA", _
45
+ "", _
46
+ swConfigurationOptions2_e.swConfigOption_LinkToParent + _
47
+ swConfigurationOptions2_e.swConfigOption_InheritProperties, _
48
+ "${args.parentConfig || ''}")
49
+
50
+ If Not swConfig Is Nothing Then
51
+ ' Activate configuration
52
+ swModel.ShowConfiguration2 "${args.configName}"
53
+
54
+ ${args.features && args.features.length > 0
55
+ ? `
56
+ ' Suppress/Unsuppress features
57
+ ${args.features
58
+ .map((feat) => `
59
+ Set swFeature = swModel.FeatureByName("${feat}")
60
+ If Not swFeature Is Nothing Then
61
+ swFeature.SetSuppression2 _
62
+ ${args.suppressStates?.[feat]
63
+ ? 'swFeatureSuppressionAction_e.swSuppressFeature'
64
+ : 'swFeatureSuppressionAction_e.swUnSuppressFeature'}, _
65
+ swInConfigurationOpts_e.swThisConfiguration, Nothing
66
+ End If`)
67
+ .join('\n ')}`
68
+ : ''}
69
+
70
+ ${args.properties
71
+ ? `
72
+ ' Set configuration properties
73
+ Dim swCustPropMgr As SldWorks.CustomPropertyManager
74
+ Set swCustPropMgr = swConfig.CustomPropertyManager
75
+
76
+ ${Object.entries(args.properties)
77
+ .map(([key, value]) => `
78
+ swCustPropMgr.Add3 "${key}", swCustomInfoType_e.swCustomInfoText, _
79
+ "${value}", swCustomPropertyAddOption_e.swCustomPropertyReplaceValue`)
80
+ .join('\n ')}`
81
+ : ''}
82
+
83
+ MsgBox "Configuration '${args.configName}' created"
84
+ End If`
85
+ : ''}
86
+
87
+ ${args.operation === 'derive'
88
+ ? `
89
+ ' Create derived configuration
90
+ Dim parentConfig As SldWorks.Configuration
91
+ Set parentConfig = swModel.GetConfigurationByName("${args.parentConfig || 'Default'}")
92
+
93
+ If Not parentConfig Is Nothing Then
94
+ Set swConfig = parentConfig.GetDerivedConfiguration3( _
95
+ "${args.configName}", _
96
+ swConfigurationOptions2_e.swConfigOption_LinkToParent + _
97
+ swConfigurationOptions2_e.swConfigOption_InheritProperties, _
98
+ "Derived configuration")
99
+
100
+ If Not swConfig Is Nothing Then
101
+ swModel.ShowConfiguration2 "${args.configName}"
102
+ MsgBox "Derived configuration created: ${args.configName}"
103
+ End If
104
+ End If`
105
+ : ''}
106
+
107
+ ${args.operation === 'suppress_features'
108
+ ? `
109
+ ' Suppress features in configuration
110
+ swModel.ShowConfiguration2 "${args.configName}"
111
+
112
+ ${args.features
113
+ ? args.features
114
+ .map((feat) => `
115
+ Set swFeature = swModel.FeatureByName("${feat}")
116
+ If Not swFeature Is Nothing Then
117
+ swFeature.SetSuppression2 _
118
+ swFeatureSuppressionAction_e.swSuppressFeature, _
119
+ swInConfigurationOpts_e.swThisConfiguration, Nothing
120
+ Debug.Print "Suppressed: ${feat}"
121
+ End If`)
122
+ .join('\n ')
123
+ : ''}
124
+
125
+ MsgBox "Features suppressed in configuration"`
126
+ : ''}
127
+
128
+ swModel.EditRebuild3
111
129
  End Sub`;
112
- }
130
+ },
113
131
  },
114
132
  {
115
133
  name: 'vba_equations',
116
134
  description: 'Generate VBA for managing equations and global variables',
117
135
  inputSchema: z.object({
118
136
  operation: z.enum(['add', 'modify', 'delete', 'link', 'export']),
119
- equations: z.array(z.object({
137
+ equations: z
138
+ .array(z.object({
120
139
  name: z.string(),
121
140
  value: z.string(),
122
141
  isGlobal: z.boolean().optional(),
123
- comment: z.string().optional()
124
- })).optional(),
142
+ comment: z.string().optional(),
143
+ }))
144
+ .optional(),
125
145
  externalFile: z.string().optional(),
126
- linkExternal: z.boolean().optional()
146
+ linkExternal: z.boolean().optional(),
127
147
  }),
128
148
  handler: (args) => {
129
- return `
130
- Sub ManageEquations_${args.operation}()
131
- Dim swApp As SldWorks.SldWorks
132
- Dim swModel As SldWorks.ModelDoc2
133
- Dim swEquationMgr As SldWorks.EquationMgr
134
- Dim equations() As String
135
- Dim i As Integer
136
- Dim equationIndex As Integer
137
-
138
- Set swApp = Application.SldWorks
139
- Set swModel = swApp.ActiveDoc
140
-
141
- If swModel Is Nothing Then
142
- MsgBox "No active document"
143
- Exit Sub
144
- End If
145
-
146
- Set swEquationMgr = swModel.GetEquationMgr
147
-
148
- ${args.operation === 'add' ? `
149
- ' Add equations
150
- ${args.equations ? args.equations.map((eq, i) => `
151
- ' Add equation: ${eq.name}
152
- equationIndex = swEquationMgr.Add2( _
153
- -1, _
154
- "\\"${eq.name}\\" = ${eq.value}", _
155
- ${eq.isGlobal ? 'True' : 'False'})
156
-
157
- If equationIndex >= 0 Then
158
- Debug.Print "Added equation: ${eq.name} = ${eq.value}"
159
- ${eq.comment ? `swEquationMgr.SetEquationComment equationIndex, "${eq.comment}"` : ''}
160
- End If`).join('\n ') : ''}
161
-
162
- MsgBox "Equations added successfully"` : ''}
163
-
164
- ${args.operation === 'modify' ? `
165
- ' Modify existing equations
166
- Dim equationCount As Integer
167
- equationCount = swEquationMgr.GetCount
168
-
169
- For i = 0 To equationCount - 1
170
- Dim currentEq As String
171
- currentEq = swEquationMgr.Equation(i)
172
-
173
- ${args.equations ? args.equations.map((eq) => `
174
- If InStr(currentEq, "\\"${eq.name}\\"") > 0 Then
175
- swEquationMgr.Equation(i) = "\\"${eq.name}\\" = ${eq.value}"
176
- Debug.Print "Modified equation: ${eq.name}"
177
- End If`).join('\n ') : ''}
178
- Next i
179
-
180
- MsgBox "Equations modified"` : ''}
181
-
182
- ${args.operation === 'delete' ? `
183
- ' Delete equations
184
- ${args.equations ? args.equations.map((eq) => `
185
- For i = swEquationMgr.GetCount - 1 To 0 Step -1
186
- If InStr(swEquationMgr.Equation(i), "\\"${eq.name}\\"") > 0 Then
187
- swEquationMgr.Delete i
188
- Debug.Print "Deleted equation: ${eq.name}"
189
- End If
190
- Next i`).join('\n ') : ''}
191
-
192
- MsgBox "Equations deleted"` : ''}
193
-
194
- ${args.operation === 'link' ? `
195
- ' Link to external equation file
196
- If swEquationMgr.LinkToFile Then
197
- ' Already linked, update path
198
- swEquationMgr.FilePath = "${args.externalFile}"
199
- Else
200
- ' Create link
201
- swEquationMgr.LinkToFile = True
202
- swEquationMgr.FilePath = "${args.externalFile}"
203
- End If
204
-
205
- swEquationMgr.UpdateValuesFromExternalEquationFile
206
- MsgBox "Linked to external file: ${args.externalFile}"` : ''}
207
-
208
- ${args.operation === 'export' ? `
209
- ' Export equations to file
210
- Dim fso As Object, file As Object
211
- Set fso = CreateObject("Scripting.FileSystemObject")
212
- Set file = fso.CreateTextFile("${args.externalFile || 'C:\\Temp\\equations.txt'}", True)
213
-
214
- file.WriteLine "' SolidWorks Equations Export"
215
- file.WriteLine "' Generated: " & Now
216
- file.WriteLine ""
217
-
218
- For i = 0 To swEquationMgr.GetCount - 1
219
- file.WriteLine swEquationMgr.Equation(i)
220
-
221
- Dim comment As String
222
- comment = swEquationMgr.GetEquationComment(i)
223
- If comment <> "" Then
224
- file.WriteLine "' " & comment
225
- End If
226
- Next i
227
-
228
- file.Close
229
- MsgBox "Equations exported to: ${args.externalFile || 'C:\\Temp\\equations.txt'}"` : ''}
230
-
231
- swModel.EditRebuild3
149
+ return `
150
+ Sub ManageEquations_${args.operation}()
151
+ Dim swApp As SldWorks.SldWorks
152
+ Dim swModel As SldWorks.ModelDoc2
153
+ Dim swEquationMgr As SldWorks.EquationMgr
154
+ Dim equations() As String
155
+ Dim i As Integer
156
+ Dim equationIndex As Integer
157
+
158
+ Set swApp = Application.SldWorks
159
+ Set swModel = swApp.ActiveDoc
160
+
161
+ If swModel Is Nothing Then
162
+ MsgBox "No active document"
163
+ Exit Sub
164
+ End If
165
+
166
+ Set swEquationMgr = swModel.GetEquationMgr
167
+
168
+ ${args.operation === 'add'
169
+ ? `
170
+ ' Add equations
171
+ ${args.equations
172
+ ? args.equations
173
+ .map((eq, _i) => `
174
+ ' Add equation: ${eq.name}
175
+ equationIndex = swEquationMgr.Add2( _
176
+ -1, _
177
+ "\\"${eq.name}\\" = ${eq.value}", _
178
+ ${eq.isGlobal ? 'True' : 'False'})
179
+
180
+ If equationIndex >= 0 Then
181
+ Debug.Print "Added equation: ${eq.name} = ${eq.value}"
182
+ ${eq.comment ? `swEquationMgr.SetEquationComment equationIndex, "${eq.comment}"` : ''}
183
+ End If`)
184
+ .join('\n ')
185
+ : ''}
186
+
187
+ MsgBox "Equations added successfully"`
188
+ : ''}
189
+
190
+ ${args.operation === 'modify'
191
+ ? `
192
+ ' Modify existing equations
193
+ Dim equationCount As Integer
194
+ equationCount = swEquationMgr.GetCount
195
+
196
+ For i = 0 To equationCount - 1
197
+ Dim currentEq As String
198
+ currentEq = swEquationMgr.Equation(i)
199
+
200
+ ${args.equations
201
+ ? args.equations
202
+ .map((eq) => `
203
+ If InStr(currentEq, "\\"${eq.name}\\"") > 0 Then
204
+ swEquationMgr.Equation(i) = "\\"${eq.name}\\" = ${eq.value}"
205
+ Debug.Print "Modified equation: ${eq.name}"
206
+ End If`)
207
+ .join('\n ')
208
+ : ''}
209
+ Next i
210
+
211
+ MsgBox "Equations modified"`
212
+ : ''}
213
+
214
+ ${args.operation === 'delete'
215
+ ? `
216
+ ' Delete equations
217
+ ${args.equations
218
+ ? args.equations
219
+ .map((eq) => `
220
+ For i = swEquationMgr.GetCount - 1 To 0 Step -1
221
+ If InStr(swEquationMgr.Equation(i), "\\"${eq.name}\\"") > 0 Then
222
+ swEquationMgr.Delete i
223
+ Debug.Print "Deleted equation: ${eq.name}"
224
+ End If
225
+ Next i`)
226
+ .join('\n ')
227
+ : ''}
228
+
229
+ MsgBox "Equations deleted"`
230
+ : ''}
231
+
232
+ ${args.operation === 'link'
233
+ ? `
234
+ ' Link to external equation file
235
+ If swEquationMgr.LinkToFile Then
236
+ ' Already linked, update path
237
+ swEquationMgr.FilePath = "${args.externalFile}"
238
+ Else
239
+ ' Create link
240
+ swEquationMgr.LinkToFile = True
241
+ swEquationMgr.FilePath = "${args.externalFile}"
242
+ End If
243
+
244
+ swEquationMgr.UpdateValuesFromExternalEquationFile
245
+ MsgBox "Linked to external file: ${args.externalFile}"`
246
+ : ''}
247
+
248
+ ${args.operation === 'export'
249
+ ? `
250
+ ' Export equations to file
251
+ Dim fso As Object, file As Object
252
+ Set fso = CreateObject("Scripting.FileSystemObject")
253
+ Set file = fso.CreateTextFile("${args.externalFile || 'C:\\Temp\\equations.txt'}", True)
254
+
255
+ file.WriteLine "' SolidWorks Equations Export"
256
+ file.WriteLine "' Generated: " & Now
257
+ file.WriteLine ""
258
+
259
+ For i = 0 To swEquationMgr.GetCount - 1
260
+ file.WriteLine swEquationMgr.Equation(i)
261
+
262
+ Dim comment As String
263
+ comment = swEquationMgr.GetEquationComment(i)
264
+ If comment <> "" Then
265
+ file.WriteLine "' " & comment
266
+ End If
267
+ Next i
268
+
269
+ file.Close
270
+ MsgBox "Equations exported to: ${args.externalFile || 'C:\\Temp\\equations.txt'}"`
271
+ : ''}
272
+
273
+ swModel.EditRebuild3
232
274
  End Sub`;
233
- }
275
+ },
234
276
  },
235
277
  {
236
278
  name: 'vba_simulation_setup',
@@ -238,388 +280,423 @@ End Sub`;
238
280
  inputSchema: z.object({
239
281
  studyType: z.enum(['static', 'frequency', 'buckling', 'thermal', 'nonlinear', 'dynamic']),
240
282
  studyName: z.string(),
241
- materials: z.array(z.object({
283
+ materials: z
284
+ .array(z.object({
242
285
  componentName: z.string(),
243
- materialName: z.string()
244
- })).optional(),
245
- fixtures: z.array(z.object({
286
+ materialName: z.string(),
287
+ }))
288
+ .optional(),
289
+ fixtures: z
290
+ .array(z.object({
246
291
  faceName: z.string(),
247
- type: z.enum(['fixed', 'roller', 'hinge'])
248
- })).optional(),
249
- loads: z.array(z.object({
292
+ type: z.enum(['fixed', 'roller', 'hinge']),
293
+ }))
294
+ .optional(),
295
+ loads: z
296
+ .array(z.object({
250
297
  faceName: z.string(),
251
298
  type: z.enum(['force', 'pressure', 'torque']),
252
299
  value: z.number(),
253
- unit: z.string()
254
- })).optional(),
255
- meshQuality: z.enum(['draft', 'standard', 'fine']).optional()
300
+ unit: z.string(),
301
+ }))
302
+ .optional(),
303
+ meshQuality: z.enum(['draft', 'standard', 'fine']).optional(),
256
304
  }),
257
305
  handler: (args) => {
258
- return `
259
- Sub SetupSimulationStudy_${args.studyType}()
260
- Dim swApp As SldWorks.SldWorks
261
- Dim swModel As SldWorks.ModelDoc2
262
- Dim swSimulation As Object ' CosmosWorksLib.CwAddincallback
263
- Dim swStudyMgr As Object ' CosmosWorksLib.CWStudyManager
264
- Dim swStudy As Object ' CosmosWorksLib.CWStudy
265
- Dim swMesh As Object ' CosmosWorksLib.CWMesh
266
- Dim errCode As Long
267
-
268
- Set swApp = Application.SldWorks
269
- Set swModel = swApp.ActiveDoc
270
-
271
- If swModel Is Nothing Then
272
- MsgBox "No active document"
273
- Exit Sub
274
- End If
275
-
276
- ' Get Simulation add-in
277
- Set swSimulation = swApp.GetAddInObject("SldWorks.Simulation")
278
-
279
- If swSimulation Is Nothing Then
280
- MsgBox "Simulation add-in not loaded"
281
- Exit Sub
282
- End If
283
-
284
- ' Activate Simulation
285
- swSimulation.InitializeInterface swApp, swModel
286
- Set swStudyMgr = swSimulation.StudyManager
287
-
288
- ' Create study
289
- Set swStudy = swStudyMgr.CreateNewStudy3( _
290
- "${args.studyName}", _
291
- ${args.studyType === 'static' ? '0' :
292
- args.studyType === 'frequency' ? '1' :
293
- args.studyType === 'buckling' ? '2' :
294
- args.studyType === 'thermal' ? '3' :
295
- args.studyType === 'nonlinear' ? '4' :
296
- '5'}, _
297
- 0, errCode)
298
-
299
- If swStudy Is Nothing Then
300
- MsgBox "Failed to create study. Error: " & errCode
301
- Exit Sub
302
- End If
303
-
304
- ${args.materials && args.materials.length > 0 ? `
305
- ' Apply materials
306
- ${args.materials.map((mat) => `
307
- swModel.Extension.SelectByID2 "${mat.componentName}", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0
308
- Dim swMaterial As Object
309
- Set swMaterial = swStudy.GetMaterial("${mat.materialName}")
310
- If Not swMaterial Is Nothing Then
311
- swStudy.ApplyMaterial swMaterial
312
- Debug.Print "Applied material: ${mat.materialName} to ${mat.componentName}"
313
- End If`).join('\n ')}` : ''}
314
-
315
- ${args.fixtures && args.fixtures.length > 0 ? `
316
- ' Add fixtures
317
- ${args.fixtures.map((fix) => `
318
- swModel.Extension.SelectByID2 "${fix.faceName}", "FACE", 0, 0, 0, False, 0, Nothing, 0
319
- Dim swFixture As Object
320
- Set swFixture = swStudy.AddRestraint( _
321
- ${fix.type === 'fixed' ? '0' :
322
- fix.type === 'roller' ? '1' :
323
- '2'}, _
324
- swModel.SelectionManager)
325
- If Not swFixture Is Nothing Then
326
- Debug.Print "Added ${fix.type} fixture to ${fix.faceName}"
327
- End If`).join('\n ')}` : ''}
328
-
329
- ${args.loads && args.loads.length > 0 ? `
330
- ' Add loads
331
- ${args.loads.map((load) => `
332
- swModel.Extension.SelectByID2 "${load.faceName}", "FACE", 0, 0, 0, False, 0, Nothing, 0
333
- Dim swLoad As Object
334
- Set swLoad = swStudy.AddLoad( _
335
- ${load.type === 'force' ? '0' :
336
- load.type === 'pressure' ? '1' :
337
- '2'}, _
338
- swModel.SelectionManager)
339
- If Not swLoad Is Nothing Then
340
- swLoad.Value = ${load.value}
341
- swLoad.Unit = "${load.unit}"
342
- Debug.Print "Added ${load.type}: ${load.value} ${load.unit} to ${load.faceName}"
343
- End If`).join('\n ')}` : ''}
344
-
345
- ' Create mesh
346
- Set swMesh = swStudy.GetMesh
347
- If Not swMesh Is Nothing Then
348
- swMesh.Quality = ${args.meshQuality === 'draft' ? '0' :
349
- args.meshQuality === 'fine' ? '2' : '1'}
350
-
351
- Dim meshResult As Long
352
- meshResult = swStudy.CreateMesh(0, 0, 0, errCode)
353
-
354
- If meshResult = 0 Then
355
- Debug.Print "Mesh created successfully"
356
- Else
357
- MsgBox "Failed to create mesh. Error: " & errCode
358
- End If
359
- End If
360
-
361
- MsgBox "Simulation study '${args.studyName}' created and configured"
306
+ return `
307
+ Sub SetupSimulationStudy_${args.studyType}()
308
+ Dim swApp As SldWorks.SldWorks
309
+ Dim swModel As SldWorks.ModelDoc2
310
+ Dim swSimulation As Object ' CosmosWorksLib.CwAddincallback
311
+ Dim swStudyMgr As Object ' CosmosWorksLib.CWStudyManager
312
+ Dim swStudy As Object ' CosmosWorksLib.CWStudy
313
+ Dim swMesh As Object ' CosmosWorksLib.CWMesh
314
+ Dim errCode As Long
315
+
316
+ Set swApp = Application.SldWorks
317
+ Set swModel = swApp.ActiveDoc
318
+
319
+ If swModel Is Nothing Then
320
+ MsgBox "No active document"
321
+ Exit Sub
322
+ End If
323
+
324
+ ' Get Simulation add-in
325
+ Set swSimulation = swApp.GetAddInObject("SldWorks.Simulation")
326
+
327
+ If swSimulation Is Nothing Then
328
+ MsgBox "Simulation add-in not loaded"
329
+ Exit Sub
330
+ End If
331
+
332
+ ' Activate Simulation
333
+ swSimulation.InitializeInterface swApp, swModel
334
+ Set swStudyMgr = swSimulation.StudyManager
335
+
336
+ ' Create study
337
+ Set swStudy = swStudyMgr.CreateNewStudy3( _
338
+ "${args.studyName}", _
339
+ ${args.studyType === 'static'
340
+ ? '0'
341
+ : args.studyType === 'frequency'
342
+ ? '1'
343
+ : args.studyType === 'buckling'
344
+ ? '2'
345
+ : args.studyType === 'thermal'
346
+ ? '3'
347
+ : args.studyType === 'nonlinear'
348
+ ? '4'
349
+ : '5'}, _
350
+ 0, errCode)
351
+
352
+ If swStudy Is Nothing Then
353
+ MsgBox "Failed to create study. Error: " & errCode
354
+ Exit Sub
355
+ End If
356
+
357
+ ${args.materials && args.materials.length > 0
358
+ ? `
359
+ ' Apply materials
360
+ ${args.materials
361
+ .map((mat) => `
362
+ swModel.Extension.SelectByID2 "${mat.componentName}", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0
363
+ Dim swMaterial As Object
364
+ Set swMaterial = swStudy.GetMaterial("${mat.materialName}")
365
+ If Not swMaterial Is Nothing Then
366
+ swStudy.ApplyMaterial swMaterial
367
+ Debug.Print "Applied material: ${mat.materialName} to ${mat.componentName}"
368
+ End If`)
369
+ .join('\n ')}`
370
+ : ''}
371
+
372
+ ${args.fixtures && args.fixtures.length > 0
373
+ ? `
374
+ ' Add fixtures
375
+ ${args.fixtures
376
+ .map((fix) => `
377
+ swModel.Extension.SelectByID2 "${fix.faceName}", "FACE", 0, 0, 0, False, 0, Nothing, 0
378
+ Dim swFixture As Object
379
+ Set swFixture = swStudy.AddRestraint( _
380
+ ${fix.type === 'fixed' ? '0' : fix.type === 'roller' ? '1' : '2'}, _
381
+ swModel.SelectionManager)
382
+ If Not swFixture Is Nothing Then
383
+ Debug.Print "Added ${fix.type} fixture to ${fix.faceName}"
384
+ End If`)
385
+ .join('\n ')}`
386
+ : ''}
387
+
388
+ ${args.loads && args.loads.length > 0
389
+ ? `
390
+ ' Add loads
391
+ ${args.loads
392
+ .map((load) => `
393
+ swModel.Extension.SelectByID2 "${load.faceName}", "FACE", 0, 0, 0, False, 0, Nothing, 0
394
+ Dim swLoad As Object
395
+ Set swLoad = swStudy.AddLoad( _
396
+ ${load.type === 'force' ? '0' : load.type === 'pressure' ? '1' : '2'}, _
397
+ swModel.SelectionManager)
398
+ If Not swLoad Is Nothing Then
399
+ swLoad.Value = ${load.value}
400
+ swLoad.Unit = "${load.unit}"
401
+ Debug.Print "Added ${load.type}: ${load.value} ${load.unit} to ${load.faceName}"
402
+ End If`)
403
+ .join('\n ')}`
404
+ : ''}
405
+
406
+ ' Create mesh
407
+ Set swMesh = swStudy.GetMesh
408
+ If Not swMesh Is Nothing Then
409
+ swMesh.Quality = ${args.meshQuality === 'draft' ? '0' : args.meshQuality === 'fine' ? '2' : '1'}
410
+
411
+ Dim meshResult As Long
412
+ meshResult = swStudy.CreateMesh(0, 0, 0, errCode)
413
+
414
+ If meshResult = 0 Then
415
+ Debug.Print "Mesh created successfully"
416
+ Else
417
+ MsgBox "Failed to create mesh. Error: " & errCode
418
+ End If
419
+ End If
420
+
421
+ MsgBox "Simulation study '${args.studyName}' created and configured"
362
422
  End Sub`;
363
- }
423
+ },
364
424
  },
365
425
  {
366
426
  name: 'vba_api_automation',
367
427
  description: 'Generate VBA for advanced API automation and event handling',
368
428
  inputSchema: z.object({
369
429
  automationType: z.enum(['event_handler', 'macro_feature', 'property_page', 'add_in']),
370
- eventTypes: z.array(z.enum([
371
- 'file_save', 'file_open', 'rebuild', 'selection_change',
372
- 'dimension_change', 'feature_add', 'configuration_change'
373
- ])).optional(),
430
+ eventTypes: z
431
+ .array(z.enum([
432
+ 'file_save',
433
+ 'file_open',
434
+ 'rebuild',
435
+ 'selection_change',
436
+ 'dimension_change',
437
+ 'feature_add',
438
+ 'configuration_change',
439
+ ]))
440
+ .optional(),
374
441
  className: z.string().optional(),
375
- methods: z.array(z.object({
442
+ methods: z
443
+ .array(z.object({
376
444
  name: z.string(),
377
445
  parameters: z.array(z.string()).optional(),
378
- returnType: z.string().optional()
379
- })).optional()
446
+ returnType: z.string().optional(),
447
+ }))
448
+ .optional(),
380
449
  }),
381
450
  handler: (args) => {
382
451
  const eventHandlers = {
383
- file_save: `
384
- Private Function swApp_FileSaveNotify(ByVal FileName As String) As Long
385
- Debug.Print "File saving: " & FileName
386
- ' Add custom save logic here
387
- swApp_FileSaveNotify = 0
452
+ file_save: `
453
+ Private Function swApp_FileSaveNotify(ByVal FileName As String) As Long
454
+ Debug.Print "File saving: " & FileName
455
+ ' Add custom save logic here
456
+ swApp_FileSaveNotify = 0
388
457
  End Function`,
389
- file_open: `
390
- Private Function swApp_FileOpenNotify(ByVal FileName As String) As Long
391
- Debug.Print "File opened: " & FileName
392
- ' Add custom open logic here
393
- swApp_FileOpenNotify = 0
458
+ file_open: `
459
+ Private Function swApp_FileOpenNotify(ByVal FileName As String) As Long
460
+ Debug.Print "File opened: " & FileName
461
+ ' Add custom open logic here
462
+ swApp_FileOpenNotify = 0
394
463
  End Function`,
395
- rebuild: `
396
- Private Function swApp_RebuildNotify() As Long
397
- Debug.Print "Model rebuilding"
398
- ' Add custom rebuild logic here
399
- swApp_RebuildNotify = 0
464
+ rebuild: `
465
+ Private Function swApp_RebuildNotify() As Long
466
+ Debug.Print "Model rebuilding"
467
+ ' Add custom rebuild logic here
468
+ swApp_RebuildNotify = 0
400
469
  End Function`,
401
- selection_change: `
402
- Private Function swApp_SelectionChangeNotify() As Long
403
- Dim swSelMgr As SldWorks.SelectionMgr
404
- Set swSelMgr = swModel.SelectionManager
405
-
406
- Debug.Print "Selection changed. Count: " & swSelMgr.GetSelectedObjectCount2(-1)
407
- ' Add custom selection logic here
408
- swApp_SelectionChangeNotify = 0
470
+ selection_change: `
471
+ Private Function swApp_SelectionChangeNotify() As Long
472
+ Dim swSelMgr As SldWorks.SelectionMgr
473
+ Set swSelMgr = swModel.SelectionManager
474
+
475
+ Debug.Print "Selection changed. Count: " & swSelMgr.GetSelectedObjectCount2(-1)
476
+ ' Add custom selection logic here
477
+ swApp_SelectionChangeNotify = 0
478
+ End Function`,
479
+ dimension_change: `
480
+ Private Function swApp_DimensionChangeNotify(ByVal swDim As Object) As Long
481
+ Debug.Print "Dimension changed: " & swDim.FullName
482
+ ' Add custom dimension change logic here
483
+ swApp_DimensionChangeNotify = 0
409
484
  End Function`,
410
- dimension_change: `
411
- Private Function swApp_DimensionChangeNotify(ByVal swDim As Object) As Long
412
- Debug.Print "Dimension changed: " & swDim.FullName
413
- ' Add custom dimension change logic here
414
- swApp_DimensionChangeNotify = 0
415
- End Function`
416
485
  };
417
- return `
418
- ${args.automationType === 'event_handler' ? `
419
- ' Class module for SolidWorks event handling
420
- ' Name this class module: ${args.className || 'SwEventHandler'}
421
-
422
- Option Explicit
423
-
424
- ' SolidWorks application events
425
- Public WithEvents swApp As SldWorks.SldWorks
426
- Public WithEvents swModel As SldWorks.ModelDoc2
427
-
428
- ' Initialize event handler
429
- Public Sub Init(app As SldWorks.SldWorks, model As SldWorks.ModelDoc2)
430
- Set swApp = app
431
- Set swModel = model
432
-
433
- ' Enable notifications
434
- If Not swModel Is Nothing Then
435
- swModel.EnableNotifications = True
436
- End If
437
- End Sub
438
-
439
- ${args.eventTypes ? args.eventTypes.map((evt) => eventHandlers[evt] || '').join('\n\n') : ''}
440
-
441
- ' Cleanup
442
- Public Sub Terminate()
443
- Set swModel = Nothing
444
- Set swApp = Nothing
445
- End Sub
446
-
447
- ' Usage in main module:
448
- ' Dim eventHandler As New SwEventHandler
449
- ' eventHandler.Init swApp, swModel` : ''}
450
-
451
- ${args.automationType === 'macro_feature' ? `
452
- Sub CreateMacroFeature()
453
- Dim swApp As SldWorks.SldWorks
454
- Dim swModel As SldWorks.ModelDoc2
455
- Dim swFeatMgr As SldWorks.FeatureManager
456
- Dim swMacroFeature As SldWorks.Feature
457
- Dim swMacroFeatureDef As SldWorks.MacroFeatureData
458
- Dim methods(9) As String
459
- Dim dimTypes(1) As Long
460
- Dim dimValues(1) As Double
461
- Dim paramNames(1) As String
462
- Dim paramTypes(1) As Long
463
- Dim paramValues(1) As String
464
-
465
- Set swApp = Application.SldWorks
466
- Set swModel = swApp.ActiveDoc
467
-
468
- If swModel Is Nothing Then Exit Sub
469
-
470
- Set swFeatMgr = swModel.FeatureManager
471
-
472
- ' Define macro feature methods
473
- methods(0) = "${args.className || 'CustomFeature'}" ' Module name
474
- methods(1) = "swmRebuild" ' Rebuild function
475
- methods(2) = "swmEdit" ' Edit function
476
- methods(3) = "swmSecurity" ' Security function
477
- methods(4) = "" ' Reserved
478
- methods(5) = "" ' Reserved
479
- methods(6) = "" ' Reserved
480
- methods(7) = "" ' Reserved
481
- methods(8) = "" ' Reserved
482
- methods(9) = "" ' Icon file
483
-
484
- ' Set parameters
485
- paramNames(0) = "Parameter1"
486
- paramTypes(0) = swMacroFeatureParamType_e.swMacroFeatureParamTypeDouble
487
- paramValues(0) = "10.0"
488
-
489
- ' Create macro feature
490
- Set swMacroFeature = swFeatMgr.InsertMacroFeature3( _
491
- "${args.className || 'CustomFeature'}", _
492
- "", methods, _
493
- paramNames, paramTypes, paramValues, _
494
- Nothing, Nothing, Nothing, _
495
- Nothing, swMacroFeatureOptions_e.swMacroFeatureByDefault)
496
-
497
- If Not swMacroFeature Is Nothing Then
498
- MsgBox "Macro feature created: " & swMacroFeature.Name
499
- End If
500
- End Sub
501
-
502
- ' Macro feature rebuild method
503
- Function swmRebuild(swApp As Variant, swModel As Variant, swFeature As Variant) As Variant
504
- ' Custom rebuild logic
505
- swmRebuild = True
506
- End Function
507
-
508
- ' Macro feature edit method
509
- Function swmEdit(swApp As Variant, swModel As Variant, swFeature As Variant) As Variant
510
- ' Custom edit logic
511
- MsgBox "Editing macro feature"
512
- swmEdit = True
513
- End Function` : ''}
514
-
515
- ${args.automationType === 'property_page' ? `
516
- ' Property Manager Page Handler
517
- Sub CreatePropertyPage()
518
- Dim swApp As SldWorks.SldWorks
519
- Dim swModel As SldWorks.ModelDoc2
520
- Dim swPMPage As SldWorks.PropertyManagerPage2
521
- Dim swPMPageHandler As PropertyManagerPageHandler
522
- Dim errors As Long
523
-
524
- Set swApp = Application.SldWorks
525
- Set swModel = swApp.ActiveDoc
526
-
527
- If swModel Is Nothing Then Exit Sub
528
-
529
- ' Create property page handler
530
- Set swPMPageHandler = New PropertyManagerPageHandler
531
-
532
- ' Create property page
533
- Set swPMPage = swApp.CreatePropertyManagerPage( _
534
- "${args.className || 'Custom Properties'}", _
535
- swPropertyManagerPageOptions_e.swPropertyManagerOptions_OkayButton + _
536
- swPropertyManagerPageOptions_e.swPropertyManagerOptions_CancelButton, _
537
- swPMPageHandler, errors)
538
-
539
- If Not swPMPage Is Nothing Then
540
- ' Add controls
541
- Dim group As SldWorks.PropertyManagerPageGroup
542
- Dim textbox As SldWorks.PropertyManagerPageTextbox
543
- Dim numberbox As SldWorks.PropertyManagerPageNumberbox
544
-
545
- Set group = swPMPage.AddGroupBox(1, "Parameters", _
546
- swPropertyManagerPageGroupBoxOptions_e.swGroupBoxOptions_Expanded)
547
-
548
- Set textbox = group.AddControl2(2, _
549
- swPropertyManagerPageControlType_e.swControlType_Textbox, _
550
- "Name:", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, _
551
- swPropertyManagerPageControlOptions_e.swControlOptions_Enabled, "")
552
-
553
- Set numberbox = group.AddControl2(3, _
554
- swPropertyManagerPageControlType_e.swControlType_Numberbox, _
555
- "Value:", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, _
556
- swPropertyManagerPageControlOptions_e.swControlOptions_Enabled, "")
557
-
558
- numberbox.SetRange2 swNumberboxUnitType_e.swNumberBox_Length, 0, 100, True, 10, 1, 0.1
559
-
560
- ' Show property page
561
- swPMPage.Show
562
- End If
563
- End Sub` : ''}
564
-
565
- ${args.automationType === 'add_in' ? `
566
- ' SolidWorks Add-in Template
567
- ' Implements SwAddin interface
568
-
569
- Option Explicit
570
-
571
- Implements SwAddin
572
-
573
- Private swApp As SldWorks.SldWorks
574
- Private addinID As Long
575
-
576
- Private Function SwAddin_ConnectToSW(ThisSW As Object, Cookie As Long) As Boolean
577
- Set swApp = ThisSW
578
- addinID = Cookie
579
-
580
- ' Register callbacks
581
- swApp.SetAddinCallbackInfo2 0, Me, addinID
582
-
583
- ' Add menu items
584
- AddMenuItems
585
-
586
- ' Add toolbar
587
- AddToolbar
588
-
589
- SwAddin_ConnectToSW = True
590
- End Function
591
-
592
- Private Function SwAddin_DisconnectFromSW() As Boolean
593
- ' Clean up
594
- RemoveMenuItems
595
- RemoveToolbar
596
-
597
- Set swApp = Nothing
598
- SwAddin_DisconnectFromSW = True
599
- End Function
600
-
601
- Private Sub AddMenuItems()
602
- Dim menuID As Long
603
- menuID = swApp.AddMenu(swDocumentTypes_e.swDocPART, _
604
- "${args.className || 'Custom Add-in'}", 0)
605
-
606
- swApp.AddMenuItem4 menuID, 0, _
607
- "Command 1@${args.className || 'Custom Add-in'}", _
608
- 0, "OnCommand1", "", ""
609
- End Sub
610
-
611
- Private Sub AddToolbar()
612
- Dim toolbar As Object
613
- Set toolbar = swApp.AddToolbar5( _
614
- addinID, "${args.className || 'Custom Toolbar'}", _
615
- swDocumentTypes_e.swDocPART + swDocumentTypes_e.swDocASSEMBLY, _
616
- swToolbarOptions_e.swToolbarOptions_ShowInAllDocuments)
617
- End Sub
618
-
619
- Public Sub OnCommand1()
620
- MsgBox "Custom command executed"
621
- End Sub` : ''}`;
622
- }
486
+ return `
487
+ ${args.automationType === 'event_handler'
488
+ ? `
489
+ ' Class module for SolidWorks event handling
490
+ ' Name this class module: ${args.className || 'SwEventHandler'}
491
+
492
+ Option Explicit
493
+
494
+ ' SolidWorks application events
495
+ Public WithEvents swApp As SldWorks.SldWorks
496
+ Public WithEvents swModel As SldWorks.ModelDoc2
497
+
498
+ ' Initialize event handler
499
+ Public Sub Init(app As SldWorks.SldWorks, model As SldWorks.ModelDoc2)
500
+ Set swApp = app
501
+ Set swModel = model
502
+
503
+ ' Enable notifications
504
+ If Not swModel Is Nothing Then
505
+ swModel.EnableNotifications = True
506
+ End If
507
+ End Sub
508
+
509
+ ${args.eventTypes ? args.eventTypes.map((evt) => eventHandlers[evt] || '').join('\n\n') : ''}
510
+
511
+ ' Cleanup
512
+ Public Sub Terminate()
513
+ Set swModel = Nothing
514
+ Set swApp = Nothing
515
+ End Sub
516
+
517
+ ' Usage in main module:
518
+ ' Dim eventHandler As New SwEventHandler
519
+ ' eventHandler.Init swApp, swModel`
520
+ : ''}
521
+
522
+ ${args.automationType === 'macro_feature'
523
+ ? `
524
+ Sub CreateMacroFeature()
525
+ Dim swApp As SldWorks.SldWorks
526
+ Dim swModel As SldWorks.ModelDoc2
527
+ Dim swFeatMgr As SldWorks.FeatureManager
528
+ Dim swMacroFeature As SldWorks.Feature
529
+ Dim swMacroFeatureDef As SldWorks.MacroFeatureData
530
+ Dim methods(9) As String
531
+ Dim dimTypes(1) As Long
532
+ Dim dimValues(1) As Double
533
+ Dim paramNames(1) As String
534
+ Dim paramTypes(1) As Long
535
+ Dim paramValues(1) As String
536
+
537
+ Set swApp = Application.SldWorks
538
+ Set swModel = swApp.ActiveDoc
539
+
540
+ If swModel Is Nothing Then Exit Sub
541
+
542
+ Set swFeatMgr = swModel.FeatureManager
543
+
544
+ ' Define macro feature methods
545
+ methods(0) = "${args.className || 'CustomFeature'}" ' Module name
546
+ methods(1) = "swmRebuild" ' Rebuild function
547
+ methods(2) = "swmEdit" ' Edit function
548
+ methods(3) = "swmSecurity" ' Security function
549
+ methods(4) = "" ' Reserved
550
+ methods(5) = "" ' Reserved
551
+ methods(6) = "" ' Reserved
552
+ methods(7) = "" ' Reserved
553
+ methods(8) = "" ' Reserved
554
+ methods(9) = "" ' Icon file
555
+
556
+ ' Set parameters
557
+ paramNames(0) = "Parameter1"
558
+ paramTypes(0) = swMacroFeatureParamType_e.swMacroFeatureParamTypeDouble
559
+ paramValues(0) = "10.0"
560
+
561
+ ' Create macro feature
562
+ Set swMacroFeature = swFeatMgr.InsertMacroFeature3( _
563
+ "${args.className || 'CustomFeature'}", _
564
+ "", methods, _
565
+ paramNames, paramTypes, paramValues, _
566
+ Nothing, Nothing, Nothing, _
567
+ Nothing, swMacroFeatureOptions_e.swMacroFeatureByDefault)
568
+
569
+ If Not swMacroFeature Is Nothing Then
570
+ MsgBox "Macro feature created: " & swMacroFeature.Name
571
+ End If
572
+ End Sub
573
+
574
+ ' Macro feature rebuild method
575
+ Function swmRebuild(swApp As Variant, swModel As Variant, swFeature As Variant) As Variant
576
+ ' Custom rebuild logic
577
+ swmRebuild = True
578
+ End Function
579
+
580
+ ' Macro feature edit method
581
+ Function swmEdit(swApp As Variant, swModel As Variant, swFeature As Variant) As Variant
582
+ ' Custom edit logic
583
+ MsgBox "Editing macro feature"
584
+ swmEdit = True
585
+ End Function`
586
+ : ''}
587
+
588
+ ${args.automationType === 'property_page'
589
+ ? `
590
+ ' Property Manager Page Handler
591
+ Sub CreatePropertyPage()
592
+ Dim swApp As SldWorks.SldWorks
593
+ Dim swModel As SldWorks.ModelDoc2
594
+ Dim swPMPage As SldWorks.PropertyManagerPage2
595
+ Dim swPMPageHandler As PropertyManagerPageHandler
596
+ Dim errors As Long
597
+
598
+ Set swApp = Application.SldWorks
599
+ Set swModel = swApp.ActiveDoc
600
+
601
+ If swModel Is Nothing Then Exit Sub
602
+
603
+ ' Create property page handler
604
+ Set swPMPageHandler = New PropertyManagerPageHandler
605
+
606
+ ' Create property page
607
+ Set swPMPage = swApp.CreatePropertyManagerPage( _
608
+ "${args.className || 'Custom Properties'}", _
609
+ swPropertyManagerPageOptions_e.swPropertyManagerOptions_OkayButton + _
610
+ swPropertyManagerPageOptions_e.swPropertyManagerOptions_CancelButton, _
611
+ swPMPageHandler, errors)
612
+
613
+ If Not swPMPage Is Nothing Then
614
+ ' Add controls
615
+ Dim group As SldWorks.PropertyManagerPageGroup
616
+ Dim textbox As SldWorks.PropertyManagerPageTextbox
617
+ Dim numberbox As SldWorks.PropertyManagerPageNumberbox
618
+
619
+ Set group = swPMPage.AddGroupBox(1, "Parameters", _
620
+ swPropertyManagerPageGroupBoxOptions_e.swGroupBoxOptions_Expanded)
621
+
622
+ Set textbox = group.AddControl2(2, _
623
+ swPropertyManagerPageControlType_e.swControlType_Textbox, _
624
+ "Name:", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, _
625
+ swPropertyManagerPageControlOptions_e.swControlOptions_Enabled, "")
626
+
627
+ Set numberbox = group.AddControl2(3, _
628
+ swPropertyManagerPageControlType_e.swControlType_Numberbox, _
629
+ "Value:", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, _
630
+ swPropertyManagerPageControlOptions_e.swControlOptions_Enabled, "")
631
+
632
+ numberbox.SetRange2 swNumberboxUnitType_e.swNumberBox_Length, 0, 100, True, 10, 1, 0.1
633
+
634
+ ' Show property page
635
+ swPMPage.Show
636
+ End If
637
+ End Sub`
638
+ : ''}
639
+
640
+ ${args.automationType === 'add_in'
641
+ ? `
642
+ ' SolidWorks Add-in Template
643
+ ' Implements SwAddin interface
644
+
645
+ Option Explicit
646
+
647
+ Implements SwAddin
648
+
649
+ Private swApp As SldWorks.SldWorks
650
+ Private addinID As Long
651
+
652
+ Private Function SwAddin_ConnectToSW(ThisSW As Object, Cookie As Long) As Boolean
653
+ Set swApp = ThisSW
654
+ addinID = Cookie
655
+
656
+ ' Register callbacks
657
+ swApp.SetAddinCallbackInfo2 0, Me, addinID
658
+
659
+ ' Add menu items
660
+ AddMenuItems
661
+
662
+ ' Add toolbar
663
+ AddToolbar
664
+
665
+ SwAddin_ConnectToSW = True
666
+ End Function
667
+
668
+ Private Function SwAddin_DisconnectFromSW() As Boolean
669
+ ' Clean up
670
+ RemoveMenuItems
671
+ RemoveToolbar
672
+
673
+ Set swApp = Nothing
674
+ SwAddin_DisconnectFromSW = True
675
+ End Function
676
+
677
+ Private Sub AddMenuItems()
678
+ Dim menuID As Long
679
+ menuID = swApp.AddMenu(swDocumentTypes_e.swDocPART, _
680
+ "${args.className || 'Custom Add-in'}", 0)
681
+
682
+ swApp.AddMenuItem4 menuID, 0, _
683
+ "Command 1@${args.className || 'Custom Add-in'}", _
684
+ 0, "OnCommand1", "", ""
685
+ End Sub
686
+
687
+ Private Sub AddToolbar()
688
+ Dim toolbar As Object
689
+ Set toolbar = swApp.AddToolbar5( _
690
+ addinID, "${args.className || 'Custom Toolbar'}", _
691
+ swDocumentTypes_e.swDocPART + swDocumentTypes_e.swDocASSEMBLY, _
692
+ swToolbarOptions_e.swToolbarOptions_ShowInAllDocuments)
693
+ End Sub
694
+
695
+ Public Sub OnCommand1()
696
+ MsgBox "Custom command executed"
697
+ End Sub`
698
+ : ''}`;
699
+ },
623
700
  },
624
701
  {
625
702
  name: 'vba_error_handling',
@@ -630,158 +707,164 @@ End Sub` : ''}`;
630
707
  logToFile: z.boolean().optional(),
631
708
  logPath: z.string().optional(),
632
709
  emailOnError: z.boolean().optional(),
633
- emailAddress: z.string().optional()
710
+ emailAddress: z.string().optional(),
634
711
  }),
635
712
  handler: (args) => {
636
- return `
637
- ' Error handling and logging utilities
638
- Option Explicit
639
-
640
- Private Const LOG_FILE As String = "${args.logPath || 'C:\\Temp\\SolidWorksVBA.log'}"
641
-
642
- Sub ${args.functionName}_WithErrorHandling()
643
- On Error GoTo ErrorHandler
644
-
645
- Dim swApp As SldWorks.SldWorks
646
- Dim swModel As SldWorks.ModelDoc2
647
- Dim startTime As Double
648
- Dim endTime As Double
649
-
650
- startTime = Timer
651
-
652
- ' Initialize
653
- Set swApp = Application.SldWorks
654
- Set swModel = swApp.ActiveDoc
655
-
656
- ' Log operation start
657
- LogMessage "INFO", "Starting ${args.operationType}"
658
-
659
- ' Validate prerequisites
660
- If swModel Is Nothing Then
661
- Err.Raise vbObjectError + 1000, "${args.functionName}", _
662
- "No active document found"
663
- End If
664
-
665
- ' ===============================
666
- ' Main operation logic goes here
667
- ' ===============================
668
-
669
- ' Your ${args.operationType} code here
670
-
671
- ' ===============================
672
-
673
- endTime = Timer
674
- LogMessage "SUCCESS", "${args.operationType} completed in " & _
675
- Format(endTime - startTime, "0.00") & " seconds"
676
-
677
- Exit Sub
678
-
679
- ErrorHandler:
680
- Dim errorMsg As String
681
- errorMsg = "Error in ${args.functionName}: " & vbCrLf & _
682
- "Number: " & Err.Number & vbCrLf & _
683
- "Description: " & Err.Description & vbCrLf & _
684
- "Source: " & Err.Source
685
-
686
- ' Log error
687
- LogMessage "ERROR", errorMsg
688
-
689
- ${args.emailOnError ? `
690
- ' Send email notification
691
- SendErrorEmail "${args.emailAddress}", "${args.functionName} Error", errorMsg` : ''}
692
-
693
- ' Display error to user
694
- MsgBox errorMsg, vbCritical, "Error in ${args.operationType}"
695
-
696
- ' Clean up
697
- On Error Resume Next
698
- If Not swModel Is Nothing Then
699
- swModel.ClearSelection2 True
700
- End If
701
-
702
- ' Re-raise error if needed
703
- ' Err.Raise Err.Number, Err.Source, Err.Description
704
- End Sub
705
-
706
- Private Sub LogMessage(logLevel As String, message As String)
707
- ${args.logToFile ? `
708
- Dim fso As Object
709
- Dim logFile As Object
710
-
711
- On Error Resume Next
712
-
713
- Set fso = CreateObject("Scripting.FileSystemObject")
714
-
715
- ' Create log file if it doesn't exist
716
- If Not fso.FileExists(LOG_FILE) Then
717
- Set logFile = fso.CreateTextFile(LOG_FILE, True)
718
- logFile.WriteLine "Timestamp,Level,Message"
719
- Else
720
- Set logFile = fso.OpenTextFile(LOG_FILE, 8) ' Append mode
721
- End If
722
-
723
- ' Write log entry
724
- logFile.WriteLine Now & "," & logLevel & "," & Replace(message, ",", ";")
725
- logFile.Close
726
-
727
- Set logFile = Nothing
728
- Set fso = Nothing` : ''}
729
-
730
- ' Also output to immediate window
731
- Debug.Print "[" & logLevel & "] " & Now & " - " & message
732
- End Sub
733
-
734
- ${args.emailOnError ? `
735
- Private Sub SendErrorEmail(recipient As String, subject As String, body As String)
736
- On Error Resume Next
737
-
738
- Dim outlook As Object
739
- Dim mail As Object
740
-
741
- Set outlook = CreateObject("Outlook.Application")
742
- Set mail = outlook.CreateItem(0) ' olMailItem
743
-
744
- With mail
745
- .To = recipient
746
- .Subject = subject
747
- .Body = body & vbCrLf & vbCrLf & _
748
- "Generated by: ${args.functionName}" & vbCrLf & _
749
- "Time: " & Now & vbCrLf & _
750
- "Computer: " & Environ("COMPUTERNAME") & vbCrLf & _
751
- "User: " & Environ("USERNAME")
752
- .Send
753
- End With
754
-
755
- Set mail = Nothing
756
- Set outlook = Nothing
757
- End Sub` : ''}
758
-
759
- ' Performance monitoring
760
- Private Sub MeasurePerformance(operationName As String, codeBlock As String)
761
- Dim startTime As Double, endTime As Double
762
- Dim memBefore As Long, memAfter As Long
763
-
764
- ' Get memory usage before
765
- memBefore = GetMemoryUsage()
766
- startTime = Timer
767
-
768
- ' Execute code block
769
- Application.Run codeBlock
770
-
771
- endTime = Timer
772
- memAfter = GetMemoryUsage()
773
-
774
- LogMessage "PERFORMANCE", operationName & " - Time: " & _
775
- Format(endTime - startTime, "0.000") & "s, Memory: " & _
776
- Format((memAfter - memBefore) / 1024, "0.00") & " KB"
777
- End Sub
778
-
779
- Private Function GetMemoryUsage() As Long
780
- ' Returns approximate memory usage in bytes
781
- On Error Resume Next
782
- GetMemoryUsage = Application.MemoryUsed * 1024
713
+ return `
714
+ ' Error handling and logging utilities
715
+ Option Explicit
716
+
717
+ Private Const LOG_FILE As String = "${args.logPath || 'C:\\Temp\\SolidWorksVBA.log'}"
718
+
719
+ Sub ${args.functionName}_WithErrorHandling()
720
+ On Error GoTo ErrorHandler
721
+
722
+ Dim swApp As SldWorks.SldWorks
723
+ Dim swModel As SldWorks.ModelDoc2
724
+ Dim startTime As Double
725
+ Dim endTime As Double
726
+
727
+ startTime = Timer
728
+
729
+ ' Initialize
730
+ Set swApp = Application.SldWorks
731
+ Set swModel = swApp.ActiveDoc
732
+
733
+ ' Log operation start
734
+ LogMessage "INFO", "Starting ${args.operationType}"
735
+
736
+ ' Validate prerequisites
737
+ If swModel Is Nothing Then
738
+ Err.Raise vbObjectError + 1000, "${args.functionName}", _
739
+ "No active document found"
740
+ End If
741
+
742
+ ' ===============================
743
+ ' Main operation logic goes here
744
+ ' ===============================
745
+
746
+ ' Your ${args.operationType} code here
747
+
748
+ ' ===============================
749
+
750
+ endTime = Timer
751
+ LogMessage "SUCCESS", "${args.operationType} completed in " & _
752
+ Format(endTime - startTime, "0.00") & " seconds"
753
+
754
+ Exit Sub
755
+
756
+ ErrorHandler:
757
+ Dim errorMsg As String
758
+ errorMsg = "Error in ${args.functionName}: " & vbCrLf & _
759
+ "Number: " & Err.Number & vbCrLf & _
760
+ "Description: " & Err.Description & vbCrLf & _
761
+ "Source: " & Err.Source
762
+
763
+ ' Log error
764
+ LogMessage "ERROR", errorMsg
765
+
766
+ ${args.emailOnError
767
+ ? `
768
+ ' Send email notification
769
+ SendErrorEmail "${args.emailAddress}", "${args.functionName} Error", errorMsg`
770
+ : ''}
771
+
772
+ ' Display error to user
773
+ MsgBox errorMsg, vbCritical, "Error in ${args.operationType}"
774
+
775
+ ' Clean up
776
+ On Error Resume Next
777
+ If Not swModel Is Nothing Then
778
+ swModel.ClearSelection2 True
779
+ End If
780
+
781
+ ' Re-raise error if needed
782
+ ' Err.Raise Err.Number, Err.Source, Err.Description
783
+ End Sub
784
+
785
+ Private Sub LogMessage(logLevel As String, message As String)
786
+ ${args.logToFile
787
+ ? `
788
+ Dim fso As Object
789
+ Dim logFile As Object
790
+
791
+ On Error Resume Next
792
+
793
+ Set fso = CreateObject("Scripting.FileSystemObject")
794
+
795
+ ' Create log file if it doesn't exist
796
+ If Not fso.FileExists(LOG_FILE) Then
797
+ Set logFile = fso.CreateTextFile(LOG_FILE, True)
798
+ logFile.WriteLine "Timestamp,Level,Message"
799
+ Else
800
+ Set logFile = fso.OpenTextFile(LOG_FILE, 8) ' Append mode
801
+ End If
802
+
803
+ ' Write log entry
804
+ logFile.WriteLine Now & "," & logLevel & "," & Replace(message, ",", ";")
805
+ logFile.Close
806
+
807
+ Set logFile = Nothing
808
+ Set fso = Nothing`
809
+ : ''}
810
+
811
+ ' Also output to immediate window
812
+ Debug.Print "[" & logLevel & "] " & Now & " - " & message
813
+ End Sub
814
+
815
+ ${args.emailOnError
816
+ ? `
817
+ Private Sub SendErrorEmail(recipient As String, subject As String, body As String)
818
+ On Error Resume Next
819
+
820
+ Dim outlook As Object
821
+ Dim mail As Object
822
+
823
+ Set outlook = CreateObject("Outlook.Application")
824
+ Set mail = outlook.CreateItem(0) ' olMailItem
825
+
826
+ With mail
827
+ .To = recipient
828
+ .Subject = subject
829
+ .Body = body & vbCrLf & vbCrLf & _
830
+ "Generated by: ${args.functionName}" & vbCrLf & _
831
+ "Time: " & Now & vbCrLf & _
832
+ "Computer: " & Environ("COMPUTERNAME") & vbCrLf & _
833
+ "User: " & Environ("USERNAME")
834
+ .Send
835
+ End With
836
+
837
+ Set mail = Nothing
838
+ Set outlook = Nothing
839
+ End Sub`
840
+ : ''}
841
+
842
+ ' Performance monitoring
843
+ Private Sub MeasurePerformance(operationName As String, codeBlock As String)
844
+ Dim startTime As Double, endTime As Double
845
+ Dim memBefore As Long, memAfter As Long
846
+
847
+ ' Get memory usage before
848
+ memBefore = GetMemoryUsage()
849
+ startTime = Timer
850
+
851
+ ' Execute code block
852
+ Application.Run codeBlock
853
+
854
+ endTime = Timer
855
+ memAfter = GetMemoryUsage()
856
+
857
+ LogMessage "PERFORMANCE", operationName & " - Time: " & _
858
+ Format(endTime - startTime, "0.000") & "s, Memory: " & _
859
+ Format((memAfter - memBefore) / 1024, "0.00") & " KB"
860
+ End Sub
861
+
862
+ Private Function GetMemoryUsage() As Long
863
+ ' Returns approximate memory usage in bytes
864
+ On Error Resume Next
865
+ GetMemoryUsage = Application.MemoryUsed * 1024
783
866
  End Function`;
784
- }
785
- }
867
+ },
868
+ },
786
869
  ];
787
870
  //# sourceMappingURL=vba-advanced.js.map