pass layer names to getLayers
Update the getLayers method to take in an array of the layer filenames you expect to be in the gerber archive. This will allow the package to be used with gerbers that output different filenames for each layer then EAGLE.
This commit is contained in:
parent
6bae30f572
commit
7dd6e99ef5
30
index.js
30
index.js
@ -5,21 +5,12 @@ const pcbStackup = require('pcb-stackup');
|
|||||||
const sharp = require('sharp');
|
const sharp = require('sharp');
|
||||||
const { Readable } = require('stream');
|
const { Readable } = require('stream');
|
||||||
|
|
||||||
// Filenames we need to extract from the archive
|
|
||||||
const gerberFiles = [
|
|
||||||
'CAMOutputs/DrillFiles/drills.xln',
|
|
||||||
'CAMOutputs/GerberFiles/copper_top.gbr',
|
|
||||||
'CAMOutputs/GerberFiles/silkscreen_top.gbr',
|
|
||||||
'CAMOutputs/GerberFiles/soldermask_top.gbr',
|
|
||||||
'CAMOutputs/GerberFiles/solderpaste_top.gbr',
|
|
||||||
'CAMOutputs/GerberFiles/profile.gbr',
|
|
||||||
];
|
|
||||||
|
|
||||||
class ImageGenerator {
|
class ImageGenerator {
|
||||||
constructor(folderConfig, imgConfig) {
|
constructor(folderConfig, imgConfig, layerNames) {
|
||||||
this.tmpDir = folderConfig.tmpDir;
|
this.tmpDir = folderConfig.tmpDir;
|
||||||
this.imgDir = folderConfig.imgDir;
|
this.imgDir = folderConfig.imgDir;
|
||||||
this.imgConfig = imgConfig;
|
this.imgConfig = imgConfig;
|
||||||
|
this.layerNames = layerNames;
|
||||||
|
|
||||||
// Ensure that the folders exist
|
// Ensure that the folders exist
|
||||||
try {
|
try {
|
||||||
@ -56,9 +47,10 @@ class ImageGenerator {
|
|||||||
/**
|
/**
|
||||||
* Take in a directory of layer files and return an array of the layers files
|
* Take in a directory of layer files and return an array of the layers files
|
||||||
* @param {string} dir Directory containing layer files
|
* @param {string} dir Directory containing layer files
|
||||||
|
* @param {Array} layerNames Array of filenames for the desired layers
|
||||||
* @returns {Array} Array of paths to the layers files
|
* @returns {Array} Array of paths to the layers files
|
||||||
*/
|
*/
|
||||||
static getLayers(dir) {
|
static getLayers(dir, layerNames) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
// Make sure the directory exists
|
// Make sure the directory exists
|
||||||
if (!fs.existsSync(dir)) {
|
if (!fs.existsSync(dir)) {
|
||||||
@ -66,12 +58,12 @@ class ImageGenerator {
|
|||||||
}
|
}
|
||||||
// Check that the required layer files exist in source dir
|
// Check that the required layer files exist in source dir
|
||||||
let layersValid = true;
|
let layersValid = true;
|
||||||
gerberFiles.forEach((layer) => {
|
layerNames.forEach((layer) => {
|
||||||
if (!fs.existsSync(path.join(dir, layer))) layersValid = false;
|
if (!fs.existsSync(path.join(dir, layer))) layersValid = false;
|
||||||
});
|
});
|
||||||
if (!layersValid) return reject(new Error('Layer not found.'));
|
if (!layersValid) return reject(new Error('Layer not found.'));
|
||||||
// Construct array of layers that match the supplied filenames array
|
// Construct array of layers that match the supplied filenames array
|
||||||
const layers = gerberFiles.map((layerName) => ({
|
const layers = layerNames.map((layerName) => ({
|
||||||
filename: layerName,
|
filename: layerName,
|
||||||
gerber: fs.createReadStream(path.join(dir, layerName)),
|
gerber: fs.createReadStream(path.join(dir, layerName)),
|
||||||
}));
|
}));
|
||||||
@ -127,7 +119,10 @@ class ImageGenerator {
|
|||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
ImageGenerator.extractArchive(gerber, this.tmpDir);
|
ImageGenerator.extractArchive(gerber, this.tmpDir);
|
||||||
ImageGenerator.getLayers(path.join(this.tmpDir, 'archive'))
|
ImageGenerator.getLayers(
|
||||||
|
path.join(this.tmpDir, 'archive'),
|
||||||
|
this.layerNames
|
||||||
|
)
|
||||||
.then(pcbStackup)
|
.then(pcbStackup)
|
||||||
.then((stackup) => {
|
.then((stackup) => {
|
||||||
sharp(Buffer.from(stackup.top.svg), {
|
sharp(Buffer.from(stackup.top.svg), {
|
||||||
@ -172,7 +167,10 @@ class ImageGenerator {
|
|||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
ImageGenerator.extractArchive(gerber, this.tmpDir);
|
ImageGenerator.extractArchive(gerber, this.tmpDir);
|
||||||
ImageGenerator.getLayers(path.join(this.tmpDir, 'archive'))
|
ImageGenerator.getLayers(
|
||||||
|
path.join(this.tmpDir, 'archive'),
|
||||||
|
this.layerNames
|
||||||
|
)
|
||||||
.then(pcbStackup)
|
.then(pcbStackup)
|
||||||
.then((stackup) => {
|
.then((stackup) => {
|
||||||
sharp(Buffer.from(stackup.top.svg), {
|
sharp(Buffer.from(stackup.top.svg), {
|
||||||
|
@ -26,10 +26,18 @@ const imgConfig = {
|
|||||||
density: 1000,
|
density: 1000,
|
||||||
compLevel: 1,
|
compLevel: 1,
|
||||||
};
|
};
|
||||||
|
const layerNames = [
|
||||||
|
'CAMOutputs/DrillFiles/drills.xln',
|
||||||
|
'CAMOutputs/GerberFiles/copper_top.gbr',
|
||||||
|
'CAMOutputs/GerberFiles/silkscreen_top.gbr',
|
||||||
|
'CAMOutputs/GerberFiles/soldermask_top.gbr',
|
||||||
|
'CAMOutputs/GerberFiles/solderpaste_top.gbr',
|
||||||
|
'CAMOutputs/GerberFiles/profile.gbr',
|
||||||
|
];
|
||||||
|
|
||||||
const fileProc = new ImageGenerator(folderConfig, imgConfig);
|
const fileProc = new ImageGenerator(folderConfig, imgConfig, layerNames);
|
||||||
const fileProcNoTemp = new ImageGenerator(noTempConfig, imgConfig);
|
const fileProcNoTemp = new ImageGenerator(noTempConfig, imgConfig, layerNames);
|
||||||
const fileProcNoImage = new ImageGenerator(noImageConfig, imgConfig);
|
const fileProcNoImage = new ImageGenerator(noImageConfig, imgConfig, layerNames);
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
* Tests
|
* Tests
|
||||||
@ -51,7 +59,7 @@ test('Create ImageGenerator object with the passed in config values', () => {
|
|||||||
// getLayers
|
// getLayers
|
||||||
test('Promise of an array of layers from a given folder', () => {
|
test('Promise of an array of layers from a given folder', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
return ImageGenerator.getLayers(testLayers).then((data) => {
|
return ImageGenerator.getLayers(testLayers, layerNames).then((data) => {
|
||||||
expect(data).toEqual(
|
expect(data).toEqual(
|
||||||
expect.arrayContaining([
|
expect.arrayContaining([
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
@ -65,14 +73,14 @@ test('Promise of an array of layers from a given folder', () => {
|
|||||||
|
|
||||||
test('Non-existent folder should reject promise with error', () => {
|
test('Non-existent folder should reject promise with error', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
return expect(ImageGenerator.getLayers('./invalid_folder')).rejects.toThrow(
|
return expect(ImageGenerator.getLayers('./invalid_folder', layerNames)).rejects.toThrow(
|
||||||
new Error('Layers folder does not exist.')
|
new Error('Layers folder does not exist.')
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Folder with incorrect number of layers should reject promise with error', () => {
|
test('Folder with incorrect number of layers should reject promise with error', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
return expect(ImageGenerator.getLayers(emptyFolder)).rejects.toThrow(
|
return expect(ImageGenerator.getLayers(emptyFolder, layerNames)).rejects.toThrow(
|
||||||
new Error('Layer not found.')
|
new Error('Layer not found.')
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user