Автокромка: какие торцы кромить
Перетащите сюда файл модели .b3d или нажмите, чтобы выбрать. Файл не отправляется в интернет - всё считается прямо в вашем браузере. Сайт найдёт торцы, которые нужно закромить по правилам мастера: фасады по кругу, видимые торцы корпуса, торцы у пола и сверху, съёмные полки, перемычки. Торцы, закрытые соседней деталью того же блока, не кромятся. Результат - в 3D (торцы подсвечены) и списком с метражом кромки.
'; } function paywall() { $('v3Stage').innerHTML = '
Бесплатные запуски закончились' + '

Вы проверили ' + FREE + ' модели бесплатно. Чтобы продолжить - оформите доступ (подходит и к 3D просмотру) или купите скрипт для Базиса.

' + '

Уже есть код доступа?

' + '' + '
'; $('v3Buy').onclick = function () { if (S.buyForm) S.buyForm('Доступ к онлайн-инструментам (Автокромка, проверка, 3D)'); }; $('v3Apply').onclick = function () { var h = codeHash($('v3Code').value); if (CODES.indexOf(h) < 0) { $('v3Err').textContent = 'Код не подходит.'; $('v3Err').hidden = false; return; } put('v3.code', h); showLeft(); resetStage(); }; } function resetStage() { $('v3Stage').innerHTML = '
Перетащите сюда файл модели .b3dили нажмите, чтобы выбрать
'; $('v3Drop').onclick = pick; } function pick() { if (!hasAccess() && !left()) { paywall(); return; } $('v3File').click(); } function open(file) { if (!/\.b3d$/i.test(file.name)) { alert('Нужен файл модели Базиса (.b3d).'); return; } if (!hasAccess() && !left()) { paywall(); return; } var busy = document.createElement('div'); busy.className = 'v3-busy'; busy.textContent = 'Считаю «' + file.name + '»…'; $('v3Stage').appendChild(busy); file.arrayBuffer().then(function (buf) { return new Promise(function (ok) { setTimeout(ok, 30); }).then(function () { return S.readModel(buf, file.name); }).then(function (model) { snap = AK.snapshot(model, false); if (!snap.panels.length) throw new Error('в модели не найдено деталей'); lastName = file.name.replace(/\.b3d$/i, ''); picked = null; $('akTitle').textContent = lastName; $('v3New').textContent = 'Другая модель…'; if (!hasAccess()) put('kromka.used', String(used() + 1)); showLeft(); view = null; calc(); view = makeView(); view.edges(); }); })['catch'](function (e) { busy.remove(); alert('Не получилось открыть модель: ' + (e && e.message || e)); }); } $('v3File').onchange = function () { if (this.files[0]) open(this.files[0]); this.value = ''; }; $('v3New').onclick = pick; $('v3Drop').onclick = pick; $('akSave').onclick = function () { var url = URL.createObjectURL(new Blob([report()], { type: 'text/html' })); var a = document.createElement('a'); a.href = url; a.download = 'Автокромка - ' + lastName + '.html'; document.body.appendChild(a); a.click(); a.remove(); setTimeout(function () { URL.revokeObjectURL(url); }, 5000); }; document.addEventListener('dragover', function (e) { e.preventDefault(); var d = $('v3Drop'); if (d) d.classList.add('hot'); }); document.addEventListener('dragleave', function (e) { var d = $('v3Drop'); if (d && e.target === d) d.classList.remove('hot'); }); document.addEventListener('drop', function (e) { e.preventDefault(); var f = e.dataTransfer.files[0]; if (f) open(f); }); renderSide(); showLeft(); if (S.hub) S.hub.listen('kromka', open); window.AKP = { open: open }; // для проверки })();