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,430 +9,492 @@ export const drawingVBATools = [
9
9
  description: 'Generate VBA for creating drawing views',
10
10
  inputSchema: z.object({
11
11
  viewType: z.enum([
12
- 'standard', 'projected', 'auxiliary', 'section', 'detail',
13
- 'broken', 'break_out_section', 'isometric', 'named'
12
+ 'standard',
13
+ 'projected',
14
+ 'auxiliary',
15
+ 'section',
16
+ 'detail',
17
+ 'broken',
18
+ 'break_out_section',
19
+ 'isometric',
20
+ 'named',
14
21
  ]),
15
22
  modelPath: z.string().describe('Path to model file'),
16
- viewOrientation: z.enum([
17
- 'front', 'back', 'left', 'right', 'top', 'bottom',
18
- 'isometric', 'dimetric', 'trimetric', 'current'
19
- ]).optional(),
23
+ viewOrientation: z
24
+ .enum(['front', 'back', 'left', 'right', 'top', 'bottom', 'isometric', 'dimetric', 'trimetric', 'current'])
25
+ .optional(),
20
26
  position: z.object({
21
27
  x: z.number().describe('X position in mm'),
22
- y: z.number().describe('Y position in mm')
28
+ y: z.number().describe('Y position in mm'),
23
29
  }),
24
30
  scale: z.number().optional().describe('View scale (e.g., 0.5 for 1:2)'),
25
- sectionLine: z.object({
31
+ sectionLine: z
32
+ .object({
26
33
  startX: z.number(),
27
34
  startY: z.number(),
28
35
  endX: z.number(),
29
- endY: z.number()
30
- }).optional(),
31
- detailCircle: z.object({
36
+ endY: z.number(),
37
+ })
38
+ .optional(),
39
+ detailCircle: z
40
+ .object({
32
41
  centerX: z.number(),
33
42
  centerY: z.number(),
34
- radius: z.number()
35
- }).optional()
43
+ radius: z.number(),
44
+ })
45
+ .optional(),
36
46
  }),
37
47
  handler: (args) => {
38
- const viewOrientations = {
48
+ const _viewOrientations = {
39
49
  front: 'swDrawingViewOrientations_e.swDrawingFrontView',
40
50
  back: 'swDrawingViewOrientations_e.swDrawingBackView',
41
51
  left: 'swDrawingViewOrientations_e.swDrawingLeftView',
42
52
  right: 'swDrawingViewOrientations_e.swDrawingRightView',
43
53
  top: 'swDrawingViewOrientations_e.swDrawingTopView',
44
54
  bottom: 'swDrawingViewOrientations_e.swDrawingBottomView',
45
- isometric: 'swDrawingViewOrientations_e.swDrawingIsometricView'
55
+ isometric: 'swDrawingViewOrientations_e.swDrawingIsometricView',
46
56
  };
47
57
  const viewTypes = {
48
- standard: `
49
- ' Create standard view
50
- Set swView = swDraw.CreateDrawViewFromModelView3( _
51
- "${args.modelPath}", _
52
- "*${args.viewOrientation || 'Front'}", _
53
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0)
54
-
55
- If Not swView Is Nothing Then
56
- swView.ScaleDecimal = ${args.scale || 1}
57
- MsgBox "Standard view created"
58
+ standard: `
59
+ ' Create standard view
60
+ Set swView = swDraw.CreateDrawViewFromModelView3( _
61
+ "${args.modelPath}", _
62
+ "*${args.viewOrientation || 'Front'}", _
63
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0)
64
+
65
+ If Not swView Is Nothing Then
66
+ swView.ScaleDecimal = ${args.scale || 1}
67
+ MsgBox "Standard view created"
58
68
  End If`,
59
- projected: `
60
- ' Create projected view from parent
61
- Set swParentView = swDraw.GetFirstView ' Get sheet
62
- Set swParentView = swParentView.GetNextView ' Get first view
63
-
64
- If Not swParentView Is Nothing Then
65
- Set swView = swDraw.CreateUnfoldedViewAt3( _
66
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0, False)
67
-
68
- If Not swView Is Nothing Then
69
- MsgBox "Projected view created"
70
- End If
69
+ projected: `
70
+ ' Create projected view from parent
71
+ Set swParentView = swDraw.GetFirstView ' Get sheet
72
+ Set swParentView = swParentView.GetNextView ' Get first view
73
+
74
+ If Not swParentView Is Nothing Then
75
+ Set swView = swDraw.CreateUnfoldedViewAt3( _
76
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0, False)
77
+
78
+ If Not swView Is Nothing Then
79
+ MsgBox "Projected view created"
80
+ End If
71
81
  End If`,
72
- section: `
73
- ' Create section view
74
- Set swParentView = swDraw.GetFirstView.GetNextView
75
-
76
- If Not swParentView Is Nothing Then
77
- ' Create section line
78
- Set swSketchMgr = swDraw.SketchManager
79
- swSketchMgr.InsertSketch False
80
- swSketchMgr.CreateLine _
81
- ${(args.sectionLine?.startX || 0) / 1000}, _
82
- ${(args.sectionLine?.startY || 0) / 1000}, 0, _
83
- ${(args.sectionLine?.endX || 100) / 1000}, _
84
- ${(args.sectionLine?.endY || 0) / 1000}, 0
85
- swSketchMgr.InsertSketch True
86
-
87
- ' Create section view
88
- Set swView = swDraw.CreateSectionViewAt5( _
89
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
90
- "Section A-A", _
91
- swCreateSectionViewOptions_e.swCreateSectionView_DisplaySurfaceCut, _
92
- "", 0)
93
-
94
- If Not swView Is Nothing Then
95
- MsgBox "Section view created"
96
- End If
82
+ section: `
83
+ ' Create section view
84
+ Set swParentView = swDraw.GetFirstView.GetNextView
85
+
86
+ If Not swParentView Is Nothing Then
87
+ ' Create section line
88
+ Set swSketchMgr = swDraw.SketchManager
89
+ swSketchMgr.InsertSketch False
90
+ swSketchMgr.CreateLine _
91
+ ${(args.sectionLine?.startX || 0) / 1000}, _
92
+ ${(args.sectionLine?.startY || 0) / 1000}, 0, _
93
+ ${(args.sectionLine?.endX || 100) / 1000}, _
94
+ ${(args.sectionLine?.endY || 0) / 1000}, 0
95
+ swSketchMgr.InsertSketch True
96
+
97
+ ' Create section view
98
+ Set swView = swDraw.CreateSectionViewAt5( _
99
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
100
+ "Section A-A", _
101
+ swCreateSectionViewOptions_e.swCreateSectionView_DisplaySurfaceCut, _
102
+ "", 0)
103
+
104
+ If Not swView Is Nothing Then
105
+ MsgBox "Section view created"
106
+ End If
107
+ End If`,
108
+ detail: `
109
+ ' Create detail view
110
+ Set swParentView = swDraw.GetFirstView.GetNextView
111
+
112
+ If Not swParentView Is Nothing Then
113
+ ' Create detail circle
114
+ Set swSketchMgr = swDraw.SketchManager
115
+ swSketchMgr.InsertSketch False
116
+ swSketchMgr.CreateCircle _
117
+ ${(args.detailCircle?.centerX || 0) / 1000}, _
118
+ ${(args.detailCircle?.centerY || 0) / 1000}, 0, _
119
+ ${(args.detailCircle?.radius || 10) / 1000}
120
+ swSketchMgr.InsertSketch True
121
+
122
+ ' Create detail view
123
+ Set swView = swDraw.CreateDetailViewAt4( _
124
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
125
+ swDetViewStyle_e.swDetViewSTANDARD, _
126
+ ${args.scale || 2}, _
127
+ True, "Detail A", _
128
+ swDetCircleShowType_e.swDetCircleCIRCLE, _
129
+ True, False, False)
130
+
131
+ If Not swView Is Nothing Then
132
+ MsgBox "Detail view created"
133
+ End If
97
134
  End If`,
98
- detail: `
99
- ' Create detail view
100
- Set swParentView = swDraw.GetFirstView.GetNextView
101
-
102
- If Not swParentView Is Nothing Then
103
- ' Create detail circle
104
- Set swSketchMgr = swDraw.SketchManager
105
- swSketchMgr.InsertSketch False
106
- swSketchMgr.CreateCircle _
107
- ${(args.detailCircle?.centerX || 0) / 1000}, _
108
- ${(args.detailCircle?.centerY || 0) / 1000}, 0, _
109
- ${(args.detailCircle?.radius || 10) / 1000}
110
- swSketchMgr.InsertSketch True
111
-
112
- ' Create detail view
113
- Set swView = swDraw.CreateDetailViewAt4( _
114
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
115
- swDetViewStyle_e.swDetViewSTANDARD, _
116
- ${args.scale || 2}, _
117
- True, "Detail A", _
118
- swDetCircleShowType_e.swDetCircleCIRCLE, _
119
- True, False, False)
120
-
121
- If Not swView Is Nothing Then
122
- MsgBox "Detail view created"
123
- End If
124
- End If`
125
135
  };
126
- return `
127
- Sub CreateDrawingView_${args.viewType}()
128
- Dim swApp As SldWorks.SldWorks
129
- Dim swModel As SldWorks.ModelDoc2
130
- Dim swDraw As SldWorks.DrawingDoc
131
- Dim swView As SldWorks.View
132
- Dim swParentView As SldWorks.View
133
- Dim swSketchMgr As SldWorks.SketchManager
134
-
135
- Set swApp = Application.SldWorks
136
- Set swModel = swApp.ActiveDoc
137
-
138
- If swModel Is Nothing Then
139
- MsgBox "No active document"
140
- Exit Sub
141
- End If
142
-
143
- If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
144
- MsgBox "Please open a drawing document"
145
- Exit Sub
146
- End If
147
-
148
- Set swDraw = swModel
149
-
150
- ${viewTypes[args.viewType] || viewTypes.standard}
151
-
152
- swModel.ViewZoomtofit2
153
- swModel.EditRebuild3
136
+ return `
137
+ Sub CreateDrawingView_${args.viewType}()
138
+ Dim swApp As SldWorks.SldWorks
139
+ Dim swModel As SldWorks.ModelDoc2
140
+ Dim swDraw As SldWorks.DrawingDoc
141
+ Dim swView As SldWorks.View
142
+ Dim swParentView As SldWorks.View
143
+ Dim swSketchMgr As SldWorks.SketchManager
144
+
145
+ Set swApp = Application.SldWorks
146
+ Set swModel = swApp.ActiveDoc
147
+
148
+ If swModel Is Nothing Then
149
+ MsgBox "No active document"
150
+ Exit Sub
151
+ End If
152
+
153
+ If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
154
+ MsgBox "Please open a drawing document"
155
+ Exit Sub
156
+ End If
157
+
158
+ Set swDraw = swModel
159
+
160
+ ${viewTypes[args.viewType] || viewTypes.standard}
161
+
162
+ swModel.ViewZoomtofit2
163
+ swModel.EditRebuild3
154
164
  End Sub`;
155
- }
165
+ },
156
166
  },
157
167
  {
158
168
  name: 'vba_drawing_dimensions',
159
169
  description: 'Generate VBA for adding dimensions to drawings',
160
170
  inputSchema: z.object({
161
171
  dimensionType: z.enum([
162
- 'linear', 'angular', 'radial', 'diameter', 'ordinate',
163
- 'chamfer', 'arc_length', 'coordinate'
172
+ 'linear',
173
+ 'angular',
174
+ 'radial',
175
+ 'diameter',
176
+ 'ordinate',
177
+ 'chamfer',
178
+ 'arc_length',
179
+ 'coordinate',
164
180
  ]),
165
181
  viewName: z.string().optional().describe('Name of the view'),
166
- entities: z.array(z.object({
182
+ entities: z
183
+ .array(z.object({
167
184
  type: z.enum(['edge', 'vertex', 'face']),
168
- name: z.string()
169
- })).optional(),
185
+ name: z.string(),
186
+ }))
187
+ .optional(),
170
188
  position: z.object({
171
189
  x: z.number(),
172
- y: z.number()
190
+ y: z.number(),
173
191
  }),
174
- tolerance: z.object({
192
+ tolerance: z
193
+ .object({
175
194
  type: z.enum(['bilateral', 'limit', 'symmetric', 'basic', 'min', 'max']).optional(),
176
195
  upper: z.number().optional(),
177
- lower: z.number().optional()
178
- }).optional(),
196
+ lower: z.number().optional(),
197
+ })
198
+ .optional(),
179
199
  prefix: z.string().optional(),
180
- suffix: z.string().optional()
200
+ suffix: z.string().optional(),
181
201
  }),
182
202
  handler: (args) => {
183
- return `
184
- Sub AddDimension_${args.dimensionType}()
185
- Dim swApp As SldWorks.SldWorks
186
- Dim swModel As SldWorks.ModelDoc2
187
- Dim swDraw As SldWorks.DrawingDoc
188
- Dim swView As SldWorks.View
189
- Dim swDispDim As SldWorks.DisplayDimension
190
- Dim swDim As SldWorks.Dimension
191
- Dim swTol As SldWorks.DimensionTolerance
192
-
193
- Set swApp = Application.SldWorks
194
- Set swModel = swApp.ActiveDoc
195
-
196
- If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
197
- MsgBox "Please open a drawing document"
198
- Exit Sub
199
- End If
200
-
201
- Set swDraw = swModel
202
-
203
- ' Get the view
204
- Set swView = swDraw.GetFirstView ' Sheet
205
- Set swView = swView.GetNextView ' First view
206
- ${args.viewName ? `
207
- ' Find specific view
208
- Do While Not swView Is Nothing
209
- If swView.Name = "${args.viewName}" Then Exit Do
210
- Set swView = swView.GetNextView
211
- Loop` : ''}
212
-
213
- If swView Is Nothing Then
214
- MsgBox "View not found"
215
- Exit Sub
216
- End If
217
-
218
- ' Activate view
219
- swDraw.ActivateView swView.Name
220
-
221
- ${args.entities && args.entities.length > 0 ? `
222
- ' Select entities
223
- ${args.entities.map((entity, i) => `
224
- swModel.Extension.SelectByID2 "${entity.name}", "${entity.type.toUpperCase()}", _
225
- 0, 0, 0, ${i > 0 ? 'True' : 'False'}, 0, Nothing, 0`).join('')}` : ''}
226
-
227
- ' Add dimension based on type
228
- ${args.dimensionType === 'linear' ? `
229
- Set swDispDim = swModel.AddDimension2( _
230
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0)` : ''}
231
-
232
- ${args.dimensionType === 'angular' ? `
233
- Set swDispDim = swModel.AddAngularDimension2( _
234
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0)` : ''}
235
-
236
- ${args.dimensionType === 'radial' ? `
237
- Set swDispDim = swModel.AddRadialDimension2( _
238
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0)` : ''}
239
-
240
- ${args.dimensionType === 'diameter' ? `
241
- Set swDispDim = swModel.AddDiameterDimension2( _
242
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0)` : ''}
243
-
244
- ${args.dimensionType === 'ordinate' ? `
245
- Set swDispDim = swModel.AddOrdinateDimension2( _
246
- 0, ${args.position.x / 1000}, ${args.position.y / 1000}, 0)` : ''}
247
-
248
- If Not swDispDim Is Nothing Then
249
- Set swDim = swDispDim.GetDimension2(0)
250
-
251
- ${args.prefix ? `swDim.SetText swTextPrefix, "${args.prefix}"` : ''}
252
- ${args.suffix ? `swDim.SetText swTextSuffix, "${args.suffix}"` : ''}
253
-
254
- ${args.tolerance ? `
255
- ' Set tolerance
256
- Set swTol = swDim.Tolerance
257
- swTol.Type = ${args.tolerance.type === 'bilateral' ? 'swTolBILATERAL' :
258
- args.tolerance.type === 'limit' ? 'swTolLIMIT' :
259
- args.tolerance.type === 'symmetric' ? 'swTolSYMMETRIC' :
260
- args.tolerance.type === 'basic' ? 'swTolBASIC' :
261
- 'swTolNONE'}
262
- ${args.tolerance.upper ? `swTol.SetValues 0, ${args.tolerance.upper / 1000}, ${args.tolerance.lower ? args.tolerance.lower / 1000 : 0}` : ''}` : ''}
263
-
264
- MsgBox "${args.dimensionType} dimension added"
265
- Else
266
- MsgBox "Failed to add dimension"
267
- End If
268
-
269
- swModel.ClearSelection2 True
203
+ return `
204
+ Sub AddDimension_${args.dimensionType}()
205
+ Dim swApp As SldWorks.SldWorks
206
+ Dim swModel As SldWorks.ModelDoc2
207
+ Dim swDraw As SldWorks.DrawingDoc
208
+ Dim swView As SldWorks.View
209
+ Dim swDispDim As SldWorks.DisplayDimension
210
+ Dim swDim As SldWorks.Dimension
211
+ Dim swTol As SldWorks.DimensionTolerance
212
+
213
+ Set swApp = Application.SldWorks
214
+ Set swModel = swApp.ActiveDoc
215
+
216
+ If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
217
+ MsgBox "Please open a drawing document"
218
+ Exit Sub
219
+ End If
220
+
221
+ Set swDraw = swModel
222
+
223
+ ' Get the view
224
+ Set swView = swDraw.GetFirstView ' Sheet
225
+ Set swView = swView.GetNextView ' First view
226
+ ${args.viewName
227
+ ? `
228
+ ' Find specific view
229
+ Do While Not swView Is Nothing
230
+ If swView.Name = "${args.viewName}" Then Exit Do
231
+ Set swView = swView.GetNextView
232
+ Loop`
233
+ : ''}
234
+
235
+ If swView Is Nothing Then
236
+ MsgBox "View not found"
237
+ Exit Sub
238
+ End If
239
+
240
+ ' Activate view
241
+ swDraw.ActivateView swView.Name
242
+
243
+ ${args.entities && args.entities.length > 0
244
+ ? `
245
+ ' Select entities
246
+ ${args.entities
247
+ .map((entity, i) => `
248
+ swModel.Extension.SelectByID2 "${entity.name}", "${entity.type.toUpperCase()}", _
249
+ 0, 0, 0, ${i > 0 ? 'True' : 'False'}, 0, Nothing, 0`)
250
+ .join('')}`
251
+ : ''}
252
+
253
+ ' Add dimension based on type
254
+ ${args.dimensionType === 'linear'
255
+ ? `
256
+ Set swDispDim = swModel.AddDimension2( _
257
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0)`
258
+ : ''}
259
+
260
+ ${args.dimensionType === 'angular'
261
+ ? `
262
+ Set swDispDim = swModel.AddAngularDimension2( _
263
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0)`
264
+ : ''}
265
+
266
+ ${args.dimensionType === 'radial'
267
+ ? `
268
+ Set swDispDim = swModel.AddRadialDimension2( _
269
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0)`
270
+ : ''}
271
+
272
+ ${args.dimensionType === 'diameter'
273
+ ? `
274
+ Set swDispDim = swModel.AddDiameterDimension2( _
275
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0)`
276
+ : ''}
277
+
278
+ ${args.dimensionType === 'ordinate'
279
+ ? `
280
+ Set swDispDim = swModel.AddOrdinateDimension2( _
281
+ 0, ${args.position.x / 1000}, ${args.position.y / 1000}, 0)`
282
+ : ''}
283
+
284
+ If Not swDispDim Is Nothing Then
285
+ Set swDim = swDispDim.GetDimension2(0)
286
+
287
+ ${args.prefix ? `swDim.SetText swTextPrefix, "${args.prefix}"` : ''}
288
+ ${args.suffix ? `swDim.SetText swTextSuffix, "${args.suffix}"` : ''}
289
+
290
+ ${args.tolerance
291
+ ? `
292
+ ' Set tolerance
293
+ Set swTol = swDim.Tolerance
294
+ swTol.Type = ${args.tolerance.type === 'bilateral'
295
+ ? 'swTolBILATERAL'
296
+ : args.tolerance.type === 'limit'
297
+ ? 'swTolLIMIT'
298
+ : args.tolerance.type === 'symmetric'
299
+ ? 'swTolSYMMETRIC'
300
+ : args.tolerance.type === 'basic'
301
+ ? 'swTolBASIC'
302
+ : 'swTolNONE'}
303
+ ${args.tolerance.upper ? `swTol.SetValues 0, ${args.tolerance.upper / 1000}, ${args.tolerance.lower ? args.tolerance.lower / 1000 : 0}` : ''}`
304
+ : ''}
305
+
306
+ MsgBox "${args.dimensionType} dimension added"
307
+ Else
308
+ MsgBox "Failed to add dimension"
309
+ End If
310
+
311
+ swModel.ClearSelection2 True
270
312
  End Sub`;
271
- }
313
+ },
272
314
  },
273
315
  {
274
316
  name: 'vba_drawing_annotations',
275
317
  description: 'Generate VBA for adding annotations to drawings',
276
318
  inputSchema: z.object({
277
319
  annotationType: z.enum([
278
- 'note', 'balloon', 'datum', 'geometric_tolerance',
279
- 'surface_finish', 'weld_symbol', 'center_mark', 'centerline'
320
+ 'note',
321
+ 'balloon',
322
+ 'datum',
323
+ 'geometric_tolerance',
324
+ 'surface_finish',
325
+ 'weld_symbol',
326
+ 'center_mark',
327
+ 'centerline',
280
328
  ]),
281
329
  text: z.string().optional().describe('Annotation text'),
282
330
  position: z.object({
283
331
  x: z.number(),
284
- y: z.number()
332
+ y: z.number(),
285
333
  }),
286
- leaderPoints: z.array(z.object({
334
+ leaderPoints: z
335
+ .array(z.object({
287
336
  x: z.number(),
288
- y: z.number()
289
- })).optional(),
290
- style: z.object({
337
+ y: z.number(),
338
+ }))
339
+ .optional(),
340
+ style: z
341
+ .object({
291
342
  fontSize: z.number().optional(),
292
343
  bold: z.boolean().optional(),
293
344
  italic: z.boolean().optional(),
294
- underline: z.boolean().optional()
295
- }).optional(),
345
+ underline: z.boolean().optional(),
346
+ })
347
+ .optional(),
296
348
  balloonStyle: z.enum(['circular', 'triangle', 'hexagon', 'box', 'diamond']).optional(),
297
- itemNumber: z.number().optional()
349
+ itemNumber: z.number().optional(),
298
350
  }),
299
351
  handler: (args) => {
300
352
  const annotations = {
301
- note: `
302
- ' Create note
303
- Set swNote = swModel.InsertNote("${args.text || 'Note Text'}")
304
-
305
- If Not swNote Is Nothing Then
306
- Set swAnn = swNote.GetAnnotation
307
- swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
308
-
309
- ${args.style ? `
310
- ' Set text format
311
- Dim swTextFormat As SldWorks.TextFormat
312
- Set swTextFormat = swAnn.GetTextFormat(0)
313
- ${args.style.fontSize ? `swTextFormat.CharHeight = ${args.style.fontSize / 1000}` : ''}
314
- ${args.style.bold ? `swTextFormat.Bold = True` : ''}
315
- ${args.style.italic ? `swTextFormat.Italic = True` : ''}
316
- ${args.style.underline ? `swTextFormat.Underline = True` : ''}
317
- swNote.SetTextFormat 0, False, swTextFormat` : ''}
318
-
319
- ${args.leaderPoints && args.leaderPoints.length > 0 ? `
320
- ' Add leader
321
- swNote.SetBalloon swBalloonStyle_e.swBS_None, swBalloonFit_e.swBF_Tightest
322
- Dim leaderInfo As SldWorks.Leader
323
- Set leaderInfo = swNote.GetLeader
324
- leaderInfo.SetLeader2 True, swLeaderSide_e.swLS_SMART, True, False, False, False` : ''}
325
-
326
- MsgBox "Note added"
353
+ note: `
354
+ ' Create note
355
+ Set swNote = swModel.InsertNote("${args.text || 'Note Text'}")
356
+
357
+ If Not swNote Is Nothing Then
358
+ Set swAnn = swNote.GetAnnotation
359
+ swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
360
+
361
+ ${args.style
362
+ ? `
363
+ ' Set text format
364
+ Dim swTextFormat As SldWorks.TextFormat
365
+ Set swTextFormat = swAnn.GetTextFormat(0)
366
+ ${args.style.fontSize ? `swTextFormat.CharHeight = ${args.style.fontSize / 1000}` : ''}
367
+ ${args.style.bold ? `swTextFormat.Bold = True` : ''}
368
+ ${args.style.italic ? `swTextFormat.Italic = True` : ''}
369
+ ${args.style.underline ? `swTextFormat.Underline = True` : ''}
370
+ swNote.SetTextFormat 0, False, swTextFormat`
371
+ : ''}
372
+
373
+ ${args.leaderPoints && args.leaderPoints.length > 0
374
+ ? `
375
+ ' Add leader
376
+ swNote.SetBalloon swBalloonStyle_e.swBS_None, swBalloonFit_e.swBF_Tightest
377
+ Dim leaderInfo As SldWorks.Leader
378
+ Set leaderInfo = swNote.GetLeader
379
+ leaderInfo.SetLeader2 True, swLeaderSide_e.swLS_SMART, True, False, False, False`
380
+ : ''}
381
+
382
+ MsgBox "Note added"
327
383
  End If`,
328
- balloon: `
329
- ' Create balloon
330
- Set swNote = swModel.InsertNote("${args.itemNumber || '1'}")
331
-
332
- If Not swNote Is Nothing Then
333
- Set swAnn = swNote.GetAnnotation
334
- swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
335
-
336
- ' Set balloon style
337
- swNote.SetBalloon _
338
- ${args.balloonStyle === 'circular' ? 'swBS_Circular' :
339
- args.balloonStyle === 'triangle' ? 'swBS_Triangle' :
340
- args.balloonStyle === 'hexagon' ? 'swBS_Hexagon' :
341
- args.balloonStyle === 'box' ? 'swBS_Box' :
342
- 'swBS_Circular'}, _
343
- swBF_Tightest
344
-
345
- ${args.leaderPoints && args.leaderPoints.length > 0 ? `
346
- ' Attach leader to component
347
- swModel.Extension.SelectByID2 "", "EDGE", _
348
- ${args.leaderPoints[0].x / 1000}, _
349
- ${args.leaderPoints[0].y / 1000}, 0, _
350
- False, 0, Nothing, 0
351
-
352
- Dim leaderInfo As SldWorks.Leader
353
- Set leaderInfo = swNote.GetLeader
354
- leaderInfo.SetLeader2 True, swLS_SMART, True, False, False, False` : ''}
355
-
356
- MsgBox "Balloon added"
384
+ balloon: `
385
+ ' Create balloon
386
+ Set swNote = swModel.InsertNote("${args.itemNumber || '1'}")
387
+
388
+ If Not swNote Is Nothing Then
389
+ Set swAnn = swNote.GetAnnotation
390
+ swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
391
+
392
+ ' Set balloon style
393
+ swNote.SetBalloon _
394
+ ${args.balloonStyle === 'circular'
395
+ ? 'swBS_Circular'
396
+ : args.balloonStyle === 'triangle'
397
+ ? 'swBS_Triangle'
398
+ : args.balloonStyle === 'hexagon'
399
+ ? 'swBS_Hexagon'
400
+ : args.balloonStyle === 'box'
401
+ ? 'swBS_Box'
402
+ : 'swBS_Circular'}, _
403
+ swBF_Tightest
404
+
405
+ ${args.leaderPoints && args.leaderPoints.length > 0
406
+ ? `
407
+ ' Attach leader to component
408
+ swModel.Extension.SelectByID2 "", "EDGE", _
409
+ ${args.leaderPoints[0].x / 1000}, _
410
+ ${args.leaderPoints[0].y / 1000}, 0, _
411
+ False, 0, Nothing, 0
412
+
413
+ Dim leaderInfo As SldWorks.Leader
414
+ Set leaderInfo = swNote.GetLeader
415
+ leaderInfo.SetLeader2 True, swLS_SMART, True, False, False, False`
416
+ : ''}
417
+
418
+ MsgBox "Balloon added"
357
419
  End If`,
358
- geometric_tolerance: `
359
- ' Create geometric tolerance
360
- Set swGtol = swModel.InsertGtol
361
-
362
- If Not swGtol Is Nothing Then
363
- swGtol.SetFrameValues 1, "${args.text || '⟂0.01 A'}", "", "", "", ""
364
- Set swAnn = swGtol.GetAnnotation
365
- swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
366
-
367
- MsgBox "Geometric tolerance added"
420
+ geometric_tolerance: `
421
+ ' Create geometric tolerance
422
+ Set swGtol = swModel.InsertGtol
423
+
424
+ If Not swGtol Is Nothing Then
425
+ swGtol.SetFrameValues 1, "${args.text || '⟂0.01 A'}", "", "", "", ""
426
+ Set swAnn = swGtol.GetAnnotation
427
+ swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
428
+
429
+ MsgBox "Geometric tolerance added"
368
430
  End If`,
369
- surface_finish: `
370
- ' Create surface finish symbol
371
- Set swSFSymbol = swModel.InsertSurfaceFinishSymbol3( _
372
- swSurfaceFinishStandard_e.swSurfaceFinishStandard_ISO, _
373
- swSFLaySymType_e.swSFLaySym_None, _
374
- swSurfaceFinishSymbol_e.swSFMachiningRequired, _
375
- "${args.text || '1.6'}", "", "", "", "", "")
376
-
377
- If Not swSFSymbol Is Nothing Then
378
- Set swAnn = swSFSymbol.GetAnnotation
379
- swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
380
-
381
- MsgBox "Surface finish symbol added"
431
+ surface_finish: `
432
+ ' Create surface finish symbol
433
+ Set swSFSymbol = swModel.InsertSurfaceFinishSymbol3( _
434
+ swSurfaceFinishStandard_e.swSurfaceFinishStandard_ISO, _
435
+ swSFLaySymType_e.swSFLaySym_None, _
436
+ swSurfaceFinishSymbol_e.swSFMachiningRequired, _
437
+ "${args.text || '1.6'}", "", "", "", "", "")
438
+
439
+ If Not swSFSymbol Is Nothing Then
440
+ Set swAnn = swSFSymbol.GetAnnotation
441
+ swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
442
+
443
+ MsgBox "Surface finish symbol added"
382
444
  End If`,
383
- weld_symbol: `
384
- ' Create weld symbol
385
- Set swWeldSymbol = swModel.InsertWeldSymbol3
386
-
387
- If Not swWeldSymbol Is Nothing Then
388
- ' Configure weld symbol
389
- swWeldSymbol.SetWeldSymbol True, "Fillet", "${args.text || '5'}", "", "", ""
390
- Set swAnn = swWeldSymbol.GetAnnotation
391
- swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
392
-
393
- MsgBox "Weld symbol added"
445
+ weld_symbol: `
446
+ ' Create weld symbol
447
+ Set swWeldSymbol = swModel.InsertWeldSymbol3
448
+
449
+ If Not swWeldSymbol Is Nothing Then
450
+ ' Configure weld symbol
451
+ swWeldSymbol.SetWeldSymbol True, "Fillet", "${args.text || '5'}", "", "", ""
452
+ Set swAnn = swWeldSymbol.GetAnnotation
453
+ swAnn.SetPosition ${args.position.x / 1000}, ${args.position.y / 1000}, 0
454
+
455
+ MsgBox "Weld symbol added"
456
+ End If`,
457
+ center_mark: `
458
+ ' Create center mark
459
+ swModel.Extension.SelectByID2 "", "EDGE", _
460
+ ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
461
+ False, 0, Nothing, 0
462
+
463
+ Set swCenterMark = swModel.AddCenterMark( _
464
+ swCenterMarkConnectionLine_e.swCenterMark_ConnectionLines, _
465
+ swCenterMarkGapDistance_e.swCenterMark_GapDistance)
466
+
467
+ If Not swCenterMark Is Nothing Then
468
+ MsgBox "Center mark added"
394
469
  End If`,
395
- center_mark: `
396
- ' Create center mark
397
- swModel.Extension.SelectByID2 "", "EDGE", _
398
- ${args.position.x / 1000}, ${args.position.y / 1000}, 0, _
399
- False, 0, Nothing, 0
400
-
401
- Set swCenterMark = swModel.AddCenterMark( _
402
- swCenterMarkConnectionLine_e.swCenterMark_ConnectionLines, _
403
- swCenterMarkGapDistance_e.swCenterMark_GapDistance)
404
-
405
- If Not swCenterMark Is Nothing Then
406
- MsgBox "Center mark added"
407
- End If`
408
470
  };
409
- return `
410
- Sub AddAnnotation_${args.annotationType}()
411
- Dim swApp As SldWorks.SldWorks
412
- Dim swModel As SldWorks.ModelDoc2
413
- Dim swDraw As SldWorks.DrawingDoc
414
- Dim swNote As SldWorks.Note
415
- Dim swAnn As SldWorks.Annotation
416
- Dim swGtol As SldWorks.Gtol
417
- Dim swSFSymbol As SldWorks.SurfaceFinishSymbol
418
- Dim swWeldSymbol As SldWorks.WeldSymbol
419
- Dim swCenterMark As SldWorks.CenterMark
420
-
421
- Set swApp = Application.SldWorks
422
- Set swModel = swApp.ActiveDoc
423
-
424
- If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
425
- MsgBox "Please open a drawing document"
426
- Exit Sub
427
- End If
428
-
429
- Set swDraw = swModel
430
-
431
- ${annotations[args.annotationType] || annotations.note}
432
-
433
- swModel.EditRebuild3
471
+ return `
472
+ Sub AddAnnotation_${args.annotationType}()
473
+ Dim swApp As SldWorks.SldWorks
474
+ Dim swModel As SldWorks.ModelDoc2
475
+ Dim swDraw As SldWorks.DrawingDoc
476
+ Dim swNote As SldWorks.Note
477
+ Dim swAnn As SldWorks.Annotation
478
+ Dim swGtol As SldWorks.Gtol
479
+ Dim swSFSymbol As SldWorks.SurfaceFinishSymbol
480
+ Dim swWeldSymbol As SldWorks.WeldSymbol
481
+ Dim swCenterMark As SldWorks.CenterMark
482
+
483
+ Set swApp = Application.SldWorks
484
+ Set swModel = swApp.ActiveDoc
485
+
486
+ If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
487
+ MsgBox "Please open a drawing document"
488
+ Exit Sub
489
+ End If
490
+
491
+ Set swDraw = swModel
492
+
493
+ ${annotations[args.annotationType] || annotations.note}
494
+
495
+ swModel.EditRebuild3
434
496
  End Sub`;
435
- }
497
+ },
436
498
  },
437
499
  {
438
500
  name: 'vba_drawing_tables',
@@ -441,132 +503,159 @@ End Sub`;
441
503
  tableType: z.enum(['general', 'hole', 'revision', 'bom', 'weldment_cutlist']),
442
504
  position: z.object({
443
505
  x: z.number(),
444
- y: z.number()
506
+ y: z.number(),
445
507
  }),
446
508
  rows: z.number().optional(),
447
509
  columns: z.number().optional(),
448
510
  headers: z.array(z.string()).optional(),
449
511
  data: z.array(z.array(z.string())).optional(),
450
512
  template: z.string().optional().describe('Path to table template'),
451
- anchorType: z.enum(['top_left', 'top_right', 'bottom_left', 'bottom_right']).optional()
513
+ anchorType: z.enum(['top_left', 'top_right', 'bottom_left', 'bottom_right']).optional(),
452
514
  }),
453
515
  handler: (args) => {
454
- return `
455
- Sub CreateTable_${args.tableType}()
456
- Dim swApp As SldWorks.SldWorks
457
- Dim swModel As SldWorks.ModelDoc2
458
- Dim swDraw As SldWorks.DrawingDoc
459
- Dim swTable As SldWorks.TableAnnotation
460
- Dim swBOMTable As SldWorks.BomTableAnnotation
461
- Dim i As Integer, j As Integer
462
-
463
- Set swApp = Application.SldWorks
464
- Set swModel = swApp.ActiveDoc
465
-
466
- If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
467
- MsgBox "Please open a drawing document"
468
- Exit Sub
469
- End If
470
-
471
- Set swDraw = swModel
472
-
473
- ${args.tableType === 'general' ? `
474
- ' Create general table
475
- Set swTable = swDraw.InsertTableAnnotation2( _
476
- False, ${args.position.x / 1000}, ${args.position.y / 1000}, _
477
- ${args.anchorType === 'top_right' ? 'swBOMConfigurationAnchor_TopRight' :
478
- args.anchorType === 'bottom_left' ? 'swBOMConfigurationAnchor_BottomLeft' :
479
- args.anchorType === 'bottom_right' ? 'swBOMConfigurationAnchor_BottomRight' :
480
- 'swBOMConfigurationAnchor_TopLeft'}, _
481
- "${args.template || ''}", _
482
- ${args.rows || 5}, ${args.columns || 3})
483
-
484
- If Not swTable Is Nothing Then
485
- ' Set headers
486
- ${args.headers ? args.headers.map((header, i) => `
487
- swTable.Text(0, ${i}) = "${header}"`).join('\n ') : ''}
488
-
489
- ' Set data
490
- ${args.data ? args.data.map((row, i) => row.map((cell, j) => `
491
- swTable.Text(${i + 1}, ${j}) = "${cell}"`).join('')).join('') : ''}
492
-
493
- MsgBox "General table created"
494
- End If` : ''}
495
-
496
- ${args.tableType === 'hole' ? `
497
- ' Create hole table
498
- Set swTable = swDraw.InsertHoleTable2( _
499
- "${args.template || ''}", _
500
- ${args.position.x / 1000}, ${args.position.y / 1000}, _
501
- ${args.anchorType === 'top_right' ? 'swBOMConfigurationAnchor_TopRight' :
502
- args.anchorType === 'bottom_left' ? 'swBOMConfigurationAnchor_BottomLeft' :
503
- args.anchorType === 'bottom_right' ? 'swBOMConfigurationAnchor_BottomRight' :
504
- 'swBOMConfigurationAnchor_TopLeft'}, _
505
- "A", True)
506
-
507
- If Not swTable Is Nothing Then
508
- MsgBox "Hole table created"
509
- End If` : ''}
510
-
511
- ${args.tableType === 'revision' ? `
512
- ' Create revision table
513
- Set swTable = swDraw.InsertRevisionTable2( _
514
- True, ${args.position.x / 1000}, ${args.position.y / 1000}, _
515
- ${args.anchorType === 'top_right' ? 'swBOMConfigurationAnchor_TopRight' :
516
- args.anchorType === 'bottom_left' ? 'swBOMConfigurationAnchor_BottomLeft' :
517
- args.anchorType === 'bottom_right' ? 'swBOMConfigurationAnchor_BottomRight' :
518
- 'swBOMConfigurationAnchor_TopLeft'}, _
519
- "${args.template || ''}")
520
-
521
- If Not swTable Is Nothing Then
522
- ' Add revision
523
- swTable.AddRevision "A"
524
- swTable.Text(1, 0) = "A"
525
- swTable.Text(1, 1) = Format(Date, "mm/dd/yyyy")
526
- swTable.Text(1, 2) = "Initial Release"
527
- swTable.Text(1, 3) = Application.UserName
528
-
529
- MsgBox "Revision table created"
530
- End If` : ''}
531
-
532
- ${args.tableType === 'bom' ? `
533
- ' Create BOM table
534
- Dim swBOMFeature As SldWorks.BomFeature
535
- Set swBOMFeature = swDraw.FeatureManager.InsertBomTable3( _
536
- "${args.template || ''}", _
537
- ${args.position.x / 1000}, ${args.position.y / 1000}, _
538
- swBomType_e.swBomType_PartsOnly, _
539
- "", _
540
- swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, _
541
- swBomStandard_e.swBomStandard_BomTable, _
542
- False)
543
-
544
- If Not swBOMFeature Is Nothing Then
545
- Set swBOMTable = swBOMFeature.GetTableAnnotations(0)
546
- Set swTable = swBOMTable
547
-
548
- ' Configure BOM
549
- swTable.Title = "BILL OF MATERIALS"
550
-
551
- MsgBox "BOM table created"
552
- End If` : ''}
553
-
554
- ' Format table
555
- If Not swTable Is Nothing Then
556
- ' Auto-fit columns
557
- For j = 0 To swTable.ColumnCount - 1
558
- swTable.SetColumnWidth j, -1, swTableRowColSizeType_e.swAutoSizeFitText
559
- Next j
560
-
561
- ' Set row height
562
- For i = 0 To swTable.RowCount - 1
563
- swTable.SetRowHeight i, 10 / 1000, swTableRowColSizeType_e.swManualSizing
564
- Next i
565
- End If
566
-
567
- swModel.EditRebuild3
516
+ return `
517
+ Sub CreateTable_${args.tableType}()
518
+ Dim swApp As SldWorks.SldWorks
519
+ Dim swModel As SldWorks.ModelDoc2
520
+ Dim swDraw As SldWorks.DrawingDoc
521
+ Dim swTable As SldWorks.TableAnnotation
522
+ Dim swBOMTable As SldWorks.BomTableAnnotation
523
+ Dim i As Integer, j As Integer
524
+
525
+ Set swApp = Application.SldWorks
526
+ Set swModel = swApp.ActiveDoc
527
+
528
+ If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
529
+ MsgBox "Please open a drawing document"
530
+ Exit Sub
531
+ End If
532
+
533
+ Set swDraw = swModel
534
+
535
+ ${args.tableType === 'general'
536
+ ? `
537
+ ' Create general table
538
+ Set swTable = swDraw.InsertTableAnnotation2( _
539
+ False, ${args.position.x / 1000}, ${args.position.y / 1000}, _
540
+ ${args.anchorType === 'top_right'
541
+ ? 'swBOMConfigurationAnchor_TopRight'
542
+ : args.anchorType === 'bottom_left'
543
+ ? 'swBOMConfigurationAnchor_BottomLeft'
544
+ : args.anchorType === 'bottom_right'
545
+ ? 'swBOMConfigurationAnchor_BottomRight'
546
+ : 'swBOMConfigurationAnchor_TopLeft'}, _
547
+ "${args.template || ''}", _
548
+ ${args.rows || 5}, ${args.columns || 3})
549
+
550
+ If Not swTable Is Nothing Then
551
+ ' Set headers
552
+ ${args.headers
553
+ ? args.headers
554
+ .map((header, i) => `
555
+ swTable.Text(0, ${i}) = "${header}"`)
556
+ .join('\n ')
557
+ : ''}
558
+
559
+ ' Set data
560
+ ${args.data
561
+ ? args.data
562
+ .map((row, i) => row
563
+ .map((cell, j) => `
564
+ swTable.Text(${i + 1}, ${j}) = "${cell}"`)
565
+ .join(''))
566
+ .join('')
567
+ : ''}
568
+
569
+ MsgBox "General table created"
570
+ End If`
571
+ : ''}
572
+
573
+ ${args.tableType === 'hole'
574
+ ? `
575
+ ' Create hole table
576
+ Set swTable = swDraw.InsertHoleTable2( _
577
+ "${args.template || ''}", _
578
+ ${args.position.x / 1000}, ${args.position.y / 1000}, _
579
+ ${args.anchorType === 'top_right'
580
+ ? 'swBOMConfigurationAnchor_TopRight'
581
+ : args.anchorType === 'bottom_left'
582
+ ? 'swBOMConfigurationAnchor_BottomLeft'
583
+ : args.anchorType === 'bottom_right'
584
+ ? 'swBOMConfigurationAnchor_BottomRight'
585
+ : 'swBOMConfigurationAnchor_TopLeft'}, _
586
+ "A", True)
587
+
588
+ If Not swTable Is Nothing Then
589
+ MsgBox "Hole table created"
590
+ End If`
591
+ : ''}
592
+
593
+ ${args.tableType === 'revision'
594
+ ? `
595
+ ' Create revision table
596
+ Set swTable = swDraw.InsertRevisionTable2( _
597
+ True, ${args.position.x / 1000}, ${args.position.y / 1000}, _
598
+ ${args.anchorType === 'top_right'
599
+ ? 'swBOMConfigurationAnchor_TopRight'
600
+ : args.anchorType === 'bottom_left'
601
+ ? 'swBOMConfigurationAnchor_BottomLeft'
602
+ : args.anchorType === 'bottom_right'
603
+ ? 'swBOMConfigurationAnchor_BottomRight'
604
+ : 'swBOMConfigurationAnchor_TopLeft'}, _
605
+ "${args.template || ''}")
606
+
607
+ If Not swTable Is Nothing Then
608
+ ' Add revision
609
+ swTable.AddRevision "A"
610
+ swTable.Text(1, 0) = "A"
611
+ swTable.Text(1, 1) = Format(Date, "mm/dd/yyyy")
612
+ swTable.Text(1, 2) = "Initial Release"
613
+ swTable.Text(1, 3) = Application.UserName
614
+
615
+ MsgBox "Revision table created"
616
+ End If`
617
+ : ''}
618
+
619
+ ${args.tableType === 'bom'
620
+ ? `
621
+ ' Create BOM table
622
+ Dim swBOMFeature As SldWorks.BomFeature
623
+ Set swBOMFeature = swDraw.FeatureManager.InsertBomTable3( _
624
+ "${args.template || ''}", _
625
+ ${args.position.x / 1000}, ${args.position.y / 1000}, _
626
+ swBomType_e.swBomType_PartsOnly, _
627
+ "", _
628
+ swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, _
629
+ swBomStandard_e.swBomStandard_BomTable, _
630
+ False)
631
+
632
+ If Not swBOMFeature Is Nothing Then
633
+ Set swBOMTable = swBOMFeature.GetTableAnnotations(0)
634
+ Set swTable = swBOMTable
635
+
636
+ ' Configure BOM
637
+ swTable.Title = "BILL OF MATERIALS"
638
+
639
+ MsgBox "BOM table created"
640
+ End If`
641
+ : ''}
642
+
643
+ ' Format table
644
+ If Not swTable Is Nothing Then
645
+ ' Auto-fit columns
646
+ For j = 0 To swTable.ColumnCount - 1
647
+ swTable.SetColumnWidth j, -1, swTableRowColSizeType_e.swAutoSizeFitText
648
+ Next j
649
+
650
+ ' Set row height
651
+ For i = 0 To swTable.RowCount - 1
652
+ swTable.SetRowHeight i, 10 / 1000, swTableRowColSizeType_e.swManualSizing
653
+ Next i
654
+ End If
655
+
656
+ swModel.EditRebuild3
568
657
  End Sub`;
569
- }
658
+ },
570
659
  },
571
660
  {
572
661
  name: 'vba_drawing_sheet_format',
@@ -575,13 +664,15 @@ End Sub`;
575
664
  operation: z.enum(['create_sheet', 'modify_format', 'title_block', 'border']),
576
665
  sheetName: z.string().optional(),
577
666
  sheetSize: z.enum(['A4', 'A3', 'A2', 'A1', 'A0', 'Letter', 'Legal', 'Tabloid', 'Custom']).optional(),
578
- customSize: z.object({
667
+ customSize: z
668
+ .object({
579
669
  width: z.number(),
580
- height: z.number()
581
- }).optional(),
670
+ height: z.number(),
671
+ })
672
+ .optional(),
582
673
  scale: z.string().optional().describe('Sheet scale (e.g., "1:2")'),
583
674
  templatePath: z.string().optional(),
584
- titleBlockData: z.record(z.string()).optional()
675
+ titleBlockData: z.record(z.string()).optional(),
585
676
  }),
586
677
  handler: (args) => {
587
678
  const sheetSizes = {
@@ -592,104 +683,122 @@ End Sub`;
592
683
  A0: [841, 1189],
593
684
  Letter: [215.9, 279.4],
594
685
  Legal: [215.9, 355.6],
595
- Tabloid: [279.4, 431.8]
686
+ Tabloid: [279.4, 431.8],
596
687
  };
597
- return `
598
- Sub ManageDrawingSheet_${args.operation}()
599
- Dim swApp As SldWorks.SldWorks
600
- Dim swModel As SldWorks.ModelDoc2
601
- Dim swDraw As SldWorks.DrawingDoc
602
- Dim swSheet As SldWorks.Sheet
603
- Dim vSheetProps As Variant
604
- Dim bRet As Boolean
605
-
606
- Set swApp = Application.SldWorks
607
- Set swModel = swApp.ActiveDoc
608
-
609
- If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
610
- MsgBox "Please open a drawing document"
611
- Exit Sub
612
- End If
613
-
614
- Set swDraw = swModel
615
-
616
- ${args.operation === 'create_sheet' ? `
617
- ' Create new sheet
618
- bRet = swDraw.NewSheet4( _
619
- "${args.sheetName || 'NewSheet'}", _
620
- ${args.sheetSize && args.sheetSize !== 'Custom' ?
621
- `swDwgPaperSizes_e.swDwgPaper${args.sheetSize}size` :
622
- 'swDwgPaperSizes_e.swDwgPapersUserDefined'}, _
623
- ${args.templatePath ? `"${args.templatePath}"` : 'swDwgTemplates_e.swDwgTemplateNone'}, _
624
- ${args.scale ? args.scale.split(':')[0] : '1'}, _
625
- ${args.scale ? args.scale.split(':')[1] : '1'}, _
626
- True, "", _
627
- ${args.customSize ? args.customSize.width / 1000 : sheetSizes[args.sheetSize || 'A4'][0] / 1000}, _
628
- ${args.customSize ? args.customSize.height / 1000 : sheetSizes[args.sheetSize || 'A4'][1] / 1000}, _
629
- "Default", True)
630
-
631
- If bRet Then
632
- MsgBox "New sheet created: ${args.sheetName || 'New Sheet'}"
633
- Else
634
- MsgBox "Failed to create sheet"
635
- End If` : ''}
636
-
637
- ${args.operation === 'modify_format' ? `
638
- ' Modify sheet format
639
- Set swSheet = swDraw.GetCurrentSheet
640
-
641
- If Not swSheet Is Nothing Then
642
- ' Set sheet properties
643
- vSheetProps = swSheet.GetProperties2
644
-
645
- ' Update scale
646
- ${args.scale ? `
647
- Dim scaleNum As Double, scaleDenom As Double
648
- scaleNum = ${args.scale.split(':')[0]}
649
- scaleDenom = ${args.scale.split(':')[1]}
650
- swSheet.SetScale scaleNum, scaleDenom, True, True` : ''}
651
-
652
- ' Update size
653
- ${args.sheetSize ? `
654
- swSheet.SetSize _
655
- ${sheetSizes[args.sheetSize][0] / 1000}, _
656
- ${sheetSizes[args.sheetSize][1] / 1000}` : ''}
657
-
658
- MsgBox "Sheet format updated"
659
- End If` : ''}
660
-
661
- ${args.operation === 'title_block' ? `
662
- ' Update title block
663
- Set swSheet = swDraw.GetCurrentSheet
664
-
665
- If Not swSheet Is Nothing Then
666
- ' Get title block
667
- Dim swView As SldWorks.View
668
- Set swView = swDraw.GetFirstView ' This is the sheet itself
669
-
670
- ' Find and update title block notes
671
- ${args.titleBlockData ? Object.entries(args.titleBlockData).map(([key, value]) => `
672
- swModel.Extension.SelectByID2 "$PRPSHEET:\\"${key}\\"", "NOTE", 0, 0, 0, False, 0, Nothing, 0
673
- Dim swNote As SldWorks.Note
674
- Set swNote = swModel.SelectionManager.GetSelectedObject6(1, -1)
675
- If Not swNote Is Nothing Then
676
- swNote.SetText "${value}"
677
- End If`).join('\n ') : ''}
678
-
679
- ' Update custom properties
680
- Dim swCustProp As SldWorks.CustomPropertyManager
681
- Set swCustProp = swModel.Extension.CustomPropertyManager("")
682
-
683
- ${args.titleBlockData ? Object.entries(args.titleBlockData).map(([key, value]) => `
684
- swCustProp.Add3 "${key}", swCustomInfoType_e.swCustomInfoText, "${value}", _
685
- swCustomPropertyAddOption_e.swCustomPropertyReplaceValue`).join('\n ') : ''}
686
-
687
- MsgBox "Title block updated"
688
- End If` : ''}
689
-
690
- swModel.EditRebuild3
688
+ return `
689
+ Sub ManageDrawingSheet_${args.operation}()
690
+ Dim swApp As SldWorks.SldWorks
691
+ Dim swModel As SldWorks.ModelDoc2
692
+ Dim swDraw As SldWorks.DrawingDoc
693
+ Dim swSheet As SldWorks.Sheet
694
+ Dim vSheetProps As Variant
695
+ Dim bRet As Boolean
696
+
697
+ Set swApp = Application.SldWorks
698
+ Set swModel = swApp.ActiveDoc
699
+
700
+ If swModel Is Nothing Or swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
701
+ MsgBox "Please open a drawing document"
702
+ Exit Sub
703
+ End If
704
+
705
+ Set swDraw = swModel
706
+
707
+ ${args.operation === 'create_sheet'
708
+ ? `
709
+ ' Create new sheet
710
+ bRet = swDraw.NewSheet4( _
711
+ "${args.sheetName || 'NewSheet'}", _
712
+ ${args.sheetSize && args.sheetSize !== 'Custom'
713
+ ? `swDwgPaperSizes_e.swDwgPaper${args.sheetSize}size`
714
+ : 'swDwgPaperSizes_e.swDwgPapersUserDefined'}, _
715
+ ${args.templatePath ? `"${args.templatePath}"` : 'swDwgTemplates_e.swDwgTemplateNone'}, _
716
+ ${args.scale ? args.scale.split(':')[0] : '1'}, _
717
+ ${args.scale ? args.scale.split(':')[1] : '1'}, _
718
+ True, "", _
719
+ ${args.customSize ? args.customSize.width / 1000 : sheetSizes[args.sheetSize || 'A4'][0] / 1000}, _
720
+ ${args.customSize ? args.customSize.height / 1000 : sheetSizes[args.sheetSize || 'A4'][1] / 1000}, _
721
+ "Default", True)
722
+
723
+ If bRet Then
724
+ MsgBox "New sheet created: ${args.sheetName || 'New Sheet'}"
725
+ Else
726
+ MsgBox "Failed to create sheet"
727
+ End If`
728
+ : ''}
729
+
730
+ ${args.operation === 'modify_format'
731
+ ? `
732
+ ' Modify sheet format
733
+ Set swSheet = swDraw.GetCurrentSheet
734
+
735
+ If Not swSheet Is Nothing Then
736
+ ' Set sheet properties
737
+ vSheetProps = swSheet.GetProperties2
738
+
739
+ ' Update scale
740
+ ${args.scale
741
+ ? `
742
+ Dim scaleNum As Double, scaleDenom As Double
743
+ scaleNum = ${args.scale.split(':')[0]}
744
+ scaleDenom = ${args.scale.split(':')[1]}
745
+ swSheet.SetScale scaleNum, scaleDenom, True, True`
746
+ : ''}
747
+
748
+ ' Update size
749
+ ${args.sheetSize
750
+ ? `
751
+ swSheet.SetSize _
752
+ ${sheetSizes[args.sheetSize][0] / 1000}, _
753
+ ${sheetSizes[args.sheetSize][1] / 1000}`
754
+ : ''}
755
+
756
+ MsgBox "Sheet format updated"
757
+ End If`
758
+ : ''}
759
+
760
+ ${args.operation === 'title_block'
761
+ ? `
762
+ ' Update title block
763
+ Set swSheet = swDraw.GetCurrentSheet
764
+
765
+ If Not swSheet Is Nothing Then
766
+ ' Get title block
767
+ Dim swView As SldWorks.View
768
+ Set swView = swDraw.GetFirstView ' This is the sheet itself
769
+
770
+ ' Find and update title block notes
771
+ ${args.titleBlockData
772
+ ? Object.entries(args.titleBlockData)
773
+ .map(([key, value]) => `
774
+ swModel.Extension.SelectByID2 "$PRPSHEET:\\"${key}\\"", "NOTE", 0, 0, 0, False, 0, Nothing, 0
775
+ Dim swNote As SldWorks.Note
776
+ Set swNote = swModel.SelectionManager.GetSelectedObject6(1, -1)
777
+ If Not swNote Is Nothing Then
778
+ swNote.SetText "${value}"
779
+ End If`)
780
+ .join('\n ')
781
+ : ''}
782
+
783
+ ' Update custom properties
784
+ Dim swCustProp As SldWorks.CustomPropertyManager
785
+ Set swCustProp = swModel.Extension.CustomPropertyManager("")
786
+
787
+ ${args.titleBlockData
788
+ ? Object.entries(args.titleBlockData)
789
+ .map(([key, value]) => `
790
+ swCustProp.Add3 "${key}", swCustomInfoType_e.swCustomInfoText, "${value}", _
791
+ swCustomPropertyAddOption_e.swCustomPropertyReplaceValue`)
792
+ .join('\n ')
793
+ : ''}
794
+
795
+ MsgBox "Title block updated"
796
+ End If`
797
+ : ''}
798
+
799
+ swModel.EditRebuild3
691
800
  End Sub`;
692
- }
693
- }
801
+ },
802
+ },
694
803
  ];
695
804
  //# sourceMappingURL=vba-drawing.js.map