Skip to content

Commit

Permalink
chore(revert): revert "chore(regl-renderer): Regl renderer tweaks (#427
Browse files Browse the repository at this point in the history
…)" (#429)

This reverts commit 71190dd.
  • Loading branch information
kaosat-dev committed Feb 9, 2019
1 parent 71190dd commit 75740d2
Show file tree
Hide file tree
Showing 308 changed files with 111,481 additions and 12,370 deletions.
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -9,7 +9,7 @@
"bootstrap": "lerna bootstrap",
"clean": "lerna clean",
"cli": "npm run bootstrap && cd ./packages/cli",
"web": "npm run bootstrap && cd ./packages/web && npm run dev",
"web": "npm run bootstrap && cd ./packages/web && npm run start-dev",
"desktop": "npm run bootstrap && cd ./packages/desktop && npm run dev",
"publish": "git checkout master && git pull origin master && npm t && lerna publish --conventional-commits",
"publish-dryrun": "git checkout master && git pull origin master && npm t && lerna publish --conventional-commits --skip-git --skip-npm"
Expand All @@ -32,7 +32,7 @@
"dependencies": {
},
"devDependencies": {
"ava": "^0.25.0",
"ava": "^0.23.0",
"lerna": "2.7.0"
},
"collective": {
Expand Down
186 changes: 161 additions & 25 deletions packages/cli/cli.js
Expand Up @@ -21,41 +21,177 @@
// openjscad test.jscad -of stl
// openjscad name_plate.jscad --name "Just Me" --title "CEO" -o amf test.amf
//
// History:
// 2016/10/01: 0.5.2: changes for libraries
// 2016/06/27: 0.5.1: refactored AMF import and export by Z3 Dev
// enhanced STL import, adding support for MM colors by Z3 Dev
// 2016/02/02: 0.4.0: GUI refactored, functionality split up into more files, mostly done by Z3 Dev
// 2015/07/02: 0.3.0: node 0.10.x support, /usr/bin/nodejs, new files involved: formats.js (Stefan Baumann) and Blob.js (Z3 Dev)
// 2014/12/09: 0.019: support of DXF output for 2D objects (laser cutter)
// 2013/04/25: 0.010: support of params passed to main()
// 2013/04/12: 0.008: reimplement parseAMF without jquery
// 2013/04/11: 0.007: support of alpha for AMF addded, bumping version
// 2013/04/05: 0.006: support of AMF added, requires node 0.8.1+
// 2013/03/25: 0.005: more sanity check on input and local installation support
// 2013/03/18: 0.004: STL .stl (binary & ascii) support (experimental via openscad.js)
// 2013/03/18: 0.003: OpenSCAD .scad support by Gary Hodgson's openscad-openjscad-translator module
// 2013/03/02: 0.002: proper installation of the dependencies (csg.js & openscad.js) so openjscad can be used properly
// 2013/03/01: 0.001: initial version, with base function from openscad.jscad
//
const fs = require('fs')
const env = require('./env')
const version = require('./package.json').version
const { formats } = require('@jscad/core/io/formats')
const generateOutputData = require('./src/generateOutputData')
const determineOutputNameAndFormat = require('./src/determineOutputNameAndFormat')
const writeOutput = require('./src/writeOutput')
const parseArgs = require('./src/parseArgs')
const { formats, conversionFormats } = require('@jscad/core/io/formats')
const { getDesignEntryPoint } = require('@jscad/core/code-loading/requireDesignUtilsFs')
const generateOutputData = require('./generateOutputData')

const args = process.argv.splice(2)

// handle arguments (inputs, outputs, etc)
let { inputFile, inputFormat, outputFile, outputFormat, params, addMetaData, inputIsDirectory } = parseArgs(args)
// handle arguments
// inputs, outputs
let {inputFile, inputFormat, outputFile, outputFormat, params, addMetaData} = parseArgs(args)

// outputs
const output = determineOutputNameAndFormat(outputFormat, outputFile, inputFile)
const output = determineOutputNameAndFormat(outputFormat, outputFile)
outputFormat = output.outputFormat
outputFile = output.outputFile

const clicolors = {
red: '\u{1b}[31m',
green: '\u{1b}[32m',
yellow: '\u{1b}[33m',
blue: '\u{1b}[34m',
black: '\u{1b}[0m'
}
console.log(`converting ${inputFile} -> ${outputFile} (${formats[outputFormat].description})`)

console.log(`${clicolors.blue}JSCAD: generating output ${clicolors.red}
from: ${clicolors.green} ${inputFile} ${clicolors.red}
to: ${clicolors.green} ${outputFile} ${clicolors.yellow}(${formats[outputFormat].description}) ${clicolors.black}
`)

// read input data
const src = fs.readFileSync(inputFile, inputFile.match(/\.stl$/i) ? 'binary' : 'UTF8')
let src = fs.readFileSync(inputFile, inputFile.match(/\.stl$/i) ? 'binary' : 'UTF8')

// -- convert from JSCAD script into the desired output format
// const outputData = generateOutputData(src, params, {outputFormat})
// -- and write it to disk
generateOutputData(src, params, { outputFile, outputFormat, inputFile, inputFormat, version, addMetaData, inputIsDirectory })
.then(outputData => writeOutput(outputFile, outputData))
.catch(error => console.error(error))
// writeOutputDataToFile(outputFile, outputData)
generateOutputData(src, params, {outputFile, outputFormat, inputFile, inputFormat, version, addMetaData})
.then(function (outputData) {
writeOutputDataToFile(outputFile, outputData)
}).catch(error => console.error(error))

// -- helper functions ---------------------------------------------------------------------------------------

function parseArgs (args) {
// hint: https://github.com/substack/node-optimist
// https://github.com/visionmedia/commander.js
//
// process.argv.forEach(function (val, index, array) {
// console.log(index + ': ' + val)
// })
if (args.length < 1) {
console.log('USAGE:\n\nopenjscad [-v] <file> [-of <format>] [-o <output>]')
console.log('\t<file> :\tinput file (Supported types: .jscad, .js, .scad, .stl, .amf, .obj, .gcode, .svg, .json, .dxf)')
console.log('\t<output>:\toutput file (Supported types: .jscad, .stl, .amf, .dxf, .svg, .json)')
console.log("\t<format>:\t'jscad', 'stla' (STL ASCII, default), 'stlb' (STL Binary), 'amf', 'dxf', 'svg', 'json'")
process.exit(1)
}

let inputFile
let inputFormat
let outputFile
let outputFormat
let params = {} // parameters to feed the script if applicable
let addMetaData = false // wether to add metadata to outputs or not : ie version info, timestamp etc

// let supportedInputFormats = conversionFormats.join('|')
// console.log('supportedInputFormats', supportedInputFormats)
const isValidInputFileFormat = input => {
if (input === undefined || input === null || !(typeof input === 'string')) {
return false
}
return conversionFormats.reduce(function (acc, format) {
return input.toLowerCase().endsWith(format.toLowerCase()) || acc
}, false)
}
const getFileExtensionFromString = input => (input.substring(input.lastIndexOf('.') + 1)).toLowerCase()

const parseBool = input => input.toLowerCase() === "true"

for (let i = 0; i < args.length; i++) {
if (args[i] === '-of') { // -of <format>
outputFormat = args[++i]
} else if (args[i].match(/^-o(\S.+)/)) { // -o<output>
outputFile = args[i]
outputFile = outputFile.replace(/^\-o(\S+)$/, '$1')
} else if (args[i] === '-o') { // -o <output>
outputFile = args[++i]
} else if (args[i] === '-add-metadata') { // -metadata true/false
addMetaData = parseBool(args[++i])
} else if (args[i].match(/^--(\w+)=(.*)/)) { // params for main()
params[RegExp.$1] = RegExp.$2
} else if (args[i].match(/^--(\w+)$/)) { // params for main()
params[RegExp.$1] = args[++i]
} else if (args[i].match(/^--(\w+)$/)) { // params for main()
params[RegExp.$1] = args[++i]
} else if (isValidInputFileFormat(args[i])) {
inputFile = args[i]
inputFormat = getFileExtensionFromString(args[i])
if (!fs.statSync(inputFile).isFile()) {
console.log('ERROR: cannot open input file/directory <' + inputFile + '>')
process.exit(1)
}
} else if (args[i].match(/^-v$/)) { // show the version and the environment information
env()
console.log('OpenSCAD Compatibility (' + version + ')')
} else {
inputFile = args[i]
if (fs.statSync(inputFile).isDirectory()) {
inputFile = args[i]
// get actual design entry point if applicable (if passed a folder as input etc)
inputFile = getDesignEntryPoint(inputFile)
inputFormat = require('path').extname(inputFile).substring(1)
} else {
console.log('ERROR: invalid file name or argument <' + args[i] + '>')
console.log("Type 'openjscad' for help")
process.exit(1)
}
}
}
// exit if a input file was not provided
if (inputFile === null) process.exit(1)

if (!outputFormat && !outputFile) {
outputFormat = 'stla'
}

return {
inputFile,
inputFormat,
outputFile,
outputFormat,
params,
addMetaData
}
}

function determineOutputNameAndFormat (outputFormat, outputFile) {
if (!outputFormat && outputFile && outputFile.length && outputFile.match(/\.(jscad|js|stl|amf|dxf|svg)$/)) { // output filename set
outputFormat = RegExp.$1
} else if (!outputFormat && outputFile && outputFile.length) { // output filename isn't valid
console.log('ERROR: invalid output file <' + outputFile + '>')
process.exit(1)
} else if (outputFormat.match(/(jscad|js|stl|stla|stlb|amf|dxf|svg)/i)) { // output format defined?
let ext = RegExp.$1
if (!outputFile) { // unless output filename not set, compose it
ext = ext.replace(/stl[ab]/, 'stl') // drop [ab] from stl
outputFile = inputFile
outputFile = outputFile.replace(/\.([^\.]+)$/, '.' + ext) // compose output filename
}
} else {
console.log(`ERROR: invalid output format <${outputFormat}`)
process.exit(1)
}
return {outputFormat, outputFile}
}

function writeOutputDataToFile (outputFile, outputData) {
fs.writeFile(outputFile, outputData.asBuffer(),
function (err) {
if (err) {
console.log('err', err)
} else {
// console.log('success')
}
}
)
}

0 comments on commit 75740d2

Please sign in to comment.