95 lines
2.6 KiB
JavaScript
95 lines
2.6 KiB
JavaScript
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();
|
|
});
|
|
})
|
|
|
|
});
|
|
}; |