From 8662e3974e69645e479a0550376b2804445110b3 Mon Sep 17 00:00:00 2001 From: Nick Playfair Date: Wed, 27 Jan 2021 21:23:15 +0000 Subject: [PATCH] Tidy up Remove testing code and old functions --- fileProcessor.js | 138 +++++++++++------------------------------------ index.js | 113 +++++++++++++------------------------- 2 files changed, 68 insertions(+), 183 deletions(-) diff --git a/fileProcessor.js b/fileProcessor.js index 19a14fe..65810c2 100644 --- a/fileProcessor.js +++ b/fileProcessor.js @@ -12,89 +12,11 @@ const gerberFiles = [ 'CAMOutputs/GerberFiles/profile.gbr' ] -let newLayers = []; - -// Use a sample zip archive - -const zip = new StreamZip({ - file: './gerber/sho_v2.zip', - storeEntries: true -}); - -function countFiles() { - // Read the zip file - zip.on('ready', () => { - console.log('Entries read: ' + zip.entriesCount); - for (const entry of Object.values(zip.entries())) { - const desc = entry.isDirectory ? 'directory' : `${entry.size} bytes`; - console.log(`Entry ${entry.name}: ${desc}`); - } - zip.close() - }); -} - -function getFiles() { - // Get the gerber files from the zip archive - zip.on('ready', () => { - let fileName = 'CAMOutputs/GerberFiles/silkscreen_top.gbr'; - zip.stream(fileName, (err, stm) => { - newLayers.push({ - filename: fileName, - gerber: stm - }); - stm.on('end', () => zip.close()); - console.log(newLayers); - }); - }); -} - -async function getLayers2(fileName) { - const tempDir = path.join(__dirname, 'gerber', 'tmp', 'archive'); - const archive = new StreamZip({ - file: fileName, - storeEntries: true - }); - try { - archive.on('ready', () => { - fs.mkdirSync(tempDir, { recursive: true }); - archive.extract(null, tempDir, (err, count) => { - console.log(err ? 'Extract error' : `Extracted ${count} entries`); - const layers = gerberFiles.map(fileName => ({ - filename: fileName, - gerber: fs.createReadStream(path.join(tempDir, fileName)) - })); - archive.close(); - return layers; - }); - }); - } catch (err) { - console.error(err); - } -} - -async function getLayers(fileName) { - return new Promise((resolve, reject) => { - const tempDir = path.join(__dirname, 'gerber', 'tmp', 'archive'); - extractArchive(fileName) - .then(numfiles => { - console.log(`${numfiles} files extracted successfully`); - const layers = gerberFiles.map(fileName => ({ - filename: fileName, - gerber: fs.createReadStream(path.join(tempDir, fileName)) - })); - if(numfiles > 0) { - // Some files were extracted - resolve(layers); - } else { - reject(); - } - }) - .catch(e => { - console.log(e); - }) - }) -} - +/** + * Extracts the passed in zip file + * @param {string} fileName + * @returns {Promise} Promise object represents number of files extracted + */ function extractArchive(fileName) { // Configure archive to use const archive = new StreamZip({ @@ -121,13 +43,27 @@ function extractArchive(fileName) { }) } -// Helper methods -function validFiles(file) { - return gerberFiles.includes(file); -} - -function layerBuild(filename) { - fs.createReadStream(filename); +async function getLayers(fileName) { + return new Promise((resolve, reject) => { + const tempDir = path.join(__dirname, 'gerber', 'tmp', 'archive'); + extractArchive(fileName) + .then(numfiles => { + console.log(`${numfiles} files extracted successfully`); + const layers = gerberFiles.map(fileName => ({ + filename: fileName, + gerber: fs.createReadStream(path.join(tempDir, fileName)) + })); + if(numfiles > 0) { + // Some files were extracted + resolve(layers); + } else { + reject(); + } + }) + .catch(e => { + console.log(e); + }) + }) } async function cleanupFiles() { @@ -140,20 +76,8 @@ async function cleanupFiles() { } } -function getStream(fileName) { - let stream; - zip.on('ready', () => { - stream = zip.entryDataSync(fileName); - zip.close(); - console.log(stream); - }) -} - - -// We want to return an array of layers - - -exports.countFiles = countFiles; -exports.extractArchive = extractArchive; -exports.cleanupFiles = cleanupFiles; -exports.getLayers = getLayers; \ No newline at end of file +module.exports = { + extractArchive, + getLayers, + cleanupFiles +} \ No newline at end of file diff --git a/index.js b/index.js index a0d075e..7ec7434 100644 --- a/index.js +++ b/index.js @@ -1,85 +1,46 @@ -const fs = require('fs'); -const { file } = require('jszip'); const pcbStackup = require('pcb-stackup'); const sharp = require('sharp'); +const path = require('path'); const fileProc = require('./fileProcessor.js'); // Configuration -const resizeWidth = 600; -const density = 1000; -const compLevel = 1; -const destfile = './gerber/pcb3.png'; +const config = { + resizeWidth: 600, + density: 1000, + compLevel: 1, +} -//Sample gerber -const sampleNames = [ - './gerber/default/copper_top.gbr', - './gerber/default/drill_1_16.xln', - './gerber/default/silkscreen_top.gbr', - './gerber/default/soldermask_top.gbr', - './gerber/default/solderpaste_top.gbr', - './gerber/default/profile.gbr', -] - -const samplelayers = sampleNames.map(filename => ({ - filename, - gerber: fs.createReadStream(filename), -})); - -// pcbStackup(layers).then(stackup => { -// // Create buffer from SVG string -// sharp(Buffer.from(stackup.top.svg), { density: density }) -// .resize({ width: resizeWidth }) -// .png({ -// compressionLevel: compLevel }) -// .toFile(destfile) -// .then((info) => { -// console.log(info) -// }) -// .catch((e) => { -// console.error(e); -// }) -// }) -// .catch((e) => { -// console.error(e); -// }); - -// fileProc.jsTest(); -// console.log(layers); - -// fileProc.getLayers(); -// fileProc.getStream('CAMOutputs/GerberFiles/silkscreen_top.gbr'); -// fileProc.extractArchive('./gerber/sho_v2.zip') -// fileProc.cleanupFiles(); - -// async () => { -// const templayers = await fileProc.getLayers('./gerber/sho_v2.zip'); -// console.log(templayers); -// } -// fileProc.extractArchive('./gerber/sho_v2.zip') -// .then(msg => { -// console.log('done'); -// }) - -// const templayers = fileProc.getLayers('./gerber/sho_v2.zip') -// console.log(templayers) - -fileProc.getLayers('./gerber/Timmy.zip') - .then(layers => { - pcbStackup(layers).then(stackup => { - // Create buffer from SVG string - sharp(Buffer.from(stackup.top.svg), { density: density }) - .resize({ width: resizeWidth }) - .png({ - compressionLevel: compLevel }) - .toFile(destfile) - .then((info) => { - console.log(info) - }) +// Functions +function gerberToImage(gerber, imageName) { + return new Promise((resolve, reject) => { + const destFile = path.join(__dirname, 'gerber', 'pcb', imageName); + fileProc.getLayers(gerber) + .then(layers => { + pcbStackup(layers).then(stackup => { + // Create buffer from SVG string + sharp(Buffer.from(stackup.top.svg), { density: config.density }) + .resize({ width: config.resizeWidth }) + .png({ + compressionLevel: config.compLevel }) + .toFile(destFile) + .then((info) => { + // Succesful + fileProc.cleanupFiles(); + resolve(info); + }) + .catch((e) => { + fileProc.cleanupFiles(); + reject(e); + }) + }) .catch((e) => { - console.error(e); - }) + reject(e); + }); }) - .catch((e) => { - console.error(e); - }); + }) +} + +gerberToImage('./gerber/Timmy.zip', 'timmy.png').then(info => console.log(info)) + .catch(e => { + console.error(e); })