@tobisk/pcbs 1.0.0
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/LICENSE.md +21 -0
- package/README.md +186 -0
- package/dist/src/cli/cli.d.ts +6 -0
- package/dist/src/cli/cli.js +87 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/codegen.d.ts +25 -0
- package/dist/src/cli/codegen.js +170 -0
- package/dist/src/cli/codegen.js.map +1 -0
- package/dist/src/cli/commands/export.d.ts +13 -0
- package/dist/src/cli/commands/export.js +301 -0
- package/dist/src/cli/commands/export.js.map +1 -0
- package/dist/src/cli/commands/lib.d.ts +10 -0
- package/dist/src/cli/commands/lib.js +158 -0
- package/dist/src/cli/commands/lib.js.map +1 -0
- package/dist/src/cli/commands/parts.d.ts +4 -0
- package/dist/src/cli/commands/parts.js +104 -0
- package/dist/src/cli/commands/parts.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts +4 -0
- package/dist/src/cli/commands/setup.js +86 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/commands/synth.d.ts +4 -0
- package/dist/src/cli/commands/synth.js +75 -0
- package/dist/src/cli/commands/synth.js.map +1 -0
- package/dist/src/cli/commands/types.d.ts +1 -0
- package/dist/src/cli/commands/types.js +140 -0
- package/dist/src/cli/commands/types.js.map +1 -0
- package/dist/src/cli/commands/validate.d.ts +5 -0
- package/dist/src/cli/commands/validate.js +105 -0
- package/dist/src/cli/commands/validate.js.map +1 -0
- package/dist/src/cli/config.d.ts +9 -0
- package/dist/src/cli/config.js +80 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/env.d.ts +4 -0
- package/dist/src/cli/env.js +166 -0
- package/dist/src/cli/env.js.map +1 -0
- package/dist/src/cli/search-jlc.d.ts +0 -0
- package/dist/src/cli/search-jlc.js +23 -0
- package/dist/src/cli/search-jlc.js.map +1 -0
- package/dist/src/cli/synthesis.d.ts +11 -0
- package/dist/src/cli/synthesis.js +120 -0
- package/dist/src/cli/synthesis.js.map +1 -0
- package/dist/src/cli/utils/bom.d.ts +19 -0
- package/dist/src/cli/utils/bom.js +130 -0
- package/dist/src/cli/utils/bom.js.map +1 -0
- package/dist/src/cli/utils/cpl.d.ts +18 -0
- package/dist/src/cli/utils/cpl.js +101 -0
- package/dist/src/cli/utils/cpl.js.map +1 -0
- package/dist/src/cli/utils.d.ts +11 -0
- package/dist/src/cli/utils.js +136 -0
- package/dist/src/cli/utils.js.map +1 -0
- package/dist/src/generate-kicad-types.d.ts +1 -0
- package/dist/src/generate-kicad-types.js +137 -0
- package/dist/src/generate-kicad-types.js.map +1 -0
- package/dist/src/synth/3d/Kicad3DModel.d.ts +81 -0
- package/dist/src/synth/3d/Kicad3DModel.js +250 -0
- package/dist/src/synth/3d/Kicad3DModel.js.map +1 -0
- package/dist/src/synth/3d/booleans.d.ts +10 -0
- package/dist/src/synth/3d/booleans.js +30 -0
- package/dist/src/synth/3d/booleans.js.map +1 -0
- package/dist/src/synth/3d/fillet.d.ts +14 -0
- package/dist/src/synth/3d/fillet.js +47 -0
- package/dist/src/synth/3d/fillet.js.map +1 -0
- package/dist/src/synth/3d/index.d.ts +7 -0
- package/dist/src/synth/3d/index.js +14 -0
- package/dist/src/synth/3d/index.js.map +1 -0
- package/dist/src/synth/3d/occ-loader.d.ts +5 -0
- package/dist/src/synth/3d/occ-loader.js +77 -0
- package/dist/src/synth/3d/occ-loader.js.map +1 -0
- package/dist/src/synth/3d/occ.d.ts +3 -0
- package/dist/src/synth/3d/occ.js +31 -0
- package/dist/src/synth/3d/occ.js.map +1 -0
- package/dist/src/synth/3d/primitives.d.ts +38 -0
- package/dist/src/synth/3d/primitives.js +58 -0
- package/dist/src/synth/3d/primitives.js.map +1 -0
- package/dist/src/synth/3d/stepWriter.d.ts +7 -0
- package/dist/src/synth/3d/stepWriter.js +72 -0
- package/dist/src/synth/3d/stepWriter.js.map +1 -0
- package/dist/src/synth/3d/transforms.d.ts +18 -0
- package/dist/src/synth/3d/transforms.js +74 -0
- package/dist/src/synth/3d/transforms.js.map +1 -0
- package/dist/src/synth/3d/types.d.ts +54 -0
- package/dist/src/synth/3d/types.js +21 -0
- package/dist/src/synth/3d/types.js.map +1 -0
- package/dist/src/synth/3d/vrmlWriter.d.ts +5 -0
- package/dist/src/synth/3d/vrmlWriter.js +171 -0
- package/dist/src/synth/3d/vrmlWriter.js.map +1 -0
- package/dist/src/synth/Component.d.ts +67 -0
- package/dist/src/synth/Component.js +185 -0
- package/dist/src/synth/Component.js.map +1 -0
- package/dist/src/synth/Composable.d.ts +73 -0
- package/dist/src/synth/Composable.js +128 -0
- package/dist/src/synth/Composable.js.map +1 -0
- package/dist/src/synth/KicadFootprint.d.ts +97 -0
- package/dist/src/synth/KicadFootprint.js +312 -0
- package/dist/src/synth/KicadFootprint.js.map +1 -0
- package/dist/src/synth/KicadLibrary.d.ts +66 -0
- package/dist/src/synth/KicadLibrary.js +162 -0
- package/dist/src/synth/KicadLibrary.js.map +1 -0
- package/dist/src/synth/KicadSymbol.d.ts +71 -0
- package/dist/src/synth/KicadSymbol.js +190 -0
- package/dist/src/synth/KicadSymbol.js.map +1 -0
- package/dist/src/synth/Layout.d.ts +37 -0
- package/dist/src/synth/Layout.js +58 -0
- package/dist/src/synth/Layout.js.map +1 -0
- package/dist/src/synth/Markers.d.ts +35 -0
- package/dist/src/synth/Markers.js +48 -0
- package/dist/src/synth/Markers.js.map +1 -0
- package/dist/src/synth/Module.d.ts +56 -0
- package/dist/src/synth/Module.js +65 -0
- package/dist/src/synth/Module.js.map +1 -0
- package/dist/src/synth/Net.d.ts +23 -0
- package/dist/src/synth/Net.js +95 -0
- package/dist/src/synth/Net.js.map +1 -0
- package/dist/src/synth/Registry.d.ts +36 -0
- package/dist/src/synth/Registry.js +75 -0
- package/dist/src/synth/Registry.js.map +1 -0
- package/dist/src/synth/Schematic.d.ts +36 -0
- package/dist/src/synth/Schematic.js +51 -0
- package/dist/src/synth/Schematic.js.map +1 -0
- package/dist/src/synth/index.d.ts +21 -0
- package/dist/src/synth/index.js +46 -0
- package/dist/src/synth/index.js.map +1 -0
- package/dist/src/synth/kicad-types-placeholder.d.ts +6 -0
- package/dist/src/synth/kicad-types-placeholder.js +7 -0
- package/dist/src/synth/kicad-types-placeholder.js.map +1 -0
- package/dist/src/synth/types.d.ts +111 -0
- package/dist/src/synth/types.js +23 -0
- package/dist/src/synth/types.js.map +1 -0
- package/dist/src/tests/3d-model.test.d.ts +1 -0
- package/dist/src/tests/3d-model.test.js +282 -0
- package/dist/src/tests/3d-model.test.js.map +1 -0
- package/dist/src/tests/codegen.test.d.ts +1 -0
- package/dist/src/tests/codegen.test.js +80 -0
- package/dist/src/tests/codegen.test.js.map +1 -0
- package/dist/src/tests/dmx_node.test.d.ts +1 -0
- package/dist/src/tests/dmx_node.test.js +42 -0
- package/dist/src/tests/dmx_node.test.js.map +1 -0
- package/dist/src/tests/dnc.test.d.ts +1 -0
- package/dist/src/tests/dnc.test.js +100 -0
- package/dist/src/tests/dnc.test.js.map +1 -0
- package/dist/src/tests/kicad-lib.test.d.ts +1 -0
- package/dist/src/tests/kicad-lib.test.js +465 -0
- package/dist/src/tests/kicad-lib.test.js.map +1 -0
- package/dist/src/tests/layout.test.d.ts +1 -0
- package/dist/src/tests/layout.test.js +92 -0
- package/dist/src/tests/layout.test.js.map +1 -0
- package/dist/src/tests/migration.test.d.ts +1 -0
- package/dist/src/tests/migration.test.js +58 -0
- package/dist/src/tests/migration.test.js.map +1 -0
- package/dist/src/tests/net_merging.test.d.ts +1 -0
- package/dist/src/tests/net_merging.test.js +97 -0
- package/dist/src/tests/net_merging.test.js.map +1 -0
- package/dist/src/tests/occ-minimal.test.d.ts +1 -0
- package/dist/src/tests/occ-minimal.test.js +14 -0
- package/dist/src/tests/occ-minimal.test.js.map +1 -0
- package/dist/src/tests/placement.test.d.ts +1 -0
- package/dist/src/tests/placement.test.js +130 -0
- package/dist/src/tests/placement.test.js.map +1 -0
- package/dist/src/tests/synthesis.test.d.ts +1 -0
- package/dist/src/tests/synthesis.test.js +88 -0
- package/dist/src/tests/synthesis.test.js.map +1 -0
- package/dist/src/types/kicad-library.d.ts +6 -0
- package/dist/src/types/kicad-library.js +7 -0
- package/dist/src/types/kicad-library.js.map +1 -0
- package/dist/src/types/kicad-library.ts +61770 -0
- package/package.json +57 -0
- package/scripts/patch-opencascade.ts +18 -0
- package/scripts/wasm-stub.js +1 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.die = die;
|
|
37
|
+
exports.prompt = prompt;
|
|
38
|
+
exports.listSchematics = listSchematics;
|
|
39
|
+
exports.resolveSchematic = resolveSchematic;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
43
|
+
const config_1 = require("./config");
|
|
44
|
+
/**
|
|
45
|
+
* Find the best entry point for a schematic directory.
|
|
46
|
+
* Priority: index.ts -> <dirName>.ts -> first .ts file found.
|
|
47
|
+
*/
|
|
48
|
+
function findSchematicEntry(dirName) {
|
|
49
|
+
const { schematicsDir } = (0, config_1.getConfig)();
|
|
50
|
+
const dirPath = path.join(schematicsDir, dirName);
|
|
51
|
+
if (!fs.existsSync(dirPath) || !fs.statSync(dirPath).isDirectory())
|
|
52
|
+
return null;
|
|
53
|
+
const candidates = [
|
|
54
|
+
path.join(dirPath, "index.ts"),
|
|
55
|
+
path.join(dirPath, `${dirName}.ts`),
|
|
56
|
+
path.join(dirPath, `${dirName.charAt(0).toUpperCase() + dirName.slice(1)}.ts`), // camelCase match
|
|
57
|
+
];
|
|
58
|
+
for (const c of candidates) {
|
|
59
|
+
if (fs.existsSync(c))
|
|
60
|
+
return c;
|
|
61
|
+
}
|
|
62
|
+
// Fallback: any .ts file
|
|
63
|
+
const files = fs.readdirSync(dirPath).filter(f => f.endsWith(".ts"));
|
|
64
|
+
if (files.length > 0) {
|
|
65
|
+
return path.join(dirPath, files[0]);
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
function die(msg) {
|
|
70
|
+
console.error(`❌ ${msg}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
function prompt(question) {
|
|
74
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
75
|
+
return new Promise((resolve) => {
|
|
76
|
+
rl.question(question, (answer) => {
|
|
77
|
+
rl.close();
|
|
78
|
+
resolve(answer.trim());
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* List available schematics from src/schematics/.
|
|
84
|
+
* Each schematic is a sub-folder containing an index.ts with a default export.
|
|
85
|
+
*/
|
|
86
|
+
function listSchematics() {
|
|
87
|
+
const { schematicsDir } = (0, config_1.getConfig)();
|
|
88
|
+
if (!fs.existsSync(schematicsDir)) {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
return fs
|
|
92
|
+
.readdirSync(schematicsDir, { withFileTypes: true })
|
|
93
|
+
.filter((d) => d.isDirectory())
|
|
94
|
+
.filter((d) => !!findSchematicEntry(d.name))
|
|
95
|
+
.map((d) => d.name)
|
|
96
|
+
.sort();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a schematic entry: either a direct path or interactive selection.
|
|
100
|
+
*/
|
|
101
|
+
async function resolveSchematic(entry) {
|
|
102
|
+
if (entry) {
|
|
103
|
+
// Direct path provided
|
|
104
|
+
const resolved = path.resolve(entry);
|
|
105
|
+
if (fs.existsSync(resolved)) {
|
|
106
|
+
return resolved;
|
|
107
|
+
}
|
|
108
|
+
// Try as a schematic name
|
|
109
|
+
const entryPath = findSchematicEntry(entry);
|
|
110
|
+
if (entryPath) {
|
|
111
|
+
return entryPath;
|
|
112
|
+
}
|
|
113
|
+
die(`Schematic not found: ${entry}`);
|
|
114
|
+
}
|
|
115
|
+
// Interactive selection
|
|
116
|
+
const schematics = listSchematics();
|
|
117
|
+
if (schematics.length === 0) {
|
|
118
|
+
die("No schematics found in src/schematics/. Create a folder with an index.ts that default-exports a Schematic.");
|
|
119
|
+
}
|
|
120
|
+
console.log("\n✨ Available Schematics\n" + "─".repeat(30));
|
|
121
|
+
schematics.forEach((name, i) => {
|
|
122
|
+
console.log(` ${i + 1}. ${name}`);
|
|
123
|
+
});
|
|
124
|
+
console.log("─".repeat(30));
|
|
125
|
+
const selection = await prompt(`Select a schematic (1-${schematics.length}): `);
|
|
126
|
+
const idx = parseInt(selection, 10) - 1;
|
|
127
|
+
if (isNaN(idx) || idx < 0 || idx >= schematics.length) {
|
|
128
|
+
die("Invalid selection.");
|
|
129
|
+
}
|
|
130
|
+
const entryPoint = findSchematicEntry(schematics[idx]);
|
|
131
|
+
if (!entryPoint) {
|
|
132
|
+
die(`Could not find an entry point for schematic: ${schematics[idx]}`);
|
|
133
|
+
}
|
|
134
|
+
return entryPoint;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cli/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
/**
|
|
39
|
+
* Script to generate TypeScript types for KiCad symbols and footprints.
|
|
40
|
+
* Scans standard KiCad library paths on macOS and project-local libraries.
|
|
41
|
+
*/
|
|
42
|
+
const KICAD_PATH = "/Applications/KiCad/KiCad.app/Contents/SharedSupport";
|
|
43
|
+
const SYMBOLS_DIR = path.join(KICAD_PATH, "symbols");
|
|
44
|
+
const FOOTPRINTS_DIR = path.join(KICAD_PATH, "footprints");
|
|
45
|
+
const PROJECT_LIB_DIR = path.join(process.cwd(), ".kicad");
|
|
46
|
+
const OUTPUT_FILE = path.join(process.cwd(), "framework/types/kicad-library.ts");
|
|
47
|
+
function parseSymbolsInFile(filePath, libName) {
|
|
48
|
+
if (!fs.existsSync(filePath))
|
|
49
|
+
return [];
|
|
50
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
51
|
+
const names = [];
|
|
52
|
+
// Quick regex to find all (symbol "NAME" ...) top-level patterns
|
|
53
|
+
const matches = content.matchAll(/\(symbol\s+"([^"]+)"/g);
|
|
54
|
+
for (const match of matches) {
|
|
55
|
+
const symName = match[1];
|
|
56
|
+
// Skip if it contains a colon already (might be an alias or complex name)
|
|
57
|
+
if (!symName.includes(":")) {
|
|
58
|
+
names.push(`${libName}:${symName}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
names.push(symName);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return names;
|
|
65
|
+
}
|
|
66
|
+
function getSymbolNames() {
|
|
67
|
+
const names = [];
|
|
68
|
+
// System libraries
|
|
69
|
+
if (fs.existsSync(SYMBOLS_DIR)) {
|
|
70
|
+
const symbolFiles = fs.readdirSync(SYMBOLS_DIR).filter(f => f.endsWith(".kicad_sym"));
|
|
71
|
+
for (const file of symbolFiles) {
|
|
72
|
+
const libName = path.basename(file, ".kicad_sym");
|
|
73
|
+
names.push(...parseSymbolsInFile(path.join(SYMBOLS_DIR, file), libName));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Project library
|
|
77
|
+
const projectSymLib = path.join(PROJECT_LIB_DIR, "Project_Symbols.kicad_sym");
|
|
78
|
+
if (fs.existsSync(projectSymLib)) {
|
|
79
|
+
names.push(...parseSymbolsInFile(projectSymLib, "Project_Symbols"));
|
|
80
|
+
}
|
|
81
|
+
// Built-in markers
|
|
82
|
+
names.push("Device:DNC");
|
|
83
|
+
names.push("Connector:TestPoint");
|
|
84
|
+
return [...new Set(names)].sort();
|
|
85
|
+
}
|
|
86
|
+
function getFootprintNames() {
|
|
87
|
+
const names = [];
|
|
88
|
+
// System libraries
|
|
89
|
+
if (fs.existsSync(FOOTPRINTS_DIR)) {
|
|
90
|
+
const prettyDirs = fs.readdirSync(FOOTPRINTS_DIR).filter(d => d.endsWith(".pretty"));
|
|
91
|
+
for (const dir of prettyDirs) {
|
|
92
|
+
const libName = path.basename(dir, ".pretty");
|
|
93
|
+
const modFiles = fs.readdirSync(path.join(FOOTPRINTS_DIR, dir)).filter(f => f.endsWith(".kicad_mod"));
|
|
94
|
+
for (const file of modFiles) {
|
|
95
|
+
const fpName = path.basename(file, ".kicad_mod");
|
|
96
|
+
names.push(`${libName}:${fpName}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Project library
|
|
101
|
+
const projectFpLib = path.join(PROJECT_LIB_DIR, "Project_Footprints.pretty");
|
|
102
|
+
if (fs.existsSync(projectFpLib)) {
|
|
103
|
+
const modFiles = fs.readdirSync(projectFpLib).filter(f => f.endsWith(".kicad_mod"));
|
|
104
|
+
for (const file of modFiles) {
|
|
105
|
+
const fpName = path.basename(file, ".kicad_mod");
|
|
106
|
+
names.push(`Project_Footprints:${fpName}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Built-in markers
|
|
110
|
+
names.push("DNC");
|
|
111
|
+
names.push("TestPoint:TestPoint_Pad_D2.5mm");
|
|
112
|
+
return [...new Set(names)].sort();
|
|
113
|
+
}
|
|
114
|
+
function generateTypes() {
|
|
115
|
+
console.log("Generating KiCad library types (including project libraries and markers)...");
|
|
116
|
+
const symbols = getSymbolNames();
|
|
117
|
+
const footprints = getFootprintNames();
|
|
118
|
+
const content = `/**
|
|
119
|
+
* AUTO-GENERATED FILE - DO NOT EDIT
|
|
120
|
+
* Generated by scripts/generate-kicad-types.ts
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
export type KicadLibrarySymbol =
|
|
124
|
+
${symbols.map(s => ` | "${s}"`).join("\n")};
|
|
125
|
+
|
|
126
|
+
export type KicadLibraryFootprint =
|
|
127
|
+
${footprints.map(f => ` | "${f}"`).join("\n")};
|
|
128
|
+
`;
|
|
129
|
+
const dir = path.dirname(OUTPUT_FILE);
|
|
130
|
+
if (!fs.existsSync(dir)) {
|
|
131
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
132
|
+
}
|
|
133
|
+
fs.writeFileSync(OUTPUT_FILE, content, "utf-8");
|
|
134
|
+
console.log(`Generated ${symbols.length} symbols and ${footprints.length} footprints in ${OUTPUT_FILE}`);
|
|
135
|
+
}
|
|
136
|
+
generateTypes();
|
|
137
|
+
//# sourceMappingURL=generate-kicad-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-kicad-types.js","sourceRoot":"","sources":["../../src/generate-kicad-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type BoxOptions, type SphereOptions, type CylinderOptions } from "./primitives";
|
|
2
|
+
import type { OC, Vec3, ColorRGBA, SolidHandle, ExportOptions, ExportResult, Model3DLink } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Fluent wrapper around a SolidHandle.
|
|
5
|
+
* Returned by Kicad3DModel primitive constructors.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SolidBuilder {
|
|
8
|
+
/** @internal */
|
|
9
|
+
_handle: SolidHandle;
|
|
10
|
+
/** @internal */
|
|
11
|
+
private _oc;
|
|
12
|
+
constructor(oc: OC, handle: SolidHandle);
|
|
13
|
+
/** Translate the solid by (x, y, z) mm. */
|
|
14
|
+
translate(v: Partial<Vec3>): this;
|
|
15
|
+
/** Rotate the solid around X, Y, Z axes (degrees). */
|
|
16
|
+
rotate(v: Partial<Vec3>): this;
|
|
17
|
+
/** Scale the solid (uniform or per-axis). */
|
|
18
|
+
scale(s: number | Partial<Vec3>): this;
|
|
19
|
+
/** Apply a fillet to edges. */
|
|
20
|
+
fillet(opts: {
|
|
21
|
+
radius: number;
|
|
22
|
+
edges?: "all" | number[];
|
|
23
|
+
}): this;
|
|
24
|
+
/** Set the solid color (hex string like "#c0c0c0" or ColorRGBA object). */
|
|
25
|
+
color(c: string | ColorRGBA): this;
|
|
26
|
+
/** Set a name for this solid (used as comment in VRML). */
|
|
27
|
+
name(n: string): this;
|
|
28
|
+
}
|
|
29
|
+
export interface Kicad3DModelOptions {
|
|
30
|
+
/** Unit for all dimensions (currently only "mm" is supported). */
|
|
31
|
+
unit?: "mm";
|
|
32
|
+
/** Rotate the entire model around X axis (degrees). */
|
|
33
|
+
rotX?: number;
|
|
34
|
+
/** Rotate the entire model around Y axis (degrees). */
|
|
35
|
+
rotY?: number;
|
|
36
|
+
/** Rotate the entire model around Z axis (degrees). */
|
|
37
|
+
rotZ?: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class Kicad3DModel {
|
|
40
|
+
private _oc;
|
|
41
|
+
private _solids;
|
|
42
|
+
private _options;
|
|
43
|
+
private _rotation;
|
|
44
|
+
/** Metadata for linking into footprint (set after export). */
|
|
45
|
+
modelLink?: Model3DLink;
|
|
46
|
+
constructor(options?: Kicad3DModelOptions);
|
|
47
|
+
/** @internal Ensure OCC is initialized. */
|
|
48
|
+
private _ensureOC;
|
|
49
|
+
/** Set the OCC instance directly (useful in tests to avoid re-init). */
|
|
50
|
+
setOC(oc: OC): void;
|
|
51
|
+
/** Get the current OCC instance (must have been set or init'd). */
|
|
52
|
+
get oc(): OC;
|
|
53
|
+
/** Explicitly initialize OCC. Alternatively, export() will auto-init. */
|
|
54
|
+
init(): Promise<this>;
|
|
55
|
+
/** All solids currently in the model. */
|
|
56
|
+
get solids(): ReadonlyArray<SolidHandle>;
|
|
57
|
+
/** Create a box primitive. */
|
|
58
|
+
box(opts: BoxOptions): SolidBuilder;
|
|
59
|
+
/** Create a sphere primitive. */
|
|
60
|
+
sphere(opts: SphereOptions): SolidBuilder;
|
|
61
|
+
/** Create a cylinder primitive. */
|
|
62
|
+
cylinder(opts: CylinderOptions): SolidBuilder;
|
|
63
|
+
/**
|
|
64
|
+
* Create a box with rounded edges (box + fillet on all edges).
|
|
65
|
+
*/
|
|
66
|
+
roundedBox(opts: BoxOptions & {
|
|
67
|
+
r: number;
|
|
68
|
+
}): SolidBuilder;
|
|
69
|
+
/** Fuse (union) two solids. Replaces both with the result, returns new builder. */
|
|
70
|
+
union(a: SolidBuilder, b: SolidBuilder): SolidBuilder;
|
|
71
|
+
/** Subtract solid `b` from solid `a`. Removes `b` from model, replaces `a`. */
|
|
72
|
+
subtract(a: SolidBuilder, b: SolidBuilder): SolidBuilder;
|
|
73
|
+
/** Intersect two solids. Returns their common volume. */
|
|
74
|
+
intersect(a: SolidBuilder, b: SolidBuilder): SolidBuilder;
|
|
75
|
+
/**
|
|
76
|
+
* Export the model to disk.
|
|
77
|
+
* Generates WRL (and optionally STEP) files.
|
|
78
|
+
*/
|
|
79
|
+
export(opts: ExportOptions): Promise<ExportResult>;
|
|
80
|
+
private _removeSolid;
|
|
81
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Kicad3DModel = exports.SolidBuilder = void 0;
|
|
37
|
+
/**
|
|
38
|
+
* Kicad3DModel — High-level fluent API for building parametric 3D models.
|
|
39
|
+
*
|
|
40
|
+
* Usage:
|
|
41
|
+
* ```ts
|
|
42
|
+
* const model = new Kicad3DModel({ unit: "mm" });
|
|
43
|
+
* const body = model.box({ x: 68.6, y: 53.4, z: 1.6, center: true }).color("#1f4fa3");
|
|
44
|
+
* const usb = model.box({ x: 12, y: 16, z: 11, center: true })
|
|
45
|
+
* .translate({ x: 30, y: 0, z: 5.5 })
|
|
46
|
+
* .fillet({ radius: 1.0, edges: "all" })
|
|
47
|
+
* .color("#c0c0c0");
|
|
48
|
+
* model.union(body, usb);
|
|
49
|
+
* await model.export({ outDir: "./3d", baseName: "Arduino_Uno", formats: ["wrl"] });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const occ_1 = require("./occ");
|
|
54
|
+
const primitives_1 = require("./primitives");
|
|
55
|
+
const transforms_1 = require("./transforms");
|
|
56
|
+
const booleans_1 = require("./booleans");
|
|
57
|
+
const fillet_1 = require("./fillet");
|
|
58
|
+
const vrmlWriter_1 = require("./vrmlWriter");
|
|
59
|
+
const stepWriter_1 = require("./stepWriter");
|
|
60
|
+
const types_1 = require("./types");
|
|
61
|
+
// ── SolidBuilder ──────────────────────────────────────────────────────
|
|
62
|
+
/**
|
|
63
|
+
* Fluent wrapper around a SolidHandle.
|
|
64
|
+
* Returned by Kicad3DModel primitive constructors.
|
|
65
|
+
*/
|
|
66
|
+
class SolidBuilder {
|
|
67
|
+
constructor(oc, handle) {
|
|
68
|
+
this._oc = oc;
|
|
69
|
+
this._handle = handle;
|
|
70
|
+
}
|
|
71
|
+
/** Translate the solid by (x, y, z) mm. */
|
|
72
|
+
translate(v) {
|
|
73
|
+
const vec = { x: v.x ?? 0, y: v.y ?? 0, z: v.z ?? 0 };
|
|
74
|
+
this._handle.shape = (0, transforms_1.translateShape)(this._oc, this._handle.shape, vec);
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/** Rotate the solid around X, Y, Z axes (degrees). */
|
|
78
|
+
rotate(v) {
|
|
79
|
+
const angles = { x: v.x ?? 0, y: v.y ?? 0, z: v.z ?? 0 };
|
|
80
|
+
this._handle.shape = (0, transforms_1.rotateShape)(this._oc, this._handle.shape, angles);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
/** Scale the solid (uniform or per-axis). */
|
|
84
|
+
scale(s) {
|
|
85
|
+
const vec = typeof s === "number"
|
|
86
|
+
? { x: s, y: s, z: s }
|
|
87
|
+
: { x: s.x ?? 1, y: s.y ?? 1, z: s.z ?? 1 };
|
|
88
|
+
this._handle.shape = (0, transforms_1.scaleShape)(this._oc, this._handle.shape, vec);
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
/** Apply a fillet to edges. */
|
|
92
|
+
fillet(opts) {
|
|
93
|
+
const edges = opts.edges ?? "all";
|
|
94
|
+
if (edges === "all") {
|
|
95
|
+
this._handle.shape = (0, fillet_1.filletAllEdges)(this._oc, this._handle.shape, opts.radius);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this._handle.shape = (0, fillet_1.filletEdgesByIndex)(this._oc, this._handle.shape, edges, opts.radius);
|
|
99
|
+
}
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
/** Set the solid color (hex string like "#c0c0c0" or ColorRGBA object). */
|
|
103
|
+
color(c) {
|
|
104
|
+
this._handle.color = typeof c === "string" ? (0, types_1.parseHexColor)(c) : c;
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
/** Set a name for this solid (used as comment in VRML). */
|
|
108
|
+
name(n) {
|
|
109
|
+
this._handle.name = n;
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.SolidBuilder = SolidBuilder;
|
|
114
|
+
class Kicad3DModel {
|
|
115
|
+
constructor(options) {
|
|
116
|
+
this._oc = null;
|
|
117
|
+
this._solids = [];
|
|
118
|
+
this._options = options ?? { unit: "mm" };
|
|
119
|
+
this._rotation = {
|
|
120
|
+
x: options?.rotX ?? 0,
|
|
121
|
+
y: options?.rotY ?? 0,
|
|
122
|
+
z: options?.rotZ ?? 0,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/** @internal Ensure OCC is initialized. */
|
|
126
|
+
async _ensureOC() {
|
|
127
|
+
if (!this._oc) {
|
|
128
|
+
this._oc = await (0, occ_1.initOCC)();
|
|
129
|
+
}
|
|
130
|
+
return this._oc;
|
|
131
|
+
}
|
|
132
|
+
/** Set the OCC instance directly (useful in tests to avoid re-init). */
|
|
133
|
+
setOC(oc) {
|
|
134
|
+
this._oc = oc;
|
|
135
|
+
}
|
|
136
|
+
/** Get the current OCC instance (must have been set or init'd). */
|
|
137
|
+
get oc() {
|
|
138
|
+
if (!this._oc)
|
|
139
|
+
throw new Error("OCC not initialized. Call await model.init() or model.setOC().");
|
|
140
|
+
return this._oc;
|
|
141
|
+
}
|
|
142
|
+
/** Explicitly initialize OCC. Alternatively, export() will auto-init. */
|
|
143
|
+
async init() {
|
|
144
|
+
await this._ensureOC();
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/** All solids currently in the model. */
|
|
148
|
+
get solids() {
|
|
149
|
+
return this._solids;
|
|
150
|
+
}
|
|
151
|
+
// ── Primitives ────────────────────────────────────────────────────
|
|
152
|
+
/** Create a box primitive. */
|
|
153
|
+
box(opts) {
|
|
154
|
+
const shape = (0, primitives_1.makeBox)(this.oc, opts);
|
|
155
|
+
const handle = { shape };
|
|
156
|
+
this._solids.push(handle);
|
|
157
|
+
return new SolidBuilder(this.oc, handle);
|
|
158
|
+
}
|
|
159
|
+
/** Create a sphere primitive. */
|
|
160
|
+
sphere(opts) {
|
|
161
|
+
const shape = (0, primitives_1.makeSphere)(this.oc, opts);
|
|
162
|
+
const handle = { shape };
|
|
163
|
+
this._solids.push(handle);
|
|
164
|
+
return new SolidBuilder(this.oc, handle);
|
|
165
|
+
}
|
|
166
|
+
/** Create a cylinder primitive. */
|
|
167
|
+
cylinder(opts) {
|
|
168
|
+
const shape = (0, primitives_1.makeCylinder)(this.oc, opts);
|
|
169
|
+
const handle = { shape };
|
|
170
|
+
this._solids.push(handle);
|
|
171
|
+
return new SolidBuilder(this.oc, handle);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create a box with rounded edges (box + fillet on all edges).
|
|
175
|
+
*/
|
|
176
|
+
roundedBox(opts) {
|
|
177
|
+
const shape = (0, primitives_1.makeBox)(this.oc, opts);
|
|
178
|
+
const rounded = (0, fillet_1.filletAllEdges)(this.oc, shape, opts.r);
|
|
179
|
+
const handle = { shape: rounded };
|
|
180
|
+
this._solids.push(handle);
|
|
181
|
+
return new SolidBuilder(this.oc, handle);
|
|
182
|
+
}
|
|
183
|
+
// ── Boolean operations ────────────────────────────────────────────
|
|
184
|
+
/** Fuse (union) two solids. Replaces both with the result, returns new builder. */
|
|
185
|
+
union(a, b) {
|
|
186
|
+
const fused = (0, booleans_1.fuseShapes)(this.oc, a._handle.shape, b._handle.shape);
|
|
187
|
+
const handle = { shape: fused, color: a._handle.color, name: a._handle.name };
|
|
188
|
+
// Remove the original handles
|
|
189
|
+
this._removeSolid(a._handle);
|
|
190
|
+
this._removeSolid(b._handle);
|
|
191
|
+
this._solids.push(handle);
|
|
192
|
+
return new SolidBuilder(this.oc, handle);
|
|
193
|
+
}
|
|
194
|
+
/** Subtract solid `b` from solid `a`. Removes `b` from model, replaces `a`. */
|
|
195
|
+
subtract(a, b) {
|
|
196
|
+
const cut = (0, booleans_1.cutShapes)(this.oc, a._handle.shape, b._handle.shape);
|
|
197
|
+
const handle = { shape: cut, color: a._handle.color, name: a._handle.name };
|
|
198
|
+
this._removeSolid(a._handle);
|
|
199
|
+
this._removeSolid(b._handle);
|
|
200
|
+
this._solids.push(handle);
|
|
201
|
+
return new SolidBuilder(this.oc, handle);
|
|
202
|
+
}
|
|
203
|
+
/** Intersect two solids. Returns their common volume. */
|
|
204
|
+
intersect(a, b) {
|
|
205
|
+
const common = (0, booleans_1.intersectShapes)(this.oc, a._handle.shape, b._handle.shape);
|
|
206
|
+
const handle = { shape: common, color: a._handle.color, name: a._handle.name };
|
|
207
|
+
this._removeSolid(a._handle);
|
|
208
|
+
this._removeSolid(b._handle);
|
|
209
|
+
this._solids.push(handle);
|
|
210
|
+
return new SolidBuilder(this.oc, handle);
|
|
211
|
+
}
|
|
212
|
+
// ── Export ─────────────────────────────────────────────────────────
|
|
213
|
+
/**
|
|
214
|
+
* Export the model to disk.
|
|
215
|
+
* Generates WRL (and optionally STEP) files.
|
|
216
|
+
*/
|
|
217
|
+
async export(opts) {
|
|
218
|
+
await this._ensureOC();
|
|
219
|
+
// Apply whole-model rotation if specified
|
|
220
|
+
const needsRotation = this._rotation.x !== 0 || this._rotation.y !== 0 || this._rotation.z !== 0;
|
|
221
|
+
const exportSolids = needsRotation
|
|
222
|
+
? this._solids.map(s => ({
|
|
223
|
+
...s,
|
|
224
|
+
shape: (0, transforms_1.rotateShape)(this.oc, s.shape, this._rotation),
|
|
225
|
+
}))
|
|
226
|
+
: this._solids;
|
|
227
|
+
const formats = opts.formats ?? ["wrl"];
|
|
228
|
+
const result = {};
|
|
229
|
+
if (formats.includes("wrl")) {
|
|
230
|
+
const wrlPath = path.join(opts.outDir, `${opts.baseName}.wrl`);
|
|
231
|
+
(0, vrmlWriter_1.writeVRML)(this.oc, exportSolids, wrlPath);
|
|
232
|
+
result.wrlPath = wrlPath;
|
|
233
|
+
}
|
|
234
|
+
if (formats.includes("step")) {
|
|
235
|
+
const stepPath = path.join(opts.outDir, `${opts.baseName}.step`);
|
|
236
|
+
const ok = (0, stepWriter_1.writeSTEP)(this.oc, exportSolids, stepPath);
|
|
237
|
+
if (ok)
|
|
238
|
+
result.stepPath = stepPath;
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
// ── Private helpers ───────────────────────────────────────────────
|
|
243
|
+
_removeSolid(handle) {
|
|
244
|
+
const idx = this._solids.indexOf(handle);
|
|
245
|
+
if (idx !== -1)
|
|
246
|
+
this._solids.splice(idx, 1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
exports.Kicad3DModel = Kicad3DModel;
|
|
250
|
+
//# sourceMappingURL=Kicad3DModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kicad3DModel.js","sourceRoot":"","sources":["../../../../src/synth/3d/Kicad3DModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSG boolean operations on TopoDS_Shape objects.
|
|
3
|
+
*/
|
|
4
|
+
import type { OC } from "./types";
|
|
5
|
+
/** Fuse (union) two shapes. Returns a new shape. */
|
|
6
|
+
export declare function fuseShapes(oc: OC, a: any, b: any): any;
|
|
7
|
+
/** Cut shape `b` from shape `a`. Returns a new shape. */
|
|
8
|
+
export declare function cutShapes(oc: OC, a: any, b: any): any;
|
|
9
|
+
/** Intersect two shapes. Returns their common volume. */
|
|
10
|
+
export declare function intersectShapes(oc: OC, a: any, b: any): any;
|