안녕하세요, 타케다 소라입니다. 평소에는 ArchyBase에서 생성형 AI와 공간 추론(spatial reasoning) 관련 파이프라인을 다루고 있습니다. 오늘은 팀에서 만들고 있는 또 다른 제품인 무료 평면도 메이커를 소재로, '깨끗한 평면도가 나왔다'고 생각한 후 DXF / SVG / PDF 등으로 내보내기 전에 무엇을 확인해야 하는지에 대해 글을 쓰겠습니다.
평면도의 외관은 맞아 보여도, 출력 파일은 별개의 문제입니다. 브라우저상의 픽셀과 CAD나 BIM으로 전달되는 선분 사이에는 실패하는 모습이 다르게 나타납니다. Qiita답게 구현 및 검증 체크리스트 형태로 정리했습니다.
무료 평면도 메이커 계열의 UI는 대략 다음 세 가지 계층을 가지고 있습니다.
- 편집용 내부 표현: 벽, 방, 개구부를 노드/에지/폴리곤으로 가짐 -
화면 표시: 선 굵기나 채색 등을 보기 좋게 만든 뷰포트 -
내보내기(Export): DXF / SVG / PDF 등 별도의 좌표계 및 단위계로의 변환
데모에서는 2번이 멋지게 보입니다. 하지만 현장이나 다음 공정으로 넘길 때는 3번이 중요합니다. 2번이 깨끗하더라도, 3번에서 단위가 어긋나거나 벽이 '심(centerline)' 기준으로 남아 있어 실제 여유 폭(clear width)이 맞지 않거나, 문이 폴리라인에서 떨어지는 등의 사고가 자주 발생합니다.
FloorAI의 평면도 메이커는 브라우저 상에서 평면도를 편집하고 내보낼 수 있는 계열의 기능입니다. 아래 내용은 특정 벤더의 내부 유출 정보가 아니라, 같은 계열의 툴을 검증한다면 내가 이렇게 볼 것이라는 정리입니다. 수치의 빠르기나 정확도 보장은 적지 않았습니다(적지 않은 것을 기사 측에서 만들지 않는다는 최소한의 기준만 제시합니다).
처음에 무너지는 것은 단위입니다.
| 레이어 | 흔히 사용되는 실체 | 함정 (落とし穴) |
|---|
| 화면 | CSS px / 캔버스 단위 | '보이는 길이'와 실제 치수가 일치하지 않음 |
| ... | | |
| 실무에서 할 확인은 간단합니다. | | |
- 알고 있는 치수를 하나만 넣어본다. 예를 들어 벽의 길이를 '3000'이라고 명시할 수 있다면, 내보낸 후에 그 부분의 길이가 어떻게 되었는지 측정해 본다. -
- 같은 도면을 DXF와 SVG 양쪽 모두로 출력한다. 상대 비율이 일치하더라도 절대값이 일치하지 않을 때가 있다. 비율만 보고 '괜찮다'고 판단해서는 안 된다. -
- 수신 측 앱의 단위 설정을 고정한다. DXF를 여는 쪽이 mm 전제인지 m 전제인지에 따라, 10배 또는 1000배 차이가 순식간에 발생할 수 있다.
'보기에 스케일감이 좋다'는 것이 단위가 정확하다는 충분조건은 아닙니다. 내보내기 전에 기준이 되는 한 변으로 절대값을 맞춰보는 습관만 들여도, 후속 공정의 재작업(手戻り)을 상당히 줄일 수 있습니다.
두 번째는 치수의 정의입니다. 건축/인테리어 대화에서는 같은 '이 방의 폭'이라도 지칭하는 선이 다릅니다.
- 벽심(centerline): 벽 두께의 중앙을 이은 치수. 플래닝이나 구조 검토에서 자주 사용 -
- 내법(clear / interior): 마감면에서 마감면까지의 유효 폭. 가구 배치나 법규 측면 확인에 중요
브라우저 평면도 메이커는 묘사를 간결하게 하기 위해 벽을 단선(심선)으로 가지는 경우가 많습니다. 이 단선을 그대로 DXF로 내보내면, 수신 측은 '이것이 벽의 어느 쪽인가'를 알지 못합니다. 나중에 벽 두께를 추가하면, 가구가 들어갈 것이라 생각했던 유효 폭이 부족하다는 사고가 발생합니다.
체크 방법:
- 내보내기 사양(또는 실제 선)이 심선인지 면인지를 한 문장으로 말할 수 있는가. 말할 수 없다면, 다음 공정으로 넘기기 전에 주석을 추가해야 합니다. -
- 문 앞의 유효 폭 등, '유효함'이 중요한 치수를 하나 골라 검산한다. 심선 그대로 가구를 놓으면, 두께의 절반 × 2만큼 반드시 부족해집니다. -
- 벽 두께를 후속 공정에서 추가할 것이라면, 그 전제를 파일명이나 레이어 이름에 남긴다. 'plan_centerline_no_thickness' 같은 투박한 이름이 조용한 오해보다는 낫습니다.
트레이드오프도 있습니다. 심선만으로는 편집은 가볍고, 벽 두께 표현의 흔들림(마감 두께/하부 구조)에 휘둘리기 어렵습니다. 반면, 인테리어에서 '여기에 소파가 놓일 수 있는가'는 유효 폭의 세계입니다. 어느 것이 옳고 그르냐가 아니라, 어떤 기준으로 내보냈는지 침묵하지 않는 것이 핵심입니다.
세 번째는 개구부(開口)입니다. 화면상에서는 문 기호나 창문의 점선이 보여도, 내보내기 경로에서는 다음과 같은 누락이 발생합니다.
- 개구부가 '벽 폴리곤의 구멍'이 아니라,
오버레이 아이콘에 불과했던 경우 -
SVG에서는 <g> 레이어에 올라가 있지만, DXF 엔티티로 변환되지 않은 경우 -
PDF는 라스터화되어 기호는 남아있지만, CAD에서 편집 가능한 선으로는 남지 않는 경우
- 문의 열림 방향이나 문틀(jamb)의 위치가, 보이는 경로 그대로만 남아 치수선에 연결되지 않은 경우
개구부가 떨어지면, 다음 공정에서는 '그냥 닫힌 벽'이 됩니다. 동선도 가구도 거기서 전부 어긋납니다.
검증 절차 예시:
checklist export_openings:
for each door/window visible in UI:
assert present_in DXF entities OR documented as non-exported overlay
...
'기호가 보이는 것'과 '벽이 열려 있는 것'은 다릅니다. DXF를 텍스트나 간편 뷰어로 열어, 벽선이 개구부 위치에서 잘려 있는지 보는 것이 빠릅니다. 잘려 있지 않다면, 그것은 도면이라기보다는 일러스트에 가까운 출력입니다.
제가 한다면, 무료 평면도 메이커로부터 파일을 받기 전에 다음 3가지만 합니다.
- 기준 변 1개로 단위를 맞추기 (절대값)
- 중심선인지 내부 치수인지 한 문장으로 메모하기 (정의)
- 개구부가 엔티티(entity)로 남아 있는지 확인하기 (누락)
이 외의 것들—선종, 레이어 분할(layering), 블록화—은 수신 측의 관행에 맞추면 되는 경우가 많습니다. 먼저 망가지는 것은 대개 단위, 정의, 개구부 세 가지입니다.
평면도 메이커의 가치는 브라우저 상에서 평면 배치에 대한 대화를 시작할 수 있다는 점에 있습니다. 그 가치를 다음 공정으로 옮기는 것이 출력(export)입니다. 모양새가 정돈되어 있어도,
- 단위의 절대값이 맞지 않음
- 벽 중심선 그대로 클리어 폭으로 사용됨
- 개구부가 기호로만 있고 벽이 연속된 채임
이 중 하나라도 있으면, DXF / SVG / PDF는 '그럴싸한 선의 묶음'이 됩니다. 다음 출력 버튼을 누르기 전에, 저는 먼저 "이 부분은 몇 mm인가", "이 치수는 중심선인가 내부 치수인가", "이 문은 선으로 열려 있는가"라는 세 가지를 스스로에게 질문합니다. 답할 수 없는 출력이 클수록 나중에 비용이 커집니다.