Библиотека фрагментов
Выберите папку с фрагментамиили перетащите её сюда (.fr3d, .f3d, .b3d - со всеми подпапками).

Каталог: дерево папок, карточки с картинкой и 3D, размеры, число деталей, материалы, фурнитура, поиск. Проверка: материал / кромка не из таблицы, деталь без материала, кромка не в тон, опечатки в названиях, одинаковые фрагменты, нечитаемые файлы. Файлы не меняются и не отправляются в интернет.

Те же инструменты для Базиса - скрипты «Каталог библиотеки» и «Проверка библиотеки».

'; show(ascii(page), 'Каталог - ' + folder + '.html'); $('lbTitle').textContent = 'Каталог «' + folder + '»: фрагментов ' + items.length + (r.skipped.length ? ', больших не читалось ' + r.skipped.length : '') + (bad ? ', не читаются ' + bad : ''); window.LIB_LAST = { kind: 'cat', items: items.length, bad: bad, skipped: r.skipped.length, sec: r.sec }; // для проверки }); }; // проверка - как «Проверка библиотеки» в Базисе $('lbChk').onclick = function () { if (!hasAccess() && !left()) { paywall(); return; } var infos = []; Promise.all([text('lbTable'), text('lbAk')]).then(function (tx) { return readAll(function (f, m, u8, err) { if (!m) { infos.push({ rel: f.rel, err: String(err && err.message || err || 'не читается') }); return; } try { infos.push(LIBCHK.fileInfo(m, f.rel, u8)); } catch (e) { infos.push({ rel: f.rel, err: String(e && e.message || e) }); } }).then(function (r) { count(); var table = tx[0] ? LIBCHK.parseTable(tx[0]) : {}, ak = tx[1] ? LIBCHK.parseAk(tx[1]) : {}; var R = LIBCHK.analyze(infos, { table: Object.keys(table).length ? table : null, ak: ak }); var d = new Date(), p2 = function (n) { return (n < 10 ? '0' : '') + n; }; var data = { folder: folder, root: folder, date: stamp() + ' ' + p2(d.getHours()) + ':' + p2(d.getMinutes()), stats: R.stats, groups: R.groups, skipped: r.skipped, maxMb: Number($('lbMax').value) || 20 }; var page = 'Check
'; show(ascii(page), 'Проверка библиотеки - ' + folder + '.html'); var n = 0; R.groups.forEach(function (g) { n += g.items.length; }); $('lbTitle').textContent = 'Проверка «' + folder + '»: файлов ' + R.stats.files + ', замечаний ' + n; window.LIB_LAST = { kind: 'chk', files: R.stats.files, notes: n, groups: R.groups.map(function (g) { return g.title + ' ' + g.items.length; }), sec: r.sec }; // для проверки }); }); }; $('lbSave').onclick = function () { var a = document.createElement('a'); a.href = lastUrl; a.download = lastName; document.body.appendChild(a); a.click(); a.remove(); }; $('lbBack').onclick = function () { location.reload(); }; showLeft(); window.LIBP = { setFiles: setFiles }; // для проверки })();