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.
- package/CHANGELOG.md +175 -98
- package/LICENSE +20 -20
- package/README.md +195 -423
- package/dist/adapters/circuit-breaker.d.ts +84 -0
- package/dist/adapters/circuit-breaker.d.ts.map +1 -0
- package/dist/adapters/circuit-breaker.js +228 -0
- package/dist/adapters/circuit-breaker.js.map +1 -0
- package/dist/adapters/connection-pool.d.ts +83 -0
- package/dist/adapters/connection-pool.d.ts.map +1 -0
- package/dist/adapters/connection-pool.js +282 -0
- package/dist/adapters/connection-pool.js.map +1 -0
- package/dist/adapters/edge-adapter.d.ts +43 -0
- package/dist/adapters/edge-adapter.d.ts.map +1 -0
- package/dist/adapters/edge-adapter.js +417 -0
- package/dist/adapters/edge-adapter.js.map +1 -0
- package/dist/adapters/factory.d.ts +60 -0
- package/dist/adapters/factory.d.ts.map +1 -0
- package/dist/adapters/factory.js +212 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/feature-complexity-analyzer.d.ts +102 -0
- package/dist/adapters/feature-complexity-analyzer.d.ts.map +1 -0
- package/dist/adapters/feature-complexity-analyzer.js +322 -0
- package/dist/adapters/feature-complexity-analyzer.js.map +1 -0
- package/dist/adapters/macro-generator.d.ts +30 -0
- package/dist/adapters/macro-generator.d.ts.map +1 -0
- package/dist/adapters/macro-generator.js +524 -0
- package/dist/adapters/macro-generator.js.map +1 -0
- package/dist/adapters/mock-solidworks-adapter.d.ts +92 -0
- package/dist/adapters/mock-solidworks-adapter.d.ts.map +1 -0
- package/dist/adapters/mock-solidworks-adapter.js +367 -0
- package/dist/adapters/mock-solidworks-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +376 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +261 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/winax-adapter-enhanced.d.ts +55 -0
- package/dist/adapters/winax-adapter-enhanced.d.ts.map +1 -0
- package/dist/adapters/winax-adapter-enhanced.js +601 -0
- package/dist/adapters/winax-adapter-enhanced.js.map +1 -0
- package/dist/adapters/winax-adapter.d.ts +55 -0
- package/dist/adapters/winax-adapter.d.ts.map +1 -0
- package/dist/adapters/winax-adapter.js +667 -0
- package/dist/adapters/winax-adapter.js.map +1 -0
- package/dist/api/stainless-api.d.ts +29 -0
- package/dist/api/stainless-api.d.ts.map +1 -0
- package/dist/api/stainless-api.js +408 -0
- package/dist/api/stainless-api.js.map +1 -0
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +4 -3
- package/dist/cache/manager.js.map +1 -1
- package/dist/core/interfaces/core-abstractions.d.ts.map +1 -1
- package/dist/core/interfaces/core-abstractions.js.map +1 -1
- package/dist/db/connection.js +4 -4
- package/dist/db/connection.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -79
- package/dist/index.js.map +1 -1
- package/dist/knowledge/chromadb.d.ts.map +1 -1
- package/dist/knowledge/chromadb.js +5 -3
- package/dist/knowledge/chromadb.js.map +1 -1
- package/dist/macro/recorder.d.ts +1 -1
- package/dist/macro/recorder.d.ts.map +1 -1
- package/dist/macro/recorder.js +10 -10
- package/dist/macro/recorder.js.map +1 -1
- package/dist/resources/base.js +10 -10
- package/dist/resources/base.js.map +1 -1
- package/dist/resources/design-table.d.ts +10 -12
- package/dist/resources/design-table.d.ts.map +1 -1
- package/dist/resources/design-table.js +42 -39
- package/dist/resources/design-table.js.map +1 -1
- package/dist/resources/pdm.d.ts +44 -45
- package/dist/resources/pdm.d.ts.map +1 -1
- package/dist/resources/pdm.js +118 -79
- package/dist/resources/pdm.js.map +1 -1
- package/dist/resources/registry.d.ts +1 -1
- package/dist/resources/registry.d.ts.map +1 -1
- package/dist/resources/registry.js +1 -1
- package/dist/shared/constants/solidworks-constants.d.ts.map +1 -1
- package/dist/shared/constants/solidworks-constants.js +9 -9
- package/dist/shared/constants/solidworks-constants.js.map +1 -1
- package/dist/solidworks/api.d.ts +8 -6
- package/dist/solidworks/api.d.ts.map +1 -1
- package/dist/solidworks/api.js +614 -188
- package/dist/solidworks/api.js.map +1 -1
- package/dist/state/store.d.ts +1 -1
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +14 -14
- package/dist/state/store.js.map +1 -1
- package/dist/tools/analysis.d.ts +12 -2
- package/dist/tools/analysis.d.ts.map +1 -1
- package/dist/tools/analysis.js +141 -31
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/diagnostics.d.ts +1 -1
- package/dist/tools/diagnostics.d.ts.map +1 -1
- package/dist/tools/diagnostics.js +2 -2
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/drawing.d.ts +2 -2
- package/dist/tools/drawing.d.ts.map +1 -1
- package/dist/tools/drawing.js +94 -10
- package/dist/tools/drawing.js.map +1 -1
- package/dist/tools/enhanced-drawing.d.ts +1 -1
- package/dist/tools/enhanced-drawing.d.ts.map +1 -1
- package/dist/tools/enhanced-drawing.js +10 -13
- package/dist/tools/enhanced-drawing.js.map +1 -1
- package/dist/tools/export.d.ts +1 -1
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +88 -14
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/extrusion-helper.d.ts +15 -0
- package/dist/tools/extrusion-helper.d.ts.map +1 -0
- package/dist/tools/extrusion-helper.js +61 -0
- package/dist/tools/extrusion-helper.js.map +1 -0
- package/dist/tools/macro-security.d.ts +2 -2
- package/dist/tools/macro-security.d.ts.map +1 -1
- package/dist/tools/macro-security.js +2 -2
- package/dist/tools/macro-security.js.map +1 -1
- package/dist/tools/modeling.d.ts +2 -2
- package/dist/tools/modeling.d.ts.map +1 -1
- package/dist/tools/modeling.js +6 -6
- package/dist/tools/modeling.js.map +1 -1
- package/dist/tools/native-macro.d.ts +1 -1
- package/dist/tools/native-macro.d.ts.map +1 -1
- package/dist/tools/native-macro.js +246 -239
- package/dist/tools/native-macro.js.map +1 -1
- package/dist/tools/sketch.d.ts +28 -28
- package/dist/tools/sketch.d.ts.map +1 -1
- package/dist/tools/sketch.js +202 -136
- package/dist/tools/sketch.js.map +1 -1
- package/dist/tools/template-manager.d.ts +5 -5
- package/dist/tools/template-manager.d.ts.map +1 -1
- package/dist/tools/template-manager.js +66 -65
- package/dist/tools/template-manager.js.map +1 -1
- package/dist/tools/vba-advanced.d.ts +10 -10
- package/dist/tools/vba-advanced.d.ts.map +1 -1
- package/dist/tools/vba-advanced.js +791 -708
- package/dist/tools/vba-advanced.js.map +1 -1
- package/dist/tools/vba-assembly.d.ts +10 -10
- package/dist/tools/vba-assembly.d.ts.map +1 -1
- package/dist/tools/vba-assembly.js +562 -500
- package/dist/tools/vba-assembly.js.map +1 -1
- package/dist/tools/vba-drawing.d.ts +12 -12
- package/dist/tools/vba-drawing.d.ts.map +1 -1
- package/dist/tools/vba-drawing.js +681 -572
- package/dist/tools/vba-drawing.js.map +1 -1
- package/dist/tools/vba-file-management.d.ts +12 -12
- package/dist/tools/vba-file-management.d.ts.map +1 -1
- package/dist/tools/vba-file-management.js +662 -589
- package/dist/tools/vba-file-management.js.map +1 -1
- package/dist/tools/vba-part.d.ts +10 -10
- package/dist/tools/vba-part.d.ts.map +1 -1
- package/dist/tools/vba-part.js +484 -426
- package/dist/tools/vba-part.js.map +1 -1
- package/dist/tools/vba.d.ts +361 -361
- package/dist/tools/vba.d.ts.map +1 -1
- package/dist/tools/vba.js +67 -81
- package/dist/tools/vba.js.map +1 -1
- package/dist/utils/config.js +2 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/environment.d.ts +243 -0
- package/dist/utils/environment.d.ts.map +1 -0
- package/dist/utils/environment.js +207 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -6
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/solidworks-config.d.ts +39 -0
- package/dist/utils/solidworks-config.d.ts.map +1 -0
- package/dist/utils/solidworks-config.js +156 -0
- package/dist/utils/solidworks-config.js.map +1 -0
- package/package.json +84 -84
- package/scripts/setup.js +70 -70
- package/dist/application/services/command-bus.d.ts +0 -39
- package/dist/application/services/command-bus.d.ts.map +0 -1
- package/dist/application/services/command-bus.js +0 -88
- package/dist/application/services/command-bus.js.map +0 -1
- package/dist/application/services/event-bus.d.ts +0 -31
- package/dist/application/services/event-bus.d.ts.map +0 -1
- package/dist/application/services/event-bus.js +0 -83
- package/dist/application/services/event-bus.js.map +0 -1
- package/dist/application/services/query-bus.d.ts +0 -30
- package/dist/application/services/query-bus.d.ts.map +0 -1
- package/dist/application/services/query-bus.js +0 -59
- package/dist/application/services/query-bus.js.map +0 -1
- package/dist/application/services/tool-registry.d.ts +0 -53
- package/dist/application/services/tool-registry.d.ts.map +0 -1
- package/dist/application/services/tool-registry.js +0 -81
- package/dist/application/services/tool-registry.js.map +0 -1
- package/dist/application/use-cases/analysis/index.d.ts +0 -13
- package/dist/application/use-cases/analysis/index.d.ts.map +0 -1
- package/dist/application/use-cases/analysis/index.js +0 -17
- package/dist/application/use-cases/analysis/index.js.map +0 -1
- package/dist/application/use-cases/drawing/index.d.ts +0 -13
- package/dist/application/use-cases/drawing/index.d.ts.map +0 -1
- package/dist/application/use-cases/drawing/index.js +0 -17
- package/dist/application/use-cases/drawing/index.js.map +0 -1
- package/dist/application/use-cases/export/index.d.ts +0 -13
- package/dist/application/use-cases/export/index.d.ts.map +0 -1
- package/dist/application/use-cases/export/index.js +0 -17
- package/dist/application/use-cases/export/index.js.map +0 -1
- package/dist/application/use-cases/macro/index.d.ts +0 -13
- package/dist/application/use-cases/macro/index.d.ts.map +0 -1
- package/dist/application/use-cases/macro/index.js +0 -17
- package/dist/application/use-cases/macro/index.js.map +0 -1
- package/dist/application/use-cases/modeling/index.d.ts +0 -56
- package/dist/application/use-cases/modeling/index.d.ts.map +0 -1
- package/dist/application/use-cases/modeling/index.js +0 -385
- package/dist/application/use-cases/modeling/index.js.map +0 -1
- package/dist/index.refactored.d.ts +0 -7
- package/dist/index.refactored.d.ts.map +0 -1
- package/dist/index.refactored.js +0 -254
- package/dist/index.refactored.js.map +0 -1
- package/dist/infrastructure/config/configuration-manager.d.ts +0 -381
- package/dist/infrastructure/config/configuration-manager.d.ts.map +0 -1
- package/dist/infrastructure/config/configuration-manager.js +0 -566
- package/dist/infrastructure/config/configuration-manager.js.map +0 -1
- package/dist/infrastructure/container/service-locator.d.ts +0 -14
- package/dist/infrastructure/container/service-locator.d.ts.map +0 -1
- package/dist/infrastructure/container/service-locator.js +0 -38
- package/dist/infrastructure/container/service-locator.js.map +0 -1
- package/dist/infrastructure/logging/logger.d.ts +0 -24
- package/dist/infrastructure/logging/logger.d.ts.map +0 -1
- package/dist/infrastructure/logging/logger.js +0 -65
- package/dist/infrastructure/logging/logger.js.map +0 -1
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts +0 -43
- package/dist/infrastructure/solidworks/solidworks-adapter.d.ts.map +0 -1
- package/dist/infrastructure/solidworks/solidworks-adapter.js +0 -527
- package/dist/infrastructure/solidworks/solidworks-adapter.js.map +0 -1
- package/dist/presentation/mcp/request-handler.d.ts +0 -41
- package/dist/presentation/mcp/request-handler.d.ts.map +0 -1
- package/dist/presentation/mcp/request-handler.js +0 -100
- package/dist/presentation/mcp/request-handler.js.map +0 -1
- package/dist/presentation/transformers/error-transformer.d.ts +0 -16
- package/dist/presentation/transformers/error-transformer.d.ts.map +0 -1
- package/dist/presentation/transformers/error-transformer.js +0 -44
- package/dist/presentation/transformers/error-transformer.js.map +0 -1
- package/dist/presentation/transformers/response-transformer.d.ts +0 -24
- package/dist/presentation/transformers/response-transformer.d.ts.map +0 -1
- package/dist/presentation/transformers/response-transformer.js +0 -102
- package/dist/presentation/transformers/response-transformer.js.map +0 -1
- package/dist/tools/drawing-analysis.d.ts +0 -9
- package/dist/tools/drawing-analysis.d.ts.map +0 -1
- package/dist/tools/drawing-analysis.js +0 -239
- package/dist/tools/drawing-analysis.js.map +0 -1
package/dist/tools/sketch.js
CHANGED
|
@@ -17,71 +17,119 @@ export const sketchTools = [
|
|
|
17
17
|
plane: z.enum(['Front', 'Top', 'Right', 'Custom']).default('Front').describe('Reference plane for sketch'),
|
|
18
18
|
offset: z.number().default(0).describe('Offset distance from plane in mm'),
|
|
19
19
|
reverse: z.boolean().default(false).describe('Reverse offset direction'),
|
|
20
|
-
customPlane: z
|
|
20
|
+
customPlane: z
|
|
21
|
+
.object({
|
|
21
22
|
origin: z.object({
|
|
22
23
|
x: z.number().describe('X coordinate in mm'),
|
|
23
24
|
y: z.number().describe('Y coordinate in mm'),
|
|
24
|
-
z: z.number().describe('Z coordinate in mm')
|
|
25
|
+
z: z.number().describe('Z coordinate in mm'),
|
|
25
26
|
}),
|
|
26
27
|
normal: z.object({
|
|
27
28
|
x: z.number().describe('X component of normal vector'),
|
|
28
29
|
y: z.number().describe('Y component of normal vector'),
|
|
29
|
-
z: z.number().describe('Z component of normal vector')
|
|
30
|
-
})
|
|
31
|
-
})
|
|
30
|
+
z: z.number().describe('Z component of normal vector'),
|
|
31
|
+
}),
|
|
32
|
+
})
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('Custom plane definition'),
|
|
32
35
|
}),
|
|
33
36
|
handler: (args, swApi) => {
|
|
34
37
|
try {
|
|
35
38
|
const model = swApi.getCurrentModel();
|
|
36
39
|
if (!model)
|
|
37
40
|
throw new Error('No active model');
|
|
38
|
-
//
|
|
39
|
-
|
|
41
|
+
// For now, let's use a simpler approach without SelectByID2
|
|
42
|
+
// SolidWorks will use the Front plane by default if no plane is selected
|
|
40
43
|
if (args.plane === 'Custom' && args.customPlane) {
|
|
41
44
|
// Create custom reference plane
|
|
42
|
-
const { origin, normal } = args.customPlane;
|
|
43
|
-
planeRef = model.FeatureManager.InsertRefPlane(8, // FirstConstraint: parallel to plane
|
|
45
|
+
const { origin: _origin, normal: _normal } = args.customPlane;
|
|
46
|
+
const planeRef = model.FeatureManager.InsertRefPlane(8, // FirstConstraint: parallel to plane
|
|
44
47
|
0, // FirstConstraintAngle
|
|
45
48
|
4, // SecondConstraint: distance
|
|
46
49
|
args.offset / 1000, // SecondConstraintAngle/Distance
|
|
47
50
|
0, // ThirdConstraint
|
|
48
51
|
0 // ThirdConstraintAngle
|
|
49
52
|
);
|
|
53
|
+
if (!planeRef)
|
|
54
|
+
throw new Error('Failed to create custom plane');
|
|
50
55
|
}
|
|
51
56
|
else {
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
// Try to select plane by index
|
|
58
|
+
// 0 = Front, 1 = Top, 2 = Right
|
|
59
|
+
const planeIndex = args.plane === 'Front' ? 0 : args.plane === 'Top' ? 1 : 2;
|
|
60
|
+
try {
|
|
61
|
+
// Get reference geometry
|
|
62
|
+
const refGeom = model.FeatureManager;
|
|
63
|
+
if (refGeom) {
|
|
64
|
+
// Try to get the plane directly
|
|
65
|
+
const planes = ['Front Plane', 'Top Plane', 'Right Plane'];
|
|
66
|
+
const planeName = planes[planeIndex];
|
|
67
|
+
// Use simpler selection approach
|
|
68
|
+
model.ClearSelection2(true);
|
|
69
|
+
// Try selecting by feature name
|
|
70
|
+
let selected = false;
|
|
71
|
+
try {
|
|
72
|
+
const feature = model.FeatureByName(planeName);
|
|
73
|
+
if (feature) {
|
|
74
|
+
feature.Select2(false, 0);
|
|
75
|
+
selected = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (_e) {
|
|
79
|
+
// Feature selection failed, continue
|
|
80
|
+
}
|
|
81
|
+
// If feature selection didn't work, just proceed
|
|
82
|
+
// SolidWorks often defaults to Front plane anyway
|
|
83
|
+
if (!selected && args.plane !== 'Front') {
|
|
84
|
+
console.log(`Note: Could not select ${args.plane} plane, using default`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (_e) {
|
|
89
|
+
// Plane selection failed, but continue anyway
|
|
90
|
+
console.log('Note: Plane selection failed, using default');
|
|
91
|
+
}
|
|
92
|
+
// Create offset plane if needed
|
|
93
|
+
if (args.offset !== 0) {
|
|
94
|
+
const offsetPlane = model.FeatureManager.InsertRefPlane(8, // Parallel to plane
|
|
95
|
+
0, 4, // Distance
|
|
96
|
+
args.offset / 1000, 0, 0);
|
|
97
|
+
if (!offsetPlane)
|
|
98
|
+
throw new Error('Failed to create offset plane');
|
|
99
|
+
}
|
|
63
100
|
}
|
|
64
|
-
// Insert sketch
|
|
101
|
+
// Insert sketch - this should work even without plane selection
|
|
102
|
+
// as SolidWorks will use the currently selected plane or default to Front
|
|
65
103
|
model.SketchManager.InsertSketch(true);
|
|
66
|
-
|
|
104
|
+
// Try to get the sketch name
|
|
105
|
+
let sketchName = 'Sketch';
|
|
106
|
+
try {
|
|
107
|
+
const activeSketch = model.SketchManager.ActiveSketch;
|
|
108
|
+
if (activeSketch?.Name) {
|
|
109
|
+
sketchName = activeSketch.Name;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (_e) {
|
|
113
|
+
// Could not get sketch name, use default
|
|
114
|
+
}
|
|
67
115
|
return {
|
|
68
116
|
success: true,
|
|
69
117
|
sketchName,
|
|
70
118
|
plane: args.plane,
|
|
71
119
|
offset: args.offset,
|
|
72
|
-
message: `Sketch created on ${args.plane} plane${args.offset ? ` with ${args.offset}mm offset` : ''}
|
|
120
|
+
message: `Sketch created on ${args.plane} plane${args.offset ? ` with ${args.offset}mm offset` : ''}`,
|
|
73
121
|
};
|
|
74
122
|
}
|
|
75
123
|
catch (error) {
|
|
76
124
|
return `Failed to create sketch: ${error}`;
|
|
77
125
|
}
|
|
78
|
-
}
|
|
126
|
+
},
|
|
79
127
|
},
|
|
80
128
|
{
|
|
81
129
|
name: 'edit_sketch',
|
|
82
130
|
description: 'Enter sketch edit mode for an existing sketch',
|
|
83
131
|
inputSchema: z.object({
|
|
84
|
-
sketchName: z.string().describe('Name of the sketch to edit')
|
|
132
|
+
sketchName: z.string().describe('Name of the sketch to edit'),
|
|
85
133
|
}),
|
|
86
134
|
handler: (args, swApi) => {
|
|
87
135
|
try {
|
|
@@ -89,26 +137,26 @@ export const sketchTools = [
|
|
|
89
137
|
if (!model)
|
|
90
138
|
throw new Error('No active model');
|
|
91
139
|
// Select the sketch
|
|
92
|
-
const selected = model.SelectByID2(args.sketchName, 'SKETCH', 0, 0, 0, false, 0,
|
|
140
|
+
const selected = model.Extension.SelectByID2(args.sketchName, 'SKETCH', 0, 0, 0, false, 0, undefined, 0);
|
|
93
141
|
if (!selected)
|
|
94
142
|
throw new Error('Sketch not found');
|
|
95
143
|
// Edit sketch
|
|
96
144
|
model.EditSketch();
|
|
97
145
|
return {
|
|
98
146
|
success: true,
|
|
99
|
-
message: `Entered edit mode for sketch: ${args.sketchName}
|
|
147
|
+
message: `Entered edit mode for sketch: ${args.sketchName}`,
|
|
100
148
|
};
|
|
101
149
|
}
|
|
102
150
|
catch (error) {
|
|
103
151
|
return `Failed to edit sketch: ${error}`;
|
|
104
152
|
}
|
|
105
|
-
}
|
|
153
|
+
},
|
|
106
154
|
},
|
|
107
155
|
{
|
|
108
156
|
name: 'exit_sketch',
|
|
109
157
|
description: 'Exit sketch edit mode and rebuild',
|
|
110
158
|
inputSchema: z.object({
|
|
111
|
-
rebuild: z.boolean().default(true).describe('Rebuild model after exiting sketch')
|
|
159
|
+
rebuild: z.boolean().default(true).describe('Rebuild model after exiting sketch'),
|
|
112
160
|
}),
|
|
113
161
|
handler: (args, swApi) => {
|
|
114
162
|
try {
|
|
@@ -123,13 +171,13 @@ export const sketchTools = [
|
|
|
123
171
|
}
|
|
124
172
|
return {
|
|
125
173
|
success: true,
|
|
126
|
-
message: 'Exited sketch edit mode'
|
|
174
|
+
message: 'Exited sketch edit mode',
|
|
127
175
|
};
|
|
128
176
|
}
|
|
129
177
|
catch (error) {
|
|
130
178
|
return `Failed to exit sketch: ${error}`;
|
|
131
179
|
}
|
|
132
|
-
}
|
|
180
|
+
},
|
|
133
181
|
},
|
|
134
182
|
// ============================================
|
|
135
183
|
// SKETCH GEOMETRY - LINES
|
|
@@ -141,14 +189,14 @@ export const sketchTools = [
|
|
|
141
189
|
start: z.object({
|
|
142
190
|
x: z.number().describe('Start X coordinate in mm'),
|
|
143
191
|
y: z.number().describe('Start Y coordinate in mm'),
|
|
144
|
-
z: z.number().default(0).describe('Start Z coordinate in mm (for 3D sketches)')
|
|
192
|
+
z: z.number().default(0).describe('Start Z coordinate in mm (for 3D sketches)'),
|
|
145
193
|
}),
|
|
146
194
|
end: z.object({
|
|
147
195
|
x: z.number().describe('End X coordinate in mm'),
|
|
148
196
|
y: z.number().describe('End Y coordinate in mm'),
|
|
149
|
-
z: z.number().default(0).describe('End Z coordinate in mm (for 3D sketches)')
|
|
197
|
+
z: z.number().default(0).describe('End Z coordinate in mm (for 3D sketches)'),
|
|
150
198
|
}),
|
|
151
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
199
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
152
200
|
}),
|
|
153
201
|
handler: (args, swApi) => {
|
|
154
202
|
try {
|
|
@@ -165,15 +213,13 @@ export const sketchTools = [
|
|
|
165
213
|
return {
|
|
166
214
|
success: true,
|
|
167
215
|
message: `Line created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})`,
|
|
168
|
-
length: Math.sqrt(
|
|
169
|
-
Math.pow(args.end.y - args.start.y, 2) +
|
|
170
|
-
Math.pow(args.end.z - args.start.z, 2))
|
|
216
|
+
length: Math.sqrt((args.end.x - args.start.x) ** 2 + (args.end.y - args.start.y) ** 2 + (args.end.z - args.start.z) ** 2),
|
|
171
217
|
};
|
|
172
218
|
}
|
|
173
219
|
catch (error) {
|
|
174
220
|
return `Failed to create line: ${error}`;
|
|
175
221
|
}
|
|
176
|
-
}
|
|
222
|
+
},
|
|
177
223
|
},
|
|
178
224
|
{
|
|
179
225
|
name: 'sketch_centerline',
|
|
@@ -181,12 +227,12 @@ export const sketchTools = [
|
|
|
181
227
|
inputSchema: z.object({
|
|
182
228
|
start: z.object({
|
|
183
229
|
x: z.number().describe('Start X coordinate in mm'),
|
|
184
|
-
y: z.number().describe('Start Y coordinate in mm')
|
|
230
|
+
y: z.number().describe('Start Y coordinate in mm'),
|
|
185
231
|
}),
|
|
186
232
|
end: z.object({
|
|
187
233
|
x: z.number().describe('End X coordinate in mm'),
|
|
188
|
-
y: z.number().describe('End Y coordinate in mm')
|
|
189
|
-
})
|
|
234
|
+
y: z.number().describe('End Y coordinate in mm'),
|
|
235
|
+
}),
|
|
190
236
|
}),
|
|
191
237
|
handler: (args, swApi) => {
|
|
192
238
|
try {
|
|
@@ -198,13 +244,13 @@ export const sketchTools = [
|
|
|
198
244
|
throw new Error('Failed to create centerline');
|
|
199
245
|
return {
|
|
200
246
|
success: true,
|
|
201
|
-
message: `Centerline created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})
|
|
247
|
+
message: `Centerline created from (${args.start.x}, ${args.start.y}) to (${args.end.x}, ${args.end.y})`,
|
|
202
248
|
};
|
|
203
249
|
}
|
|
204
250
|
catch (error) {
|
|
205
251
|
return `Failed to create centerline: ${error}`;
|
|
206
252
|
}
|
|
207
|
-
}
|
|
253
|
+
},
|
|
208
254
|
},
|
|
209
255
|
// ============================================
|
|
210
256
|
// SKETCH GEOMETRY - CIRCLES & ARCS
|
|
@@ -216,10 +262,10 @@ export const sketchTools = [
|
|
|
216
262
|
center: z.object({
|
|
217
263
|
x: z.number().describe('Center X coordinate in mm'),
|
|
218
264
|
y: z.number().describe('Center Y coordinate in mm'),
|
|
219
|
-
z: z.number().default(0).describe('Center Z coordinate in mm (for 3D sketches)')
|
|
265
|
+
z: z.number().default(0).describe('Center Z coordinate in mm (for 3D sketches)'),
|
|
220
266
|
}),
|
|
221
267
|
radius: z.number().positive().describe('Circle radius in mm'),
|
|
222
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
268
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
223
269
|
}),
|
|
224
270
|
handler: (args, swApi) => {
|
|
225
271
|
try {
|
|
@@ -237,13 +283,13 @@ export const sketchTools = [
|
|
|
237
283
|
success: true,
|
|
238
284
|
message: `Circle created at (${args.center.x}, ${args.center.y}) with radius ${args.radius}mm`,
|
|
239
285
|
area: Math.PI * args.radius * args.radius,
|
|
240
|
-
circumference: 2 * Math.PI * args.radius
|
|
286
|
+
circumference: 2 * Math.PI * args.radius,
|
|
241
287
|
};
|
|
242
288
|
}
|
|
243
289
|
catch (error) {
|
|
244
290
|
return `Failed to create circle: ${error}`;
|
|
245
291
|
}
|
|
246
|
-
}
|
|
292
|
+
},
|
|
247
293
|
},
|
|
248
294
|
{
|
|
249
295
|
name: 'sketch_arc',
|
|
@@ -251,18 +297,18 @@ export const sketchTools = [
|
|
|
251
297
|
inputSchema: z.object({
|
|
252
298
|
center: z.object({
|
|
253
299
|
x: z.number().describe('Center X coordinate in mm'),
|
|
254
|
-
y: z.number().describe('Center Y coordinate in mm')
|
|
300
|
+
y: z.number().describe('Center Y coordinate in mm'),
|
|
255
301
|
}),
|
|
256
302
|
start: z.object({
|
|
257
303
|
x: z.number().describe('Start point X coordinate in mm'),
|
|
258
|
-
y: z.number().describe('Start point Y coordinate in mm')
|
|
304
|
+
y: z.number().describe('Start point Y coordinate in mm'),
|
|
259
305
|
}),
|
|
260
306
|
end: z.object({
|
|
261
307
|
x: z.number().describe('End point X coordinate in mm'),
|
|
262
|
-
y: z.number().describe('End point Y coordinate in mm')
|
|
308
|
+
y: z.number().describe('End point Y coordinate in mm'),
|
|
263
309
|
}),
|
|
264
310
|
direction: z.enum(['clockwise', 'counterclockwise']).default('counterclockwise'),
|
|
265
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
311
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
266
312
|
}),
|
|
267
313
|
handler: (args, swApi) => {
|
|
268
314
|
try {
|
|
@@ -278,19 +324,18 @@ export const sketchTools = [
|
|
|
278
324
|
arc.ConstructionGeometry = true;
|
|
279
325
|
}
|
|
280
326
|
// Calculate arc properties
|
|
281
|
-
const radius = Math.sqrt(
|
|
282
|
-
Math.pow(args.start.y - args.center.y, 2));
|
|
327
|
+
const radius = Math.sqrt((args.start.x - args.center.x) ** 2 + (args.start.y - args.center.y) ** 2);
|
|
283
328
|
return {
|
|
284
329
|
success: true,
|
|
285
330
|
message: `Arc created with center at (${args.center.x}, ${args.center.y})`,
|
|
286
331
|
radius,
|
|
287
|
-
direction: args.direction
|
|
332
|
+
direction: args.direction,
|
|
288
333
|
};
|
|
289
334
|
}
|
|
290
335
|
catch (error) {
|
|
291
336
|
return `Failed to create arc: ${error}`;
|
|
292
337
|
}
|
|
293
|
-
}
|
|
338
|
+
},
|
|
294
339
|
},
|
|
295
340
|
// ============================================
|
|
296
341
|
// SKETCH GEOMETRY - RECTANGLES & POLYGONS
|
|
@@ -301,14 +346,14 @@ export const sketchTools = [
|
|
|
301
346
|
inputSchema: z.object({
|
|
302
347
|
corner1: z.object({
|
|
303
348
|
x: z.number().describe('First corner X coordinate in mm'),
|
|
304
|
-
y: z.number().describe('First corner Y coordinate in mm')
|
|
349
|
+
y: z.number().describe('First corner Y coordinate in mm'),
|
|
305
350
|
}),
|
|
306
351
|
corner2: z.object({
|
|
307
352
|
x: z.number().describe('Opposite corner X coordinate in mm'),
|
|
308
|
-
y: z.number().describe('Opposite corner Y coordinate in mm')
|
|
353
|
+
y: z.number().describe('Opposite corner Y coordinate in mm'),
|
|
309
354
|
}),
|
|
310
355
|
centered: z.boolean().default(false).describe('Create rectangle centered at corner1'),
|
|
311
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
356
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
312
357
|
}),
|
|
313
358
|
handler: (args, swApi) => {
|
|
314
359
|
try {
|
|
@@ -336,7 +381,7 @@ export const sketchTools = [
|
|
|
336
381
|
lines.push(model.SketchManager.CreateLine(x1 / 1000, y2 / 1000, 0, x1 / 1000, y1 / 1000, 0));
|
|
337
382
|
// Set construction if needed
|
|
338
383
|
if (args.construction) {
|
|
339
|
-
lines.forEach(line => {
|
|
384
|
+
lines.forEach((line) => {
|
|
340
385
|
if (line)
|
|
341
386
|
line.ConstructionGeometry = true;
|
|
342
387
|
});
|
|
@@ -349,13 +394,13 @@ export const sketchTools = [
|
|
|
349
394
|
width,
|
|
350
395
|
height,
|
|
351
396
|
area: width * height,
|
|
352
|
-
perimeter: 2 * (width + height)
|
|
397
|
+
perimeter: 2 * (width + height),
|
|
353
398
|
};
|
|
354
399
|
}
|
|
355
400
|
catch (error) {
|
|
356
401
|
return `Failed to create rectangle: ${error}`;
|
|
357
402
|
}
|
|
358
|
-
}
|
|
403
|
+
},
|
|
359
404
|
},
|
|
360
405
|
{
|
|
361
406
|
name: 'sketch_polygon',
|
|
@@ -363,13 +408,13 @@ export const sketchTools = [
|
|
|
363
408
|
inputSchema: z.object({
|
|
364
409
|
center: z.object({
|
|
365
410
|
x: z.number().describe('Center X coordinate in mm'),
|
|
366
|
-
y: z.number().describe('Center Y coordinate in mm')
|
|
411
|
+
y: z.number().describe('Center Y coordinate in mm'),
|
|
367
412
|
}),
|
|
368
413
|
sides: z.number().int().min(3).max(100).describe('Number of sides'),
|
|
369
414
|
radius: z.number().positive().describe('Circumscribed circle radius in mm'),
|
|
370
415
|
rotation: z.number().default(0).describe('Rotation angle in degrees'),
|
|
371
416
|
inscribed: z.boolean().default(false).describe('Use inscribed circle radius instead'),
|
|
372
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
417
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
373
418
|
}),
|
|
374
419
|
handler: (args, swApi) => {
|
|
375
420
|
try {
|
|
@@ -386,8 +431,8 @@ export const sketchTools = [
|
|
|
386
431
|
// Create polygon lines
|
|
387
432
|
const lines = [];
|
|
388
433
|
for (let i = 0; i < args.sides; i++) {
|
|
389
|
-
const angle1 = startAngle +
|
|
390
|
-
const angle2 = startAngle + (
|
|
434
|
+
const angle1 = startAngle + i * angleStep;
|
|
435
|
+
const angle2 = startAngle + (i + 1) * angleStep;
|
|
391
436
|
const x1 = args.center.x + radius * Math.cos(angle1);
|
|
392
437
|
const y1 = args.center.y + radius * Math.sin(angle1);
|
|
393
438
|
const x2 = args.center.x + radius * Math.cos(angle2);
|
|
@@ -410,13 +455,13 @@ export const sketchTools = [
|
|
|
410
455
|
radius,
|
|
411
456
|
sideLength,
|
|
412
457
|
area,
|
|
413
|
-
perimeter
|
|
458
|
+
perimeter,
|
|
414
459
|
};
|
|
415
460
|
}
|
|
416
461
|
catch (error) {
|
|
417
462
|
return `Failed to create polygon: ${error}`;
|
|
418
463
|
}
|
|
419
|
-
}
|
|
464
|
+
},
|
|
420
465
|
},
|
|
421
466
|
// ============================================
|
|
422
467
|
// SKETCH GEOMETRY - SPLINES & CURVES
|
|
@@ -425,13 +470,16 @@ export const sketchTools = [
|
|
|
425
470
|
name: 'sketch_spline',
|
|
426
471
|
description: 'Draw a spline through points in the active sketch',
|
|
427
472
|
inputSchema: z.object({
|
|
428
|
-
points: z
|
|
473
|
+
points: z
|
|
474
|
+
.array(z.object({
|
|
429
475
|
x: z.number().describe('X coordinate in mm'),
|
|
430
476
|
y: z.number().describe('Y coordinate in mm'),
|
|
431
|
-
z: z.number().default(0).describe('Z coordinate in mm (for 3D sketches)')
|
|
432
|
-
}))
|
|
477
|
+
z: z.number().default(0).describe('Z coordinate in mm (for 3D sketches)'),
|
|
478
|
+
}))
|
|
479
|
+
.min(2)
|
|
480
|
+
.describe('Array of points for the spline'),
|
|
433
481
|
closed: z.boolean().default(false).describe('Close the spline'),
|
|
434
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
482
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
435
483
|
}),
|
|
436
484
|
handler: (args, swApi) => {
|
|
437
485
|
try {
|
|
@@ -464,13 +512,13 @@ export const sketchTools = [
|
|
|
464
512
|
message: `Spline created through ${args.points.length} points`,
|
|
465
513
|
pointCount: args.points.length,
|
|
466
514
|
approximateLength: length,
|
|
467
|
-
closed: args.closed
|
|
515
|
+
closed: args.closed,
|
|
468
516
|
};
|
|
469
517
|
}
|
|
470
518
|
catch (error) {
|
|
471
519
|
return `Failed to create spline: ${error}`;
|
|
472
520
|
}
|
|
473
|
-
}
|
|
521
|
+
},
|
|
474
522
|
},
|
|
475
523
|
{
|
|
476
524
|
name: 'sketch_ellipse',
|
|
@@ -478,14 +526,14 @@ export const sketchTools = [
|
|
|
478
526
|
inputSchema: z.object({
|
|
479
527
|
center: z.object({
|
|
480
528
|
x: z.number().describe('Center X coordinate in mm'),
|
|
481
|
-
y: z.number().describe('Center Y coordinate in mm')
|
|
529
|
+
y: z.number().describe('Center Y coordinate in mm'),
|
|
482
530
|
}),
|
|
483
531
|
majorAxis: z.object({
|
|
484
532
|
length: z.number().positive().describe('Major axis length in mm'),
|
|
485
|
-
angle: z.number().default(0).describe('Major axis angle in degrees')
|
|
533
|
+
angle: z.number().default(0).describe('Major axis angle in degrees'),
|
|
486
534
|
}),
|
|
487
535
|
minorAxis: z.number().positive().describe('Minor axis length in mm'),
|
|
488
|
-
construction: z.boolean().default(false).describe('Create as construction geometry')
|
|
536
|
+
construction: z.boolean().default(false).describe('Create as construction geometry'),
|
|
489
537
|
}),
|
|
490
538
|
handler: (args, swApi) => {
|
|
491
539
|
try {
|
|
@@ -496,8 +544,8 @@ export const sketchTools = [
|
|
|
496
544
|
// Calculate major axis endpoints
|
|
497
545
|
const major1X = args.center.x + (args.majorAxis.length / 2) * Math.cos(angleRad);
|
|
498
546
|
const major1Y = args.center.y + (args.majorAxis.length / 2) * Math.sin(angleRad);
|
|
499
|
-
const
|
|
500
|
-
const
|
|
547
|
+
const _major2X = args.center.x - (args.majorAxis.length / 2) * Math.cos(angleRad);
|
|
548
|
+
const _major2Y = args.center.y - (args.majorAxis.length / 2) * Math.sin(angleRad);
|
|
501
549
|
// Calculate minor axis point
|
|
502
550
|
const minorX = args.center.x + (args.minorAxis / 2) * Math.cos(angleRad + Math.PI / 2);
|
|
503
551
|
const minorY = args.center.y + (args.minorAxis / 2) * Math.sin(angleRad + Math.PI / 2);
|
|
@@ -514,7 +562,7 @@ export const sketchTools = [
|
|
|
514
562
|
const b = args.minorAxis / 2;
|
|
515
563
|
const area = Math.PI * a * b;
|
|
516
564
|
// Approximate perimeter using Ramanujan's formula
|
|
517
|
-
const h =
|
|
565
|
+
const h = (a - b) ** 2 / (a + b) ** 2;
|
|
518
566
|
const perimeter = Math.PI * (a + b) * (1 + (3 * h) / (10 + Math.sqrt(4 - 3 * h)));
|
|
519
567
|
return {
|
|
520
568
|
success: true,
|
|
@@ -522,13 +570,13 @@ export const sketchTools = [
|
|
|
522
570
|
majorAxis: args.majorAxis.length,
|
|
523
571
|
minorAxis: args.minorAxis,
|
|
524
572
|
area,
|
|
525
|
-
perimeter
|
|
573
|
+
perimeter,
|
|
526
574
|
};
|
|
527
575
|
}
|
|
528
576
|
catch (error) {
|
|
529
577
|
return `Failed to create ellipse: ${error}`;
|
|
530
578
|
}
|
|
531
|
-
}
|
|
579
|
+
},
|
|
532
580
|
},
|
|
533
581
|
// ============================================
|
|
534
582
|
// SKETCH CONSTRAINTS
|
|
@@ -537,14 +585,25 @@ export const sketchTools = [
|
|
|
537
585
|
name: 'add_sketch_constraint',
|
|
538
586
|
description: 'Add constraints between sketch entities',
|
|
539
587
|
inputSchema: z.object({
|
|
540
|
-
type: z
|
|
541
|
-
|
|
542
|
-
'
|
|
543
|
-
'
|
|
544
|
-
|
|
588
|
+
type: z
|
|
589
|
+
.enum([
|
|
590
|
+
'coincident',
|
|
591
|
+
'parallel',
|
|
592
|
+
'perpendicular',
|
|
593
|
+
'tangent',
|
|
594
|
+
'concentric',
|
|
595
|
+
'horizontal',
|
|
596
|
+
'vertical',
|
|
597
|
+
'equal',
|
|
598
|
+
'symmetric',
|
|
599
|
+
'colinear',
|
|
600
|
+
'midpoint',
|
|
601
|
+
'fix',
|
|
602
|
+
])
|
|
603
|
+
.describe('Type of constraint to add'),
|
|
545
604
|
entity1: z.string().describe('First entity selection'),
|
|
546
605
|
entity2: z.string().optional().describe('Second entity selection (if required)'),
|
|
547
|
-
entity3: z.string().optional().describe('Third entity selection (for symmetric constraint)')
|
|
606
|
+
entity3: z.string().optional().describe('Third entity selection (for symmetric constraint)'),
|
|
548
607
|
}),
|
|
549
608
|
handler: (args, swApi) => {
|
|
550
609
|
try {
|
|
@@ -553,28 +612,28 @@ export const sketchTools = [
|
|
|
553
612
|
throw new Error('No active model');
|
|
554
613
|
// Map constraint types to SolidWorks constants
|
|
555
614
|
const constraintMap = {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
615
|
+
coincident: 0,
|
|
616
|
+
parallel: 1,
|
|
617
|
+
perpendicular: 2,
|
|
618
|
+
tangent: 3,
|
|
619
|
+
concentric: 4,
|
|
620
|
+
horizontal: 5,
|
|
621
|
+
vertical: 6,
|
|
622
|
+
equal: 7,
|
|
623
|
+
symmetric: 8,
|
|
624
|
+
colinear: 9,
|
|
625
|
+
midpoint: 10,
|
|
626
|
+
fix: 11,
|
|
568
627
|
};
|
|
569
628
|
const constraintType = constraintMap[args.type];
|
|
570
629
|
// Select entities
|
|
571
630
|
model.ClearSelection2(true);
|
|
572
|
-
model.SelectByID2(args.entity1, 'SKETCHSEGMENT', 0, 0, 0, false, 0,
|
|
631
|
+
model.Extension.SelectByID2(args.entity1, 'SKETCHSEGMENT', 0, 0, 0, false, 0, undefined, 0);
|
|
573
632
|
if (args.entity2) {
|
|
574
|
-
model.SelectByID2(args.entity2, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
633
|
+
model.Extension.SelectByID2(args.entity2, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
575
634
|
}
|
|
576
635
|
if (args.entity3) {
|
|
577
|
-
model.SelectByID2(args.entity3, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
636
|
+
model.Extension.SelectByID2(args.entity3, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
578
637
|
}
|
|
579
638
|
// Add constraint
|
|
580
639
|
const success = model.SketchManager.AddConstraint(constraintType);
|
|
@@ -583,13 +642,13 @@ export const sketchTools = [
|
|
|
583
642
|
return {
|
|
584
643
|
success: true,
|
|
585
644
|
message: `${args.type} constraint added`,
|
|
586
|
-
type: args.type
|
|
645
|
+
type: args.type,
|
|
587
646
|
};
|
|
588
647
|
}
|
|
589
648
|
catch (error) {
|
|
590
649
|
return `Failed to add constraint: ${error}`;
|
|
591
650
|
}
|
|
592
|
-
}
|
|
651
|
+
},
|
|
593
652
|
},
|
|
594
653
|
// ============================================
|
|
595
654
|
// SKETCH DIMENSIONS
|
|
@@ -601,10 +660,13 @@ export const sketchTools = [
|
|
|
601
660
|
type: z.enum(['linear', 'angular', 'radial', 'diameter']).describe('Type of dimension'),
|
|
602
661
|
entity: z.string().describe('Entity to dimension'),
|
|
603
662
|
value: z.number().describe('Dimension value in mm or degrees'),
|
|
604
|
-
position: z
|
|
663
|
+
position: z
|
|
664
|
+
.object({
|
|
605
665
|
x: z.number().describe('Text position X in mm'),
|
|
606
|
-
y: z.number().describe('Text position Y in mm')
|
|
607
|
-
})
|
|
666
|
+
y: z.number().describe('Text position Y in mm'),
|
|
667
|
+
})
|
|
668
|
+
.optional()
|
|
669
|
+
.describe('Text position'),
|
|
608
670
|
}),
|
|
609
671
|
handler: (args, swApi) => {
|
|
610
672
|
try {
|
|
@@ -613,7 +675,7 @@ export const sketchTools = [
|
|
|
613
675
|
throw new Error('No active model');
|
|
614
676
|
// Select entity
|
|
615
677
|
model.ClearSelection2(true);
|
|
616
|
-
model.SelectByID2(args.entity, 'SKETCHSEGMENT', 0, 0, 0, false, 0,
|
|
678
|
+
model.Extension.SelectByID2(args.entity, 'SKETCHSEGMENT', 0, 0, 0, false, 0, undefined, 0);
|
|
617
679
|
// Add dimension
|
|
618
680
|
const textX = args.position?.x || 0;
|
|
619
681
|
const textY = args.position?.y || 0;
|
|
@@ -635,20 +697,21 @@ export const sketchTools = [
|
|
|
635
697
|
if (!dimension)
|
|
636
698
|
throw new Error('Failed to add dimension');
|
|
637
699
|
// Set dimension value
|
|
638
|
-
dimension.SystemValue =
|
|
639
|
-
|
|
640
|
-
|
|
700
|
+
dimension.SystemValue =
|
|
701
|
+
args.type === 'angular'
|
|
702
|
+
? (args.value * Math.PI) / 180 // Convert degrees to radians
|
|
703
|
+
: args.value / 1000; // Convert mm to meters
|
|
641
704
|
return {
|
|
642
705
|
success: true,
|
|
643
706
|
message: `${args.type} dimension added with value ${args.value}${args.type === 'angular' ? '°' : 'mm'}`,
|
|
644
707
|
type: args.type,
|
|
645
|
-
value: args.value
|
|
708
|
+
value: args.value,
|
|
646
709
|
};
|
|
647
710
|
}
|
|
648
711
|
catch (error) {
|
|
649
712
|
return `Failed to add dimension: ${error}`;
|
|
650
713
|
}
|
|
651
|
-
}
|
|
714
|
+
},
|
|
652
715
|
},
|
|
653
716
|
// ============================================
|
|
654
717
|
// SKETCH PATTERNS
|
|
@@ -662,14 +725,17 @@ export const sketchTools = [
|
|
|
662
725
|
x: z.number().describe('Direction vector X'),
|
|
663
726
|
y: z.number().describe('Direction vector Y'),
|
|
664
727
|
count: z.number().int().min(2).describe('Number of instances'),
|
|
665
|
-
spacing: z.number().positive().describe('Spacing in mm')
|
|
728
|
+
spacing: z.number().positive().describe('Spacing in mm'),
|
|
666
729
|
}),
|
|
667
|
-
direction2: z
|
|
730
|
+
direction2: z
|
|
731
|
+
.object({
|
|
668
732
|
x: z.number().describe('Direction vector X'),
|
|
669
733
|
y: z.number().describe('Direction vector Y'),
|
|
670
734
|
count: z.number().int().min(2).describe('Number of instances'),
|
|
671
|
-
spacing: z.number().positive().describe('Spacing in mm')
|
|
672
|
-
})
|
|
735
|
+
spacing: z.number().positive().describe('Spacing in mm'),
|
|
736
|
+
})
|
|
737
|
+
.optional()
|
|
738
|
+
.describe('Second direction for 2D pattern'),
|
|
673
739
|
}),
|
|
674
740
|
handler: (args, swApi) => {
|
|
675
741
|
try {
|
|
@@ -679,7 +745,7 @@ export const sketchTools = [
|
|
|
679
745
|
// Select entities to pattern
|
|
680
746
|
model.ClearSelection2(true);
|
|
681
747
|
args.entities.forEach((entity) => {
|
|
682
|
-
model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
748
|
+
model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
683
749
|
});
|
|
684
750
|
// Create pattern
|
|
685
751
|
const totalInstances = args.direction1.count * (args.direction2?.count || 1);
|
|
@@ -689,13 +755,13 @@ export const sketchTools = [
|
|
|
689
755
|
message: `Linear pattern created with ${totalInstances} instances`,
|
|
690
756
|
direction1Count: args.direction1.count,
|
|
691
757
|
direction2Count: args.direction2?.count || 1,
|
|
692
|
-
totalInstances
|
|
758
|
+
totalInstances,
|
|
693
759
|
};
|
|
694
760
|
}
|
|
695
761
|
catch (error) {
|
|
696
762
|
return `Failed to create linear pattern: ${error}`;
|
|
697
763
|
}
|
|
698
|
-
}
|
|
764
|
+
},
|
|
699
765
|
},
|
|
700
766
|
{
|
|
701
767
|
name: 'sketch_circular_pattern',
|
|
@@ -704,11 +770,11 @@ export const sketchTools = [
|
|
|
704
770
|
entities: z.array(z.string()).describe('Entities to pattern'),
|
|
705
771
|
center: z.object({
|
|
706
772
|
x: z.number().describe('Center X coordinate in mm'),
|
|
707
|
-
y: z.number().describe('Center Y coordinate in mm')
|
|
773
|
+
y: z.number().describe('Center Y coordinate in mm'),
|
|
708
774
|
}),
|
|
709
775
|
count: z.number().int().min(2).describe('Number of instances'),
|
|
710
776
|
angle: z.number().default(360).describe('Total angle in degrees'),
|
|
711
|
-
equalSpacing: z.boolean().default(true).describe('Equal spacing between instances')
|
|
777
|
+
equalSpacing: z.boolean().default(true).describe('Equal spacing between instances'),
|
|
712
778
|
}),
|
|
713
779
|
handler: (args, swApi) => {
|
|
714
780
|
try {
|
|
@@ -718,7 +784,7 @@ export const sketchTools = [
|
|
|
718
784
|
// Select entities to pattern
|
|
719
785
|
model.ClearSelection2(true);
|
|
720
786
|
args.entities.forEach((entity) => {
|
|
721
|
-
model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
787
|
+
model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
722
788
|
});
|
|
723
789
|
// Calculate angular spacing
|
|
724
790
|
const angleStep = args.angle / (args.equalSpacing ? args.count : args.count - 1);
|
|
@@ -728,13 +794,13 @@ export const sketchTools = [
|
|
|
728
794
|
message: `Circular pattern created with ${args.count} instances`,
|
|
729
795
|
count: args.count,
|
|
730
796
|
totalAngle: args.angle,
|
|
731
|
-
anglePerInstance: angleStep
|
|
797
|
+
anglePerInstance: angleStep,
|
|
732
798
|
};
|
|
733
799
|
}
|
|
734
800
|
catch (error) {
|
|
735
801
|
return `Failed to create circular pattern: ${error}`;
|
|
736
802
|
}
|
|
737
|
-
}
|
|
803
|
+
},
|
|
738
804
|
},
|
|
739
805
|
// ============================================
|
|
740
806
|
// SKETCH TRANSFORMATIONS
|
|
@@ -745,7 +811,7 @@ export const sketchTools = [
|
|
|
745
811
|
inputSchema: z.object({
|
|
746
812
|
entities: z.array(z.string()).describe('Entities to mirror'),
|
|
747
813
|
mirrorLine: z.string().describe('Mirror line (centerline or construction line)'),
|
|
748
|
-
copy: z.boolean().default(true).describe('Keep original entities')
|
|
814
|
+
copy: z.boolean().default(true).describe('Keep original entities'),
|
|
749
815
|
}),
|
|
750
816
|
handler: (args, swApi) => {
|
|
751
817
|
try {
|
|
@@ -755,23 +821,23 @@ export const sketchTools = [
|
|
|
755
821
|
// Select entities to mirror
|
|
756
822
|
model.ClearSelection2(true);
|
|
757
823
|
args.entities.forEach((entity) => {
|
|
758
|
-
model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
824
|
+
model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
759
825
|
});
|
|
760
826
|
// Select mirror line
|
|
761
|
-
model.SelectByID2(args.mirrorLine, 'SKETCHSEGMENT', 0, 0, 0, true, 1,
|
|
827
|
+
model.Extension.SelectByID2(args.mirrorLine, 'SKETCHSEGMENT', 0, 0, 0, true, 1, undefined, 0);
|
|
762
828
|
// Mirror entities
|
|
763
829
|
model.SketchManager.MirrorSketch();
|
|
764
830
|
return {
|
|
765
831
|
success: true,
|
|
766
832
|
message: `Mirrored ${args.entities.length} entities`,
|
|
767
833
|
entityCount: args.entities.length,
|
|
768
|
-
keepOriginal: args.copy
|
|
834
|
+
keepOriginal: args.copy,
|
|
769
835
|
};
|
|
770
836
|
}
|
|
771
837
|
catch (error) {
|
|
772
838
|
return `Failed to mirror entities: ${error}`;
|
|
773
839
|
}
|
|
774
|
-
}
|
|
840
|
+
},
|
|
775
841
|
},
|
|
776
842
|
{
|
|
777
843
|
name: 'sketch_offset',
|
|
@@ -781,7 +847,7 @@ export const sketchTools = [
|
|
|
781
847
|
distance: z.number().describe('Offset distance in mm (positive = outward)'),
|
|
782
848
|
side: z.enum(['both', 'left', 'right']).default('both').describe('Offset side'),
|
|
783
849
|
corner: z.enum(['sharp', 'round', 'natural']).default('natural').describe('Corner treatment'),
|
|
784
|
-
cap: z.boolean().default(true).describe('Cap ends for open curves')
|
|
850
|
+
cap: z.boolean().default(true).describe('Cap ends for open curves'),
|
|
785
851
|
}),
|
|
786
852
|
handler: (args, swApi) => {
|
|
787
853
|
try {
|
|
@@ -791,10 +857,10 @@ export const sketchTools = [
|
|
|
791
857
|
// Select entities to offset
|
|
792
858
|
model.ClearSelection2(true);
|
|
793
859
|
args.entities.forEach((entity) => {
|
|
794
|
-
model.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0,
|
|
860
|
+
model.Extension.SelectByID2(entity, 'SKETCHSEGMENT', 0, 0, 0, true, 0, undefined, 0);
|
|
795
861
|
});
|
|
796
862
|
// Create offset
|
|
797
|
-
const sideValue = args.side === 'both' ? 0 :
|
|
863
|
+
const sideValue = args.side === 'both' ? 0 : args.side === 'left' ? 1 : 2;
|
|
798
864
|
model.SketchManager.SketchOffset2(args.distance / 1000, // Convert to meters
|
|
799
865
|
sideValue, false, // Not chain
|
|
800
866
|
args.cap);
|
|
@@ -803,13 +869,13 @@ export const sketchTools = [
|
|
|
803
869
|
message: `Offset created at ${args.distance}mm`,
|
|
804
870
|
distance: args.distance,
|
|
805
871
|
side: args.side,
|
|
806
|
-
corner: args.corner
|
|
872
|
+
corner: args.corner,
|
|
807
873
|
};
|
|
808
874
|
}
|
|
809
875
|
catch (error) {
|
|
810
876
|
return `Failed to create offset: ${error}`;
|
|
811
877
|
}
|
|
812
|
-
}
|
|
813
|
-
}
|
|
878
|
+
},
|
|
879
|
+
},
|
|
814
880
|
];
|
|
815
881
|
//# sourceMappingURL=sketch.js.map
|