- 교대 형상(src/core/abut, 3D 장면, 목록·카메라·맞춤)과 교대 입력 패널 추가 - 교각 받침 기준 카드 제거, 솔플레이트 규칙을 교각별 입력으로 변경 - 받침 ELEVATION·솔플레이트 TABLE을 모델값으로 연결 - 교대 입력값 카드: 형식 행에 시점·종점 표시, 제목을 "A1 입력값 [입력]"으로 변경 - 테스트 614건 통과, 타입 검사 통과 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
33 lines
1.8 KiB
TypeScript
33 lines
1.8 KiB
TypeScript
import * as XLSX from 'xlsx';
|
||
|
||
/**
|
||
* Blank input template with the three sheets (교각 · IP · 받침) and the headers the parser looks for.
|
||
* Value cells are left empty on purpose: pre-filled names would become rows with no 교각명 and raise E05.
|
||
* Row 1–2 are notes; the parser finds the headers anywhere on the sheet.
|
||
*/
|
||
export function buildTemplateWorkbook(): XLSX.WorkBook {
|
||
const wb = XLSX.utils.book_new();
|
||
const note = (text: string) => [text];
|
||
|
||
const pier = [
|
||
note('교각 정보 1행당 교각 1기. 교각명·교각형식(T형/2주형/3주형)·기초 형식(말뚝기초/직접기초/현장타설말뚝)을 적습니다.'),
|
||
note('방위각은 75°56\'55.9" 형식으로 적습니다. 머리글 행은 바꾸지 마세요.'),
|
||
['교각명', '교각형식', '두부보 EL_m', '기초 하단 EL_m', '지반고 EL_m', '기초 형식', '말뚝길이_mm', '두부보 폭_mm', '두부보 길이_mm', '기둥갯수'],
|
||
];
|
||
const ip = [
|
||
note('IP1–IP4의 좌표(국토좌표계, m)와 코핑 꺾임각(°)을 적습니다. 교각명은 교각 정보와 같아야 합니다.'),
|
||
note('IP2는 참고용입니다. 프로그램이 IP1–IP3의 1:9 내분점으로 다시 계산해 비교합니다.'),
|
||
['교각명', 'IP점', 'x_m', 'y_m', '코핑 꺾임각'],
|
||
];
|
||
const bearing = [
|
||
note('받침 1행당 받침 1개. 전열·후열 수는 같아야 합니다. 위치는 전열 또는 후열.'),
|
||
note('z_m은 받침 EL(m), 방위각은 거더 방향입니다.'),
|
||
['교각명', '받침번호', 'x_m', 'y_m', 'z_m', '방위각', '위치', '교좌면_EL'],
|
||
];
|
||
|
||
XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(pier), '교각');
|
||
XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(ip), 'IP');
|
||
XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(bearing), '받침');
|
||
return wb;
|
||
}
|