Files
dxf-to-3d-gasiseol/docs/youtube-p9.html
T
Claude Haiku 363c2a2a25 step3-4: 프로젝트 기본 구조 & 상세 계획 수립
- CLAUDE.md: 프로젝트 전체 가이드 및 워크플로우 정의
- CONSIDERATIONS.md: 8개 영역 고려사항 분석 (기술, 품질, 배포, UX)
- PROGRESS.md: 진행 상황 추적 및 체크리스트
- PLAN.md: 단계 5~9 상세 계획 및 에이전트 역할 정의
- 메모리: 프로젝트 정보 저장

다음: 단계 5 (에이전트/커맨드/스킬/훅 아이디어 제안)
2026-10-16 15:06:18 +09:00

536 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>교각 P9 — 촬영 런시트 &amp; 대본</title>
<style>
html{color-scheme:light dark}
/* ── 팔레트는 모델 자체에서 가져왔다 ────────────────────────────
코핑 주황 · 기둥 파랑 · 기초 초록 · 말뚝 보라. 그 색이 곧 이 영상의 주인공이다. */
:root{
--ground:#F5F2EE; --surface:#FFFFFF; --slab:#181C22; --slab-ink:#D9E2ED;
--line:#DED7CE; --line-soft:#EBE5DC;
--ink:#191E25; --ink-2:#4A5462; --ink-3:#7C8794;
--cap:#C2732F; --col:#3E7CBC; --ftg:#4E9750; --pil:#8B4A9A; --brg:#C4413F;
--ok:#3E8F5C; --warn:#B07E14;
--accent:var(--cap);
--mono:ui-monospace,"Cascadia Mono","Consolas","D2Coding",monospace;
--sans:"Pretendard","Malgun Gothic","Apple SD Gothic Neo",system-ui,sans-serif;
}
@media (prefers-color-scheme:dark){
:root:not([data-theme="light"]){
--ground:#0E1116; --surface:#151A21; --slab:#0A0D11; --slab-ink:#CBD6E3;
--line:#252C36; --line-soft:#1C222B;
--ink:#DDE5EE; --ink-2:#94A2B3; --ink-3:#65717F;
--cap:#D68444; --col:#5894D0; --ftg:#74B06C; --pil:#A968B8; --brg:#DC5A58;
--ok:#5FBF7F; --warn:#E0B33C;
}
}
:root[data-theme="dark"]{
--ground:#0E1116; --surface:#151A21; --slab:#0A0D11; --slab-ink:#CBD6E3;
--line:#252C36; --line-soft:#1C222B;
--ink:#DDE5EE; --ink-2:#94A2B3; --ink-3:#65717F;
--cap:#D68444; --col:#5894D0; --ftg:#74B06C; --pil:#A968B8; --brg:#DC5A58;
--ok:#5FBF7F; --warn:#E0B33C;
}
*{box-sizing:border-box}
body{margin:0; background:var(--ground); color:var(--ink);
font:15.5px/1.7 var(--sans); -webkit-font-smoothing:antialiased}
.wrap{max-width:1080px; margin:0 auto; padding:36px 22px 90px}
/* ── 머리 ────────────────────────────────────────────────── */
header{display:flex; flex-wrap:wrap; align-items:flex-end; gap:18px 28px;
padding-bottom:20px; border-bottom:2px solid var(--ink)}
h1{margin:0; font-size:29px; line-height:1.2; letter-spacing:-.02em; text-wrap:balance}
h1 small{display:block; font:600 12px/1.6 var(--mono); letter-spacing:.16em;
color:var(--accent); text-transform:uppercase; margin-bottom:7px}
.facts{margin-left:auto; display:flex; gap:22px; font:600 12px/1.5 var(--mono);
font-variant-numeric:tabular-nums; color:var(--ink-3)}
.facts b{display:block; font-size:19px; color:var(--ink); letter-spacing:-.01em}
/* ── 탭 ──────────────────────────────────────────────────── */
.tabs{display:flex; flex-wrap:wrap; gap:2px; margin:22px 0 0;
border-bottom:1px solid var(--line)}
.tabs button{appearance:none; border:0; background:none; cursor:pointer;
font:600 13.5px/1 var(--sans); color:var(--ink-3);
padding:12px 15px; border-bottom:2px solid transparent; margin-bottom:-1px;
transition:color .12s}
.tabs button:hover{color:var(--ink-2)}
.tabs button[aria-selected="true"]{color:var(--ink); border-bottom-color:var(--accent)}
.tabs button:focus-visible{outline:2px solid var(--accent); outline-offset:-2px; border-radius:3px}
.panel{display:none; padding-top:26px}
.panel.on{display:block}
/* ── 타임라인 띠 ─────────────────────────────────────────── */
.tl{display:flex; height:34px; border:1px solid var(--line); border-radius:3px;
overflow:hidden; margin-bottom:6px}
.tl div{position:relative; display:grid; place-items:center; min-width:0;
font:600 10.5px/1 var(--mono); color:#fff; letter-spacing:.02em;
border-right:1px solid rgba(0,0,0,.28)}
.tl div:last-child{border-right:0}
.tl span{opacity:.92; white-space:nowrap; overflow:hidden}
.tl-key{display:flex; justify-content:space-between; font:600 11px/1 var(--mono);
color:var(--ink-3); font-variant-numeric:tabular-nums; margin-bottom:30px}
/* ── 컷 ──────────────────────────────────────────────────── */
.cut{display:grid; grid-template-columns:118px 1fr; gap:0 22px;
padding:22px 0; border-top:1px solid var(--line-soft)}
.cut:first-of-type{border-top:0}
.rail{font:600 12px/1.55 var(--mono); font-variant-numeric:tabular-nums;
color:var(--ink-3); padding-top:3px}
.rail .tc{display:block; font-size:15px; color:var(--ink); letter-spacing:-.02em}
.rail .dur{display:block}
.rail .clip{display:inline-block; margin-top:8px; padding:2px 7px; border-radius:3px;
background:var(--line-soft); color:var(--ink-2); font-size:11px; letter-spacing:.04em}
.cut h3{margin:0 0 3px; font-size:17.5px; letter-spacing:-.01em}
.cut .sub{margin:0 0 13px; color:var(--ink-3); font-size:13px}
.hookmark{color:var(--accent)}
pre{margin:0 0 13px; background:var(--slab); color:var(--slab-ink);
border-radius:4px; padding:12px 14px; overflow-x:auto;
font:12.5px/1.75 var(--mono)}
pre .c{color:#6E7D8E}
pre .h{color:#E9B872}
.say{margin:0; padding:14px 16px 14px 18px; background:var(--surface);
border:1px solid var(--line); border-left:3px solid var(--accent);
border-radius:0 4px 4px 0; font-size:15px}
.say b{color:var(--accent)}
.say .beat{display:block; height:9px}
.screen{margin:12px 0 0; padding:0; list-style:none;
font:12.5px/1.85 var(--mono); color:var(--ink-2)}
.screen li{padding-left:17px; position:relative}
.screen li:before{content:"›"; position:absolute; left:3px; color:var(--accent); font-weight:700}
.screen b{color:var(--ink); font-weight:600}
/* ── 표 ──────────────────────────────────────────────────── */
table{width:100%; border-collapse:collapse; margin:0 0 24px; font-size:13.5px}
th,td{text-align:left; padding:9px 12px; border-bottom:1px solid var(--line-soft);
vertical-align:top}
th{font:600 11px/1.5 var(--mono); letter-spacing:.09em; text-transform:uppercase;
color:var(--ink-3); border-bottom:1px solid var(--line)}
td code{font:12.5px/1.6 var(--mono); color:var(--accent)}
.num{font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap}
.tw{overflow-x:auto}
h2{margin:34px 0 12px; font-size:20px; letter-spacing:-.01em}
h2:first-child{margin-top:0}
p{margin:0 0 14px; max-width:68ch}
.lede{color:var(--ink-2); font-size:14.5px}
.chip{display:inline-block; padding:1px 8px; border-radius:3px; font:600 11px/1.7 var(--mono);
letter-spacing:.04em}
.c-cap{background:color-mix(in srgb,var(--cap) 18%,transparent); color:var(--cap)}
.c-ok{background:color-mix(in srgb,var(--ok) 18%,transparent); color:var(--ok)}
.c-warn{background:color-mix(in srgb,var(--warn) 20%,transparent); color:var(--warn)}
.note{border:1px solid var(--line); border-radius:4px; padding:14px 16px;
background:var(--surface); margin:0 0 20px}
.note b{display:block; margin-bottom:4px}
@media (max-width:660px){
.cut{grid-template-columns:1fr; gap:10px}
.rail{display:flex; gap:12px; align-items:baseline; padding:0}
.facts{margin-left:0}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
</style>
</head>
<body>
<div class="wrap">
<header>
<h1><small>촬영 런시트 · 컷별 대본</small>2D 도면 한 장에서<br>교각 하나를 세운다</h1>
<div class="facts">
<span><b>11</b>컷</span>
<span><b>5:54</b>총길이</span>
<span><b>75</b>부재</span>
<span><b>0.0000</b>오차</span>
</div>
</header>
<div class="tabs" role="tablist">
<button role="tab" aria-selected="true" data-p="p1">컷 순서 · 대본</button>
<button role="tab" aria-selected="false" data-p="p2">실행 명령</button>
<button role="tab" aria-selected="false" data-p="p3">화면 체크</button>
<button role="tab" aria-selected="false" data-p="p4">사고 대응</button>
<button role="tab" aria-selected="false" data-p="p5">업로드</button>
</div>
<!-- ══════════ 1. 컷 순서 · 대본 ══════════ -->
<section class="panel on" id="p1" role="tabpanel">
<div class="tl">
<div style="flex:14; background:var(--cap)"><span>HOOK</span></div>
<div style="flex:24.4; background:var(--ink-3)"><span>01 도면</span></div>
<div style="flex:11.1; background:var(--col)"><span>02</span></div>
<div style="flex:12.9; background:var(--col)"><span>03</span></div>
<div style="flex:48.5; background:var(--col)"><span>04 진단</span></div>
<div style="flex:24.8; background:var(--ftg)"><span>05</span></div>
<div style="flex:16.7; background:var(--ftg)"><span>06</span></div>
<div style="flex:82; background:var(--cap)"><span>07 모델링</span></div>
<div style="flex:25.3; background:var(--pil)"><span>08</span></div>
<div style="flex:44.3; background:var(--pil)"><span>09 IFC</span></div>
<div style="flex:50.1; background:var(--brg)"><span>10 마무리</span></div>
</div>
<div class="tl-key"><span>0:00</span><span>도면 → 진단 → 파라미터 → 모델링 → 검증 → IFC</span><span>5:54</span></div>
<div class="cut">
<div class="rail"><span class="tc">0:00</span><span class="dur">14.0초</span>
<span class="clip">07 발췌</span></div>
<div>
<h3 class="hookmark">HOOK — 결과부터 보여준다</h3>
<p class="sub">07번에서 교각이 서는 12~15초만 잘라 맨 앞에. 자막·설명 없이 화면만.</p>
<p class="say">이거, 사람이 만든 모델이 아닙니다.<span class="beat"></span>
2D 도면 한 장을 읽어서, 명령 한 줄로 자동으로 서는 겁니다.<span class="beat"></span>
교각 하나. 부재 <b>일흔다섯 개</b>. 오차 <b>0.0000</b>.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">0:14</span><span class="dur">24.4초</span>
<span class="clip">01.mp4</span></div>
<div>
<h3>도면 — 출발점</h3>
<p class="sub">CAD 에서 교각 일반도. 뷰를 훑고 표까지.</p>
<p class="say">시작은 이 도면입니다. 교각 일반도 한 장.<span class="beat"></span>
A1 한 장에 평면도, 정면도, 단면도, 기초 평면도, 그리고 표 세 개.
토목 하시는 분들껜 익숙한 화면이죠.<span class="beat"></span>
그런데 이 파일 하나에 <b>도면이 놓이는 자리가 열일곱 개</b> 있습니다.
옛 작업 흔적이 그대로 쌓여 있는 거죠.
<b>출력용 도곽이 씌워진 건 그중 하나뿐</b>입니다.<span class="beat"></span>
어느 게 진짜인지 고르는 것부터가 일입니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">0:38</span><span class="dur">11.1초</span>
<span class="clip">02.mp4</span></div>
<div>
<h3>뷰를 가른다</h3>
<pre><span class="c">1단계</span> node src/run.mjs pier-p9</pre>
<p class="say">첫 명령입니다. 도면을 읽고 뷰를 가릅니다.<span class="beat"></span>
평면도 <b>14,000 × 3,200</b>. 도면에 적힌 치수와 정확히 같습니다.
여기가 안 맞으면 뒤는 볼 것도 없습니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">0:50</span><span class="dur">12.9초</span>
<span class="clip">03.mp4</span></div>
<div>
<h3>끊김 진단</h3>
<pre><span class="c">2단계</span> node src/gaps.mjs pier-p9</pre>
<p class="say">다음은 끊김 진단입니다.<span class="beat"></span>
윤곽이 안 닫히는 이유가 <b>레이어를 잘못 골랐다</b>인지
<b>도면에 선이 없다</b>인지를 가릅니다.<span class="beat"></span>
앞은 설정 한 줄, 뒤는 도면 수정. 대응 비용이 백 배 차이 납니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">1:02</span><span class="dur">48.5초</span>
<span class="clip">04.mp4</span></div>
<div>
<h3>도면이 말하는 네 가지 방식</h3>
<pre><span class="c">3단계</span> node src/build.mjs pier-p9 --loops
node src/build.mjs pier-p9 --circles
node src/build.mjs pier-p9 --blocks
node src/table.mjs pier-p9 --title "교량받침 ELEVATION TABLE"</pre>
<p class="say">도면은 형상으로만 말하지 않습니다.<span class="beat"></span>
닫힌 윤곽, 원, 블록, 그리고 표.<span class="beat"></span>
기둥은 지름 <b>2,200 원</b>으로 들어 있고,
말뚝 <b>마흔네 본</b>은 폐곡선이 아니라 <b>블록</b>입니다.
블록 배율 <b>254</b>가 곧 반지름이고요. 도면 주기의 Φ508 과 맞습니다.<span class="beat"></span>
받침 여섯 기의 적층 높이와 절대표고는 도면 어디에도 안 그려져 있습니다.
<b>표에만</b> 있습니다. 그래서 표도 읽습니다 — 이름표 아래를 찾아서, 병합 셀까지.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">1:51</span><span class="dur">24.8초</span>
<span class="clip">05.mp4</span></div>
<div>
<h3>도면이 파라미터가 된다</h3>
<pre><span class="c">4단계</span> node src/fit.mjs pier-p9
<span class="c">5단계</span> node src/build.mjs pier-p9</pre>
<p class="say">여기서 도면이 <b>파라미터</b>가 됩니다.<span class="beat"></span>
서른 개 중 스물한 개는 도면에서 잰 값,
다섯 개는 도면이 안 주는 설계값,
네 개는 식으로 나오는 값입니다.<span class="beat"></span>
어느 게 어디서 왔는지 전부 기록됩니다.
<b>도면에서 읽은 척하지 않는 것</b> — 이게 핵심입니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">2:16</span><span class="dur">16.7초</span>
<span class="clip">06.mp4</span></div>
<div>
<h3>3D 툴 없이 부피부터</h3>
<pre><span class="c">6단계</span> node src/volume.mjs pier-p9</pre>
<p class="say">3D 툴을 켜기 전에 부피부터 냅니다.<span class="beat"></span>
<b>657.0569</b> 세제곱미터.<span class="beat"></span>
이게 <b>우리 의도</b>입니다. 이따 모델러가 만든 것과 대조할 기준이죠.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">2:32</span><span class="dur">82.0초</span>
<span class="clip">07.mp4</span></div>
<div>
<h3 class="hookmark">모델러에 교각이 선다</h3>
<pre><span class="c">7단계</span> node src/emit/egm.mjs out/pier-p9.ir.json
python src/run_egm.py out/pier-p9.egm.json --export=out/pier-p9.obj</pre>
<p class="say">이제 실행입니다.<span class="beat"></span>
78개 파트, <b>329단계</b> 명령이 모델러로 갑니다.<span class="beat"></span>
코핑, 원형 기둥 두 본, 확대기초 두 기, 버림,
강관말뚝 마흔네 본,
받침 여섯 기 — 받침콘크리트, 무수축 모르타르, 탄성받침, 솔플레이트까지.<span class="beat"></span>
사람 손은 안 들어갑니다.<span class="beat"></span>
<em>(말 없이 20초 — 세워지는 걸 보여준다)</em><span class="beat"></span>
중요한 건 속도가 아닙니다.<span class="beat"></span>
같은 명령을 다시 돌리면 <b>같은 모델</b>이 나온다는 것.
도면이 바뀌면 파라미터만 고쳐서 다시 세울 수 있다는 것입니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">3:54</span><span class="dur">25.3초</span>
<span class="clip">08.mp4</span></div>
<div>
<h3>의도 vs 결과 — 이 영상의 핵심</h3>
<pre><span class="c">8단계</span> egm status
node src/measure.mjs pier-p9 --ir</pre>
<p class="say">그리고 검증입니다.<span class="beat"></span>
<b>우리가 뜻한 부피</b>와 <b>모델러가 실제로 만든 부피</b>를 부재마다 대조합니다.<span class="beat"></span>
일흔다섯 개 전부 차이 <b>0.0000</b>. 열린 변 0.<span class="beat"></span>
부피가 맞으면 형상이 맞습니다. 눈으로 보고 「비슷하네」로 끝내지 않습니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">4:20</span><span class="dur">44.3초</span>
<span class="clip">09.mp4</span></div>
<div>
<h3>IFC 로 넘긴다</h3>
<pre><span class="c">9단계</span> node src/emit/ifc.mjs out/pier-p9.ir.json</pre>
<p class="say">마지막은 IFC 입니다.<span class="beat"></span>
IfcBeam, IfcColumn, IfcFooting, <b>IfcPile 마흔네 개</b>, IfcPlate, IfcDiscreteAccessory.<span class="beat"></span>
메시로 안 내보냈습니다. 원기둥은 <b>진짜 원</b>으로 나갑니다.
그래야 받는 쪽에서 「왜 지름이 508이 아니냐」를 다시 겪지 않습니다.<span class="beat"></span>
절대 위치는 <b>IfcMapConversion</b> 으로 넣었습니다.
측량좌표와 방위각은 받침배치도 표에서 가져왔고요.<span class="beat"></span>
뷰어에서 열면 이렇게 나옵니다.</p>
</div>
</div>
<div class="cut">
<div class="rail"><span class="tc">5:04</span><span class="dur">50.1초</span>
<span class="clip">10.mp4</span></div>
<div>
<h3>그림으로도 본다 · 마무리</h3>
<pre><span class="c">10단계</span> node src/render.mjs pier-p9 --png --width 900</pre>
<p class="say">부피가 맞아도 형상이 맞는 건 아닙니다. 그래서 그림으로도 봅니다.<span class="beat"></span>
정투영 세 방향. <b>검은 자리는 그 방향으로 재료가 없다</b>는 뜻입니다.
관통구나 빠진 부재가 바로 드러나죠.<span class="beat"></span>
정리하면 — 도면 한 장에서 부재 일흔다섯 개, 657 세제곱미터,
오차 0.0000, IFC 까지.<span class="beat"></span>
사람이 판단한 건 <b>「무엇을 어떻게 조립할까」 하나뿐</b>입니다.
나머지는 전부 도면이 말한 겁니다.<span class="beat"></span>
다음 편에서는 <b>꺾인 교각</b>을 해보겠습니다.</p>
</div>
</div>
</section>
<!-- ══════════ 2. 실행 명령 ══════════ -->
<section class="panel" id="p2" role="tabpanel">
<p class="lede">작업 디렉터리 <code>d:\MYCLAUDE_PROJECT\dwg2model</code> · PowerShell.
씬은 비워 뒀고 기준선은 문양 제외본으로 갱신돼 있다. 0번부터 순서대로.</p>
<h2>0 · 촬영 전 확인 <span class="chip c-warn">필수</span></h2>
<pre>egm guide | python -c "import sys,json;print('명령',len(json.loads(sys.stdin.buffer.read().decode('utf-8-sig'))))"</pre>
<p><b>208</b> 이어야 한다. <b>39</b> 면 뷰어 모드 — 모델링 명령이 등록조차 안 된다.
모델러 UI 에서 <code>Assistive Features → Working Mode Setting → Viewer &amp; Modeler Use</code>.</p>
<h2>1–10 · 본편</h2>
<pre><span class="c"># 1 도면 읽기 — 뷰 분리 · 표 색인 [02.mp4]</span>
node src/run.mjs pier-p9
<span class="c"># 2 끊김 진단 [03.mp4]</span>
node src/gaps.mjs pier-p9
<span class="c"># 3 도면이 말하는 네 방식 [04.mp4]</span>
node src/build.mjs pier-p9 --loops
node src/build.mjs pier-p9 --circles
node src/build.mjs pier-p9 --blocks
node src/table.mjs pier-p9 --title "교량받침 ELEVATION TABLE"
<span class="c"># 4+5 파라미터 → 조립 스펙 [05.mp4]</span>
node src/fit.mjs pier-p9
node src/build.mjs pier-p9
<span class="c"># 6 모델러 없이 부피 — 「의도」 [06.mp4]</span>
node src/volume.mjs pier-p9
<span class="c"># 7 번역 · 실행 — 교각이 선다 [07.mp4] ★</span>
node src/emit/egm.mjs out/pier-p9.ir.json
python src/run_egm.py out/pier-p9.egm.json --export=out/pier-p9.obj
<span class="c"># 8 의도 vs 결과 [08.mp4] ★</span>
egm status
node src/measure.mjs pier-p9 --ir
<span class="c"># 9 IFC [09.mp4]</span>
node src/emit/ifc.mjs out/pier-p9.ir.json
<span class="c"># 10 그림 [10.mp4]</span>
node src/render.mjs pier-p9 --png --width 900</pre>
<h2>덤 · 파라메트릭 (다음 편 예고용)</h2>
<pre>node src/ui.mjs pier-p9 --port 7333
<span class="c"># 브라우저 http://localhost:7333 → 값 수정 → 갱신 → 검증 사슬이 돈다</span></pre>
<div class="note">
<b>미관 문양은 뺐다</b>
단면(50 띠 + 하단 100 돌출)은 도면에서 나왔지만 정면도의 내부 능선을 아직 못 살렸다.
<code>params/pier-p9.json</code> 의 <code>미관문양_포함</code> 을 <code>1</code> 로 바꾸면 다시 선다.
지금 기준선은 <b>문양 제외 · 75파트 · 657.0569 m³</b> 기준이다.
</div>
</section>
<!-- ══════════ 3. 화면 체크 ══════════ -->
<section class="panel" id="p3" role="tabpanel">
<p class="lede">컷마다 <b>화면에 반드시 보여야 할 것</b>. 안 나오면 다시 찍는다.</p>
<div class="tw">
<table>
<tr><th>컷</th><th>화면에 나와야 하는 것</th><th class="num">길이</th></tr>
<tr><td><b>HOOK</b></td><td>모델러 뷰포트에 교각이 서는 순간. 색이 부재별로 갈려 있어야 한다 —
코핑 주황 · 기둥 파랑 · 기초 초록 · 말뚝 보라</td><td class="num">14.0</td></tr>
<tr><td><b>01</b></td><td>도곽 · 평면도 · 정면도 · 단면도 · 기초평면도 · 표. 한 화면에 다 보이는 장면 하나</td><td class="num">24.4</td></tr>
<tr><td><b>02</b></td><td><code>평면도 14000 3200 ✓</code> 와 <code>✓ 검증 통과</code>, 그리고 <code>표 3개</code></td><td class="num">11.1</td></tr>
<tr><td><b>03</b></td><td>「레이어 오분류 0 / 선 누락 n」 갈라지는 줄</td><td class="num">12.9</td></tr>
<tr><td><b>04</b></td><td><code>Ø2200</code> 원 2개 · <code>CSPILEH 배율 254</code> 44개 ·
표 6행 18열(NO./h1~h4/A/B/S1/S2)</td><td class="num">48.5</td></tr>
<tr><td><b>05</b></td><td><code>measured 21 · design 5 · derived 4</code> · <code>최종 산출 75</code></td><td class="num">24.8</td></tr>
<tr><td><b>06</b></td><td><code>합계 657.0569</code></td><td class="num">16.7</td></tr>
<tr><td><b>07</b></td><td><code>파트 78 → 단계 329</code> · 뷰포트에 부재가 쌓이는 과정 ·
끝에 <code>modelCount 75</code></td><td class="num">82.0</td></tr>
<tr><td><b>08</b></td><td><b>차이 0.0000 열이 쭉 이어지는 화면</b> · <code>열린변 0</code> · 재질별 물량</td><td class="num">25.3</td></tr>
<tr><td><b>09</b></td><td><code>IFCPILE 44</code> 등 클래스 목록 · IFC 뷰어에서 열린 모델</td><td class="num">44.3</td></tr>
<tr><td><b>10</b></td><td>정투영 X·Y·Z 세 장. 검은 배경과 부재 색이 대비되는 것</td><td class="num">50.1</td></tr>
</table>
</div>
<h2>영상에서 쓸 숫자</h2>
<div class="tw">
<table>
<tr><th>말할 것</th><th>값</th></tr>
<tr><td>도곽 한 장 안에</td><td>뷰 7 + 표 3.<br>
그런데 파일에는 도면 자리가 <b>17개</b> — 도곽이 씌워진 건 <b>1개</b>,
나머지는 구조선만 남은 옛 작업 흔적</td></tr>
<tr><td>단위 확정</td><td>독립 근거 4개로 <b>1단위 = 1 mm</b></td></tr>
<tr><td>파단선</td><td>그려진 기둥 6,100 ↔ 실제 <b>33,800</b>. 생략량 27,700 을 도면에서 되찾는다</td></tr>
<tr><td>말뚝</td><td>5×5=25 가 아니라 <b>22본</b> — 둘레 16 + 내부 3등분점 6</td></tr>
<tr><td>받침</td><td>형상 × 표 × 다른 도면 <b>세 겹 검산</b>, 6/6 일치</td></tr>
<tr><td>결과</td><td><b>75 파트 · 657.0569 m³ · 차이 0.0000 · 열린 변 0</b></td></tr>
</table>
</div>
</section>
<!-- ══════════ 4. 사고 대응 ══════════ -->
<section class="panel" id="p4" role="tabpanel">
<p class="lede">녹화 중 걸릴 만한 것만. 전부 실제로 겪었다.</p>
<div class="tw">
<table>
<tr><th>증상</th><th>원인</th><th>대응</th></tr>
<tr><td><code>run_egm</code> 이 「명령이 끝나지 않는다」</td>
<td>이전 명령이 물려 있다. <code>egm status</code> 의 <code>command</code> 가 남는다</td>
<td><code>egm "Esc"</code> — 접두 <code>~</code> <b>없이</b>. 그리고 재실행</td></tr>
<tr><td>씬에 이전 모델이 남음</td><td>—</td>
<td><code>egm "Esc"</code> → <code>"SelAll"</code> → <code>"Delete"</code> → <code>"Esc"</code></td></tr>
<tr><td><code>modelCount</code> 가 75 가 아님</td>
<td>boolean 이 인자를 흘렸다</td>
<td>씬 비우고 재실행. 반복되면 촬영 멈추고 확인</td></tr>
<tr><td>명령이 조용히 무시됨</td><td>뷰어 모드</td>
<td>0단계로 돌아간다. <b>연결 정상 ≠ 모델링 가능</b></td></tr>
<tr><td><code>Access to the path is denied</code></td>
<td>모델러가 다른 권한으로 떠 있어 파이프에 못 붙는다</td>
<td>모델러를 종료하고
<code>C:\Program Files\Baron\EG-BIM Modeler\EG-BIM_Modeler.exe</code> 로 다시 띄운다</td></tr>
<tr><td>파이프가 죽음 (창은 멀쩡)</td><td>씬 초기화를 여러 번 반복했다</td>
<td>재시작 외에 방법 없다. 초기화는 갱신당 1회</td></tr>
</table>
</div>
<div class="note">
<b><code>--reset</code> 은 붙이지 않는다</b>
지난번 그것 때문에 <code>Select</code> 가 물렸다. 씬은 촬영 전에 미리 비워 둔다.
</div>
</section>
<!-- ══════════ 5. 업로드 ══════════ -->
<section class="panel" id="p5" role="tabpanel">
<h2>제목 후보</h2>
<div class="tw">
<table>
<tr><th>안</th><th>제목</th></tr>
<tr><td>A</td><td>2D 도면 한 장으로 교각 3D 모델 자동 생성 — 부재 75개, 오차 0.0000</td></tr>
<tr><td>B</td><td>토목 도면을 BIM 으로 바꾸는 법 : 손으로 안 그리고 IFC 까지</td></tr>
<tr><td>C</td><td>도면이 말하는 네 가지 방식 — 윤곽 · 원 · 블록 · 표 | 2D→3D 전환설계</td></tr>
</table>
</div>
<h2>설명란</h2>
<pre>교각 일반도(DWG) 한 장을 읽어 3D 솔리드와 IFC 까지 만드는 과정입니다.
부재 75개 · 콘크리트 657.06 m³ · 모델러 실측 대비 오차 0.0000 · 열린 변 0
00:00 결과 먼저
00:14 도면 — 한 파일에 도형 17벌
00:38 뷰 가르기
00:50 끊김 진단 — 레이어 오분류 vs 선 누락
01:02 도면이 말하는 네 방식 : 윤곽 · 원 · 블록 · 표
01:51 도면이 파라미터가 된다
02:16 3D 툴 없이 부피부터
02:32 모델러에 교각이 선다
03:54 의도 vs 결과 — 부재마다 대조
04:20 IFC 로 넘긴다
05:04 그림으로도 본다 · 정리
다룬 것
· 도곽 블록으로 시트 경계를 계산한다 (한 파일에 여러 벌이 쌓여 있다)
· 파단선 — 그려진 길이가 실제가 아니다. 생략량을 도면에서 되찾는 법
· 말뚝은 폐곡선이 아니라 INSERT 블록. 배율이 곧 치수다
· 받침 적층·절대표고는 형상에 없고 표에만 있다
· IFC 는 메시가 아니라 해석 솔리드로. 원기둥은 진짜 원으로</pre>
<h2>태그</h2>
<pre>토목엔지니어, BIM, 3D전환설계, 토목BIM, IFC, 교량, 교각, 도면자동화,
DWG, 캐드, 파라메트릭모델링, 스마트건설, civil engineering, BIM automation</pre>
<h2>썸네일</h2>
<p>왼쪽 <b>흑백 2D 도면</b>(01.mp4 한 프레임), 오른쪽 <b>색 입은 3D 교각</b>(07.mp4 마지막 프레임).
가운데 화살표. 카피는 숫자 하나만 — <b>「오차 0.0000」</b> 또는 <b>「부재 75개, 자동」</b>.</p>
<div class="note">
<b>다음 편 훅</b>
마지막 컷에서 <b>꺾인 교각(P11)</b> 을 예고했다. 꺾임각 6.30° —
코핑 축선이 중간에 꺾여 P9 방식이 그대로는 안 통한다. 그게 다음 편 주제다.
</div>
</section>
</div>
<script>
const tabs = document.querySelectorAll('.tabs button');
tabs.forEach(b => b.addEventListener('click', () => {
tabs.forEach(x => x.setAttribute('aria-selected', String(x === b)));
document.querySelectorAll('.panel').forEach(p => p.classList.toggle('on', p.id === b.dataset.p));
window.scrollTo({ top: 0, behavior: 'instant' });
}));
</script>
</body>
</html>