/* ---------- S02 new pier fit (sample: Ungok P1 drawings uploaded) ---------- */ var QS = [['foundation', '기초 형식(말뚝 유무)'], ['soffit', '코핑 하면 형상'], ['bearings', '받침 개수']]; var OPTS = { foundation: ['기초판+말뚝', '기초판만', '말뚝만'], soffit: ['곡선', '직선 경사', '나팔형'], bearings: ['2', '4', '10'] }; var TPLS = [ { n: '운곡교P1형', p: { foundation: '기초판+말뚝', soffit: '곡선', bearings: '10' } }, { n: '옥성교P1형', p: { foundation: '기초판+말뚝', soffit: '직선 경사', bearings: '10' } }, { n: '새재1교P1형', p: { foundation: '기초판만', soffit: '직선 경사', bearings: '10' } }, { n: 'Ramp-A교P1형', p: { foundation: '말뚝만', soffit: '나팔형', bearings: '2' } }, { n: '산외교울산P1형', p: { foundation: '기초판만', soffit: '직선 경사', bearings: '4' } } ]; var EST = { foundation: ['기초판+말뚝', "'말뚝' 문자 7개: D1 CS-TEXT (복합말뚝)", '보통'], soffit: ['곡선', "R 12000 mm: D1 CS-DIMT (8257, 16513) 'R=12.000'", '보통'], bearings: ['10', 'ELEVATION TABLE 행 10개: D2 (26179, 9342)', '보통'] }; var N = { up: false, ans: null, tpl: '운곡교P1형', name: '', rs: '미확인', rm: '미확인', skew: '', brot: '', frot: '', err: '' }; function nMatch(t) { return QS.filter(function (q) { return t.p[q[0]] === EST[q[0]][0]; }).length; } function nBad() { var t = TPLS.filter(function (x) { return x.n === N.tpl; })[0], bad = []; QS.forEach(function (q) { if (t.p[q[0]] !== N.ans[q[0]]) bad.push(q[1]); }); if (N.rs === '아니오') bad.push('철근 형상 종류'); if (N.rm === '아니오') bad.push('철근 생성 방식'); return bad; } function viewNew() { setWhere('S02 · 새 교각 적합성 판별'); var html = '
새 교각

도면으로 템플릿 추천

도면을 먼저 올리면 앱이 가장 비슷한 템플릿을 추천한다. 추천은 제안이고, 6문항은 사람이 확인한다.

'; if (!N.up) { html += '
시안에서는 운곡교 P1 도면 3장을 올린 것으로 본다
'; main.innerHTML = html; $('#up').onclick = function () { N.up = true; N.ans = {}; QS.forEach(function (q) { N.ans[q[0]] = EST[q[0]][0]; }); viewNew(); }; return; } var ranked = TPLS.slice().sort(function (a, b) { return nMatch(b) - nMatch(a); }); html += '

도면 3장, 문자 2,366개를 읽었다 — 1위 ' + ranked[0].n + ' (3 / 3 일치)

'; html += '

1 추천 순위

' + QS.map(function (q) { return ''; }).join('') + ''; ranked.forEach(function (t, i) { html += '' + QS.map(function (q) { var ok = t.p[q[0]] === EST[q[0]][0]; return ''; }).join('') + ''; }); html += '
추정한 3문항과 일치한 수
순위템플릿일치' + q[1] + '
' + (i + 1) + '' + t.n + '' + nMatch(t) + ' / 3' + esc(t.p[q[0]]) + ' ' + (ok ? badge('good', '●', '일치') : badge('bad', '■', '다름')) + '
'; html += '

2 추정 근거

'; QS.forEach(function (q) { var e = EST[q[0]]; html += ''; }); html += '
문항추정근거(도면 위치)신뢰
' + q[1] + '' + e[0] + '' + esc(e[1]) + '' + e[2] + '
기둥 단면·철근 형상·철근 생성 방식' + badge('dash', '◇', '판단 불가') + '도면 문자로 판별할 근거가 없다. 사람이 답한다-
'; html += ''; html += '

3 6문항 확인 후 교각 만들기

'; QS.forEach(function (q) { html += '
'; }); [['rs', '철근 형상 종류가 템플릿의 재료표 형식 열과 같은가'], ['rm', '철근 생성 방식(규칙 값 / 철근별 중심선)이 같은가']].forEach(function (q) { html += '
'; }); html += '
각도 값 확인 템플릿을 가르지 않는 값. 비워도 된다
' + [['skew', '코핑 평면 skew (°)'], ['brot', '받침 회전 (°)'], ['frot', '기초 회전 (°)']].map(function (q) { return '
'; }).join('') + '
'; var bad = nBad(); html += '

결과 판정

' + (bad.length ? badge('bad', '■', '같은 템플릿으로 만들 수 없음') + ' 다른 문항: ' + esc(bad.join(', ')) : badge('good', '●', '이 템플릿으로 만들 수 있음')) + '

' + (bad.length ? '

가장 가까운 템플릿에 생성기·검사기를 추가해야 한다. 그래도 진행하면 교각 이름 옆과 모든 화면 상단에 형식 불일치 경고가 계속 표시된다(닫을 수 없다).

' : '') + '
'; html += '
' + (N.err ? '' + esc(N.err) + '' : '') + '
'; html += '
'; html += '
'; main.innerHTML = html; var y = window.scrollY; main.querySelectorAll('[data-a]').forEach(function (e) { e.onchange = function () { N.ans[e.getAttribute('data-a')] = e.value; viewNew(); window.scrollTo(0, y); $('#' + e.id).focus(); }; }); main.querySelectorAll('[data-r]').forEach(function (e) { e.onchange = function () { N[e.getAttribute('data-r')] = e.value; viewNew(); window.scrollTo(0, y); $('#' + e.id).focus(); }; }); main.querySelectorAll('[data-g]').forEach(function (e) { e.oninput = function () { N[e.getAttribute('data-g')] = e.value; }; }); $('#nm').oninput = function () { N.name = this.value; }; $('#tp').onchange = function () { N.tpl = this.value; viewNew(); window.scrollTo(0, y); $('#tp').focus(); }; $('#mk').onclick = function () { N.name = $('#nm').value.trim(); if (!N.name) { N.err = '교각 이름이 비어 있다. 폴더를 만들 이름이 필요하다. 이름을 입력한다'; viewNew(); $('#nm').focus(); return; } N.err = ''; toast("교각 '" + N.name + "'을(를) 만들었다. 올린 도면이 교각 폴더로 옮겨졌고 6문항 답과 각도 값이 저장되었다." + (bad.length ? ' 형식 불일치 경고가 표시된다.' : '')); viewNew(); }; }