var path = require('path'); var os = require('os'); var _ = require('lodash'); const fg = require('fast-glob'); const cad = require('@plastichub/osr-cad/cad/sw-lib'); const cadArgsSanitize = require('@plastichub/osr-cad/argv').sanitize; /* const read = require('@plastichub/fs/read').sync; const write = require('@plastichub/fs/write').sync; const sync = require('@plastichub/osr-sync/lib/sync').sync; */ const BPromise = require('bluebird'); var isWindows = process.platform === 'win32'; const files = (dir, glob) => fg.sync(glob, { dot: true, cwd: dir, absolute: true }); const main_model = (dir) => { const mains = files(dir, 'cad/*Global*.+(json)'); return mains[0]; } const file_path_with_ext = (file, ext) => { const parts = path.parse(file); return path.join(parts.dir, parts.name + '.' + ext); } const laser_parts = (model) => { return model.filter((m) => m.IsLaser === '1'); } const GLOB_MAIN_ASSEMBLY = "cad/*Global*.+(SLDASM)"; const GLOB_OUTPUT = "${SRC_DIR}/${SRC_NAME}.+(json)"; const create_sync_args = (root, product, input_glob, output_glob) => { const src = `${root}/${product}/${input_glob}`; const dst = output_glob; return { src, dst, debug: 'true', args: "", hash: true, verbose: 'true', skip: 'true' } } const createMeta = (root, product, options) => { const args = create_sync_args(root, product, GLOB_MAIN_ASSEMBLY, GLOB_OUTPUT); const syncArgs = cadArgsSanitize({ ...args, ...options }); return cad.convert(syncArgs).then(() => { }); } const convert = async (items, options) => { return BPromise.resolve(items).map((target) => { return createMeta(options.cwd || '.', target, options); }, { concurrency: 1 }); } module.exports = function (grunt) { const log = grunt.verbose.writeln; const error = grunt.log.error; grunt.registerMultiTask('cad-meta', 'Creates meta files from Solidwork assemblies', function () { const done = this.async(); this.files.forEach(function (filePair) { const items = filePair.orig.src.map(function (src) { return src; }); log('Convert to JSON : ', items); convert(items, { verbose: grunt.option('verbose') !== undefined ? grunt.option('verbose') : false, skip: grunt.option('skip') !== undefined ? grunt.option('skip') : true, cwd: grunt.option('cwd') }).then((e) => { done(); }); }) }); };