mcp-3d-printer-server 0.2.1 → 0.2.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 (37) hide show
  1. package/README.md +22 -0
  2. package/package.json +2 -1
  3. package/dist/index.d.ts +0 -2
  4. package/dist/index.js +0 -800
  5. package/dist/index.js.map +0 -1
  6. package/dist/printers/bambu.d.ts +0 -25
  7. package/dist/printers/bambu.js +0 -111
  8. package/dist/printers/creality.d.ts +0 -10
  9. package/dist/printers/creality.js +0 -90
  10. package/dist/printers/duet.d.ts +0 -10
  11. package/dist/printers/duet.js +0 -66
  12. package/dist/printers/klipper.d.ts +0 -10
  13. package/dist/printers/klipper.js +0 -62
  14. package/dist/printers/octoprint.d.ts +0 -10
  15. package/dist/printers/octoprint.js +0 -97
  16. package/dist/printers/printer-factory.d.ts +0 -9
  17. package/dist/printers/printer-factory.js +0 -33
  18. package/dist/printers/prusa.d.ts +0 -10
  19. package/dist/printers/prusa.js +0 -93
  20. package/dist/printers/repetier.d.ts +0 -10
  21. package/dist/printers/repetier.js +0 -59
  22. package/dist/stl/stl-manipulator.d.ts +0 -127
  23. package/dist/stl/stl-manipulator.js +0 -870
  24. package/dist/test/stl-manipulator-test.d.ts +0 -2
  25. package/dist/test/stl-manipulator-test.js +0 -91
  26. package/dist/types.d.ts +0 -23
  27. package/dist/types.js +0 -26
  28. package/src/test/stl-manipulator-test.js +0 -114
  29. package/src/test/stl-manipulator-test.ts +0 -124
  30. package/src/test/tsconfig.json +0 -13
  31. package/test/sample_cube.stl +0 -86
  32. package/test/sample_cube_extended.stl +0 -172
  33. package/test/sample_cube_modified.stl +0 -86
  34. package/test/sample_cube_rotated.stl +0 -86
  35. package/test/sample_cube_scaled.stl +0 -86
  36. package/test/sample_cube_translated.stl +0 -86
  37. package/test/sample_cube_visualization.svg +0 -52
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
@@ -1,91 +0,0 @@
1
- #!/usr/bin/env node
2
- import { STLManipulator } from '../stl/stl-manipulator.js';
3
- import fs from 'fs';
4
- import path from 'path';
5
- import * as THREE from 'three';
6
- // Create a test directory
7
- const TEST_DIR = path.join(process.cwd(), 'test');
8
- if (!fs.existsSync(TEST_DIR)) {
9
- fs.mkdirSync(TEST_DIR, { recursive: true });
10
- }
11
- // Path for a sample STL file
12
- const sampleStlPath = path.join(TEST_DIR, 'sample_cube.stl');
13
- // Create a simple cube STL for testing if it doesn't exist
14
- async function createSampleCube() {
15
- if (fs.existsSync(sampleStlPath)) {
16
- console.log('Sample STL already exists, skipping creation');
17
- return sampleStlPath;
18
- }
19
- console.log('Creating sample cube STL...');
20
- // Create a simple cube geometry
21
- const geometry = new THREE.BoxGeometry(10, 10, 10);
22
- const material = new THREE.MeshStandardMaterial();
23
- const mesh = new THREE.Mesh(geometry, material);
24
- // Import STLExporter
25
- const { STLExporter } = await import('three/examples/jsm/exporters/STLExporter.js');
26
- const exporter = new STLExporter();
27
- // Export as STL
28
- const stlString = exporter.parse(mesh);
29
- // Write to file
30
- fs.writeFileSync(sampleStlPath, stlString);
31
- console.log(`Sample cube saved to ${sampleStlPath}`);
32
- return sampleStlPath;
33
- }
34
- // Test the STL manipulator
35
- async function testSTLManipulator() {
36
- try {
37
- // Create a sample STL for testing
38
- const stlPath = await createSampleCube();
39
- // Create an instance of the STL manipulator with the test directory
40
- const manipulator = new STLManipulator(TEST_DIR);
41
- // Listen for events from the manipulator
42
- manipulator.on('operationComplete', (data) => {
43
- console.log('Operation complete:', data);
44
- });
45
- manipulator.on('operationError', (data) => {
46
- console.error('Operation error:', data);
47
- });
48
- // Test progress callback
49
- const progressCallback = (progress, message) => {
50
- console.log(`Progress: ${progress}% - ${message || ''}`);
51
- };
52
- // Test 1: Get information about the STL file
53
- console.log('\n=== Test 1: Get STL Info ===');
54
- const stlInfo = await manipulator.getSTLInfo(stlPath);
55
- console.log('STL Info:', stlInfo);
56
- // Test 2: Scale the STL file
57
- console.log('\n=== Test 2: Scale STL ===');
58
- const scaledStlPath = await manipulator.scaleSTL(stlPath, 2.0, progressCallback);
59
- console.log(`Scaled STL saved to: ${scaledStlPath}`);
60
- // Test 3: Rotate the STL file
61
- console.log('\n=== Test 3: Rotate STL ===');
62
- const rotatedStlPath = await manipulator.rotateSTL(stlPath, [45, 0, 0], progressCallback);
63
- console.log(`Rotated STL saved to: ${rotatedStlPath}`);
64
- // Test 4: Translate the STL file
65
- console.log('\n=== Test 4: Translate STL ===');
66
- const translatedStlPath = await manipulator.translateSTL(stlPath, [5, 10, 0], progressCallback);
67
- console.log(`Translated STL saved to: ${translatedStlPath}`);
68
- // Test 5: Extend the base of the STL file
69
- console.log('\n=== Test 5: Extend Base ===');
70
- const extendedStlPath = await manipulator.extendBase(stlPath, 0.5, progressCallback);
71
- console.log(`Extended STL saved to: ${extendedStlPath}`);
72
- // Test 6: Modify a section of the STL file
73
- console.log('\n=== Test 6: Modify Section (Top) ===');
74
- const modifiedStlPath = await manipulator.modifySection(stlPath, 'top', {
75
- type: 'scale',
76
- value: [1.5, 1.5, 1.5]
77
- }, progressCallback);
78
- console.log(`Modified STL saved to: ${modifiedStlPath}`);
79
- // Test 7: Generate visualization of the STL file
80
- console.log('\n=== Test 7: Generate Visualization ===');
81
- const visualizationPath = await manipulator.generateVisualization(stlPath, 400, 400, progressCallback);
82
- console.log(`Visualization saved to: ${visualizationPath}`);
83
- console.log('\nAll tests completed successfully!');
84
- }
85
- catch (error) {
86
- console.error('An error occurred during testing:', error);
87
- process.exit(1);
88
- }
89
- }
90
- // Run the tests
91
- testSTLManipulator().catch(console.error);
package/dist/types.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import { AxiosInstance } from "axios";
2
- import { BambuPrinter } from "bambu-js";
3
- export type BambuFTP = {
4
- readDir: (path: string) => Promise<string[]>;
5
- sendFile: (sourcePath: string, destinationPath: string, progressCallback?: (progress: number) => void) => Promise<void>;
6
- removeFile: (path: string) => Promise<void>;
7
- };
8
- export declare abstract class PrinterImplementation {
9
- protected apiClient: AxiosInstance;
10
- constructor(apiClient: AxiosInstance);
11
- abstract getStatus(host: string, port: string, apiKey: string): Promise<any>;
12
- abstract getFiles(host: string, port: string, apiKey: string): Promise<any>;
13
- abstract getFile(host: string, port: string, apiKey: string, filename: string): Promise<any>;
14
- abstract uploadFile(host: string, port: string, apiKey: string, filePath: string, filename: string, print: boolean): Promise<any>;
15
- abstract startJob(host: string, port: string, apiKey: string, filename: string): Promise<any>;
16
- abstract cancelJob(host: string, port: string, apiKey: string): Promise<any>;
17
- abstract setTemperature(host: string, port: string, apiKey: string, component: string, temperature: number): Promise<any>;
18
- }
19
- export declare class BambuPrinterStore {
20
- private printers;
21
- get(host: string, serial: string, token: string): InstanceType<typeof BambuPrinter>;
22
- disconnectAll(): Promise<void>;
23
- }
package/dist/types.js DELETED
@@ -1,26 +0,0 @@
1
- import { BambuPrinter } from "bambu-js";
2
- // Base class for printer implementations
3
- export class PrinterImplementation {
4
- constructor(apiClient) {
5
- this.apiClient = apiClient;
6
- }
7
- }
8
- // Store for Bambu printers
9
- export class BambuPrinterStore {
10
- constructor() {
11
- this.printers = new Map();
12
- }
13
- get(host, serial, token) {
14
- const key = `${host}-${serial}`;
15
- if (!this.printers.has(key)) {
16
- const printer = new BambuPrinter(host, serial, token);
17
- this.printers.set(key, printer);
18
- }
19
- return this.printers.get(key);
20
- }
21
- async disconnectAll() {
22
- for (const printer of this.printers.values()) {
23
- await printer.disconnect();
24
- }
25
- }
26
- }
@@ -1,114 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { STLManipulator } from '../stl/stl-manipulator.ts';
4
- import fs from 'fs';
5
- import path from 'path';
6
- import * as THREE from 'three';
7
-
8
- // Create a test directory
9
- const TEST_DIR = path.join(process.cwd(), 'test');
10
- if (!fs.existsSync(TEST_DIR)) {
11
- fs.mkdirSync(TEST_DIR, { recursive: true });
12
- }
13
-
14
- // Path for a sample STL file
15
- const sampleStlPath = path.join(TEST_DIR, 'sample_cube.stl');
16
-
17
- // Create a simple cube STL for testing if it doesn't exist
18
- async function createSampleCube() {
19
- if (fs.existsSync(sampleStlPath)) {
20
- console.log('Sample STL already exists, skipping creation');
21
- return sampleStlPath;
22
- }
23
-
24
- console.log('Creating sample cube STL...');
25
-
26
- // Create a simple cube geometry
27
- const geometry = new THREE.BoxGeometry(10, 10, 10);
28
- const material = new THREE.MeshStandardMaterial();
29
- const mesh = new THREE.Mesh(geometry, material);
30
-
31
- // Import STLExporter
32
- const { STLExporter } = await import('three/examples/jsm/exporters/STLExporter.js');
33
- const exporter = new STLExporter();
34
-
35
- // Export as STL
36
- const stlString = exporter.parse(mesh);
37
-
38
- // Write to file
39
- fs.writeFileSync(sampleStlPath, stlString);
40
- console.log(`Sample cube saved to ${sampleStlPath}`);
41
-
42
- return sampleStlPath;
43
- }
44
-
45
- // Test the STL manipulator
46
- async function testSTLManipulator() {
47
- try {
48
- // Create a sample STL for testing
49
- const stlPath = await createSampleCube();
50
-
51
- // Create an instance of the STL manipulator with the test directory
52
- const manipulator = new STLManipulator(TEST_DIR);
53
-
54
- // Listen for events from the manipulator
55
- manipulator.on('operationComplete', (data) => {
56
- console.log('Operation complete:', data);
57
- });
58
-
59
- manipulator.on('operationError', (data) => {
60
- console.error('Operation error:', data);
61
- });
62
-
63
- // Test progress callback
64
- const progressCallback = (progress, message) => {
65
- console.log(`Progress: ${progress}% - ${message || ''}`);
66
- };
67
-
68
- // Test 1: Get information about the STL file
69
- console.log('\n=== Test 1: Get STL Info ===');
70
- const stlInfo = await manipulator.getSTLInfo(stlPath);
71
- console.log('STL Info:', stlInfo);
72
-
73
- // Test 2: Scale the STL file
74
- console.log('\n=== Test 2: Scale STL ===');
75
- const scaledStlPath = await manipulator.scaleSTL(stlPath, 2.0, progressCallback);
76
- console.log(`Scaled STL saved to: ${scaledStlPath}`);
77
-
78
- // Test 3: Rotate the STL file
79
- console.log('\n=== Test 3: Rotate STL ===');
80
- const rotatedStlPath = await manipulator.rotateSTL(stlPath, [45, 0, 0], progressCallback);
81
- console.log(`Rotated STL saved to: ${rotatedStlPath}`);
82
-
83
- // Test 4: Translate the STL file
84
- console.log('\n=== Test 4: Translate STL ===');
85
- const translatedStlPath = await manipulator.translateSTL(stlPath, [5, 10, 0], progressCallback);
86
- console.log(`Translated STL saved to: ${translatedStlPath}`);
87
-
88
- // Test 5: Extend the base of the STL file
89
- console.log('\n=== Test 5: Extend Base ===');
90
- const extendedStlPath = await manipulator.extendBase(stlPath, 0.5, progressCallback);
91
- console.log(`Extended STL saved to: ${extendedStlPath}`);
92
-
93
- // Test 6: Modify a section of the STL file
94
- console.log('\n=== Test 6: Modify Section (Top) ===');
95
- const modifiedStlPath = await manipulator.modifySection(
96
- stlPath,
97
- 'top',
98
- {
99
- type: 'scale',
100
- value: [1.5, 1.5, 1.5]
101
- },
102
- progressCallback
103
- );
104
- console.log(`Modified STL saved to: ${modifiedStlPath}`);
105
-
106
- console.log('\nAll tests completed successfully!');
107
- } catch (error) {
108
- console.error('An error occurred during testing:', error);
109
- process.exit(1);
110
- }
111
- }
112
-
113
- // Run the tests
114
- testSTLManipulator().catch(console.error);
@@ -1,124 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { STLManipulator, ProgressCallback } from '../stl/stl-manipulator.js';
4
- import fs from 'fs';
5
- import path from 'path';
6
- import * as THREE from 'three';
7
-
8
- // Create a test directory
9
- const TEST_DIR = path.join(process.cwd(), 'test');
10
- if (!fs.existsSync(TEST_DIR)) {
11
- fs.mkdirSync(TEST_DIR, { recursive: true });
12
- }
13
-
14
- // Path for a sample STL file
15
- const sampleStlPath = path.join(TEST_DIR, 'sample_cube.stl');
16
-
17
- // Create a simple cube STL for testing if it doesn't exist
18
- async function createSampleCube() {
19
- if (fs.existsSync(sampleStlPath)) {
20
- console.log('Sample STL already exists, skipping creation');
21
- return sampleStlPath;
22
- }
23
-
24
- console.log('Creating sample cube STL...');
25
-
26
- // Create a simple cube geometry
27
- const geometry = new THREE.BoxGeometry(10, 10, 10);
28
- const material = new THREE.MeshStandardMaterial();
29
- const mesh = new THREE.Mesh(geometry, material);
30
-
31
- // Import STLExporter
32
- const { STLExporter } = await import('three/examples/jsm/exporters/STLExporter.js');
33
- const exporter = new STLExporter();
34
-
35
- // Export as STL
36
- const stlString = exporter.parse(mesh);
37
-
38
- // Write to file
39
- fs.writeFileSync(sampleStlPath, stlString);
40
- console.log(`Sample cube saved to ${sampleStlPath}`);
41
-
42
- return sampleStlPath;
43
- }
44
-
45
- // Test the STL manipulator
46
- async function testSTLManipulator() {
47
- try {
48
- // Create a sample STL for testing
49
- const stlPath = await createSampleCube();
50
-
51
- // Create an instance of the STL manipulator with the test directory
52
- const manipulator = new STLManipulator(TEST_DIR);
53
-
54
- // Listen for events from the manipulator
55
- manipulator.on('operationComplete', (data) => {
56
- console.log('Operation complete:', data);
57
- });
58
-
59
- manipulator.on('operationError', (data) => {
60
- console.error('Operation error:', data);
61
- });
62
-
63
- // Test progress callback
64
- const progressCallback: ProgressCallback = (progress, message) => {
65
- console.log(`Progress: ${progress}% - ${message || ''}`);
66
- };
67
-
68
- // Test 1: Get information about the STL file
69
- console.log('\n=== Test 1: Get STL Info ===');
70
- const stlInfo = await manipulator.getSTLInfo(stlPath);
71
- console.log('STL Info:', stlInfo);
72
-
73
- // Test 2: Scale the STL file
74
- console.log('\n=== Test 2: Scale STL ===');
75
- const scaledStlPath = await manipulator.scaleSTL(stlPath, 2.0, progressCallback);
76
- console.log(`Scaled STL saved to: ${scaledStlPath}`);
77
-
78
- // Test 3: Rotate the STL file
79
- console.log('\n=== Test 3: Rotate STL ===');
80
- const rotatedStlPath = await manipulator.rotateSTL(stlPath, [45, 0, 0], progressCallback);
81
- console.log(`Rotated STL saved to: ${rotatedStlPath}`);
82
-
83
- // Test 4: Translate the STL file
84
- console.log('\n=== Test 4: Translate STL ===');
85
- const translatedStlPath = await manipulator.translateSTL(stlPath, [5, 10, 0], progressCallback);
86
- console.log(`Translated STL saved to: ${translatedStlPath}`);
87
-
88
- // Test 5: Extend the base of the STL file
89
- console.log('\n=== Test 5: Extend Base ===');
90
- const extendedStlPath = await manipulator.extendBase(stlPath, 0.5, progressCallback);
91
- console.log(`Extended STL saved to: ${extendedStlPath}`);
92
-
93
- // Test 6: Modify a section of the STL file
94
- console.log('\n=== Test 6: Modify Section (Top) ===');
95
- const modifiedStlPath = await manipulator.modifySection(
96
- stlPath,
97
- 'top',
98
- {
99
- type: 'scale',
100
- value: [1.5, 1.5, 1.5]
101
- },
102
- progressCallback
103
- );
104
- console.log(`Modified STL saved to: ${modifiedStlPath}`);
105
-
106
- // Test 7: Generate visualization of the STL file
107
- console.log('\n=== Test 7: Generate Visualization ===');
108
- const visualizationPath = await manipulator.generateVisualization(
109
- stlPath,
110
- 400,
111
- 400,
112
- progressCallback
113
- );
114
- console.log(`Visualization saved to: ${visualizationPath}`);
115
-
116
- console.log('\nAll tests completed successfully!');
117
- } catch (error) {
118
- console.error('An error occurred during testing:', error);
119
- process.exit(1);
120
- }
121
- }
122
-
123
- // Run the tests
124
- testSTLManipulator().catch(console.error);
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/test",
5
- "rootDir": ".."
6
- },
7
- "include": [
8
- "../**/*.ts"
9
- ],
10
- "exclude": [
11
- "node_modules"
12
- ]
13
- }
@@ -1,86 +0,0 @@
1
- solid exported
2
- facet normal 1 0 0
3
- outer loop
4
- vertex 5 5 5
5
- vertex 5 -5 5
6
- vertex 5 5 -5
7
- endloop
8
- endfacet
9
- facet normal 1 0 0
10
- outer loop
11
- vertex 5 -5 5
12
- vertex 5 -5 -5
13
- vertex 5 5 -5
14
- endloop
15
- endfacet
16
- facet normal -1 0 0
17
- outer loop
18
- vertex -5 5 -5
19
- vertex -5 -5 -5
20
- vertex -5 5 5
21
- endloop
22
- endfacet
23
- facet normal -1 0 0
24
- outer loop
25
- vertex -5 -5 -5
26
- vertex -5 -5 5
27
- vertex -5 5 5
28
- endloop
29
- endfacet
30
- facet normal 0 1 0
31
- outer loop
32
- vertex -5 5 -5
33
- vertex -5 5 5
34
- vertex 5 5 -5
35
- endloop
36
- endfacet
37
- facet normal 0 1 0
38
- outer loop
39
- vertex -5 5 5
40
- vertex 5 5 5
41
- vertex 5 5 -5
42
- endloop
43
- endfacet
44
- facet normal 0 -1 0
45
- outer loop
46
- vertex -5 -5 5
47
- vertex -5 -5 -5
48
- vertex 5 -5 5
49
- endloop
50
- endfacet
51
- facet normal 0 -1 0
52
- outer loop
53
- vertex -5 -5 -5
54
- vertex 5 -5 -5
55
- vertex 5 -5 5
56
- endloop
57
- endfacet
58
- facet normal 0 0 1
59
- outer loop
60
- vertex -5 5 5
61
- vertex -5 -5 5
62
- vertex 5 5 5
63
- endloop
64
- endfacet
65
- facet normal 0 0 1
66
- outer loop
67
- vertex -5 -5 5
68
- vertex 5 -5 5
69
- vertex 5 5 5
70
- endloop
71
- endfacet
72
- facet normal 0 0 -1
73
- outer loop
74
- vertex 5 5 -5
75
- vertex 5 -5 -5
76
- vertex -5 5 -5
77
- endloop
78
- endfacet
79
- facet normal 0 0 -1
80
- outer loop
81
- vertex 5 -5 -5
82
- vertex -5 -5 -5
83
- vertex -5 5 -5
84
- endloop
85
- endfacet
86
- endsolid exported
@@ -1,172 +0,0 @@
1
- solid exported
2
- facet normal 1 0 0
3
- outer loop
4
- vertex 5 17.700000762939453 5
5
- vertex 5 7.699999809265137 5
6
- vertex 5 17.700000762939453 -5
7
- endloop
8
- endfacet
9
- facet normal 1 0 0
10
- outer loop
11
- vertex 5 7.699999809265137 5
12
- vertex 5 7.699999809265137 -5
13
- vertex 5 17.700000762939453 -5
14
- endloop
15
- endfacet
16
- facet normal -1 0 0
17
- outer loop
18
- vertex -5 17.700000762939453 -5
19
- vertex -5 7.699999809265137 -5
20
- vertex -5 17.700000762939453 5
21
- endloop
22
- endfacet
23
- facet normal -1 0 0
24
- outer loop
25
- vertex -5 7.699999809265137 -5
26
- vertex -5 7.699999809265137 5
27
- vertex -5 17.700000762939453 5
28
- endloop
29
- endfacet
30
- facet normal 0 1 0
31
- outer loop
32
- vertex -5 17.700000762939453 -5
33
- vertex -5 17.700000762939453 5
34
- vertex 5 17.700000762939453 -5
35
- endloop
36
- endfacet
37
- facet normal 0 1 0
38
- outer loop
39
- vertex -5 17.700000762939453 5
40
- vertex 5 17.700000762939453 5
41
- vertex 5 17.700000762939453 -5
42
- endloop
43
- endfacet
44
- facet normal 0 -1 0
45
- outer loop
46
- vertex -5 7.699999809265137 5
47
- vertex -5 7.699999809265137 -5
48
- vertex 5 7.699999809265137 5
49
- endloop
50
- endfacet
51
- facet normal 0 -1 0
52
- outer loop
53
- vertex -5 7.699999809265137 -5
54
- vertex 5 7.699999809265137 -5
55
- vertex 5 7.699999809265137 5
56
- endloop
57
- endfacet
58
- facet normal 0 0 1
59
- outer loop
60
- vertex -5 17.700000762939453 5
61
- vertex -5 7.699999809265137 5
62
- vertex 5 17.700000762939453 5
63
- endloop
64
- endfacet
65
- facet normal 0 0 1
66
- outer loop
67
- vertex -5 7.699999809265137 5
68
- vertex 5 7.699999809265137 5
69
- vertex 5 17.700000762939453 5
70
- endloop
71
- endfacet
72
- facet normal 0 0 -1
73
- outer loop
74
- vertex 5 17.700000762939453 -5
75
- vertex 5 7.699999809265137 -5
76
- vertex -5 17.700000762939453 -5
77
- endloop
78
- endfacet
79
- facet normal 0 0 -1
80
- outer loop
81
- vertex 5 7.699999809265137 -5
82
- vertex -5 7.699999809265137 -5
83
- vertex -5 17.700000762939453 -5
84
- endloop
85
- endfacet
86
- endsolid exported
87
- solid exported
88
- facet normal 1 0 0
89
- outer loop
90
- vertex 5 7.699999809265137 5
91
- vertex 5 -5 5
92
- vertex 5 7.699999809265137 -5
93
- endloop
94
- endfacet
95
- facet normal 1 0 0
96
- outer loop
97
- vertex 5 -5 5
98
- vertex 5 -5 -5
99
- vertex 5 7.699999809265137 -5
100
- endloop
101
- endfacet
102
- facet normal -1 0 0
103
- outer loop
104
- vertex -5 7.699999809265137 -5
105
- vertex -5 -5 -5
106
- vertex -5 7.699999809265137 5
107
- endloop
108
- endfacet
109
- facet normal -1 0 0
110
- outer loop
111
- vertex -5 -5 -5
112
- vertex -5 -5 5
113
- vertex -5 7.699999809265137 5
114
- endloop
115
- endfacet
116
- facet normal 0 1 0
117
- outer loop
118
- vertex -5 7.699999809265137 -5
119
- vertex -5 7.699999809265137 5
120
- vertex 5 7.699999809265137 -5
121
- endloop
122
- endfacet
123
- facet normal 0 1 0
124
- outer loop
125
- vertex -5 7.699999809265137 5
126
- vertex 5 7.699999809265137 5
127
- vertex 5 7.699999809265137 -5
128
- endloop
129
- endfacet
130
- facet normal 0 -1 0
131
- outer loop
132
- vertex -5 -5 5
133
- vertex -5 -5 -5
134
- vertex 5 -5 5
135
- endloop
136
- endfacet
137
- facet normal 0 -1 0
138
- outer loop
139
- vertex -5 -5 -5
140
- vertex 5 -5 -5
141
- vertex 5 -5 5
142
- endloop
143
- endfacet
144
- facet normal 0 0 1
145
- outer loop
146
- vertex -5 7.699999809265137 5
147
- vertex -5 -5 5
148
- vertex 5 7.699999809265137 5
149
- endloop
150
- endfacet
151
- facet normal 0 0 1
152
- outer loop
153
- vertex -5 -5 5
154
- vertex 5 -5 5
155
- vertex 5 7.699999809265137 5
156
- endloop
157
- endfacet
158
- facet normal 0 0 -1
159
- outer loop
160
- vertex 5 7.699999809265137 -5
161
- vertex 5 -5 -5
162
- vertex -5 7.699999809265137 -5
163
- endloop
164
- endfacet
165
- facet normal 0 0 -1
166
- outer loop
167
- vertex 5 -5 -5
168
- vertex -5 -5 -5
169
- vertex -5 7.699999809265137 -5
170
- endloop
171
- endfacet
172
- endsolid exported