diff --git a/docs/BLOCK8_3D모델_미리보기.svg b/docs/BLOCK8_3D모델_미리보기.svg new file mode 100644 index 0000000..344e478 --- /dev/null +++ b/docs/BLOCK8_3D모델_미리보기.svg @@ -0,0 +1,3465 @@ + +광터지하차도 BLOCK8 도면 기반 3D 구조 모델 +두 평면 중심선을 따라 시점과 종점 단면 구조선을 연결한 열린 표면 검토 모델. 일부 배치 대응은 확인 필요. + + +광터지하차도 · 도면 기반 검토 모델 +BLOCK8 · 구조선 연결 표면 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +중심선 1 · STA 319.010STA 338.990 +중심선 2 · STA 319.010STA 338.990 + +길이 19.980m · 평면 중심선 교점으로 계산 · 시점/종점 단면 구조선 114개씩 + 블록 내부 윤곽 +열린 표면 모델이며 닫힌 체적은 아닙니다. 두 중심선에 같은 단면을 적용한 대응은 검토가 필요합니다. + diff --git a/docs/BLOCK8_기준모델.svg b/docs/BLOCK8_기준모델.svg deleted file mode 100644 index 3696547..0000000 --- a/docs/BLOCK8_기준모델.svg +++ /dev/null @@ -1,41 +0,0 @@ - - 광터지하차도 BLOCK8 기준 모델 도식 - STA. 0K+319.010부터 STA. 0K+338.990까지 19.980미터 기준 구간을 입체 기준선으로 표시. 구조물 단면 형상은 확인되지 않았음. - - - - - - - 광터지하차도 · BLOCK8 - 확인된 종단 기준 구간 - - - 단면 형상 확인 필요 - - - - - - - - - - - - - - - - - 19.980 m - STA. 0K+319.010 - STA. 0K+338.990 - - - - 종단 구간EL 미연결평면 배치 미확정 - - - 이 도식은 측점 범위만 나타냅니다. 구조물 폭·높이·단면 윤곽은 근거 확인 전이라 모델에 포함하지 않았습니다. - diff --git a/docs/도면분석.md b/docs/도면분석.md index 6a898a8..ee18799 100644 --- a/docs/도면분석.md +++ b/docs/도면분석.md @@ -1,48 +1,77 @@ -# BLOCK8 도면 분석 기록 +# 광터지하차도 BLOCK8 도면 분석 및 모델링 기록 -## 사용 자료 +## 사용 도면과 연결 근거 -| 자료 | 파일 | 확인 범위 | -|---|---|---| -| 전체 일반도 DXF | `public/drawings/광터지하차도_BLOCK8.dxf` | 평면·상부평면·종단·단면과 치수/구조물 레이어 | -| 설계도 원본 DWG 묶음 | `C0050201~C0059901` | 사용자 제공 폴더에 존재 확인. 이 환경에서 직접 열람/대조는 미완료 | +| 도면 | 자료 위치 | 읽은 내용 | 상태 | +|---|---|---|---| +| 평면도 | `public/drawings/광터지하차도_BLOCK8.dxf`, `CS-CNTL` 원호와 `CS-CONC-MAJR` 끝 구조선 | BLOCK8 표기 평면 중심선 2개, 반경 1,700m 원호, 원호와 끝 구조선의 교점 | 직접 좌표·레이어 대조 | +| 상부 평면 및 종단 검토 영역 | 같은 DXF, BLOCK8 주변 측점·EL 주석 | 모델 시종점 측점 319.010/338.990, 길이 19.980m | 측점은 도면값, 길이는 교점 간 계산값 | +| 단면 A-A | 같은 DXF, `STA. 0K+319.000` 주석이 있는 단면 영역 | 단면 구조선 114개, EL 표기와 폭 분할 | 직접 추출 및 대조 | +| 단면 B-B | 같은 DXF, `STA. 0K+339.000` 주석이 있는 단면 영역 | 단면 구조선 114개, 종점 EL·폭 분할 | 직접 추출 및 대조 | +| 블록 내부 콘크리트 윤곽 | `A$C2017021411375356` 블록, 단면별 INSERT 4곳 | 내부 `CS-CONC-MAJR` 18선과 원호 2개를 확인해 좌우 삽입 형상으로 처리 | 블록 기준점·삽입 위치·좌우 반전 반영 | +| 측구 상세 | 전체 일반도 DXF의 별도 상세 영역 | BLOCK8 본체 단면과 측구 세부의 연결 표기를 확인하지 못함 | 별도 모델 반영 보류 | +| 제원·특기사항 및 구조도 | 사용자 제공 폴더의 DWG | 파일 존재 확인. DWG 직접 렌더링/교차검토는 이 실행 환경에서 수행하지 못함 | 후속 검증 필요 | -DXF 내부 표제 및 주석에서 `평면도`, `상부평면도`, `종단면도`, `(BLOCK8)`, `U-Type 구간`을 확인했다. 입력 도면은 여러 구간/도면을 포함하므로 BLOCK8 경계 표기로 자료를 선별했다. +두 단면은 DXF의 동일 구조 윤곽 영역을 측점 주석(`319.000`, `339.000`)과 연결했다. 각 단면의 `CS-CNTL` 중심 표시 교차점 EL은 각각 102.094m와 101.517m이며, 같은 단면 영역의 EL 주석과 일치한다. 벽체 상단 EL 107.215m/107.857m도 종단 검토 영역에 반복 표기되어 각 단면과 맞는다. 각 측점 단면의 폭 분할은 양쪽 단부벽·중앙벽·두 통로 폭으로 이어지며, 평면의 두 `BLOCK8` 중심선과 함께 모델의 두 배치 객체로 구성했다. 두 평면 배치에 대표 단면을 공통 적용한 관계는 구조도 대조가 끝나지 않아 `확인 필요`로 표시한다. -## 도면 연결 및 기준값 +## 축척 및 좌표 단위 확인 -| 항목 | 읽은 값 | 근거/위치 | 상태 | +- 평면도 영역의 축척 표기: `S=1:100`. +- 단면 영역의 축척 표기: `S=1:100`. +- 종단 검토 영역의 축척 표기: `S=1:100`. +- 상세 영역에는 `S=1:30`, `S=1:20`, `S=1:3500` 등 다른 표기도 있으므로 각 상세별 표기를 따로 적용해야 한다. +- DXF HEADER는 `$INSUNITS=0`으로 단위를 지정하지 않았다. 다만 단면 구조선의 좌표 차 20,300이 표기 치수 20.300m와 맞고, 중심선 원호를 구조물 끝선에 교차시켜 계산한 길이가 19.980m로 측점 차와 일치한다. 이 교차 검산에 따라 모델 생성에 한해 좌표를 mm로 보고 m로 환산했다. 단위 판정은 계산 근거이며 HEADER 명시값은 아니다. + +## 모델링 값과 근거 + +| 대상/값 | 모델 값 | 근거 위치 | 상태 | |---|---:|---|---| -| BLOCK8 시점 측점 | STA. 0K+319.010 | 일반도 DXF, BLOCK8 경계 주석 | 도면 명시값 | -| BLOCK8 종점 측점 | STA. 0K+338.990 | 일반도 DXF, BLOCK8 경계 주석 | 도면 명시값 | -| 측점 차이 | 19.980 m | 위 두 측점 차 계산 | 계산으로 도출한 값 | -| 인접 표기 측점 | STA. 0K+319.000, 0K+339.000 | 평면/구조 배치 주변 주석 | 도면 명시값; 경계 측점과 각각 0.010m 차이 | -| 단면 기준 EL 후보(시점) | 101.777~107.215 | BLOCK8 시점 쪽 단면 주변 EL 주석 | 확인 필요: 각 표고가 바닥/벽체 상단인지 구조물선과 대조 필요 | -| 단면 기준 EL 후보(종점) | 101.292~107.857 | BLOCK8 종점 쪽 단면 주변 EL 주석 | 확인 필요: 각 표고가 바닥/벽체 상단인지 구조물선과 대조 필요 | -| 상부/평면 치수 후보 | 19.5, 20.099, 20.3, 8.75, 1.0 등 | BLOCK8 표기 주변의 치수 문자열 | 확인 필요: 중복 뷰/치수선과 구조물 외곽 연결 전 모델값으로 확정하지 않음 | -| 도면 단위 설정 | `$INSUNITS=0` | DXF HEADER | 확인 필요: 미지정. 치수 표기와 좌표 변환으로 단위 검증 필요 | +| 모델 시점 | STA. 0K+319.010 | 평면도 BLOCK8 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | +| 모델 종점 | STA. 0K+338.990 | 반대쪽 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | +| 중심선 반경 | 1,700m | 평면도 `CS-CNTL` ARC 반경 1,700,000 CAD 단위 | 좌표 단위 검산 후 환산값 | +| 평면 중심선 길이 | 19.980m, 각 배치 | ARC와 `CS-CONC-MAJR` 양 끝선 교점 사이 원호 길이. 교점 각도 약 269.663303°~270.336697° | 계산으로 도출한 값; 측점 차와 일치 | +| 두 평면 중심선 간 CAD 배치 차이 | 35.000m | 두 원호 중심 X 좌표 차 35,000 CAD 단위 | 계산으로 도출; 실제 독립 구조물 관계는 확인 필요 | +| 단면 A-A 측점 | STA. 0K+319.000 | 단면 A 표기 | 도면 명시값 | +| 단면 A-A 벽체 상단 EL | 107.215 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | +| 단면 A-A 기초 하단 EL | 100.877 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | +| 단면 A-A 기초 상단 EL | 101.777 | EL100.877 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | +| 단면 A-A 중심 기준 EL | 102.094 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | +| 단면 B-B 측점 | STA. 0K+339.000 | 단면 B 표기 | 도면 명시값 | +| 단면 B-B 벽체 상단 EL | 107.857 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | +| 단면 B-B 기초 하단 EL | 100.392 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | +| 단면 B-B 기초 상단 EL | 101.292 | EL100.392 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | +| 단면 B-B 중심 기준 EL | 101.517 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | +| 단면 주 통로 폭 분할 | 0.900 + 8.750 + 1.000 + 8.750 + 0.900 = 20.300m | 단면 치수 표기와 `CS-CONC-MAJR/MINR` 좌표 간격 | 도면 명시값 및 좌표 대조 | +| 구조선 최대 외곽 폭 | 20.500m | 단면 구조선 X 좌표 최댓값-최솟값 | 축척·좌표 측정값; 표기 폭과 별도 관리 | +| 구조선 기초 두께 | 0.900m | 단면 상·하부 구조선 좌표 차 | 계산으로 도출한 값 | +| 원시 구조선 수/단면 | MAJR 108 + MINR 6 = 114 | 각 단면의 두 구조 레이어 | 추출 개수 | +| 블록 내부 구조선 | MAJR 18선 + 원호 2개; 단면당 좌우 INSERT 2개 | `A$C2017021411375356` 블록과 삽입 참조 | 내부 레이어·반전 변환 적용 | +| 블록 연결 길이 | 19.980m | 단면 A/B 내부 블록 대응을 따라 선형 보간 | 계산으로 도출 | -## 레이어 및 형상 해석 +모델은 두 단면의 구조선을 대응시켜 각 구조선을 길이 방향 표면으로 연결했다. 평면 원호는 양 끝 구조선과의 교점에 맞춰 길이 19.980m로 잘랐다. 단면 도면은 STA 319.000/339.000에 있고 모델 경계는 각각 0.010m 안쪽의 STA 319.010/338.990이므로, 두 끝에서 0.010m씩 단면 형상을 선형 보간해 경계에 맞췄다. -- DXF 모델 공간에는 `CS-CONC-MAJR` 510개, `CS-CONC-MINR` 57개 엔티티가 있다. `CS-DIMT`/`CS-DIML`은 치수, `CS-TEXT`/`CS-NOTE`는 문자·주석으로 구분했다. -- 구조 윤곽 추출은 `CS-CONC-MAJR`, `CS-CONC-MINR`만 대상으로 해야 한다. 단순히 도면 전체 선을 모델링하면 치수선과 보조선이 섞인다. -- 주요 형상 중 일부가 INSERT 블록으로 저장되어 있어 블록 내부 변환(삽입점·축척·회전)을 풀어 원 좌표로 검증해야 한다. 현재 레이어별 원시 개수는 확인했으나, 모든 블록 내부 윤곽의 완전 추출은 아직 끝나지 않았다. -- BLOCK8 표기와 측점에 인접한 CAD 좌표 구역에서는 `CS-CONC-MAJR` 직선 6개를 확인했으며, 그중 2개는 EL 주석 부근의 수직선이다. 같은 2D 창에서 `CS-CONC-MINR` 구조선은 확인되지 않았다. 따라서 이 구역만으로 단면 윤곽 전체를 구성할 근거가 부족하다. -- 평면 중심선과 종단면, 시점·종점 단면, 측구 상세의 동일 부재 대응은 원본 DWG/블록 도형과의 위치 검토가 더 필요하다. +## 오류 및 확인 필요 사항 -## 축척 +1. 단면 외곽 구조선 폭은 20.500m인데 표기된 주 통로/본체 폭은 20.300m다. 좌우 0.100m씩 추가되는 외곽 선의 용도는 구조도 DWG와 확인해야 한다. 모델에는 두 값을 임의로 하나로 합치지 않고 원 구조선을 그대로 보존했다. +2. 구조선 최저 외곽점은 표기된 기초 하단 EL보다 약 0.100m 낮게 계산된다(A: 100.777m, B: 100.292m). 기초 상세 또는 버림층 여부가 확인될 때까지 외곽 구조선 그대로 표시하고 차이를 남긴다. +3. 평면도에서 동일 `(BLOCK8)` 표기가 있는 중심선 2개를 찾았고 중심 간 도면 좌표 차는 35.000m다. 두 중심선이 독립 구조물인지, 도면상 중복/배치 복제인지 구조도와 종평면도로 확인해야 한다. 웹 뷰어에서 서로 독립적으로 숨김 처리할 수 있게 했다. +4. 종단면의 상단 벽체 EL과 두 단면 상단 EL은 현재 일반도 DXF의 구조선/EL 위치로 읽었으나, 제원 DWG와 별도 구조도에서 재확인하지 못했다. +5. 측구 상세도 기호와 본체 구조선의 실제 접합 위치, 부재 두께/재료, 닫힌 체적 경계는 미검증이다. -DXF HEADER의 `$INSUNITS=0`으로 파일 단위는 지정되지 않았다. 도면 축척 문구를 모든 뷰에서 확인하고, 표기 치수(예: 19.980m)와 CAD 좌표 차이를 비교해 좌표 단위를 확정해야 한다. 이 확인 전에는 화면상 축척 측정값을 도면 명시 치수로 취급하지 않는다. +## 모델 구성과 화면 기능 -## 오류·누락·확인 항목 +- 생성 데이터: `src/model/block8.json`. 각 부재에 A/B 단면점, 원본 레이어와 HANDLE을 기록한다. +- 추출 스크립트: `scripts/extract_block8_model.py`. 표준 Python만으로 DXF 단면 선, 원호, INSERT 내부 레이어를 재추출한다. +- 화면: `src/ModelViewer.jsx`와 `src/App.jsx`. 끌어서 회전, 휠 확대/축소, Shift/오른쪽 끌기로 이동, 전체·평면·정면·측면·A-A·B-B 시점을 제공한다. +- 객체는 2개 평면 중심선에 각각 154개씩 구성했다(단면 구조선 114개와 삽입 블록 윤곽 40개). 원본선 단위 선택·숨김과 MAJR/MINR/블록 윤곽 그룹 숨김을 지원한다. +- 화면의 면은 검토용 열린 표면 모델이다. 구조선 사이를 연결했으며 모든 두께/접합을 확정한 닫힌 체적이나 실사 렌더링은 아니다. +- 실행: `npm run dev`. 분석 파일과 작업 로그는 화면 상단 링크에서 연다. -1. 319.000/339.000 표기와 BLOCK8 경계 319.010/338.990 사이에 각각 0.010m 차이가 있다. 어떤 경계를 모델 끝으로 쓸지 구조 이음/상세에서 확인한다. -2. 종단/단면 EL 후보를 벽체 상단 및 중심 기준 EL로 확정하려면 각 주석의 지시선과 CS-CONC 구조선을 연결해야 한다. -3. 단면 전체 윤곽, 두께, 측구/공동구 상세 치수 및 부재 개수는 INSERT 내부 요소까지 추출해 확인해야 한다. -4. 원본 DWG의 제원·특기사항 및 구조도와 교차 대조가 미완료다. +## 검증 결과 -따라서 현재 확정 가능한 모델 기준은 BLOCK8 경계 측점과 19.980m 길이뿐이다. 미확정 단면 윤곽과 높이는 임의로 만들어 넣지 않는다. - -## 모델 생성 진행 상태 - -현재는 도면 원본 보존과 1차 분석까지 완료했다. 실제 3D 형상 생성은 보류 상태다. 이유는 BLOCK8 단면의 구조물선 전체와 A-A/B-B 대응을 확인하지 못했고, DXF 단위도 미지정이기 때문이다. 해당 구간이 포함된 구조도/단면 원본을 CAD에서 BLOCK8만 분리해 DXF로 내보내거나, 읽을 수 있는 PDF로 제공하면 치수·레이어·EL 연결을 재확인한 뒤 모델링을 이어갈 수 있다. +- 추출 스크립트 실행 결과: 중심선 2개, 각 길이 19.980m, 단면 구조선 MAJR 108개와 MINR 6개, 내부 블록 객체를 양쪽 단면에서 대응했다. +- `npm run build`: 통과. +- `npm run lint`: 미사용 함수 경고를 제거한 뒤 최종 재실행 예정. +- `npm run lint`: 통과, 경고 없음. +- `git diff --check`: 통과. +- 미검증: 원본 DWG에서 제원·특기사항, 구조 상세, 2개 중심선의 공간상 관계 및 측구 접합부를 CAD/PDF로 교차 대조하지 못했다. diff --git a/index.html b/index.html index c221ddc..6337494 100644 --- a/index.html +++ b/index.html @@ -4,8 +4,8 @@ - - 새 3D 모델 프로젝트 + + 광터지하차도 BLOCK8 3D 모델
diff --git a/public/analysis/BLOCK8_3D모델_미리보기.svg b/public/analysis/BLOCK8_3D모델_미리보기.svg new file mode 100644 index 0000000..344e478 --- /dev/null +++ b/public/analysis/BLOCK8_3D모델_미리보기.svg @@ -0,0 +1,3465 @@ + +광터지하차도 BLOCK8 도면 기반 3D 구조 모델 +두 평면 중심선을 따라 시점과 종점 단면 구조선을 연결한 열린 표면 검토 모델. 일부 배치 대응은 확인 필요. + + +광터지하차도 · 도면 기반 검토 모델 +BLOCK8 · 구조선 연결 표면 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +중심선 1 · STA 319.010STA 338.990 +중심선 2 · STA 319.010STA 338.990 + +길이 19.980m · 평면 중심선 교점으로 계산 · 시점/종점 단면 구조선 114개씩 + 블록 내부 윤곽 +열린 표면 모델이며 닫힌 체적은 아닙니다. 두 중심선에 같은 단면을 적용한 대응은 검토가 필요합니다. + diff --git a/public/analysis/도면분석.md b/public/analysis/도면분석.md index 6a898a8..ee18799 100644 --- a/public/analysis/도면분석.md +++ b/public/analysis/도면분석.md @@ -1,48 +1,77 @@ -# BLOCK8 도면 분석 기록 +# 광터지하차도 BLOCK8 도면 분석 및 모델링 기록 -## 사용 자료 +## 사용 도면과 연결 근거 -| 자료 | 파일 | 확인 범위 | -|---|---|---| -| 전체 일반도 DXF | `public/drawings/광터지하차도_BLOCK8.dxf` | 평면·상부평면·종단·단면과 치수/구조물 레이어 | -| 설계도 원본 DWG 묶음 | `C0050201~C0059901` | 사용자 제공 폴더에 존재 확인. 이 환경에서 직접 열람/대조는 미완료 | +| 도면 | 자료 위치 | 읽은 내용 | 상태 | +|---|---|---|---| +| 평면도 | `public/drawings/광터지하차도_BLOCK8.dxf`, `CS-CNTL` 원호와 `CS-CONC-MAJR` 끝 구조선 | BLOCK8 표기 평면 중심선 2개, 반경 1,700m 원호, 원호와 끝 구조선의 교점 | 직접 좌표·레이어 대조 | +| 상부 평면 및 종단 검토 영역 | 같은 DXF, BLOCK8 주변 측점·EL 주석 | 모델 시종점 측점 319.010/338.990, 길이 19.980m | 측점은 도면값, 길이는 교점 간 계산값 | +| 단면 A-A | 같은 DXF, `STA. 0K+319.000` 주석이 있는 단면 영역 | 단면 구조선 114개, EL 표기와 폭 분할 | 직접 추출 및 대조 | +| 단면 B-B | 같은 DXF, `STA. 0K+339.000` 주석이 있는 단면 영역 | 단면 구조선 114개, 종점 EL·폭 분할 | 직접 추출 및 대조 | +| 블록 내부 콘크리트 윤곽 | `A$C2017021411375356` 블록, 단면별 INSERT 4곳 | 내부 `CS-CONC-MAJR` 18선과 원호 2개를 확인해 좌우 삽입 형상으로 처리 | 블록 기준점·삽입 위치·좌우 반전 반영 | +| 측구 상세 | 전체 일반도 DXF의 별도 상세 영역 | BLOCK8 본체 단면과 측구 세부의 연결 표기를 확인하지 못함 | 별도 모델 반영 보류 | +| 제원·특기사항 및 구조도 | 사용자 제공 폴더의 DWG | 파일 존재 확인. DWG 직접 렌더링/교차검토는 이 실행 환경에서 수행하지 못함 | 후속 검증 필요 | -DXF 내부 표제 및 주석에서 `평면도`, `상부평면도`, `종단면도`, `(BLOCK8)`, `U-Type 구간`을 확인했다. 입력 도면은 여러 구간/도면을 포함하므로 BLOCK8 경계 표기로 자료를 선별했다. +두 단면은 DXF의 동일 구조 윤곽 영역을 측점 주석(`319.000`, `339.000`)과 연결했다. 각 단면의 `CS-CNTL` 중심 표시 교차점 EL은 각각 102.094m와 101.517m이며, 같은 단면 영역의 EL 주석과 일치한다. 벽체 상단 EL 107.215m/107.857m도 종단 검토 영역에 반복 표기되어 각 단면과 맞는다. 각 측점 단면의 폭 분할은 양쪽 단부벽·중앙벽·두 통로 폭으로 이어지며, 평면의 두 `BLOCK8` 중심선과 함께 모델의 두 배치 객체로 구성했다. 두 평면 배치에 대표 단면을 공통 적용한 관계는 구조도 대조가 끝나지 않아 `확인 필요`로 표시한다. -## 도면 연결 및 기준값 +## 축척 및 좌표 단위 확인 -| 항목 | 읽은 값 | 근거/위치 | 상태 | +- 평면도 영역의 축척 표기: `S=1:100`. +- 단면 영역의 축척 표기: `S=1:100`. +- 종단 검토 영역의 축척 표기: `S=1:100`. +- 상세 영역에는 `S=1:30`, `S=1:20`, `S=1:3500` 등 다른 표기도 있으므로 각 상세별 표기를 따로 적용해야 한다. +- DXF HEADER는 `$INSUNITS=0`으로 단위를 지정하지 않았다. 다만 단면 구조선의 좌표 차 20,300이 표기 치수 20.300m와 맞고, 중심선 원호를 구조물 끝선에 교차시켜 계산한 길이가 19.980m로 측점 차와 일치한다. 이 교차 검산에 따라 모델 생성에 한해 좌표를 mm로 보고 m로 환산했다. 단위 판정은 계산 근거이며 HEADER 명시값은 아니다. + +## 모델링 값과 근거 + +| 대상/값 | 모델 값 | 근거 위치 | 상태 | |---|---:|---|---| -| BLOCK8 시점 측점 | STA. 0K+319.010 | 일반도 DXF, BLOCK8 경계 주석 | 도면 명시값 | -| BLOCK8 종점 측점 | STA. 0K+338.990 | 일반도 DXF, BLOCK8 경계 주석 | 도면 명시값 | -| 측점 차이 | 19.980 m | 위 두 측점 차 계산 | 계산으로 도출한 값 | -| 인접 표기 측점 | STA. 0K+319.000, 0K+339.000 | 평면/구조 배치 주변 주석 | 도면 명시값; 경계 측점과 각각 0.010m 차이 | -| 단면 기준 EL 후보(시점) | 101.777~107.215 | BLOCK8 시점 쪽 단면 주변 EL 주석 | 확인 필요: 각 표고가 바닥/벽체 상단인지 구조물선과 대조 필요 | -| 단면 기준 EL 후보(종점) | 101.292~107.857 | BLOCK8 종점 쪽 단면 주변 EL 주석 | 확인 필요: 각 표고가 바닥/벽체 상단인지 구조물선과 대조 필요 | -| 상부/평면 치수 후보 | 19.5, 20.099, 20.3, 8.75, 1.0 등 | BLOCK8 표기 주변의 치수 문자열 | 확인 필요: 중복 뷰/치수선과 구조물 외곽 연결 전 모델값으로 확정하지 않음 | -| 도면 단위 설정 | `$INSUNITS=0` | DXF HEADER | 확인 필요: 미지정. 치수 표기와 좌표 변환으로 단위 검증 필요 | +| 모델 시점 | STA. 0K+319.010 | 평면도 BLOCK8 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | +| 모델 종점 | STA. 0K+338.990 | 반대쪽 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | +| 중심선 반경 | 1,700m | 평면도 `CS-CNTL` ARC 반경 1,700,000 CAD 단위 | 좌표 단위 검산 후 환산값 | +| 평면 중심선 길이 | 19.980m, 각 배치 | ARC와 `CS-CONC-MAJR` 양 끝선 교점 사이 원호 길이. 교점 각도 약 269.663303°~270.336697° | 계산으로 도출한 값; 측점 차와 일치 | +| 두 평면 중심선 간 CAD 배치 차이 | 35.000m | 두 원호 중심 X 좌표 차 35,000 CAD 단위 | 계산으로 도출; 실제 독립 구조물 관계는 확인 필요 | +| 단면 A-A 측점 | STA. 0K+319.000 | 단면 A 표기 | 도면 명시값 | +| 단면 A-A 벽체 상단 EL | 107.215 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | +| 단면 A-A 기초 하단 EL | 100.877 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | +| 단면 A-A 기초 상단 EL | 101.777 | EL100.877 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | +| 단면 A-A 중심 기준 EL | 102.094 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | +| 단면 B-B 측점 | STA. 0K+339.000 | 단면 B 표기 | 도면 명시값 | +| 단면 B-B 벽체 상단 EL | 107.857 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | +| 단면 B-B 기초 하단 EL | 100.392 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | +| 단면 B-B 기초 상단 EL | 101.292 | EL100.392 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | +| 단면 B-B 중심 기준 EL | 101.517 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | +| 단면 주 통로 폭 분할 | 0.900 + 8.750 + 1.000 + 8.750 + 0.900 = 20.300m | 단면 치수 표기와 `CS-CONC-MAJR/MINR` 좌표 간격 | 도면 명시값 및 좌표 대조 | +| 구조선 최대 외곽 폭 | 20.500m | 단면 구조선 X 좌표 최댓값-최솟값 | 축척·좌표 측정값; 표기 폭과 별도 관리 | +| 구조선 기초 두께 | 0.900m | 단면 상·하부 구조선 좌표 차 | 계산으로 도출한 값 | +| 원시 구조선 수/단면 | MAJR 108 + MINR 6 = 114 | 각 단면의 두 구조 레이어 | 추출 개수 | +| 블록 내부 구조선 | MAJR 18선 + 원호 2개; 단면당 좌우 INSERT 2개 | `A$C2017021411375356` 블록과 삽입 참조 | 내부 레이어·반전 변환 적용 | +| 블록 연결 길이 | 19.980m | 단면 A/B 내부 블록 대응을 따라 선형 보간 | 계산으로 도출 | -## 레이어 및 형상 해석 +모델은 두 단면의 구조선을 대응시켜 각 구조선을 길이 방향 표면으로 연결했다. 평면 원호는 양 끝 구조선과의 교점에 맞춰 길이 19.980m로 잘랐다. 단면 도면은 STA 319.000/339.000에 있고 모델 경계는 각각 0.010m 안쪽의 STA 319.010/338.990이므로, 두 끝에서 0.010m씩 단면 형상을 선형 보간해 경계에 맞췄다. -- DXF 모델 공간에는 `CS-CONC-MAJR` 510개, `CS-CONC-MINR` 57개 엔티티가 있다. `CS-DIMT`/`CS-DIML`은 치수, `CS-TEXT`/`CS-NOTE`는 문자·주석으로 구분했다. -- 구조 윤곽 추출은 `CS-CONC-MAJR`, `CS-CONC-MINR`만 대상으로 해야 한다. 단순히 도면 전체 선을 모델링하면 치수선과 보조선이 섞인다. -- 주요 형상 중 일부가 INSERT 블록으로 저장되어 있어 블록 내부 변환(삽입점·축척·회전)을 풀어 원 좌표로 검증해야 한다. 현재 레이어별 원시 개수는 확인했으나, 모든 블록 내부 윤곽의 완전 추출은 아직 끝나지 않았다. -- BLOCK8 표기와 측점에 인접한 CAD 좌표 구역에서는 `CS-CONC-MAJR` 직선 6개를 확인했으며, 그중 2개는 EL 주석 부근의 수직선이다. 같은 2D 창에서 `CS-CONC-MINR` 구조선은 확인되지 않았다. 따라서 이 구역만으로 단면 윤곽 전체를 구성할 근거가 부족하다. -- 평면 중심선과 종단면, 시점·종점 단면, 측구 상세의 동일 부재 대응은 원본 DWG/블록 도형과의 위치 검토가 더 필요하다. +## 오류 및 확인 필요 사항 -## 축척 +1. 단면 외곽 구조선 폭은 20.500m인데 표기된 주 통로/본체 폭은 20.300m다. 좌우 0.100m씩 추가되는 외곽 선의 용도는 구조도 DWG와 확인해야 한다. 모델에는 두 값을 임의로 하나로 합치지 않고 원 구조선을 그대로 보존했다. +2. 구조선 최저 외곽점은 표기된 기초 하단 EL보다 약 0.100m 낮게 계산된다(A: 100.777m, B: 100.292m). 기초 상세 또는 버림층 여부가 확인될 때까지 외곽 구조선 그대로 표시하고 차이를 남긴다. +3. 평면도에서 동일 `(BLOCK8)` 표기가 있는 중심선 2개를 찾았고 중심 간 도면 좌표 차는 35.000m다. 두 중심선이 독립 구조물인지, 도면상 중복/배치 복제인지 구조도와 종평면도로 확인해야 한다. 웹 뷰어에서 서로 독립적으로 숨김 처리할 수 있게 했다. +4. 종단면의 상단 벽체 EL과 두 단면 상단 EL은 현재 일반도 DXF의 구조선/EL 위치로 읽었으나, 제원 DWG와 별도 구조도에서 재확인하지 못했다. +5. 측구 상세도 기호와 본체 구조선의 실제 접합 위치, 부재 두께/재료, 닫힌 체적 경계는 미검증이다. -DXF HEADER의 `$INSUNITS=0`으로 파일 단위는 지정되지 않았다. 도면 축척 문구를 모든 뷰에서 확인하고, 표기 치수(예: 19.980m)와 CAD 좌표 차이를 비교해 좌표 단위를 확정해야 한다. 이 확인 전에는 화면상 축척 측정값을 도면 명시 치수로 취급하지 않는다. +## 모델 구성과 화면 기능 -## 오류·누락·확인 항목 +- 생성 데이터: `src/model/block8.json`. 각 부재에 A/B 단면점, 원본 레이어와 HANDLE을 기록한다. +- 추출 스크립트: `scripts/extract_block8_model.py`. 표준 Python만으로 DXF 단면 선, 원호, INSERT 내부 레이어를 재추출한다. +- 화면: `src/ModelViewer.jsx`와 `src/App.jsx`. 끌어서 회전, 휠 확대/축소, Shift/오른쪽 끌기로 이동, 전체·평면·정면·측면·A-A·B-B 시점을 제공한다. +- 객체는 2개 평면 중심선에 각각 154개씩 구성했다(단면 구조선 114개와 삽입 블록 윤곽 40개). 원본선 단위 선택·숨김과 MAJR/MINR/블록 윤곽 그룹 숨김을 지원한다. +- 화면의 면은 검토용 열린 표면 모델이다. 구조선 사이를 연결했으며 모든 두께/접합을 확정한 닫힌 체적이나 실사 렌더링은 아니다. +- 실행: `npm run dev`. 분석 파일과 작업 로그는 화면 상단 링크에서 연다. -1. 319.000/339.000 표기와 BLOCK8 경계 319.010/338.990 사이에 각각 0.010m 차이가 있다. 어떤 경계를 모델 끝으로 쓸지 구조 이음/상세에서 확인한다. -2. 종단/단면 EL 후보를 벽체 상단 및 중심 기준 EL로 확정하려면 각 주석의 지시선과 CS-CONC 구조선을 연결해야 한다. -3. 단면 전체 윤곽, 두께, 측구/공동구 상세 치수 및 부재 개수는 INSERT 내부 요소까지 추출해 확인해야 한다. -4. 원본 DWG의 제원·특기사항 및 구조도와 교차 대조가 미완료다. +## 검증 결과 -따라서 현재 확정 가능한 모델 기준은 BLOCK8 경계 측점과 19.980m 길이뿐이다. 미확정 단면 윤곽과 높이는 임의로 만들어 넣지 않는다. - -## 모델 생성 진행 상태 - -현재는 도면 원본 보존과 1차 분석까지 완료했다. 실제 3D 형상 생성은 보류 상태다. 이유는 BLOCK8 단면의 구조물선 전체와 A-A/B-B 대응을 확인하지 못했고, DXF 단위도 미지정이기 때문이다. 해당 구간이 포함된 구조도/단면 원본을 CAD에서 BLOCK8만 분리해 DXF로 내보내거나, 읽을 수 있는 PDF로 제공하면 치수·레이어·EL 연결을 재확인한 뒤 모델링을 이어갈 수 있다. +- 추출 스크립트 실행 결과: 중심선 2개, 각 길이 19.980m, 단면 구조선 MAJR 108개와 MINR 6개, 내부 블록 객체를 양쪽 단면에서 대응했다. +- `npm run build`: 통과. +- `npm run lint`: 미사용 함수 경고를 제거한 뒤 최종 재실행 예정. +- `npm run lint`: 통과, 경고 없음. +- `git diff --check`: 통과. +- 미검증: 원본 DWG에서 제원·특기사항, 구조 상세, 2개 중심선의 공간상 관계 및 측구 접합부를 CAD/PDF로 교차 대조하지 못했다. diff --git a/public/작업기록.txt b/public/작업기록.txt index a537b74..fb9ae15 100644 --- a/public/작업기록.txt +++ b/public/작업기록.txt @@ -22,3 +22,12 @@ - 단면 형상이 미확정임을 웹 화면에 표시 - 분석 파일과 작업 로그를 웹 화면에서 열 수 있도록 연결 - 초기화 이후 커밋 이력만 이 파일에 정리 + +5. 작성지침 반영 재분석 및 3D 모델링 + - CS-CNTL 원호와 CS-CONC-MAJR 끝 구조선의 교점으로 중심선 길이 19.980m를 재계산 + - 단면 A/B 구조선 114개씩( MAJR 108, MINR 6 ) 추출 + - A$C2017021411375356 블록 내부 콘크리트 레이어 18선과 원호 2개를 좌우 단면에 반영 + - 중심 기준 EL 102.094 → 101.517, 벽체 상단 EL 107.215 → 107.857, 폭 분할 20.300m 대조 + - 두 평면 중심선에 각각 3D 연결 표면 모델 생성, 부재 선택/숨김 및 보기 방향 제공 + - 구조도와 대조가 필요한 배치 관계·외곽 폭 차이·기초 최저선 차이는 검토 항목으로 유지 + - 모델 미리보기 SVG와 갱신된 분석 문서 추가 diff --git a/scripts/extract_block8_model.py b/scripts/extract_block8_model.py new file mode 100644 index 0000000..672cf21 --- /dev/null +++ b/scripts/extract_block8_model.py @@ -0,0 +1,333 @@ +#!/usr/bin/env python3 +"""BLOCK8 단면 구조선과 블록 내부 콘크리트선을 모델 데이터로 변환한다.""" + +import json +import math +from collections import defaultdict +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +SOURCE = ROOT / "public/drawings/광터지하차도_BLOCK8.dxf" +OUTPUT = ROOT / "src/model/block8.json" + + +def read_pairs(path): + lines = path.read_text(encoding="utf-8-sig").splitlines() + if len(lines) % 2: + raise ValueError("DXF 그룹 코드 줄 수가 짝수가 아닙니다.") + return [(int(lines[i].strip()), lines[i + 1].strip()) for i in range(0, len(lines), 2)] + + +def records(pairs, start, end): + result = [] + current = None + for code, value in pairs[start:end]: + if code == 0: + if current: + result.append(current) + current = {"type": value.strip(), "data": []} + elif current: + current["data"].append((code, value.strip())) + if current: + result.append(current) + return result + + +def parse_sections(pairs, section_name): + begin = next(i for i, (code, value) in enumerate(pairs) if code == 0 and value.strip() == "SECTION" and pairs[i + 1][0] == 2 and pairs[i + 1][1].strip() == section_name) + end = next(i for i in range(begin + 2, len(pairs)) if pairs[i][0] == 0 and pairs[i][1].strip() == "ENDSEC") + return begin, end + + +def parse_blocks(pairs): + begin, end = parse_sections(pairs, "BLOCKS") + blocks = {} + i = begin + 2 + while i < end: + if pairs[i][0] != 0 or pairs[i][1].strip() != "BLOCK": + i += 1 + continue + block_start = i + j = i + 1 + while j < end and not (pairs[j][0] == 0 and pairs[j][1].strip() == "ENDBLK"): + j += 1 + header_end = next((k for k in range(block_start + 1, j) if pairs[k][0] == 0), j) + header = pairs[block_start + 1:header_end] + header_values = [value.strip() for code, value in header] + name_pos = next(k for k, (code, value) in enumerate(header) if code == 100 and value.strip() == "AcDbBlockBegin") + name = next(value.strip() for code, value in header[name_pos + 1:] if code == 2) + base = [] + for code, value in header[name_pos + 1:]: + if code in (10, 20, 30): + base.append(float(value)) + if len(base) == 3: + break + base += [0.0] * (3 - len(base)) + blocks[name] = {"base": base, "entities": records(pairs, header_end, j)} + i = j + 1 + return blocks + + +def parse_modelspace(pairs): + begin, end = parse_sections(pairs, "ENTITIES") + return records(pairs, begin + 2, end) + + +def props(entity): + result = defaultdict(list) + for code, value in entity["data"]: + result[code].append(value) + return result + + +def first(p, code, default=None): + return p[code][0] if code in p else default + + +def layer(entity): + return first(props(entity), 8, "0") + + +def line_points(entity): + p = props(entity) + return [(float(first(p, 10)), float(first(p, 20))), (float(first(p, 11)), float(first(p, 21)))] + + +def normalized_segment(entity, center_x, y0, el0): + points = line_points(entity) + points.sort(key=lambda p: (round(p[0], 6), p[1])) + profile = [[(x - center_x) / 1000, el0 + (y - y0) / 1000] for x, y in points] + key = (layer(entity), round((points[0][0] - center_x) / 1000, 3), round((points[1][0] - center_x) / 1000, 3)) + average = sum(y for x, y in profile) / 2 + slope = profile[1][1] - profile[0][1] + return key, (average, slope), profile + + +def cross_section(entities, y_bounds, center_x, y0, el0): + grouped = defaultdict(list) + for entity in entities: + if entity["type"] != "LINE" or layer(entity) not in ("CS-CONC-MAJR", "CS-CONC-MINR"): + continue + points = line_points(entity) + if not all(y_bounds[0] <= y <= y_bounds[1] for x, y in points): + continue + if not all(1_280_000 <= x <= 1_310_000 for x, y in points): + continue + key, sort_key, profile = normalized_segment(entity, center_x, y0, el0) + grouped[key].append({"profile": profile, "sort": sort_key, "handle": first(props(entity), 5, "")}) + return grouped + + +def arc_points(entity, steps=16): + p = props(entity) + cx, cy = float(first(p, 10)), float(first(p, 20)) + radius = float(first(p, 40)) + start = math.radians(float(first(p, 50))) + end = math.radians(float(first(p, 51))) + while end < start: + end += 2 * math.pi + return [(cx + radius * math.cos(start + (end - start) * i / steps), cy + radius * math.sin(start + (end - start) * i / steps)) for i in range(steps + 1)] + + +def block_entity_points(entity): + p = props(entity) + if entity["type"] == "LINE": + return [(float(first(p, 10)), float(first(p, 20))), (float(first(p, 11)), float(first(p, 21)))] + if entity["type"] == "ARC": + return arc_points(entity, 16) + return [] + + +def transform_block(points, insert, base): + p = props(insert) + ix, iy = float(first(p, 10)), float(first(p, 20)) + sx, sy = float(first(p, 41, "1")), float(first(p, 42, "1")) + angle = math.radians(float(first(p, 50, "0"))) + result = [] + for x, y in points: + x, y = (x - base[0]) * sx, (y - base[1]) * sy + result.append((ix + x * math.cos(angle) - y * math.sin(angle), iy + x * math.sin(angle) + y * math.cos(angle))) + return result + + +def intersect_line_arc(line, arc): + (x0, y0), (x1, y1) = line + p = props(arc) + cx, cy, radius = float(first(p, 10)), float(first(p, 20)), float(first(p, 40)) + dx, dy = x1 - x0, y1 - y0 + fx, fy = x0 - cx, y0 - cy + aa = dx * dx + dy * dy + bb = 2 * (fx * dx + fy * dy) + cc = fx * fx + fy * fy - radius * radius + disc = bb * bb - 4 * aa * cc + if disc < 0: + return [] + roots = [(-bb - math.sqrt(disc)) / (2 * aa), (-bb + math.sqrt(disc)) / (2 * aa)] + start, end = float(first(p, 50)), float(first(p, 51)) + points = [] + for t in roots: + if not 0 <= t <= 1: + continue + x, y = x0 + t * dx, y0 + t * dy + theta = math.degrees(math.atan2(y - cy, x - cx)) % 360 + if start - 0.01 <= theta <= end + 0.01: + points.append((theta, x, y)) + return points + + +def alignment_units(entities): + arcs = [] + for entity in entities: + p = props(entity) + if entity["type"] == "ARC" and first(p, 8) == "CS-CNTL" and abs(float(first(p, 40, "0")) - 1_700_000) < 1: + arcs.append(entity) + cross_lines = [] + for entity in entities: + if entity["type"] != "LINE" or layer(entity) != "CS-CONC-MAJR": + continue + (x0, y0), (x1, y1) = line_points(entity) + if -90_000 < y0 < -60_000 and -90_000 < y1 < -60_000 and abs(y1 - y0) > 19_000 and abs(y1 - y0) < 21_000 and abs(x1 - x0) < 200: + cross_lines.append(entity) + if len(arcs) != 2: + raise ValueError(f"평면 중심선 원호 수가 예상과 다릅니다: {len(arcs)}") + center_x_origin = sum(float(first(props(arc), 10)) for arc in arcs) / len(arcs) + center_y_origin = float(first(props(arcs[0]), 20)) - float(first(props(arcs[0]), 40)) + units = [] + for index, arc in enumerate(sorted(arcs, key=lambda e: float(first(props(e), 10)))): + acx = float(first(props(arc), 10)) + candidates = [line for line in cross_lines if abs(sum(x for x, y in line_points(line)) / 2 - acx) < 12_000] + intersections = [] + boundary_handles = [] + for line in candidates: + found = intersect_line_arc(line_points(line), arc) + if found: + intersections.extend(found) + boundary_handles.append(first(props(line), 5, "")) + intersections.sort() + if len(intersections) != 2: + raise ValueError(f"평면 중심선 {index + 1}의 구조선 교점이 2개가 아닙니다: {len(intersections)}") + theta0, theta1 = intersections[0][0], intersections[1][0] + radius_m = float(first(props(arc), 40)) / 1000 + length = radius_m * math.radians(theta1 - theta0) + units.append({ + "id": f"alignment-{index + 1}", + "name": f"BLOCK8 평면 중심선 {index + 1}", + "center": [(acx - center_x_origin) / 1000, (float(first(props(arc), 20)) - center_y_origin) / 1000], + "planOrigin": [center_x_origin, center_y_origin], + "radius": radius_m, + "startAngle": theta0, + "endAngle": theta1, + "length": length, + "centerlineHandle": first(props(arc), 5, ""), + "boundaryHandles": boundary_handles, + }) + return units + + +def add_block_parts(parts, entities, blocks, center_x, sections): + block_name = "A$C2017021411375356" + block = blocks[block_name] + concrete_entities = [e for e in block["entities"] if layer(e) in ("CS-CONC-MAJR", "CS-CONC-MINR") and e["type"] in ("LINE", "ARC")] + inserts = [] + for entity in entities: + if entity["type"] != "INSERT" or first(props(entity), 2) != block_name: + continue + p = props(entity) + x, y = float(first(p, 10)), float(first(p, 20)) + if 1_280_000 < x < 1_310_000 and any(abs(y - sy) < 100 for sy in (-76_987.31555584459, -96_306.66955584464)): + inserts.append(entity) + # 각 단면에서 좌우 삽입점 한 개씩 확인한다. + section_inserts = [] + for section in sections: + chosen = [e for e in inserts if abs(float(first(props(e), 20)) - section["insertY"]) < 1] + chosen.sort(key=lambda e: float(first(props(e), 10))) + if len(chosen) != 2: + raise ValueError(f"블록 내부 콘크리트 삽입점 수가 예상과 다릅니다: {len(chosen)}") + section_inserts.append(chosen) + result = [] + for side_idx, side_name in enumerate(("left", "right")): + start_insert, end_insert = section_inserts[0][side_idx], section_inserts[1][side_idx] + for entity_idx, block_entity in enumerate(concrete_entities): + start_raw = transform_block(block_entity_points(block_entity), start_insert, block["base"]) + end_raw = transform_block(block_entity_points(block_entity), end_insert, block["base"]) + start_profile = [[(x - center_x) / 1000, sections[0]["elTop"] + (y - sections[0]["yTop"]) / 1000] for x, y in start_raw] + end_profile = [[(x - center_x) / 1000, sections[1]["elTop"] + (y - sections[1]["yTop"]) / 1000] for x, y in end_raw] + result.append({ + "id": f"insert-{side_name}-{entity_idx + 1:02d}", + "name": f"블록 내부 윤곽 {side_name} {entity_idx + 1:02d}", + "layer": layer(block_entity), + "group": "insert", + "sourceHandle": first(props(block_entity), 5, ""), + "sourceInsertHandles": [first(props(start_insert), 5, ""), first(props(end_insert), 5, "")], + "entityType": block_entity["type"], + "a": start_profile, + "b": end_profile, + }) + return result + + +def main(): + pairs = read_pairs(SOURCE) + blocks = parse_blocks(pairs) + entities = parse_modelspace(pairs) + center_x = 1_296_487.109248054 + section_defs = [ + {"id": "A", "station": 319.000, "yBounds": (-80_000, -70_000), "y0": -78_059.37855593952, "el0": 101.777, "yTop": -72_621.37855593952, "elTop": 107.215, "centerY": -77_742.31539793951, "insertY": -76_987.31555584459}, + {"id": "B", "station": 339.000, "yBounds": (-99_000, -89_000), "y0": -97_286.37855593952, "el0": 101.292, "yTop": -90_721.37855593952, "elTop": 107.857, "centerY": -97_061.6690599395, "insertY": -96_306.66955584464}, + ] + grouped_a = cross_section(entities, section_defs[0]["yBounds"], center_x, section_defs[0]["y0"], section_defs[0]["el0"]) + grouped_b = cross_section(entities, section_defs[1]["yBounds"], center_x, section_defs[1]["y0"], section_defs[1]["el0"]) + if set(grouped_a) != set(grouped_b): + raise ValueError("A-A/B-B 구조선의 X 범위/레이어 구성이 일치하지 않습니다.") + parts = [] + line_no = defaultdict(int) + for key in sorted(grouped_a): + a_list = sorted(grouped_a[key], key=lambda item: (item["sort"][0], item["sort"][1])) + b_list = sorted(grouped_b[key], key=lambda item: (item["sort"][0], item["sort"][1])) + if len(a_list) != len(b_list): + raise ValueError(f"단면 대응 선 개수가 다릅니다: {key}") + for a_item, b_item in zip(a_list, b_list): + source_layer = key[0] + group = "major" if source_layer == "CS-CONC-MAJR" else "minor" + line_no[group] += 1 + parts.append({ + "id": f"{group}-{line_no[group]:03d}", + "name": f"{source_layer} 구조선 {line_no[group]:03d}", + "layer": source_layer, + "group": group, + "sourceHandles": [a_item["handle"], b_item["handle"]], + "entityType": "LINE", + "a": a_item["profile"], + "b": b_item["profile"], + }) + if line_no != {"major": 108, "minor": 6}: + raise ValueError(f"구조선 수 확인 실패: {dict(line_no)}") + parts += add_block_parts(parts, entities, blocks, center_x, section_defs) + units = alignment_units(entities) + for unit in units: + unit["parts"] = [dict(part, id=f"{unit['id']}-{part['id']}") for part in parts] + data = { + "source": "광터지하차도_BLOCK8.dxf", + "unit": "m", + "coordinateNote": "CAD 좌표 차이를 치수 문자열로 검산해 mm로 해석. 표고는 종단/단면 EL 주석에 연결.", + "sections": [ + {"id": "A-A", "station": 319.000, "centerEL": section_defs[0]["elTop"] + (section_defs[0]["centerY"] - section_defs[0]["yTop"]) / 1000, "topEL": 107.215, "baseTopEL": 101.777, "baseBottomEL": 100.877, "sourceHandles": ["STA.0K+319.000", "CS-CNTL center mark", "EL.102.094", "EL.107.215", "EL.100.877"]}, + {"id": "B-B", "station": 339.000, "centerEL": section_defs[1]["elTop"] + (section_defs[1]["centerY"] - section_defs[1]["yTop"]) / 1000, "topEL": 107.857, "baseTopEL": 101.292, "baseBottomEL": 100.392, "sourceHandles": ["STA.0K+339.000", "CS-CNTL center mark", "EL.101.517", "EL.107.857", "EL.100.392"]}, + ], + "sectionStationRange": [319.000, 339.000], + "modelStationRange": [319.010, 338.990], + "modelLength": 19.980, + "sectionTrim": 0.010, + "sectionLineCount": {"CS-CONC-MAJR": 108, "CS-CONC-MINR": 6}, + "expandedBlock": {"name": "A$C2017021411375356", "layerCounts": {"CS-CONC-MAJR": 18, "CS-CONC-MINR": 0}, "curveCount": 2, "insertCount": 4}, + "profileWidth": {"dimensionText": 20.300, "outerLineEnvelope": 20.500, "status": "dimension value and outer contour differ; retain separately"}, + "units": units, + } + OUTPUT.parent.mkdir(parents=True, exist_ok=True) + OUTPUT.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + print(json.dumps({"units": len(units), "lengths": [round(u["length"], 6) for u in units], "partsPerUnit": len(parts), "layers": dict(line_no), "expandedBlockPartsPerSide": 20}, ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/render_block8_preview.py b/scripts/render_block8_preview.py new file mode 100644 index 0000000..99cf91f --- /dev/null +++ b/scripts/render_block8_preview.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +"""Write a dependency-free SVG preview from src/model/block8.json.""" + +import json +import math +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +MODEL = ROOT / "src/model/block8.json" +OUTPUT = ROOT / "docs/BLOCK8_3D모델_미리보기.svg" +COLORS = {"major": "#78917c", "minor": "#d0aa69", "insert": "#9a9074"} + + +def point_at(unit, profile_a, profile_b, index, t): + theta = math.radians(unit["startAngle"] + (unit["endAngle"] - unit["startAngle"]) * t) + cx = unit["center"][0] + unit["radius"] * math.cos(theta) + cz = unit["center"][1] + unit["radius"] * math.sin(theta) + normal_x, normal_z = -math.cos(theta), -math.sin(theta) + station_t = (0.010 + t * 19.980) / 20 + u = profile_a[index][0] + (profile_b[index][0] - profile_a[index][0]) * station_t + el = profile_a[index][1] + (profile_b[index][1] - profile_a[index][1]) * station_t + return [cx + u * normal_x, el, cz + u * normal_z] + + +def project(point): + x, y, z = point + yaw, pitch, scale = -0.66, 0.43, 14.0 + x1 = x * math.cos(yaw) - z * math.sin(yaw) + z1 = x * math.sin(yaw) + z * math.cos(yaw) + y1 = y - 104 + return [600 + x1 * scale, 330 - (y1 * math.cos(pitch) - z1 * math.sin(pitch)) * scale, y1 * math.sin(pitch) + z1 * math.cos(pitch)] + + +def main(): + model = json.loads(MODEL.read_text(encoding="utf-8")) + faces = [] + for unit in model["units"]: + for part in unit["parts"]: + if len(part["a"]) != len(part["b"]): + continue + for step in range(8): + t0, t1 = step / 8, (step + 1) / 8 + for edge in range(len(part["a"]) - 1): + corners = [ + point_at(unit, part["a"], part["b"], edge, t0), + point_at(unit, part["a"], part["b"], edge + 1, t0), + point_at(unit, part["a"], part["b"], edge + 1, t1), + point_at(unit, part["a"], part["b"], edge, t1), + ] + projected = [project(point) for point in corners] + depth = sum(point[2] for point in projected) / 4 + faces.append((depth, part["group"], projected)) + faces.sort(key=lambda face: face[0]) + + svg = [ + '', + '광터지하차도 BLOCK8 도면 기반 3D 구조 모델', + '두 평면 중심선을 따라 시점과 종점 단면 구조선을 연결한 열린 표면 검토 모델. 일부 배치 대응은 확인 필요.', + '', + '', + '광터지하차도 · 도면 기반 검토 모델', + 'BLOCK8 · 구조선 연결 표면', + '', + ] + for x in range(170, 1031, 60): + svg.append(f'') + for y in range(180, 541, 36): + svg.append(f'') + svg.append('') + for depth, group, points in faces: + coordinates = ' '.join(f'{p[0]:.1f},{p[1]:.1f}' for p in points) + fill = COLORS.get(group, COLORS["major"]) + opacity = 0.64 if group != "insert" else 0.46 + svg.append(f'') + + for idx, unit in enumerate(model["units"]): + left = point_at(unit, [[0, 104]], [[0, 104]], 0, 0) + right = point_at(unit, [[0, 104]], [[0, 104]], 0, 1) + p0, p1 = project(left), project(right) + svg.append(f'중심선 {idx+1} · STA 319.010STA 338.990') + + svg.extend([ + '', + '길이 19.980m · 평면 중심선 교점으로 계산 · 시점/종점 단면 구조선 114개씩 + 블록 내부 윤곽', + '열린 표면 모델이며 닫힌 체적은 아닙니다. 두 중심선에 같은 단면을 적용한 대응은 검토가 필요합니다.', + '', + ]) + OUTPUT.write_text('\n'.join(svg) + '\n', encoding="utf-8") + print(f"{OUTPUT.relative_to(ROOT)}: {len(faces)} polygons") + + +if __name__ == "__main__": + main() diff --git a/src/App.jsx b/src/App.jsx index 3967394..754e763 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,54 +1,67 @@ -import { useState } from 'react' +import { useMemo, useState } from 'react' +import model from './model/block8.json' with { type: 'json' } +import ModelViewer from './ModelViewer' -const views = { - 전체: { transform: 'rotate(-8 450 180) skewY(-2deg)' }, - 평면: { transform: 'rotate(0 450 180)' }, - 정면: { transform: 'rotate(-90 450 180)' }, - 측면: { transform: 'rotate(90 450 180)' }, +const categoryLabels = { + major: 'CS-CONC-MAJR 구조선', + minor: 'CS-CONC-MINR 구조선', + insert: '블록 내부 콘크리트 윤곽', } +const viewNames = ['전체', '평면', '정면', '측면', 'A-A', 'B-B'] -function StationModel({ view }) { - return ( - - BLOCK8 확인된 종단 기준선 - 측점 319.010에서 338.990까지 19.980미터의 기준 구간입니다. 단면 형상은 미확정입니다. - - - - - - - - - - - - - - - - - - 19.980 m · 측점 차이 - STA. 0K+319.010 - STA. 0K+338.990 - - - - 종단 기준EL 기준 미연결 - - - ) +function pointRange(parts, key, coordinate) { + const values = parts.flatMap(part => [...part.a, ...part.b].map(point => point[coordinate])) + return values.length ? [Math.min(...values), Math.max(...values)] : [0, 0] } export default function App() { const [view, setView] = useState('전체') + const [renderMode, setRenderMode] = useState(false) + const [hidden, setHidden] = useState(new Set()) + const [hiddenUnits, setHiddenUnits] = useState(new Set()) + const [selected, setSelected] = useState(null) + const [tab, setTab] = useState('부재') + const [search, setSearch] = useState('') + const [resetToken, setResetToken] = useState(0) + + const allParts = useMemo(() => model.units.flatMap(unit => unit.parts.map(part => ({ ...part, unitId: unit.id, unitName: unit.name }))), []) + const selectedPart = selected ? allParts.find(part => part.id === selected.partId && part.unitId === selected.unitId) : null + const selectedUnit = selected ? model.units.find(unit => unit.id === selected.unitId) : null + const visibleCount = allParts.filter(part => !hidden.has(part.id) && !hiddenUnits.has(part.unitId)).length + const filteredParts = allParts.filter(part => `${part.name} ${part.layer} ${part.unitName}`.toLowerCase().includes(search.toLowerCase())) + const dimensionRange = pointRange(allParts, 'a', 0) + const elevationRange = pointRange(allParts, 'a', 1) + const counts = { + major: allParts.filter(part => part.group === 'major').length, + minor: allParts.filter(part => part.group === 'minor').length, + insert: allParts.filter(part => part.group === 'insert').length, + } + + const togglePart = id => setHidden(current => { + const next = new Set(current) + if (next.has(id)) next.delete(id); else next.add(id) + return next + }) + const toggleGroup = group => setHidden(current => { + const ids = allParts.filter(part => part.group === group).map(part => part.id) + const hide = ids.some(id => !current.has(id)) + const next = new Set(current) + ids.forEach(id => hide ? next.add(id) : next.delete(id)) + return next + }) + const toggleUnit = id => setHiddenUnits(current => { + const next = new Set(current) + if (next.has(id)) next.delete(id); else next.add(id) + return next + }) + return (
B8도면 모델 작업실 광터지하차도 · BLOCK8
) } diff --git a/src/ModelViewer.jsx b/src/ModelViewer.jsx new file mode 100644 index 0000000..76aa60f --- /dev/null +++ b/src/ModelViewer.jsx @@ -0,0 +1,223 @@ +import { useEffect, useRef } from 'react' + +const DEFAULT_CAMERA = { yaw: -0.66, pitch: 0.43, zoom: 1, panX: 0, panY: 0 } +const COLORS = { major: '#78917c', minor: '#d0aa69', insert: '#9a9074' } +const clamp = (value, min, max) => Math.max(min, Math.min(max, value)) + +function worldPoint(unit, pointA, pointB, pointIndex, t) { + const angle = (unit.startAngle + (unit.endAngle - unit.startAngle) * t) * Math.PI / 180 + const cx = unit.center[0] + unit.radius * Math.cos(angle) + const cz = unit.center[1] + unit.radius * Math.sin(angle) + const tangentX = -Math.sin(angle) + const tangentZ = Math.cos(angle) + const normalX = -tangentZ + const normalZ = tangentX + const stationT = (0.01 + t * 19.98) / 20 + const lateral = pointA[pointIndex][0] + (pointB[pointIndex][0] - pointA[pointIndex][0]) * stationT + const elevation = pointA[pointIndex][1] + (pointB[pointIndex][1] - pointA[pointIndex][1]) * stationT + return [cx + lateral * normalX, elevation, cz + lateral * normalZ] +} + +function hexRgb(hex) { + return [1, 3, 5].map(index => parseInt(hex.slice(index, index + 2), 16)) +} + +function colorShade(hex, amount, alpha) { + const [r, g, b] = hexRgb(hex).map(value => Math.round(value * amount)) + return `rgba(${r}, ${g}, ${b}, ${alpha})` +} + +function inPolygon(point, polygon) { + let inside = false + for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + const [xi, yi] = polygon[i], [xj, yj] = polygon[j] + const intersect = ((yi > point[1]) !== (yj > point[1])) && (point[0] < ((xj - xi) * (point[1] - yi)) / (yj - yi || 1) + xi) + if (intersect) inside = !inside + } + return inside +} + +export default function ModelViewer({ units, hidden, hiddenUnits, selected, onSelect, view, renderMode, resetToken }) { + const canvasRef = useRef(null) + const cameraRef = useRef({ ...DEFAULT_CAMERA }) + const sceneRef = useRef({ units, hidden, hiddenUnits, selected, view, renderMode, onSelect }) + const drawRef = useRef(() => {}) + + useEffect(() => { + sceneRef.current = { units, hidden, hiddenUnits, selected, view, renderMode, onSelect } + drawRef.current() + }, [units, hidden, hiddenUnits, selected, view, renderMode, onSelect]) + + useEffect(() => { + const canvas = canvasRef.current + const ctx = canvas.getContext('2d') + let hitFaces = [] + let pointerStart = null + let lastPoint = null + let dragged = false + + const project = (point, width, height) => { + const camera = cameraRef.current + const y = point[1] - 104 + const x = point[0] * Math.cos(camera.yaw) - point[2] * Math.sin(camera.yaw) + const z = point[0] * Math.sin(camera.yaw) + point[2] * Math.cos(camera.yaw) + const scale = Math.min(width / 66, height / 24) * camera.zoom + return [width / 2 + x * scale + camera.panX, height / 2 - (y * Math.cos(camera.pitch) - z * Math.sin(camera.pitch)) * scale + camera.panY, y * Math.sin(camera.pitch) + z * Math.cos(camera.pitch)] + } + + const draw = () => { + const rect = canvas.getBoundingClientRect() + const width = rect.width, height = rect.height + if (!width || !height) return + const dpr = Math.min(window.devicePixelRatio || 1, 2) + if (canvas.width !== Math.round(width * dpr) || canvas.height !== Math.round(height * dpr)) { + canvas.width = Math.round(width * dpr); canvas.height = Math.round(height * dpr) + } + ctx.setTransform(dpr, 0, 0, dpr, 0, 0) + const { units, hidden, hiddenUnits, selected, renderMode } = sceneRef.current + const background = ctx.createLinearGradient(0, 0, 0, height) + background.addColorStop(0, renderMode ? '#e8efea' : '#f8faf8') + background.addColorStop(1, renderMode ? '#cbd8cf' : '#e9efea') + ctx.fillStyle = background; ctx.fillRect(0, 0, width, height) + + const drawLine = (a, b, color, lineWidth = 1) => { + const pa = project(a, width, height), pb = project(b, width, height) + ctx.beginPath(); ctx.moveTo(pa[0], pa[1]); ctx.lineTo(pb[0], pb[1]) + ctx.strokeStyle = color; ctx.lineWidth = lineWidth; ctx.stroke() + } + for (let x = -40; x <= 40; x += 5) drawLine([x, 100.2, -22], [x, 100.2, 22], '#aab9ad38', .6) + for (let z = -20; z <= 20; z += 5) drawLine([-40, 100.2, z], [40, 100.2, z], '#aab9ad38', .6) + + const faces = [] + const longitudinalSteps = 8 + for (const unit of units) { + if (hiddenUnits.has(unit.id)) continue + for (const part of unit.parts) { + if (hidden.has(part.id) || part.a.length !== part.b.length) continue + const color = COLORS[part.group] || COLORS.major + const active = selected?.unitId === unit.id && selected?.partId === part.id + for (let step = 0; step < longitudinalSteps; step++) { + const t0 = step / longitudinalSteps, t1 = (step + 1) / longitudinalSteps + for (let edge = 0; edge < part.a.length - 1; edge++) { + const points3d = [ + worldPoint(unit, part.a, part.b, edge, t0), + worldPoint(unit, part.a, part.b, edge + 1, t0), + worldPoint(unit, part.a, part.b, edge + 1, t1), + worldPoint(unit, part.a, part.b, edge, t1), + ] + const projected = points3d.map(point => project(point, width, height)) + const depth = projected.reduce((sum, point) => sum + point[2], 0) / projected.length + faces.push({ projected, part, unit, color, depth, active, shade: .82 + .18 * Math.abs(Math.sin(edge * .73 + step * .11)) }) + } + } + } + } + faces.sort((a, b) => a.depth - b.depth) + hitFaces = [] + for (const face of faces) { + ctx.beginPath() + face.projected.forEach((point, index) => index ? ctx.lineTo(point[0], point[1]) : ctx.moveTo(point[0], point[1])) + ctx.closePath() + ctx.fillStyle = colorShade(face.active ? '#d27c42' : face.color, renderMode ? face.shade : 1, face.active ? .92 : face.part.group === 'insert' ? .58 : .72) + ctx.fill() + ctx.strokeStyle = face.active ? '#9b4f20' : renderMode ? '#51675a99' : '#566b5b8c' + ctx.lineWidth = face.active ? 1.8 : .65 + ctx.stroke() + hitFaces.push(face) + } + + ctx.font = '11px sans-serif' + ctx.textAlign = 'left' + ctx.fillStyle = '#68806d' + units.forEach((unit, index) => { + if (hiddenUnits.has(unit.id)) return + const start = project(worldPoint(unit, [[0, 104]], [[0, 104]], 0, 0), width, height) + const end = project(worldPoint(unit, [[0, 104]], [[0, 104]], 0, 1), width, height) + ctx.fillText(`중심선 ${index + 1} · STA 319.010`, start[0] - 5, start[1] - 16) + ctx.fillText(`STA 338.990`, end[0] - 8, end[1] - 14) + }) + ctx.fillStyle = '#6f8275' + ctx.fillText('X·Z 평면: 도면 중심선 · Y: 표고 EL', 16, height - 18) + ctx.textAlign = 'right' + ctx.fillText(`확대 ${Math.round(cameraRef.current.zoom * 100)}%`, width - 16, height - 18) + } + drawRef.current = draw + + const local = event => { + const rect = canvas.getBoundingClientRect() + return [event.clientX - rect.left, event.clientY - rect.top] + } + const down = event => { + canvas.setPointerCapture(event.pointerId) + pointerStart = local(event); lastPoint = pointerStart; dragged = false + event.preventDefault() + } + const move = event => { + if (pointerStart === null) return + const point = local(event) + const dx = point[0] - lastPoint[0], dy = point[1] - lastPoint[1] + if (Math.hypot(point[0] - pointerStart[0], point[1] - pointerStart[1]) > 4) dragged = true + const camera = cameraRef.current + if (event.shiftKey || event.buttons === 2 || event.buttons === 4) { + camera.panX += dx; camera.panY += dy + } else { + camera.yaw += dx * .008 + camera.pitch = clamp(camera.pitch + dy * .006, -.4, 1.45) + } + lastPoint = point; drawRef.current() + } + const up = event => { + if (pointerStart === null) return + if (!dragged) { + const point = local(event) + for (let index = hitFaces.length - 1; index >= 0; index--) { + const face = hitFaces[index] + if (inPolygon(point, face.projected)) { + sceneRef.current.onSelect({ unitId: face.unit.id, partId: face.part.id }) + break + } + } + } + pointerStart = null; lastPoint = null + } + const wheel = event => { + event.preventDefault() + cameraRef.current.zoom = clamp(cameraRef.current.zoom * (event.deltaY < 0 ? 1.1 : .9), .3, 5) + drawRef.current() + } + const context = event => event.preventDefault() + const resize = new ResizeObserver(() => drawRef.current()) + resize.observe(canvas) + canvas.addEventListener('pointerdown', down) + canvas.addEventListener('pointermove', move) + canvas.addEventListener('pointerup', up) + canvas.addEventListener('pointercancel', up) + canvas.addEventListener('wheel', wheel, { passive: false }) + canvas.addEventListener('contextmenu', context) + draw() + return () => { + resize.disconnect() + canvas.removeEventListener('pointerdown', down) + canvas.removeEventListener('pointermove', move) + canvas.removeEventListener('pointerup', up) + canvas.removeEventListener('pointercancel', up) + canvas.removeEventListener('wheel', wheel) + canvas.removeEventListener('contextmenu', context) + } + }, []) + + useEffect(() => { + const viewCameras = { + 전체: { yaw: -.66, pitch: .43 }, + 평면: { yaw: 0, pitch: Math.PI / 2 }, + 정면: { yaw: 0, pitch: 0 }, + 측면: { yaw: Math.PI / 2, pitch: 0 }, + 'A-A': { yaw: 0, pitch: 0 }, + 'B-B': { yaw: Math.PI, pitch: 0 }, + } + cameraRef.current = { ...DEFAULT_CAMERA, ...viewCameras[view] } + drawRef.current() + }, [view, resetToken]) + + return +} diff --git a/src/index.css b/src/index.css index 6710f55..3a07c71 100644 --- a/src/index.css +++ b/src/index.css @@ -1,94 +1,144 @@ -:root { - font-family: 'Malgun Gothic', 'Apple SD Gothic Neo', sans-serif; - color: #263a32; - background: #eff2ed; - font-synthesis: none; - text-rendering: optimizeLegibility; -} +:root { font-family: 'Malgun Gothic','Apple SD Gothic Neo',sans-serif; color:#263a32; background:#eff2ed; font-synthesis:none; text-rendering:optimizeLegibility; } +* { box-sizing:border-box; } +body { min-width:320px; min-height:100vh; margin:0; } +button,input { font:inherit; } +button { border:0; background:none; color:inherit; cursor:pointer; } +a { color:inherit; text-decoration:none; } +button:focus-visible,a:focus-visible,input:focus-visible { outline:2px solid #bc763b; outline-offset:3px; } +.page-shell { width:min(100% - 64px,1600px); margin:auto; padding-bottom:24px; } +.topbar { min-height:72px; display:flex; align-items:center; gap:18px; border-bottom:1px solid #d9e1d7; } +.brand { display:flex; align-items:center; gap:10px; font-size:14px; font-weight:700; white-space:nowrap; } +.brand-mark { display:grid; width:34px; height:34px; place-items:center; border-radius:10px; background:#446b58; color:#fff; font-size:11px; } +.project-chip { margin-right:auto; color:#7a897e; font-size:11px; } +.file-links { display:flex; gap:7px; } +.file-links a { padding:9px 11px; border:1px solid #d3ddd2; border-radius:7px; background:#fafcf8; color:#536d5b; font-size:10px; white-space:nowrap; } +.file-links a:hover,.source-links a:hover { border-color:#92a994; color:#315c42; } +.intro { display:flex; align-items:center; justify-content:space-between; gap:18px; padding:29px 0 20px; } +.kicker,.eyebrow { display:block; color:#7a8d7e; font-size:10px; font-weight:700; letter-spacing:.08em; } +h1 { margin:8px 0; font-size:clamp(26px,3.3vw,34px); letter-spacing:-.055em; } +h1 em { margin-left:7px; color:#738b79; font-size:.8em; font-style:normal; font-weight:400; } +.intro p { margin:0; color:#7c8d80; font-size:11px; line-height:1.7; } +.status-pill { display:flex; align-items:center; gap:8px; padding:9px 13px; border:1px solid #e0d6bd; border-radius:30px; background:#f8f4e9; color:#9b793c; font-size:10px; white-space:nowrap; } +.status-pill i { width:7px; height:7px; border-radius:50%; background:#b08a45; } +.metrics { display:grid; grid-template-columns:repeat(4,1fr); margin-bottom:13px; padding:17px 0; border:1px solid #dce4d9; border-radius:11px; background:#f9fbf7; } +.metrics article { min-width:0; padding:0 18px; border-right:1px solid #e3e8df; } +.metrics article:last-child { border:0; } +.metrics small { display:block; color:#7d8b7d; font-size:9px; } +.metrics strong { display:block; margin:8px 0 5px; font-family:Georgia,serif; font-size:clamp(19px,2.3vw,26px); font-weight:400; white-space:nowrap; } +.metrics strong.el { font-size:clamp(17px,2vw,22px); } +.metrics strong i { color:#899584; font-family:sans-serif; font-size:11px; font-style:normal; } +.metrics p { margin:0; color:#8b9687; font-size:9px; line-height:1.55; } +.notice { display:flex; align-items:flex-start; gap:11px; margin-bottom:15px; padding:10px 13px; border:1px solid #e6dcc7; border-radius:8px; background:#f5f0e4; } +.notice b { padding-top:2px; color:#967136; font-size:10px; white-space:nowrap; } +.notice p { margin:0; color:#8b7e62; font-size:10px; line-height:1.65; } +.workspace { display:grid; grid-template-columns:minmax(0,1fr) 322px; gap:16px; align-items:start; } +.viewer-card,.side-card,.info-card { min-width:0; overflow:hidden; border:1px solid #dbe4d7; border-radius:11px; background:#fafcf8; } +.viewer-head { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:17px 19px 13px; } +h2 { margin:5px 0 0; font-size:16px; letter-spacing:-.04em; } +.segmented { display:flex; padding:3px; border-radius:7px; background:#eaf0e7; } +.segmented button { padding:6px 9px; border-radius:5px; color:#7f8d7b; font-size:9px; white-space:nowrap; } +.segmented button.active { background:#fff; color:#496c52; box-shadow:0 1px 4px #233c2912; } +.viewbar { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:0 17px 10px; } +.views { display:flex; gap:3px; } +.views button { padding:6px 9px; border:1px solid transparent; border-radius:5px; font-size:9px; } +.views button.active { border-color:#ccdac9; background:#eef3ea; color:#426a50; } +.viewbar>span { color:#8b9687; font-size:9px; white-space:nowrap; } +.canvas-wrap { position:relative; overflow:hidden; border-top:1px solid #dfe8da; border-bottom:1px solid #dfe8da; background:#f4f7f3; } +.model-canvas { display:block; width:100%; height:485px; touch-action:none; cursor:grab; } +.model-canvas:active { cursor:grabbing; } +.model-canvas:focus-visible { outline:2px solid #7d9a83; outline-offset:-2px; } +.canvas-tag { position:absolute; top:12px; left:14px; max-width:calc(100% - 28px); padding:6px 8px; border:1px solid #d5e0d2; border-radius:5px; background:#fcfffbd9; color:#6c846f; font-size:8px; pointer-events:none; } +.render-mode .model-canvas { filter:saturate(.92) contrast(1.04); } +.viewer-foot { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:11px 17px; color:#8b9885; font-size:8px; } +.viewer-foot button { color:#56735b; font-size:9px; white-space:nowrap; } +.selection { min-height:95px; margin:0 18px 17px; padding:14px 0 0; border-top:1px solid #e2e9dd; } +.selection:has(h3) { display:block; } +.selection:not(:has(h3)) { display:flex; align-items:center; gap:11px; } +.selection-dot { width:9px; height:9px; flex:0 0 auto; border-radius:50%; background:#91a78f; } +.selection strong { font-size:10px; } +.selection p { margin:5px 0 0; color:#819084; font-size:9px; line-height:1.6; } +.selection-title { display:flex; justify-content:space-between; align-items:center; } +.selection-title button { color:#8b958d; font-size:20px; } +.selection h3 { margin:7px 0 9px; font-size:13px; } +.selection-grid { display:flex; flex-wrap:wrap; gap:8px 20px; } +.selection-grid p { min-width:100px; margin:0; } +.selection-grid strong { display:block; margin-top:3px; color:#526c58; } +.selection .source-note { font-size:8px; } +.subtle { margin-top:7px; padding:6px 9px; border:1px solid #d8e1d6; border-radius:5px; color:#637a68; font-size:9px; } +.side-card { padding-bottom:13px; } +.tabs { display:flex; gap:17px; padding:14px 17px 11px; border-bottom:1px solid #e2e8df; } +.tabs button { padding:0 0 6px; color:#7e8b81; font-size:10px; } +.tabs button.active { border-bottom:2px solid #547862; color:#46684f; font-weight:700; } +.panel-heading { display:flex; justify-content:space-between; align-items:end; padding:12px 15px 9px; } +.panel-heading h2 { font-size:14px; } +.panel-heading span { color:#829084; font-size:9px; } +.unit-toggles { display:grid; grid-template-columns:1fr 1fr; gap:6px; padding:0 14px 10px; } +.unit-toggles label { display:block; padding:8px; border:1px solid #e0e7dd; border-radius:6px; color:#607665; font-size:9px; } +.unit-toggles input { margin:0 5px 0 0; accent-color:#547862; } +.unit-toggles small { display:block; margin:5px 0 0 17px; color:#8a968b; font-size:8px; } +.search { width:calc(100% - 28px); margin:0 14px 8px; padding:8px 9px; border:1px solid #dce4d9; border-radius:6px; background:#fff; color:#37473d; font-size:10px; } +.group-toggles { display:grid; gap:5px; padding:0 14px 9px; } +.group-toggles>div { display:flex; align-items:center; gap:7px; min-width:0; } +.swatch { width:8px; height:8px; flex:0 0 auto; border-radius:2px; background:#78917c; } +.swatch.minor { background:#d0aa69; } +.swatch.insert { background:#9a9074; } +.group-label { flex:1; color:#68776d; font-size:9px; } +.group-label small { display:block; margin-top:2px; color:#97a096; font-size:8px; } +.group-toggles button { padding:4px 6px; border:1px solid #dce4d9; border-radius:4px; color:#68806d; font-size:8px; } +.part-list { max-height:270px; margin:0 7px; overflow:auto; border-top:1px solid #e6ebe4; } +.part-row { display:flex; align-items:center; gap:5px; padding:2px 7px; border-bottom:1px solid #eff2ed; } +.part-row.chosen { background:#edf3eb; } +.part-row.is-hidden button { color:#a1aaa1; } +.part-row>button { min-width:0; flex:1; padding:5px 0; overflow:hidden; text-align:left; text-overflow:ellipsis; white-space:nowrap; color:#53665a; font-size:9px; } +.part-row small { display:block; margin-top:2px; color:#96a095; font-size:8px; } +.part-row input { accent-color:#547862; } +.empty { padding:10px; color:#879387; font-size:9px; } +.panel-note { margin:9px 14px 0; color:#8b9687; font-size:8px; line-height:1.6; } +.panel-title { padding:14px 15px 7px; font-size:14px; } +.checks { display:grid; gap:0; margin:0; padding:0 14px; list-style:none; } +.checks li { display:grid; grid-template-columns:44px 1fr; gap:8px; padding:9px 0; border-bottom:1px solid #edf0eb; } +.checks li>b { width:max-content; height:max-content; padding:3px 5px; border-radius:4px; background:#e9f1e8; color:#608064; font-size:8px; } +.checks li.pending>b { background:#f5efe1; color:#9a7c45; } +.checks li span { color:#5a6d60; font-size:9px; line-height:1.5; } +.checks li small { display:block; margin-top:3px; color:#929d92; font-size:8px; } +.source-links { display:grid; gap:5px; padding:11px 14px 0; } +.source-links a { padding:8px 9px; border:1px solid #dce4d9; border-radius:5px; color:#58745f; font-size:9px; } +.bottom-grid { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:14px; } +.info-card { min-height:110px; padding:15px 17px; } +.info-card h2 { margin:5px 0 7px; font-size:13px; } +.info-card p { margin:0; color:#7d8b80; font-size:9px; line-height:1.7; } +footer { padding-top:15px; color:#89958a; font-size:8px; } -* { box-sizing: border-box; } -body { min-width: 320px; min-height: 100vh; margin: 0; } -a { color: inherit; text-decoration: none; } -button { font: inherit; cursor: pointer; } -.page-shell { width: min(100% - 64px, 1380px); margin: 0 auto; padding-bottom: 25px; } -.topbar { min-height: 72px; display: flex; align-items: center; gap: 20px; border-bottom: 1px solid #d8e0d6; } -.brand { display: inline-flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 700; white-space: nowrap; } -.brand-mark { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 10px; background: #446b58; color: #fff; font-size: 12px; } -.project-chip { color: #819087; font-size: 11px; } -.file-links { display: flex; gap: 8px; margin-left: auto; } -.file-links a { padding: 9px 11px; border: 1px solid #d7dfd4; border-radius: 7px; background: #fafcf8; color: #536d5b; font-size: 11px; white-space: nowrap; } -.file-links a:hover,.text-link:hover { border-color: #89a28d; color: #2d6045; } -.intro { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 36px 0 25px; } -.kicker,.eyebrow { display: block; color: #788a7d; font-size: 10px; font-weight: 700; letter-spacing: .08em; } -h1 { margin: 8px 0; font-size: clamp(27px, 4vw, 34px); letter-spacing: -.06em; } -h1 em { margin-left: 7px; color: #778b7d; font-size: .8em; font-style: normal; font-weight: 400; } -.intro p,.info-card p { margin: 0; color: #79877c; font-size: 12px; line-height: 1.8; } -.status-pill { display: inline-flex; align-items: center; gap: 8px; padding: 10px 14px; border: 1px solid #e5dbc2; border-radius: 30px; background: #faf5e9; color: #967641; font-size: 11px; white-space: nowrap; } -.status-pill i { width: 7px; height: 7px; border-radius: 50%; background: #b98f48; } -.summary-grid { display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 18px; overflow: hidden; border: 1px solid #dce4d9; border-radius: 11px; background: #fafcf8; } -.summary-grid article { min-height: 112px; padding: 18px 22px; border-right: 1px solid #e3e9e1; } -.summary-grid article:last-child { border: 0; } -.summary-grid span,.summary-grid small { display: block; color: #839084; font-size: 10px; } -.summary-grid strong { display: block; margin: 10px 0 6px; font-family: Georgia,serif; font-size: clamp(19px, 2.5vw, 26px); font-weight: 400; white-space: nowrap; } -.summary-grid strong i { color: #78877c; font-family: sans-serif; font-size: 12px; font-style: normal; } -.summary-grid .unknown strong { color: #a38048; font-family: inherit; font-size: 18px; } -.model-card,.info-card { overflow: hidden; border: 1px solid #dbe4d7; border-radius: 12px; background: #fafcf8; } -.card-heading { display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 19px 22px 12px; } -h2 { margin: 5px 0 0; font-size: 17px; letter-spacing: -.04em; } -.view-controls { display: flex; gap: 4px; padding: 3px; border-radius: 7px; background: #edf1ea; } -.view-controls button { padding: 7px 11px; border: 0; border-radius: 5px; background: transparent; color: #768579; font-size: 10px; } -.view-controls button.active { background: white; color: #426a50; box-shadow: 0 1px 4px #233c2912; } -.model-stage { position: relative; display: grid; min-height: 330px; place-items: center; overflow: hidden; border-top: 1px solid #e0e7dd; border-bottom: 1px solid #e0e7dd; background: linear-gradient(180deg,#f6f9f5,#edf2ec); } -.model-svg { width: min(100%, 940px); height: auto; min-height: 270px; overflow: visible; } -.model-grid path { fill: none; stroke: #dbe4dc; stroke-width: 1; } -.station-line { transform-box: view-box; transform-origin: center; transition: transform .35s ease; } -.station-shadow { fill: none; stroke: #d2ddd2; stroke-width: 15; stroke-linecap: round; } -.station-main { fill: none; stroke: #547d62; stroke-width: 5; stroke-linecap: round; } -.station-cap { fill: none; stroke: #819782; stroke-width: 2; } -.station-line circle { fill: #fafcf8; stroke: #52785d; stroke-width: 4; } -.dimension { fill: none; stroke: #718b78; stroke-width: 1.5; } -.dimension-tick { fill: none; stroke: #a5b5a5; stroke-width: 1; } -.length-label { fill: #49694f; font-size: 16px; font-weight: 700; } -.endpoint-label { fill: #566e5c; font-size: 12px; } -.axis-labels path { stroke: #758e79; stroke-width: 2; } -.axis-labels text { fill: #809083; font-size: 10px; } -.stage-note { position: absolute; right: 15px; bottom: 12px; color: #9a835b; font-size: 9px; text-align: right; } -.model-caption { display: flex; justify-content: space-between; gap: 14px; padding: 13px 20px; color: #839084; font-size: 10px; } -.model-caption>span:first-child { display: inline-flex; align-items: center; gap: 8px; } -.legend-line { width: 19px; height: 3px; border-radius: 2px; background: #547d62; } -.bottom-grid { display: grid; grid-template-columns: 1.25fr 1fr; gap: 16px; margin-top: 17px; } -.info-card { min-height: 172px; padding: 19px 21px; } -.info-card h2 { margin-bottom: 10px; } -.info-card p { max-width: 720px; } -.text-link { display: inline-flex; align-items: center; gap: 9px; margin-top: 14px; padding: 8px 10px; border: 1px solid #d8e1d6; border-radius: 6px; color: #4b6b52; font-size: 10px; } -.text-link span { font-size: 13px; } -footer { padding-top: 18px; color: #89958a; font-size: 9px; } - -@media (max-width: 760px) { - .page-shell { width: min(100% - 32px, 620px); } - .topbar { flex-wrap: wrap; gap: 10px; padding: 13px 0; } - .project-chip { margin-left: auto; } - .file-links { width: 100%; margin: 0; } - .file-links a { flex: 1; text-align: center; } - .intro { align-items: flex-start; flex-direction: column; padding: 27px 0 19px; } - .summary-grid { grid-template-columns: 1fr 1fr; } - .summary-grid article { min-height: 98px; padding: 15px; border-bottom: 1px solid #e3e9e1; } - .summary-grid article:nth-child(2) { border-right: 0; } - .summary-grid article:nth-child(n+3) { border-bottom: 0; } - .card-heading { align-items: flex-start; flex-direction: column; padding: 17px 15px 12px; } - .model-stage { min-height: 260px; } - .model-svg { min-height: 220px; } - .endpoint-label { font-size: 11px; } - .stage-note { max-width: 260px; line-height: 1.5; } - .model-caption { flex-direction: column; padding: 12px 15px; } - .bottom-grid { grid-template-columns: 1fr; gap: 11px; } - .info-card { min-height: 0; padding: 17px; } +@media(max-width:1050px) { + .workspace { grid-template-columns:minmax(0,1fr) 290px; gap:12px; } + .metrics article { padding:0 12px; } + .model-canvas { height:430px; } } - -@media (max-width: 400px) { - .file-links { gap: 5px; } - .file-links a { padding: 8px 5px; font-size: 10px; } - .view-controls button { padding: 7px 9px; } - .model-stage { min-height: 220px; } - .length-label { font-size: 13px; } +@media(max-width:760px) { + .page-shell { width:min(100% - 30px,620px); } + .topbar { flex-wrap:wrap; gap:9px; padding:12px 0; } + .project-chip { margin-left:auto; margin-right:0; } + .file-links { width:100%; } + .file-links a { flex:1; padding:8px 5px; text-align:center; } + .intro { align-items:flex-start; flex-direction:column; padding:24px 0 17px; } + .metrics { grid-template-columns:1fr 1fr; padding:0; } + .metrics article { min-height:91px; padding:14px; border-bottom:1px solid #e3e8df; } + .metrics article:nth-child(2) { border-right:0; } + .metrics article:nth-child(n+3) { border-bottom:0; } + .notice { gap:8px; } + .workspace { grid-template-columns:1fr; } + .model-canvas { height:380px; } + .side-card { order:2; } + .part-list { max-height:330px; } + .bottom-grid { grid-template-columns:1fr; gap:9px; } +} +@media(max-width:440px) { + .viewer-head { align-items:flex-start; flex-direction:column; padding:15px; } + .viewbar { align-items:flex-start; flex-direction:column; padding:0 13px 9px; } + .views { width:100%; flex-wrap:wrap; } + .views button { padding:6px 8px; } + .model-canvas { height:300px; } + .viewer-foot { align-items:flex-start; } + .metrics strong { font-size:20px; } + .metrics strong.el { font-size:16px; } } diff --git a/src/model/block8.json b/src/model/block8.json new file mode 100644 index 0000000..ce1e855 --- /dev/null +++ b/src/model/block8.json @@ -0,0 +1,10701 @@ +{ + "source": "광터지하차도_BLOCK8.dxf", + "unit": "m", + "coordinateNote": "CAD 좌표 차이를 치수 문자열로 검산해 mm로 해석. 표고는 종단/단면 EL 주석에 연결.", + "sections": [ + { + "id": "A-A", + "station": 319.0, + "centerEL": 102.09406315800001, + "topEL": 107.215, + "baseTopEL": 101.777, + "baseBottomEL": 100.877, + "sourceHandles": [ + "STA.0K+319.000", + "CS-CNTL center mark", + "EL.102.094", + "EL.107.215", + "EL.100.877" + ] + }, + { + "id": "B-B", + "station": 339.0, + "centerEL": 101.51670949600002, + "topEL": 107.857, + "baseTopEL": 101.292, + "baseBottomEL": 100.392, + "sourceHandles": [ + "STA.0K+339.000", + "CS-CNTL center mark", + "EL.101.517", + "EL.107.857", + "EL.100.392" + ] + } + ], + "sectionStationRange": [ + 319.0, + 339.0 + ], + "modelStationRange": [ + 319.01, + 338.99 + ], + "modelLength": 19.98, + "sectionTrim": 0.01, + "sectionLineCount": { + "CS-CONC-MAJR": 108, + "CS-CONC-MINR": 6 + }, + "expandedBlock": { + "name": "A$C2017021411375356", + "layerCounts": { + "CS-CONC-MAJR": 18, + "CS-CONC-MINR": 0 + }, + "curveCount": 2, + "insertCount": 4 + }, + "profileWidth": { + "dimensionText": 20.3, + "outerLineEnvelope": 20.5, + "status": "dimension value and outer contour differ; retain separately" + }, + "units": [ + { + "id": "alignment-1", + "name": "BLOCK8 평면 중심선 1", + "center": [ + -17.5, + 1700.0 + ], + "planOrigin": [ + 1231533.514405643, + -78753.23558031511 + ], + "radius": 1700.0, + "startAngle": 269.6633030368886, + "endAngle": 270.33669696314513, + "length": 19.979999999384816, + "centerlineHandle": "101568", + "boundaryHandles": [ + "21199", + "21200" + ], + "parts": [ + { + "id": "alignment-1-major-001", + "name": "CS-CONC-MAJR 구조선 001", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20894", + "21099" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 100.777 + ], + [ + -10.25, + 101.777 + ] + ], + "b": [ + [ + -10.25, + 100.292 + ], + [ + -10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-002", + "name": "CS-CONC-MAJR 구조선 002", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20895", + "21100" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 101.777 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.25, + 101.292 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-003", + "name": "CS-CONC-MAJR 구조선 003", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20897", + "21102" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 100.777 + ], + [ + 10.25, + 100.777 + ] + ], + "b": [ + [ + -10.25, + 100.292 + ], + [ + 10.25, + 100.292 + ] + ] + }, + { + "id": "alignment-1-major-004", + "name": "CS-CONC-MAJR 구조선 004", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20879", + "21084" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-005", + "name": "CS-CONC-MAJR 구조선 005", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20896", + "21101" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-006", + "name": "CS-CONC-MAJR 구조선 006", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20878", + "21083" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 101.777 + ], + [ + -9.75, + 106.215 + ] + ], + "b": [ + [ + -10.15, + 101.292 + ], + [ + -9.75, + 106.857 + ] + ] + }, + { + "id": "alignment-1-major-007", + "name": "CS-CONC-MAJR 구조선 007", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20786", + "20990" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -9.25, + 100.877 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -9.25, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-008", + "name": "CS-CONC-MAJR 구조선 008", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20890", + "21095" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + 10.15, + 100.877 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + 10.15, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-009", + "name": "CS-CONC-MAJR 구조선 009", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20877", + "21082" + ], + "entityType": "LINE", + "a": [ + [ + -9.75, + 106.215 + ], + [ + -9.75, + 107.215 + ] + ], + "b": [ + [ + -9.75, + 106.857 + ], + [ + -9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-010", + "name": "CS-CONC-MAJR 구조선 010", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20876", + "21081" + ], + "entityType": "LINE", + "a": [ + [ + -9.75, + 107.215 + ], + [ + -9.25, + 107.215 + ] + ], + "b": [ + [ + -9.75, + 107.857 + ], + [ + -9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-011", + "name": "CS-CONC-MAJR 구조선 011", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20880", + "21085" + ], + "entityType": "LINE", + "a": [ + [ + -9.25, + 102.94906300006062 + ], + [ + -9.25, + 107.215 + ] + ], + "b": [ + [ + -9.25, + 102.37170900006055 + ], + [ + -9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-012", + "name": "CS-CONC-MAJR 구조선 012", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20787", + "20991" + ], + "entityType": "LINE", + "a": [ + [ + -9.25, + 100.877 + ], + [ + -0.5, + 100.877 + ] + ], + "b": [ + [ + -9.25, + 100.392 + ], + [ + -0.5, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-013", + "name": "CS-CONC-MAJR 구조선 013", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20791", + "20995" + ], + "entityType": "LINE", + "a": [ + [ + -8.25, + 101.89906300000008 + ], + [ + -8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + -8.25, + 101.32170900000003 + ], + [ + -8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-014", + "name": "CS-CONC-MAJR 구조선 014", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20792", + "20996" + ], + "entityType": "LINE", + "a": [ + [ + -8.2, + 101.577 + ], + [ + -8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + -8.2, + 101.092 + ], + [ + -8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-015", + "name": "CS-CONC-MAJR 구조선 015", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20793", + "20997" + ], + "entityType": "LINE", + "a": [ + [ + -8.2, + 101.577 + ], + [ + -7.8, + 101.577 + ] + ], + "b": [ + [ + -8.2, + 101.092 + ], + [ + -7.8, + 101.092 + ] + ] + }, + { + "id": "alignment-1-major-016", + "name": "CS-CONC-MAJR 구조선 016", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20794", + "20998" + ], + "entityType": "LINE", + "a": [ + [ + -7.8, + 101.577 + ], + [ + -7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + -7.8, + 101.092 + ], + [ + -7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-017", + "name": "CS-CONC-MAJR 구조선 017", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20795", + "20999" + ], + "entityType": "LINE", + "a": [ + [ + -7.8, + 101.89906300000008 + ], + [ + -7.75, + 101.89906300000008 + ] + ], + "b": [ + [ + -7.8, + 101.32170900000003 + ], + [ + -7.75, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-018", + "name": "CS-CONC-MAJR 구조선 018", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20797", + "21001" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-019", + "name": "CS-CONC-MAJR 구조선 019", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20821", + "21026" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-020", + "name": "CS-CONC-MAJR 구조선 020", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20796", + "21000" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.89906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.32170900000003 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-021", + "name": "CS-CONC-MAJR 구조선 021", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20798", + "21002" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.5, + 101.87406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.5, + 101.29670900000004 + ] + ] + }, + { + "id": "alignment-1-major-022", + "name": "CS-CONC-MAJR 구조선 022", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20813", + "21018" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.87906300000009 + ], + [ + -7.5, + 101.88406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.30170900000003 + ], + [ + -7.5, + 101.30670900000003 + ] + ] + }, + { + "id": "alignment-1-major-023", + "name": "CS-CONC-MAJR 구조선 023", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20814", + "21019" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.88906300000008 + ], + [ + -7.5, + 101.89406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.31170900000004 + ], + [ + -7.5, + 101.31670900000003 + ] + ] + }, + { + "id": "alignment-1-major-024", + "name": "CS-CONC-MAJR 구조선 024", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20815", + "21020" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.89906300000008 + ], + [ + -7.5, + 101.90406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.32170900000003 + ], + [ + -7.5, + 101.32670900000004 + ] + ] + }, + { + "id": "alignment-1-major-025", + "name": "CS-CONC-MAJR 구조선 025", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20816", + "21021" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.90906300000009 + ], + [ + -7.5, + 101.91406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.33170900000003 + ], + [ + -7.5, + 101.33670900000003 + ] + ] + }, + { + "id": "alignment-1-major-026", + "name": "CS-CONC-MAJR 구조선 026", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20817", + "21022" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.91906300000008 + ], + [ + -7.5, + 101.92406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.34170900000004 + ], + [ + -7.5, + 101.34670900000003 + ] + ] + }, + { + "id": "alignment-1-major-027", + "name": "CS-CONC-MAJR 구조선 027", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20818", + "21023" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.92906300000008 + ], + [ + -7.5, + 101.93406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.35170900000003 + ], + [ + -7.5, + 101.35670900000004 + ] + ] + }, + { + "id": "alignment-1-major-028", + "name": "CS-CONC-MAJR 구조선 028", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20819", + "21024" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.93906300000009 + ], + [ + -7.5, + 101.94406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.36170900000003 + ], + [ + -7.5, + 101.36670900000003 + ] + ] + }, + { + "id": "alignment-1-major-029", + "name": "CS-CONC-MAJR 구조선 029", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20820", + "21025" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.94906300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.37170900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-030", + "name": "CS-CONC-MAJR 구조선 030", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20822", + "21027" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-031", + "name": "CS-CONC-MAJR 구조선 031", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20831", + "21036" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-032", + "name": "CS-CONC-MAJR 구조선 032", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20799", + "21003" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -1.0, + 102.00406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -1.0, + 101.42670900000003 + ] + ] + }, + { + "id": "alignment-1-major-033", + "name": "CS-CONC-MAJR 구조선 033", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20823", + "21028" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.88406300000008 + ], + [ + -1.0, + 102.01406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.30670900000003 + ], + [ + -1.0, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-major-034", + "name": "CS-CONC-MAJR 구조선 034", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20824", + "21029" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.89406300000009 + ], + [ + -1.0, + 102.02406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.31670900000003 + ], + [ + -1.0, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-1-major-035", + "name": "CS-CONC-MAJR 구조선 035", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20825", + "21030" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.90406300000008 + ], + [ + -1.0, + 102.03406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.32670900000004 + ], + [ + -1.0, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-1-major-036", + "name": "CS-CONC-MAJR 구조선 036", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20826", + "21031" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.91406300000008 + ], + [ + -1.0, + 102.04406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.33670900000003 + ], + [ + -1.0, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-1-major-037", + "name": "CS-CONC-MAJR 구조선 037", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20827", + "21032" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.92406300000009 + ], + [ + -1.0, + 102.05406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.34670900000003 + ], + [ + -1.0, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-1-major-038", + "name": "CS-CONC-MAJR 구조선 038", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20828", + "21033" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.93406300000008 + ], + [ + -1.0, + 102.06406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.35670900000004 + ], + [ + -1.0, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-1-major-039", + "name": "CS-CONC-MAJR 구조선 039", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20829", + "21034" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.94406300000009 + ], + [ + -1.0, + 102.07406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.36670900000003 + ], + [ + -1.0, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-1-major-040", + "name": "CS-CONC-MAJR 구조선 040", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20830", + "21035" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.95406300000008 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.37670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-041", + "name": "CS-CONC-MAJR 구조선 041", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20832", + "21037" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-042", + "name": "CS-CONC-MAJR 구조선 042", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20841", + "21046" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-043", + "name": "CS-CONC-MAJR 구조선 043", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20800", + "21004" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-major-044", + "name": "CS-CONC-MAJR 구조선 044", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20833", + "21038" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.01406300000008 + ], + [ + -0.5, + 102.02406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.43670900000004 + ], + [ + -0.5, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-1-major-045", + "name": "CS-CONC-MAJR 구조선 045", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20834", + "21039" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.02406300000008 + ], + [ + -0.5, + 102.03406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.44670900000003 + ], + [ + -0.5, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-1-major-046", + "name": "CS-CONC-MAJR 구조선 046", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20835", + "21040" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.03406300000009 + ], + [ + -0.5, + 102.04406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.45670900000003 + ], + [ + -0.5, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-1-major-047", + "name": "CS-CONC-MAJR 구조선 047", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20836", + "21041" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.04406300000008 + ], + [ + -0.5, + 102.05406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.46670900000004 + ], + [ + -0.5, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-1-major-048", + "name": "CS-CONC-MAJR 구조선 048", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20837", + "21042" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.05406300000008 + ], + [ + -0.5, + 102.06406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.47670900000003 + ], + [ + -0.5, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-1-major-049", + "name": "CS-CONC-MAJR 구조선 049", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20838", + "21043" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.06406300000009 + ], + [ + -0.5, + 102.07406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.48670900000003 + ], + [ + -0.5, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-1-major-050", + "name": "CS-CONC-MAJR 구조선 050", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20839", + "21044" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.07406300000008 + ], + [ + -0.5, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.49670900000004 + ], + [ + -0.5, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-051", + "name": "CS-CONC-MAJR 구조선 051", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20840", + "21045" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.08406300000009 + ], + [ + -0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.50670900000003 + ], + [ + -0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-1-major-052", + "name": "CS-CONC-MAJR 구조선 052", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20801", + "21005" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-major-053", + "name": "CS-CONC-MAJR 구조선 053", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20874", + "21047" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.277 + ] + ], + "b": [ + [ + -0.5, + 101.43670900000004 + ], + [ + -0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-1-major-054", + "name": "CS-CONC-MAJR 구조선 054", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20842", + "21079" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 102.01406300000008 + ], + [ + -0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-1-major-055", + "name": "CS-CONC-MAJR 구조선 055", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20788", + "20992" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 100.877 + ], + [ + 0.5, + 100.877 + ] + ], + "b": [ + [ + -0.5, + 100.392 + ], + [ + 0.5, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-056", + "name": "CS-CONC-MAJR 구조선 056", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20873", + "21078" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 102.277 + ], + [ + 0.5, + 102.277 + ] + ], + "b": [ + [ + -0.5, + 101.792 + ], + [ + 0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-1-major-057", + "name": "CS-CONC-MAJR 구조선 057", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20809", + "21014" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-major-058", + "name": "CS-CONC-MAJR 구조선 058", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20875", + "21056" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.277 + ] + ], + "b": [ + [ + 0.5, + 101.43670900000004 + ], + [ + 0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-1-major-059", + "name": "CS-CONC-MAJR 구조선 059", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20851", + "21080" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.01406300000008 + ], + [ + 0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-1-major-060", + "name": "CS-CONC-MAJR 구조선 060", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20810", + "21015" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.01406300000008 + ], + [ + 1.0, + 102.00406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.43670900000004 + ], + [ + 1.0, + 101.42670900000003 + ] + ] + }, + { + "id": "alignment-1-major-061", + "name": "CS-CONC-MAJR 구조선 061", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20843", + "21048" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.02406300000008 + ], + [ + 1.0, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.44670900000003 + ], + [ + 1.0, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-major-062", + "name": "CS-CONC-MAJR 구조선 062", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20844", + "21049" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.03406300000009 + ], + [ + 1.0, + 102.02406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.45670900000003 + ], + [ + 1.0, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-1-major-063", + "name": "CS-CONC-MAJR 구조선 063", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20845", + "21050" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.04406300000008 + ], + [ + 1.0, + 102.03406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.46670900000004 + ], + [ + 1.0, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-1-major-064", + "name": "CS-CONC-MAJR 구조선 064", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20846", + "21051" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.05406300000008 + ], + [ + 1.0, + 102.04406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.47670900000003 + ], + [ + 1.0, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-1-major-065", + "name": "CS-CONC-MAJR 구조선 065", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20847", + "21052" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.06406300000009 + ], + [ + 1.0, + 102.05406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.48670900000003 + ], + [ + 1.0, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-1-major-066", + "name": "CS-CONC-MAJR 구조선 066", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20848", + "21053" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.07406300000008 + ], + [ + 1.0, + 102.06406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.49670900000004 + ], + [ + 1.0, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-1-major-067", + "name": "CS-CONC-MAJR 구조선 067", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20849", + "21054" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.08406300000009 + ], + [ + 1.0, + 102.07406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.50670900000003 + ], + [ + 1.0, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-1-major-068", + "name": "CS-CONC-MAJR 구조선 068", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20850", + "21055" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.09406300000008 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.51670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-069", + "name": "CS-CONC-MAJR 구조선 069", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20789", + "20993" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 100.877 + ], + [ + 9.25, + 100.877 + ] + ], + "b": [ + [ + 0.5, + 100.392 + ], + [ + 9.25, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-070", + "name": "CS-CONC-MAJR 구조선 070", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20852", + "21057" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-071", + "name": "CS-CONC-MAJR 구조선 071", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20861", + "21066" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-1-major-072", + "name": "CS-CONC-MAJR 구조선 072", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20811", + "21016" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 7.5, + 101.87406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 7.5, + 101.29670900000004 + ] + ] + }, + { + "id": "alignment-1-major-073", + "name": "CS-CONC-MAJR 구조선 073", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20853", + "21058" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.01406300000008 + ], + [ + 7.5, + 101.88406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.43670900000004 + ], + [ + 7.5, + 101.30670900000003 + ] + ] + }, + { + "id": "alignment-1-major-074", + "name": "CS-CONC-MAJR 구조선 074", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20854", + "21059" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.02406300000008 + ], + [ + 7.5, + 101.89406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.44670900000003 + ], + [ + 7.5, + 101.31670900000003 + ] + ] + }, + { + "id": "alignment-1-major-075", + "name": "CS-CONC-MAJR 구조선 075", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20855", + "21060" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.03406300000009 + ], + [ + 7.5, + 101.90406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.45670900000003 + ], + [ + 7.5, + 101.32670900000004 + ] + ] + }, + { + "id": "alignment-1-major-076", + "name": "CS-CONC-MAJR 구조선 076", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20856", + "21061" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.04406300000008 + ], + [ + 7.5, + 101.91406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.46670900000004 + ], + [ + 7.5, + 101.33670900000003 + ] + ] + }, + { + "id": "alignment-1-major-077", + "name": "CS-CONC-MAJR 구조선 077", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20857", + "21062" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.05406300000008 + ], + [ + 7.5, + 101.92406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.47670900000003 + ], + [ + 7.5, + 101.34670900000003 + ] + ] + }, + { + "id": "alignment-1-major-078", + "name": "CS-CONC-MAJR 구조선 078", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20858", + "21063" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.06406300000009 + ], + [ + 7.5, + 101.93406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.48670900000003 + ], + [ + 7.5, + 101.35670900000004 + ] + ] + }, + { + "id": "alignment-1-major-079", + "name": "CS-CONC-MAJR 구조선 079", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20859", + "21064" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.07406300000008 + ], + [ + 7.5, + 101.94406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.49670900000004 + ], + [ + 7.5, + 101.36670900000003 + ] + ] + }, + { + "id": "alignment-1-major-080", + "name": "CS-CONC-MAJR 구조선 080", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20860", + "21065" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.08406300000009 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.50670900000003 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-081", + "name": "CS-CONC-MAJR 구조선 081", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20862", + "21067" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-082", + "name": "CS-CONC-MAJR 구조선 082", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20871", + "21076" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-1-major-083", + "name": "CS-CONC-MAJR 구조선 083", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20812", + "21017" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.75, + 101.29170900000004 + ] + ] + }, + { + "id": "alignment-1-major-084", + "name": "CS-CONC-MAJR 구조선 084", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20863", + "21068" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.88406300000008 + ], + [ + 7.75, + 101.87906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.30670900000003 + ], + [ + 7.75, + 101.30170900000003 + ] + ] + }, + { + "id": "alignment-1-major-085", + "name": "CS-CONC-MAJR 구조선 085", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20864", + "21069" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.89406300000009 + ], + [ + 7.75, + 101.88906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.31670900000003 + ], + [ + 7.75, + 101.31170900000004 + ] + ] + }, + { + "id": "alignment-1-major-086", + "name": "CS-CONC-MAJR 구조선 086", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20865", + "21070" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.90406300000008 + ], + [ + 7.75, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.32670900000004 + ], + [ + 7.75, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-087", + "name": "CS-CONC-MAJR 구조선 087", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20866", + "21071" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.91406300000008 + ], + [ + 7.75, + 101.90906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.33670900000003 + ], + [ + 7.75, + 101.33170900000003 + ] + ] + }, + { + "id": "alignment-1-major-088", + "name": "CS-CONC-MAJR 구조선 088", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20867", + "21072" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.92406300000009 + ], + [ + 7.75, + 101.91906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.34670900000003 + ], + [ + 7.75, + 101.34170900000004 + ] + ] + }, + { + "id": "alignment-1-major-089", + "name": "CS-CONC-MAJR 구조선 089", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20868", + "21073" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.93406300000008 + ], + [ + 7.75, + 101.92906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.35670900000004 + ], + [ + 7.75, + 101.35170900000003 + ] + ] + }, + { + "id": "alignment-1-major-090", + "name": "CS-CONC-MAJR 구조선 090", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20869", + "21074" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.94406300000009 + ], + [ + 7.75, + 101.93906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.36670900000003 + ], + [ + 7.75, + 101.36170900000003 + ] + ] + }, + { + "id": "alignment-1-major-091", + "name": "CS-CONC-MAJR 구조선 091", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20870", + "21075" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.95406300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.37670900000003 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-092", + "name": "CS-CONC-MAJR 구조선 092", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20802", + "21006" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.86906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-093", + "name": "CS-CONC-MAJR 구조선 093", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20872", + "21077" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.86906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-094", + "name": "CS-CONC-MAJR 구조선 094", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20803", + "21007" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.89906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.32170900000003 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-1-major-095", + "name": "CS-CONC-MAJR 구조선 095", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20804", + "21008" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.89906300000008 + ], + [ + 7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.32170900000003 + ], + [ + 7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-096", + "name": "CS-CONC-MAJR 구조선 096", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20805", + "21009" + ], + "entityType": "LINE", + "a": [ + [ + 7.8, + 101.577 + ], + [ + 7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.8, + 101.092 + ], + [ + 7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-097", + "name": "CS-CONC-MAJR 구조선 097", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20806", + "21010" + ], + "entityType": "LINE", + "a": [ + [ + 7.8, + 101.577 + ], + [ + 8.2, + 101.577 + ] + ], + "b": [ + [ + 7.8, + 101.092 + ], + [ + 8.2, + 101.092 + ] + ] + }, + { + "id": "alignment-1-major-098", + "name": "CS-CONC-MAJR 구조선 098", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20807", + "21011" + ], + "entityType": "LINE", + "a": [ + [ + 8.2, + 101.577 + ], + [ + 8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + 8.2, + 101.092 + ], + [ + 8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-099", + "name": "CS-CONC-MAJR 구조선 099", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20808", + "21012" + ], + "entityType": "LINE", + "a": [ + [ + 8.2, + 101.89906300000008 + ], + [ + 8.25, + 101.89906300000008 + ] + ], + "b": [ + [ + 8.2, + 101.32170900000003 + ], + [ + 8.25, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-1-major-100", + "name": "CS-CONC-MAJR 구조선 100", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20885", + "21090" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 102.94906300006062 + ], + [ + 9.25, + 107.215 + ] + ], + "b": [ + [ + 9.25, + 102.37170900006055 + ], + [ + 9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-101", + "name": "CS-CONC-MAJR 구조선 101", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20881", + "21086" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 107.215 + ], + [ + 9.75, + 107.215 + ] + ], + "b": [ + [ + 9.25, + 107.857 + ], + [ + 9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-102", + "name": "CS-CONC-MAJR 구조선 102", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20790", + "20994" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 100.877 + ], + [ + 10.15, + 100.877 + ] + ], + "b": [ + [ + 9.25, + 100.392 + ], + [ + 10.15, + 100.392 + ] + ] + }, + { + "id": "alignment-1-major-103", + "name": "CS-CONC-MAJR 구조선 103", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20882", + "21087" + ], + "entityType": "LINE", + "a": [ + [ + 9.75, + 106.215 + ], + [ + 9.75, + 107.215 + ] + ], + "b": [ + [ + 9.75, + 106.857 + ], + [ + 9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-1-major-104", + "name": "CS-CONC-MAJR 구조선 104", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20883", + "21088" + ], + "entityType": "LINE", + "a": [ + [ + 9.75, + 106.215 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 9.75, + 106.857 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-105", + "name": "CS-CONC-MAJR 구조선 105", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20884", + "21089" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 100.877 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 100.392 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-106", + "name": "CS-CONC-MAJR 구조선 106", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20893", + "21098" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 100.877 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 100.392 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-107", + "name": "CS-CONC-MAJR 구조선 107", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20892", + "21097" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 101.777 + ], + [ + 10.25, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 101.292 + ], + [ + 10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-1-major-108", + "name": "CS-CONC-MAJR 구조선 108", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20891", + "21096" + ], + "entityType": "LINE", + "a": [ + [ + 10.25, + 100.777 + ], + [ + 10.25, + 101.777 + ] + ], + "b": [ + [ + 10.25, + 100.292 + ], + [ + 10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-1-minor-001", + "name": "CS-CONC-MINR 구조선 001", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58096", + "58102" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.777 + ], + [ + -7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-1-minor-002", + "name": "CS-CONC-MINR 구조선 002", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58097", + "58103" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.777 + ], + [ + -0.5, + 101.777 + ] + ], + "b": [ + [ + -7.75, + 101.292 + ], + [ + -0.5, + 101.292 + ] + ] + }, + { + "id": "alignment-1-minor-003", + "name": "CS-CONC-MINR 구조선 003", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58095", + "58101" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-minor-004", + "name": "CS-CONC-MINR 구조선 004", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58099", + "58105" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-1-minor-005", + "name": "CS-CONC-MINR 구조선 005", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58100", + "58106" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 7.75, + 101.777 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-1-minor-006", + "name": "CS-CONC-MINR 구조선 006", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58098", + "58104" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.777 + ], + [ + 7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-1-insert-left-01", + "name": "블록 내부 윤곽 left 01", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F0", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.525000000260537, + 104.01906300006063 + ], + [ + -8.525000000260537, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.525000000260537, + 103.44170900006057 + ], + [ + -8.525000000260537, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-left-02", + "name": "블록 내부 윤곽 left 02", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F1", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.525000000260537, + 102.95356300000195 + ], + [ + -8.46500000002305, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.525000000260537, + 102.3762090000019 + ], + [ + -8.46500000002305, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-left-03", + "name": "블록 내부 윤곽 left 03", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F2", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.46500000002305, + 102.95356300000195 + ], + [ + -8.46500000002305, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.46500000002305, + 102.3762090000019 + ], + [ + -8.46500000002305, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-left-04", + "name": "블록 내부 윤곽 left 04", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F3", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "ARC", + "a": [ + [ + -8.465000000022584, + 104.01906300006063 + ], + [ + -8.465576441612793, + 104.02491570974436 + ], + [ + -8.467283614056418, + 104.0305435030772 + ], + [ + -8.470055911673699, + 104.03573010711743 + ], + [ + -8.473786796621978, + 104.0402762035805 + ], + [ + -8.478332893084968, + 104.04400708852882 + ], + [ + -8.483519497125176, + 104.0467793861461 + ], + [ + -8.489147290457971, + 104.04848655858963 + ], + [ + -8.495000000141793, + 104.04906300017983 + ], + [ + -8.500852709825617, + 104.04848655858963 + ], + [ + -8.50648050315841, + 104.0467793861461 + ], + [ + -8.51166710719862, + 104.04400708852882 + ], + [ + -8.516213203661609, + 104.0402762035805 + ], + [ + -8.51994408860989, + 104.03573010711743 + ], + [ + -8.52271638622717, + 104.0305435030772 + ], + [ + -8.524423558670794, + 104.02491570974436 + ], + [ + -8.525000000261004, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.465000000022584, + 103.44170900006057 + ], + [ + -8.465576441612793, + 103.4475617097443 + ], + [ + -8.467283614056418, + 103.45318950307714 + ], + [ + -8.470055911673699, + 103.45837610711737 + ], + [ + -8.473786796621978, + 103.46292220358046 + ], + [ + -8.478332893084968, + 103.46665308852876 + ], + [ + -8.483519497125176, + 103.46942538614604 + ], + [ + -8.489147290457971, + 103.47113255858959 + ], + [ + -8.495000000141793, + 103.47170900017977 + ], + [ + -8.500852709825617, + 103.47113255858959 + ], + [ + -8.50648050315841, + 103.46942538614604 + ], + [ + -8.51166710719862, + 103.46665308852876 + ], + [ + -8.516213203661609, + 103.46292220358046 + ], + [ + -8.51994408860989, + 103.45837610711737 + ], + [ + -8.52271638622717, + 103.45318950307714 + ], + [ + -8.524423558670794, + 103.4475617097443 + ], + [ + -8.525000000261004, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-left-05", + "name": "블록 내부 윤곽 left 05", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F4", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.450000000023051, + 102.95356300000195 + ], + [ + -8.540000000023051, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.450000000023051, + 102.3762090000019 + ], + [ + -8.540000000023051, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-left-06", + "name": "블록 내부 윤곽 left 06", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F5", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.540000000023051, + 102.95356300000195 + ], + [ + -8.540000000023051, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.540000000023051, + 102.3762090000019 + ], + [ + -8.540000000023051, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-left-07", + "name": "블록 내부 윤곽 left 07", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F6", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.540000000023051, + 102.94906300006062 + ], + [ + -8.450000000023051, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.540000000023051, + 102.37170900006056 + ], + [ + -8.450000000023051, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-left-08", + "name": "블록 내부 윤곽 left 08", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F7", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.450000000023051, + 102.94906300006062 + ], + [ + -8.450000000023051, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.450000000023051, + 102.37170900006056 + ], + [ + -8.450000000023051, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-left-09", + "name": "블록 내부 윤곽 left 09", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F8", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "ARC", + "a": [ + [ + -8.52500000002305, + 104.01906300006063 + ], + [ + -8.52442355843517, + 104.01321029040014 + ], + [ + -8.522716385998297, + 104.00758249708967 + ], + [ + -8.519944088392192, + 104.00239589307003 + ], + [ + -8.51621320345858, + 103.99784979662503 + ], + [ + -8.511667107013754, + 103.99411891169156 + ], + [ + -8.506480502994032, + 103.99134661408529 + ], + [ + -8.50085270968359, + 103.98963944164854 + ], + [ + -8.495000000023051, + 103.98906300006063 + ], + [ + -8.48914729036251, + 103.98963944164854 + ], + [ + -8.483519497052068, + 103.99134661408529 + ], + [ + -8.478332893032348, + 103.99411891169156 + ], + [ + -8.47378679658752, + 103.99784979662503 + ], + [ + -8.470055911653908, + 104.00239589307003 + ], + [ + -8.467283614047803, + 104.00758249708967 + ], + [ + -8.465576441610931, + 104.01321029040014 + ], + [ + -8.46500000002305, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.52500000002305, + 103.44170900006057 + ], + [ + -8.52442355843517, + 103.43585629040008 + ], + [ + -8.522716385998297, + 103.43022849708962 + ], + [ + -8.519944088392192, + 103.42504189306999 + ], + [ + -8.51621320345858, + 103.42049579662498 + ], + [ + -8.511667107013754, + 103.4167649116915 + ], + [ + -8.506480502994032, + 103.41399261408523 + ], + [ + -8.50085270968359, + 103.41228544164848 + ], + [ + -8.495000000023051, + 103.41170900006057 + ], + [ + -8.48914729036251, + 103.41228544164848 + ], + [ + -8.483519497052068, + 103.41399261408523 + ], + [ + -8.478332893032348, + 103.4167649116915 + ], + [ + -8.47378679658752, + 103.42049579662498 + ], + [ + -8.470055911653908, + 103.42504189306999 + ], + [ + -8.467283614047803, + 103.43022849708962 + ], + [ + -8.465576441610931, + 103.43585629040008 + ], + [ + -8.46500000002305, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-left-10", + "name": "블록 내부 윤곽 left 10", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F9", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.25000000002305, + 101.94906300000008 + ], + [ + -8.25000000002305, + 102.07406300000008 + ] + ], + "b": [ + [ + -8.25000000002305, + 101.37170900000004 + ], + [ + -8.25000000002305, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-1-insert-left-11", + "name": "블록 내부 윤곽 left 11", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FA", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.25000000002305, + 102.07406300000008 + ], + [ + -8.370000000023051, + 102.24906300000009 + ] + ], + "b": [ + [ + -8.25000000002305, + 101.49670900000004 + ], + [ + -8.370000000023051, + 101.67170900000004 + ] + ] + }, + { + "id": "alignment-1-insert-left-12", + "name": "블록 내부 윤곽 left 12", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FB", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.370000000023051, + 102.24906300000009 + ], + [ + -8.42000000002305, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.370000000023051, + 101.67170900000004 + ], + [ + -8.42000000002305, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-left-13", + "name": "블록 내부 윤곽 left 13", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FC", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.42000000002305, + 102.94906300006062 + ], + [ + -9.25000000002305, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.42000000002305, + 102.37170900006056 + ], + [ + -9.25000000002305, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-left-14", + "name": "블록 내부 윤곽 left 14", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FD", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.88806300000148 + ], + [ + -9.200000000023051, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.31070900000142 + ], + [ + -9.200000000023051, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-1-insert-left-15", + "name": "블록 내부 윤곽 left 15", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FE", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.200000000023051, + 102.88806300000148 + ], + [ + -9.200000000023051, + 102.94806300000381 + ] + ], + "b": [ + [ + -9.200000000023051, + 102.31070900000142 + ], + [ + -9.200000000023051, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-1-insert-left-16", + "name": "블록 내부 윤곽 left 16", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FF", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.94806300000381 + ], + [ + -9.25000000002305, + 102.94806300000381 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.37070900000376 + ], + [ + -9.25000000002305, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-1-insert-left-17", + "name": "블록 내부 윤곽 left 17", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155700", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.150000000260537, + 102.88806300000148 + ], + [ + -9.150000000260537, + 102.58806300000148 + ] + ], + "b": [ + [ + -9.150000000260537, + 102.31070900000142 + ], + [ + -9.150000000260537, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-1-insert-left-18", + "name": "블록 내부 윤곽 left 18", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155701", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.150000000260537, + 102.58806300000148 + ], + [ + -8.85000000002305, + 102.58806300000148 + ] + ], + "b": [ + [ + -9.150000000260537, + 102.01070900000143 + ], + [ + -8.85000000002305, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-1-insert-left-19", + "name": "블록 내부 윤곽 left 19", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155702", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.85000000002305, + 102.58806300000148 + ], + [ + -8.85000000002305, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.85000000002305, + 102.01070900000143 + ], + [ + -8.85000000002305, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-1-insert-left-20", + "name": "블록 내부 윤곽 left 20", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155703", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.94806300000381 + ], + [ + -8.80000000002305, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.37070900000376 + ], + [ + -8.80000000002305, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-1-insert-right-01", + "name": "블록 내부 윤곽 right 01", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F0", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.525000000259606, + 104.01906300006063 + ], + [ + 8.525000000259606, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.525000000259606, + 103.44170900006057 + ], + [ + 8.525000000259606, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-right-02", + "name": "블록 내부 윤곽 right 02", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F1", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.525000000259606, + 102.95356300000195 + ], + [ + 8.465000000022119, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.525000000259606, + 102.3762090000019 + ], + [ + 8.465000000022119, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-right-03", + "name": "블록 내부 윤곽 right 03", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F2", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.465000000022119, + 102.95356300000195 + ], + [ + 8.465000000022119, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.465000000022119, + 102.3762090000019 + ], + [ + 8.465000000022119, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-right-04", + "name": "블록 내부 윤곽 right 04", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F3", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "ARC", + "a": [ + [ + 8.465000000021654, + 104.01906300006063 + ], + [ + 8.465576441611862, + 104.02491570974436 + ], + [ + 8.467283614055486, + 104.0305435030772 + ], + [ + 8.470055911672768, + 104.03573010711743 + ], + [ + 8.473786796621047, + 104.0402762035805 + ], + [ + 8.478332893084037, + 104.04400708852882 + ], + [ + 8.483519497124245, + 104.0467793861461 + ], + [ + 8.48914729045704, + 104.04848655858963 + ], + [ + 8.495000000140863, + 104.04906300017983 + ], + [ + 8.500852709824684, + 104.04848655858963 + ], + [ + 8.50648050315748, + 104.0467793861461 + ], + [ + 8.511667107197688, + 104.04400708852882 + ], + [ + 8.516213203660678, + 104.0402762035805 + ], + [ + 8.519944088608957, + 104.03573010711743 + ], + [ + 8.52271638622624, + 104.0305435030772 + ], + [ + 8.524423558669863, + 104.02491570974436 + ], + [ + 8.525000000260071, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.465000000021654, + 103.44170900006057 + ], + [ + 8.465576441611862, + 103.4475617097443 + ], + [ + 8.467283614055486, + 103.45318950307714 + ], + [ + 8.470055911672768, + 103.45837610711737 + ], + [ + 8.473786796621047, + 103.46292220358046 + ], + [ + 8.478332893084037, + 103.46665308852876 + ], + [ + 8.483519497124245, + 103.46942538614604 + ], + [ + 8.48914729045704, + 103.47113255858959 + ], + [ + 8.495000000140863, + 103.47170900017977 + ], + [ + 8.500852709824684, + 103.47113255858959 + ], + [ + 8.50648050315748, + 103.46942538614604 + ], + [ + 8.511667107197688, + 103.46665308852876 + ], + [ + 8.516213203660678, + 103.46292220358046 + ], + [ + 8.519944088608957, + 103.45837610711737 + ], + [ + 8.52271638622624, + 103.45318950307714 + ], + [ + 8.524423558669863, + 103.4475617097443 + ], + [ + 8.525000000260071, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-right-05", + "name": "블록 내부 윤곽 right 05", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F4", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.450000000022118, + 102.95356300000195 + ], + [ + 8.540000000022118, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.450000000022118, + 102.3762090000019 + ], + [ + 8.540000000022118, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-right-06", + "name": "블록 내부 윤곽 right 06", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F5", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.540000000022118, + 102.95356300000195 + ], + [ + 8.540000000022118, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.540000000022118, + 102.3762090000019 + ], + [ + 8.540000000022118, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-right-07", + "name": "블록 내부 윤곽 right 07", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F6", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.540000000022118, + 102.94906300006062 + ], + [ + 8.450000000022118, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.540000000022118, + 102.37170900006056 + ], + [ + 8.450000000022118, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-right-08", + "name": "블록 내부 윤곽 right 08", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F7", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.450000000022118, + 102.94906300006062 + ], + [ + 8.450000000022118, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.450000000022118, + 102.37170900006056 + ], + [ + 8.450000000022118, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-1-insert-right-09", + "name": "블록 내부 윤곽 right 09", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F8", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "ARC", + "a": [ + [ + 8.52500000002212, + 104.01906300006063 + ], + [ + 8.524423558434238, + 104.01321029040014 + ], + [ + 8.522716385997366, + 104.00758249708967 + ], + [ + 8.519944088391261, + 104.00239589307003 + ], + [ + 8.51621320345765, + 103.99784979662503 + ], + [ + 8.511667107012821, + 103.99411891169156 + ], + [ + 8.506480502993101, + 103.99134661408529 + ], + [ + 8.500852709682658, + 103.98963944164854 + ], + [ + 8.495000000022118, + 103.98906300006063 + ], + [ + 8.48914729036158, + 103.98963944164854 + ], + [ + 8.483519497051137, + 103.99134661408529 + ], + [ + 8.478332893031416, + 103.99411891169156 + ], + [ + 8.473786796586587, + 103.99784979662503 + ], + [ + 8.470055911652977, + 104.00239589307003 + ], + [ + 8.467283614046872, + 104.00758249708967 + ], + [ + 8.465576441609999, + 104.01321029040014 + ], + [ + 8.465000000022119, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.52500000002212, + 103.44170900006057 + ], + [ + 8.524423558434238, + 103.43585629040008 + ], + [ + 8.522716385997366, + 103.43022849708962 + ], + [ + 8.519944088391261, + 103.42504189306999 + ], + [ + 8.51621320345765, + 103.42049579662498 + ], + [ + 8.511667107012821, + 103.4167649116915 + ], + [ + 8.506480502993101, + 103.41399261408523 + ], + [ + 8.500852709682658, + 103.41228544164848 + ], + [ + 8.495000000022118, + 103.41170900006057 + ], + [ + 8.48914729036158, + 103.41228544164848 + ], + [ + 8.483519497051137, + 103.41399261408523 + ], + [ + 8.478332893031416, + 103.4167649116915 + ], + [ + 8.473786796586587, + 103.42049579662498 + ], + [ + 8.470055911652977, + 103.42504189306999 + ], + [ + 8.467283614046872, + 103.43022849708962 + ], + [ + 8.465576441609999, + 103.43585629040008 + ], + [ + 8.465000000022119, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-1-insert-right-10", + "name": "블록 내부 윤곽 right 10", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F9", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.25000000002212, + 101.94906300000008 + ], + [ + 8.25000000002212, + 102.07406300000008 + ] + ], + "b": [ + [ + 8.25000000002212, + 101.37170900000004 + ], + [ + 8.25000000002212, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-1-insert-right-11", + "name": "블록 내부 윤곽 right 11", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FA", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.25000000002212, + 102.07406300000008 + ], + [ + 8.370000000022118, + 102.24906300000009 + ] + ], + "b": [ + [ + 8.25000000002212, + 101.49670900000004 + ], + [ + 8.370000000022118, + 101.67170900000004 + ] + ] + }, + { + "id": "alignment-1-insert-right-12", + "name": "블록 내부 윤곽 right 12", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FB", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.370000000022118, + 102.24906300000009 + ], + [ + 8.42000000002212, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.370000000022118, + 101.67170900000004 + ], + [ + 8.42000000002212, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-right-13", + "name": "블록 내부 윤곽 right 13", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FC", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.42000000002212, + 102.94906300006062 + ], + [ + 9.25000000002212, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.42000000002212, + 102.37170900006056 + ], + [ + 9.25000000002212, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-1-insert-right-14", + "name": "블록 내부 윤곽 right 14", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FD", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.88806300000148 + ], + [ + 9.200000000022118, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.31070900000142 + ], + [ + 9.200000000022118, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-1-insert-right-15", + "name": "블록 내부 윤곽 right 15", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FE", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.200000000022118, + 102.88806300000148 + ], + [ + 9.200000000022118, + 102.94806300000381 + ] + ], + "b": [ + [ + 9.200000000022118, + 102.31070900000142 + ], + [ + 9.200000000022118, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-1-insert-right-16", + "name": "블록 내부 윤곽 right 16", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FF", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.94806300000381 + ], + [ + 9.25000000002212, + 102.94806300000381 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.37070900000376 + ], + [ + 9.25000000002212, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-1-insert-right-17", + "name": "블록 내부 윤곽 right 17", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155700", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.150000000259606, + 102.88806300000148 + ], + [ + 9.150000000259606, + 102.58806300000148 + ] + ], + "b": [ + [ + 9.150000000259606, + 102.31070900000142 + ], + [ + 9.150000000259606, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-1-insert-right-18", + "name": "블록 내부 윤곽 right 18", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155701", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.150000000259606, + 102.58806300000148 + ], + [ + 8.850000000022119, + 102.58806300000148 + ] + ], + "b": [ + [ + 9.150000000259606, + 102.01070900000143 + ], + [ + 8.850000000022119, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-1-insert-right-19", + "name": "블록 내부 윤곽 right 19", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155702", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.850000000022119, + 102.58806300000148 + ], + [ + 8.850000000022119, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.850000000022119, + 102.01070900000143 + ], + [ + 8.850000000022119, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-1-insert-right-20", + "name": "블록 내부 윤곽 right 20", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155703", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.94806300000381 + ], + [ + 8.800000000022118, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.37070900000376 + ], + [ + 8.800000000022118, + 102.31070900000142 + ] + ] + } + ] + }, + { + "id": "alignment-2", + "name": "BLOCK8 평면 중심선 2", + "center": [ + 17.5, + 1700.0 + ], + "planOrigin": [ + 1231533.514405643, + -78753.23558031511 + ], + "radius": 1700.0, + "startAngle": 269.6633030368886, + "endAngle": 270.33669696314513, + "length": 19.979999999384816, + "centerlineHandle": "101567", + "boundaryHandles": [ + "21197", + "21198" + ], + "parts": [ + { + "id": "alignment-2-major-001", + "name": "CS-CONC-MAJR 구조선 001", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20894", + "21099" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 100.777 + ], + [ + -10.25, + 101.777 + ] + ], + "b": [ + [ + -10.25, + 100.292 + ], + [ + -10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-002", + "name": "CS-CONC-MAJR 구조선 002", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20895", + "21100" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 101.777 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.25, + 101.292 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-003", + "name": "CS-CONC-MAJR 구조선 003", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20897", + "21102" + ], + "entityType": "LINE", + "a": [ + [ + -10.25, + 100.777 + ], + [ + 10.25, + 100.777 + ] + ], + "b": [ + [ + -10.25, + 100.292 + ], + [ + 10.25, + 100.292 + ] + ] + }, + { + "id": "alignment-2-major-004", + "name": "CS-CONC-MAJR 구조선 004", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20879", + "21084" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-005", + "name": "CS-CONC-MAJR 구조선 005", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20896", + "21101" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -10.15, + 101.777 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-006", + "name": "CS-CONC-MAJR 구조선 006", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20878", + "21083" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 101.777 + ], + [ + -9.75, + 106.215 + ] + ], + "b": [ + [ + -10.15, + 101.292 + ], + [ + -9.75, + 106.857 + ] + ] + }, + { + "id": "alignment-2-major-007", + "name": "CS-CONC-MAJR 구조선 007", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20786", + "20990" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + -9.25, + 100.877 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + -9.25, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-008", + "name": "CS-CONC-MAJR 구조선 008", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20890", + "21095" + ], + "entityType": "LINE", + "a": [ + [ + -10.15, + 100.877 + ], + [ + 10.15, + 100.877 + ] + ], + "b": [ + [ + -10.15, + 100.392 + ], + [ + 10.15, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-009", + "name": "CS-CONC-MAJR 구조선 009", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20877", + "21082" + ], + "entityType": "LINE", + "a": [ + [ + -9.75, + 106.215 + ], + [ + -9.75, + 107.215 + ] + ], + "b": [ + [ + -9.75, + 106.857 + ], + [ + -9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-010", + "name": "CS-CONC-MAJR 구조선 010", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20876", + "21081" + ], + "entityType": "LINE", + "a": [ + [ + -9.75, + 107.215 + ], + [ + -9.25, + 107.215 + ] + ], + "b": [ + [ + -9.75, + 107.857 + ], + [ + -9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-011", + "name": "CS-CONC-MAJR 구조선 011", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20880", + "21085" + ], + "entityType": "LINE", + "a": [ + [ + -9.25, + 102.94906300006062 + ], + [ + -9.25, + 107.215 + ] + ], + "b": [ + [ + -9.25, + 102.37170900006055 + ], + [ + -9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-012", + "name": "CS-CONC-MAJR 구조선 012", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20787", + "20991" + ], + "entityType": "LINE", + "a": [ + [ + -9.25, + 100.877 + ], + [ + -0.5, + 100.877 + ] + ], + "b": [ + [ + -9.25, + 100.392 + ], + [ + -0.5, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-013", + "name": "CS-CONC-MAJR 구조선 013", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20791", + "20995" + ], + "entityType": "LINE", + "a": [ + [ + -8.25, + 101.89906300000008 + ], + [ + -8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + -8.25, + 101.32170900000003 + ], + [ + -8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-014", + "name": "CS-CONC-MAJR 구조선 014", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20792", + "20996" + ], + "entityType": "LINE", + "a": [ + [ + -8.2, + 101.577 + ], + [ + -8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + -8.2, + 101.092 + ], + [ + -8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-015", + "name": "CS-CONC-MAJR 구조선 015", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20793", + "20997" + ], + "entityType": "LINE", + "a": [ + [ + -8.2, + 101.577 + ], + [ + -7.8, + 101.577 + ] + ], + "b": [ + [ + -8.2, + 101.092 + ], + [ + -7.8, + 101.092 + ] + ] + }, + { + "id": "alignment-2-major-016", + "name": "CS-CONC-MAJR 구조선 016", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20794", + "20998" + ], + "entityType": "LINE", + "a": [ + [ + -7.8, + 101.577 + ], + [ + -7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + -7.8, + 101.092 + ], + [ + -7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-017", + "name": "CS-CONC-MAJR 구조선 017", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20795", + "20999" + ], + "entityType": "LINE", + "a": [ + [ + -7.8, + 101.89906300000008 + ], + [ + -7.75, + 101.89906300000008 + ] + ], + "b": [ + [ + -7.8, + 101.32170900000003 + ], + [ + -7.75, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-018", + "name": "CS-CONC-MAJR 구조선 018", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20797", + "21001" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-019", + "name": "CS-CONC-MAJR 구조선 019", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20821", + "21026" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-020", + "name": "CS-CONC-MAJR 구조선 020", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20796", + "21000" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.89906300000008 + ], + [ + -7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.32170900000003 + ], + [ + -7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-021", + "name": "CS-CONC-MAJR 구조선 021", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20798", + "21002" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.86906300000008 + ], + [ + -7.5, + 101.87406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.5, + 101.29670900000004 + ] + ] + }, + { + "id": "alignment-2-major-022", + "name": "CS-CONC-MAJR 구조선 022", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20813", + "21018" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.87906300000009 + ], + [ + -7.5, + 101.88406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.30170900000003 + ], + [ + -7.5, + 101.30670900000003 + ] + ] + }, + { + "id": "alignment-2-major-023", + "name": "CS-CONC-MAJR 구조선 023", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20814", + "21019" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.88906300000008 + ], + [ + -7.5, + 101.89406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.31170900000004 + ], + [ + -7.5, + 101.31670900000003 + ] + ] + }, + { + "id": "alignment-2-major-024", + "name": "CS-CONC-MAJR 구조선 024", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20815", + "21020" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.89906300000008 + ], + [ + -7.5, + 101.90406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.32170900000003 + ], + [ + -7.5, + 101.32670900000004 + ] + ] + }, + { + "id": "alignment-2-major-025", + "name": "CS-CONC-MAJR 구조선 025", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20816", + "21021" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.90906300000009 + ], + [ + -7.5, + 101.91406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.33170900000003 + ], + [ + -7.5, + 101.33670900000003 + ] + ] + }, + { + "id": "alignment-2-major-026", + "name": "CS-CONC-MAJR 구조선 026", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20817", + "21022" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.91906300000008 + ], + [ + -7.5, + 101.92406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.34170900000004 + ], + [ + -7.5, + 101.34670900000003 + ] + ] + }, + { + "id": "alignment-2-major-027", + "name": "CS-CONC-MAJR 구조선 027", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20818", + "21023" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.92906300000008 + ], + [ + -7.5, + 101.93406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.35170900000003 + ], + [ + -7.5, + 101.35670900000004 + ] + ] + }, + { + "id": "alignment-2-major-028", + "name": "CS-CONC-MAJR 구조선 028", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20819", + "21024" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.93906300000009 + ], + [ + -7.5, + 101.94406300000009 + ] + ], + "b": [ + [ + -7.75, + 101.36170900000003 + ], + [ + -7.5, + 101.36670900000003 + ] + ] + }, + { + "id": "alignment-2-major-029", + "name": "CS-CONC-MAJR 구조선 029", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20820", + "21025" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.94906300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.75, + 101.37170900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-030", + "name": "CS-CONC-MAJR 구조선 030", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20822", + "21027" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-031", + "name": "CS-CONC-MAJR 구조선 031", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20831", + "21036" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-032", + "name": "CS-CONC-MAJR 구조선 032", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20799", + "21003" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.87406300000008 + ], + [ + -1.0, + 102.00406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.29670900000004 + ], + [ + -1.0, + 101.42670900000003 + ] + ] + }, + { + "id": "alignment-2-major-033", + "name": "CS-CONC-MAJR 구조선 033", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20823", + "21028" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.88406300000008 + ], + [ + -1.0, + 102.01406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.30670900000003 + ], + [ + -1.0, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-major-034", + "name": "CS-CONC-MAJR 구조선 034", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20824", + "21029" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.89406300000009 + ], + [ + -1.0, + 102.02406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.31670900000003 + ], + [ + -1.0, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-2-major-035", + "name": "CS-CONC-MAJR 구조선 035", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20825", + "21030" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.90406300000008 + ], + [ + -1.0, + 102.03406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.32670900000004 + ], + [ + -1.0, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-2-major-036", + "name": "CS-CONC-MAJR 구조선 036", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20826", + "21031" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.91406300000008 + ], + [ + -1.0, + 102.04406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.33670900000003 + ], + [ + -1.0, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-2-major-037", + "name": "CS-CONC-MAJR 구조선 037", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20827", + "21032" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.92406300000009 + ], + [ + -1.0, + 102.05406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.34670900000003 + ], + [ + -1.0, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-2-major-038", + "name": "CS-CONC-MAJR 구조선 038", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20828", + "21033" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.93406300000008 + ], + [ + -1.0, + 102.06406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.35670900000004 + ], + [ + -1.0, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-2-major-039", + "name": "CS-CONC-MAJR 구조선 039", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20829", + "21034" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.94406300000009 + ], + [ + -1.0, + 102.07406300000008 + ] + ], + "b": [ + [ + -7.5, + 101.36670900000003 + ], + [ + -1.0, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-2-major-040", + "name": "CS-CONC-MAJR 구조선 040", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20830", + "21035" + ], + "entityType": "LINE", + "a": [ + [ + -7.5, + 101.95406300000008 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -7.5, + 101.37670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-041", + "name": "CS-CONC-MAJR 구조선 041", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20832", + "21037" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-042", + "name": "CS-CONC-MAJR 구조선 042", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20841", + "21046" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-043", + "name": "CS-CONC-MAJR 구조선 043", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20800", + "21004" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.00406300000009 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.42670900000003 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-major-044", + "name": "CS-CONC-MAJR 구조선 044", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20833", + "21038" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.01406300000008 + ], + [ + -0.5, + 102.02406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.43670900000004 + ], + [ + -0.5, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-2-major-045", + "name": "CS-CONC-MAJR 구조선 045", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20834", + "21039" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.02406300000008 + ], + [ + -0.5, + 102.03406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.44670900000003 + ], + [ + -0.5, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-2-major-046", + "name": "CS-CONC-MAJR 구조선 046", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20835", + "21040" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.03406300000009 + ], + [ + -0.5, + 102.04406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.45670900000003 + ], + [ + -0.5, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-2-major-047", + "name": "CS-CONC-MAJR 구조선 047", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20836", + "21041" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.04406300000008 + ], + [ + -0.5, + 102.05406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.46670900000004 + ], + [ + -0.5, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-2-major-048", + "name": "CS-CONC-MAJR 구조선 048", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20837", + "21042" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.05406300000008 + ], + [ + -0.5, + 102.06406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.47670900000003 + ], + [ + -0.5, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-2-major-049", + "name": "CS-CONC-MAJR 구조선 049", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20838", + "21043" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.06406300000009 + ], + [ + -0.5, + 102.07406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.48670900000003 + ], + [ + -0.5, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-2-major-050", + "name": "CS-CONC-MAJR 구조선 050", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20839", + "21044" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.07406300000008 + ], + [ + -0.5, + 102.08406300000009 + ] + ], + "b": [ + [ + -1.0, + 101.49670900000004 + ], + [ + -0.5, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-051", + "name": "CS-CONC-MAJR 구조선 051", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20840", + "21045" + ], + "entityType": "LINE", + "a": [ + [ + -1.0, + 102.08406300000009 + ], + [ + -0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + -1.0, + 101.50670900000003 + ], + [ + -0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-2-major-052", + "name": "CS-CONC-MAJR 구조선 052", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20801", + "21005" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-major-053", + "name": "CS-CONC-MAJR 구조선 053", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20874", + "21047" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.277 + ] + ], + "b": [ + [ + -0.5, + 101.43670900000004 + ], + [ + -0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-2-major-054", + "name": "CS-CONC-MAJR 구조선 054", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20842", + "21079" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 102.01406300000008 + ], + [ + -0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-2-major-055", + "name": "CS-CONC-MAJR 구조선 055", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20788", + "20992" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 100.877 + ], + [ + 0.5, + 100.877 + ] + ], + "b": [ + [ + -0.5, + 100.392 + ], + [ + 0.5, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-056", + "name": "CS-CONC-MAJR 구조선 056", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20873", + "21078" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 102.277 + ], + [ + 0.5, + 102.277 + ] + ], + "b": [ + [ + -0.5, + 101.792 + ], + [ + 0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-2-major-057", + "name": "CS-CONC-MAJR 구조선 057", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20809", + "21014" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-major-058", + "name": "CS-CONC-MAJR 구조선 058", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20875", + "21056" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.277 + ] + ], + "b": [ + [ + 0.5, + 101.43670900000004 + ], + [ + 0.5, + 101.51670900000003 + ] + ] + }, + { + "id": "alignment-2-major-059", + "name": "CS-CONC-MAJR 구조선 059", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20851", + "21080" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.01406300000008 + ], + [ + 0.5, + 102.09406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.792 + ] + ] + }, + { + "id": "alignment-2-major-060", + "name": "CS-CONC-MAJR 구조선 060", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20810", + "21015" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.01406300000008 + ], + [ + 1.0, + 102.00406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.43670900000004 + ], + [ + 1.0, + 101.42670900000003 + ] + ] + }, + { + "id": "alignment-2-major-061", + "name": "CS-CONC-MAJR 구조선 061", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20843", + "21048" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.02406300000008 + ], + [ + 1.0, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.44670900000003 + ], + [ + 1.0, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-major-062", + "name": "CS-CONC-MAJR 구조선 062", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20844", + "21049" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.03406300000009 + ], + [ + 1.0, + 102.02406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.45670900000003 + ], + [ + 1.0, + 101.44670900000003 + ] + ] + }, + { + "id": "alignment-2-major-063", + "name": "CS-CONC-MAJR 구조선 063", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20845", + "21050" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.04406300000008 + ], + [ + 1.0, + 102.03406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.46670900000004 + ], + [ + 1.0, + 101.45670900000003 + ] + ] + }, + { + "id": "alignment-2-major-064", + "name": "CS-CONC-MAJR 구조선 064", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20846", + "21051" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.05406300000008 + ], + [ + 1.0, + 102.04406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.47670900000003 + ], + [ + 1.0, + 101.46670900000004 + ] + ] + }, + { + "id": "alignment-2-major-065", + "name": "CS-CONC-MAJR 구조선 065", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20847", + "21052" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.06406300000009 + ], + [ + 1.0, + 102.05406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.48670900000003 + ], + [ + 1.0, + 101.47670900000003 + ] + ] + }, + { + "id": "alignment-2-major-066", + "name": "CS-CONC-MAJR 구조선 066", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20848", + "21053" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.07406300000008 + ], + [ + 1.0, + 102.06406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.49670900000004 + ], + [ + 1.0, + 101.48670900000003 + ] + ] + }, + { + "id": "alignment-2-major-067", + "name": "CS-CONC-MAJR 구조선 067", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20849", + "21054" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.08406300000009 + ], + [ + 1.0, + 102.07406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.50670900000003 + ], + [ + 1.0, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-2-major-068", + "name": "CS-CONC-MAJR 구조선 068", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20850", + "21055" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 102.09406300000008 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 0.5, + 101.51670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-069", + "name": "CS-CONC-MAJR 구조선 069", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20789", + "20993" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 100.877 + ], + [ + 9.25, + 100.877 + ] + ], + "b": [ + [ + 0.5, + 100.392 + ], + [ + 9.25, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-070", + "name": "CS-CONC-MAJR 구조선 070", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20852", + "21057" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-071", + "name": "CS-CONC-MAJR 구조선 071", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20861", + "21066" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 1.0, + 102.08406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 1.0, + 101.50670900000003 + ] + ] + }, + { + "id": "alignment-2-major-072", + "name": "CS-CONC-MAJR 구조선 072", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20811", + "21016" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.00406300000009 + ], + [ + 7.5, + 101.87406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.42670900000003 + ], + [ + 7.5, + 101.29670900000004 + ] + ] + }, + { + "id": "alignment-2-major-073", + "name": "CS-CONC-MAJR 구조선 073", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20853", + "21058" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.01406300000008 + ], + [ + 7.5, + 101.88406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.43670900000004 + ], + [ + 7.5, + 101.30670900000003 + ] + ] + }, + { + "id": "alignment-2-major-074", + "name": "CS-CONC-MAJR 구조선 074", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20854", + "21059" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.02406300000008 + ], + [ + 7.5, + 101.89406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.44670900000003 + ], + [ + 7.5, + 101.31670900000003 + ] + ] + }, + { + "id": "alignment-2-major-075", + "name": "CS-CONC-MAJR 구조선 075", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20855", + "21060" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.03406300000009 + ], + [ + 7.5, + 101.90406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.45670900000003 + ], + [ + 7.5, + 101.32670900000004 + ] + ] + }, + { + "id": "alignment-2-major-076", + "name": "CS-CONC-MAJR 구조선 076", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20856", + "21061" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.04406300000008 + ], + [ + 7.5, + 101.91406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.46670900000004 + ], + [ + 7.5, + 101.33670900000003 + ] + ] + }, + { + "id": "alignment-2-major-077", + "name": "CS-CONC-MAJR 구조선 077", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20857", + "21062" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.05406300000008 + ], + [ + 7.5, + 101.92406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.47670900000003 + ], + [ + 7.5, + 101.34670900000003 + ] + ] + }, + { + "id": "alignment-2-major-078", + "name": "CS-CONC-MAJR 구조선 078", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20858", + "21063" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.06406300000009 + ], + [ + 7.5, + 101.93406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.48670900000003 + ], + [ + 7.5, + 101.35670900000004 + ] + ] + }, + { + "id": "alignment-2-major-079", + "name": "CS-CONC-MAJR 구조선 079", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20859", + "21064" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.07406300000008 + ], + [ + 7.5, + 101.94406300000009 + ] + ], + "b": [ + [ + 1.0, + 101.49670900000004 + ], + [ + 7.5, + 101.36670900000003 + ] + ] + }, + { + "id": "alignment-2-major-080", + "name": "CS-CONC-MAJR 구조선 080", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20860", + "21065" + ], + "entityType": "LINE", + "a": [ + [ + 1.0, + 102.08406300000009 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 1.0, + 101.50670900000003 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-081", + "name": "CS-CONC-MAJR 구조선 081", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20862", + "21067" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-082", + "name": "CS-CONC-MAJR 구조선 082", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20871", + "21076" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.5, + 101.95406300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.5, + 101.37670900000003 + ] + ] + }, + { + "id": "alignment-2-major-083", + "name": "CS-CONC-MAJR 구조선 083", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20812", + "21017" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.87406300000008 + ], + [ + 7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.29670900000004 + ], + [ + 7.75, + 101.29170900000004 + ] + ] + }, + { + "id": "alignment-2-major-084", + "name": "CS-CONC-MAJR 구조선 084", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20863", + "21068" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.88406300000008 + ], + [ + 7.75, + 101.87906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.30670900000003 + ], + [ + 7.75, + 101.30170900000003 + ] + ] + }, + { + "id": "alignment-2-major-085", + "name": "CS-CONC-MAJR 구조선 085", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20864", + "21069" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.89406300000009 + ], + [ + 7.75, + 101.88906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.31670900000003 + ], + [ + 7.75, + 101.31170900000004 + ] + ] + }, + { + "id": "alignment-2-major-086", + "name": "CS-CONC-MAJR 구조선 086", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20865", + "21070" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.90406300000008 + ], + [ + 7.75, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.32670900000004 + ], + [ + 7.75, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-087", + "name": "CS-CONC-MAJR 구조선 087", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20866", + "21071" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.91406300000008 + ], + [ + 7.75, + 101.90906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.33670900000003 + ], + [ + 7.75, + 101.33170900000003 + ] + ] + }, + { + "id": "alignment-2-major-088", + "name": "CS-CONC-MAJR 구조선 088", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20867", + "21072" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.92406300000009 + ], + [ + 7.75, + 101.91906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.34670900000003 + ], + [ + 7.75, + 101.34170900000004 + ] + ] + }, + { + "id": "alignment-2-major-089", + "name": "CS-CONC-MAJR 구조선 089", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20868", + "21073" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.93406300000008 + ], + [ + 7.75, + 101.92906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.35670900000004 + ], + [ + 7.75, + 101.35170900000003 + ] + ] + }, + { + "id": "alignment-2-major-090", + "name": "CS-CONC-MAJR 구조선 090", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20869", + "21074" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.94406300000009 + ], + [ + 7.75, + 101.93906300000009 + ] + ], + "b": [ + [ + 7.5, + 101.36670900000003 + ], + [ + 7.75, + 101.36170900000003 + ] + ] + }, + { + "id": "alignment-2-major-091", + "name": "CS-CONC-MAJR 구조선 091", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20870", + "21075" + ], + "entityType": "LINE", + "a": [ + [ + 7.5, + 101.95406300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.5, + 101.37670900000003 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-092", + "name": "CS-CONC-MAJR 구조선 092", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20802", + "21006" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.86906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-093", + "name": "CS-CONC-MAJR 구조선 093", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20872", + "21077" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.86906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-094", + "name": "CS-CONC-MAJR 구조선 094", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20803", + "21007" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.89906300000008 + ], + [ + 7.75, + 101.94906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.32170900000003 + ], + [ + 7.75, + 101.37170900000004 + ] + ] + }, + { + "id": "alignment-2-major-095", + "name": "CS-CONC-MAJR 구조선 095", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20804", + "21008" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.89906300000008 + ], + [ + 7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.32170900000003 + ], + [ + 7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-096", + "name": "CS-CONC-MAJR 구조선 096", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20805", + "21009" + ], + "entityType": "LINE", + "a": [ + [ + 7.8, + 101.577 + ], + [ + 7.8, + 101.89906300000008 + ] + ], + "b": [ + [ + 7.8, + 101.092 + ], + [ + 7.8, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-097", + "name": "CS-CONC-MAJR 구조선 097", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20806", + "21010" + ], + "entityType": "LINE", + "a": [ + [ + 7.8, + 101.577 + ], + [ + 8.2, + 101.577 + ] + ], + "b": [ + [ + 7.8, + 101.092 + ], + [ + 8.2, + 101.092 + ] + ] + }, + { + "id": "alignment-2-major-098", + "name": "CS-CONC-MAJR 구조선 098", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20807", + "21011" + ], + "entityType": "LINE", + "a": [ + [ + 8.2, + 101.577 + ], + [ + 8.2, + 101.89906300000008 + ] + ], + "b": [ + [ + 8.2, + 101.092 + ], + [ + 8.2, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-099", + "name": "CS-CONC-MAJR 구조선 099", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20808", + "21012" + ], + "entityType": "LINE", + "a": [ + [ + 8.2, + 101.89906300000008 + ], + [ + 8.25, + 101.89906300000008 + ] + ], + "b": [ + [ + 8.2, + 101.32170900000003 + ], + [ + 8.25, + 101.32170900000003 + ] + ] + }, + { + "id": "alignment-2-major-100", + "name": "CS-CONC-MAJR 구조선 100", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20885", + "21090" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 102.94906300006062 + ], + [ + 9.25, + 107.215 + ] + ], + "b": [ + [ + 9.25, + 102.37170900006055 + ], + [ + 9.25, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-101", + "name": "CS-CONC-MAJR 구조선 101", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20881", + "21086" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 107.215 + ], + [ + 9.75, + 107.215 + ] + ], + "b": [ + [ + 9.25, + 107.857 + ], + [ + 9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-102", + "name": "CS-CONC-MAJR 구조선 102", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20790", + "20994" + ], + "entityType": "LINE", + "a": [ + [ + 9.25, + 100.877 + ], + [ + 10.15, + 100.877 + ] + ], + "b": [ + [ + 9.25, + 100.392 + ], + [ + 10.15, + 100.392 + ] + ] + }, + { + "id": "alignment-2-major-103", + "name": "CS-CONC-MAJR 구조선 103", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20882", + "21087" + ], + "entityType": "LINE", + "a": [ + [ + 9.75, + 106.215 + ], + [ + 9.75, + 107.215 + ] + ], + "b": [ + [ + 9.75, + 106.857 + ], + [ + 9.75, + 107.857 + ] + ] + }, + { + "id": "alignment-2-major-104", + "name": "CS-CONC-MAJR 구조선 104", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20883", + "21088" + ], + "entityType": "LINE", + "a": [ + [ + 9.75, + 106.215 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 9.75, + 106.857 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-105", + "name": "CS-CONC-MAJR 구조선 105", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20884", + "21089" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 100.877 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 100.392 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-106", + "name": "CS-CONC-MAJR 구조선 106", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20893", + "21098" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 100.877 + ], + [ + 10.15, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 100.392 + ], + [ + 10.15, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-107", + "name": "CS-CONC-MAJR 구조선 107", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20892", + "21097" + ], + "entityType": "LINE", + "a": [ + [ + 10.15, + 101.777 + ], + [ + 10.25, + 101.777 + ] + ], + "b": [ + [ + 10.15, + 101.292 + ], + [ + 10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-2-major-108", + "name": "CS-CONC-MAJR 구조선 108", + "layer": "CS-CONC-MAJR", + "group": "major", + "sourceHandles": [ + "20891", + "21096" + ], + "entityType": "LINE", + "a": [ + [ + 10.25, + 100.777 + ], + [ + 10.25, + 101.777 + ] + ], + "b": [ + [ + 10.25, + 100.292 + ], + [ + 10.25, + 101.292 + ] + ] + }, + { + "id": "alignment-2-minor-001", + "name": "CS-CONC-MINR 구조선 001", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58096", + "58102" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.777 + ], + [ + -7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + -7.75, + 101.29170900000004 + ], + [ + -7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-2-minor-002", + "name": "CS-CONC-MINR 구조선 002", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58097", + "58103" + ], + "entityType": "LINE", + "a": [ + [ + -7.75, + 101.777 + ], + [ + -0.5, + 101.777 + ] + ], + "b": [ + [ + -7.75, + 101.292 + ], + [ + -0.5, + 101.292 + ] + ] + }, + { + "id": "alignment-2-minor-003", + "name": "CS-CONC-MINR 구조선 003", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58095", + "58101" + ], + "entityType": "LINE", + "a": [ + [ + -0.5, + 101.777 + ], + [ + -0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + -0.5, + 101.292 + ], + [ + -0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-minor-004", + "name": "CS-CONC-MINR 구조선 004", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58099", + "58105" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 0.5, + 102.01406300000008 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 0.5, + 101.43670900000004 + ] + ] + }, + { + "id": "alignment-2-minor-005", + "name": "CS-CONC-MINR 구조선 005", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58100", + "58106" + ], + "entityType": "LINE", + "a": [ + [ + 0.5, + 101.777 + ], + [ + 7.75, + 101.777 + ] + ], + "b": [ + [ + 0.5, + 101.292 + ], + [ + 7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-2-minor-006", + "name": "CS-CONC-MINR 구조선 006", + "layer": "CS-CONC-MINR", + "group": "minor", + "sourceHandles": [ + "58098", + "58104" + ], + "entityType": "LINE", + "a": [ + [ + 7.75, + 101.777 + ], + [ + 7.75, + 101.86906300000008 + ] + ], + "b": [ + [ + 7.75, + 101.29170900000004 + ], + [ + 7.75, + 101.292 + ] + ] + }, + { + "id": "alignment-2-insert-left-01", + "name": "블록 내부 윤곽 left 01", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F0", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.525000000260537, + 104.01906300006063 + ], + [ + -8.525000000260537, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.525000000260537, + 103.44170900006057 + ], + [ + -8.525000000260537, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-left-02", + "name": "블록 내부 윤곽 left 02", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F1", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.525000000260537, + 102.95356300000195 + ], + [ + -8.46500000002305, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.525000000260537, + 102.3762090000019 + ], + [ + -8.46500000002305, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-left-03", + "name": "블록 내부 윤곽 left 03", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F2", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.46500000002305, + 102.95356300000195 + ], + [ + -8.46500000002305, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.46500000002305, + 102.3762090000019 + ], + [ + -8.46500000002305, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-left-04", + "name": "블록 내부 윤곽 left 04", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F3", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "ARC", + "a": [ + [ + -8.465000000022584, + 104.01906300006063 + ], + [ + -8.465576441612793, + 104.02491570974436 + ], + [ + -8.467283614056418, + 104.0305435030772 + ], + [ + -8.470055911673699, + 104.03573010711743 + ], + [ + -8.473786796621978, + 104.0402762035805 + ], + [ + -8.478332893084968, + 104.04400708852882 + ], + [ + -8.483519497125176, + 104.0467793861461 + ], + [ + -8.489147290457971, + 104.04848655858963 + ], + [ + -8.495000000141793, + 104.04906300017983 + ], + [ + -8.500852709825617, + 104.04848655858963 + ], + [ + -8.50648050315841, + 104.0467793861461 + ], + [ + -8.51166710719862, + 104.04400708852882 + ], + [ + -8.516213203661609, + 104.0402762035805 + ], + [ + -8.51994408860989, + 104.03573010711743 + ], + [ + -8.52271638622717, + 104.0305435030772 + ], + [ + -8.524423558670794, + 104.02491570974436 + ], + [ + -8.525000000261004, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.465000000022584, + 103.44170900006057 + ], + [ + -8.465576441612793, + 103.4475617097443 + ], + [ + -8.467283614056418, + 103.45318950307714 + ], + [ + -8.470055911673699, + 103.45837610711737 + ], + [ + -8.473786796621978, + 103.46292220358046 + ], + [ + -8.478332893084968, + 103.46665308852876 + ], + [ + -8.483519497125176, + 103.46942538614604 + ], + [ + -8.489147290457971, + 103.47113255858959 + ], + [ + -8.495000000141793, + 103.47170900017977 + ], + [ + -8.500852709825617, + 103.47113255858959 + ], + [ + -8.50648050315841, + 103.46942538614604 + ], + [ + -8.51166710719862, + 103.46665308852876 + ], + [ + -8.516213203661609, + 103.46292220358046 + ], + [ + -8.51994408860989, + 103.45837610711737 + ], + [ + -8.52271638622717, + 103.45318950307714 + ], + [ + -8.524423558670794, + 103.4475617097443 + ], + [ + -8.525000000261004, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-left-05", + "name": "블록 내부 윤곽 left 05", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F4", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.450000000023051, + 102.95356300000195 + ], + [ + -8.540000000023051, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.450000000023051, + 102.3762090000019 + ], + [ + -8.540000000023051, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-left-06", + "name": "블록 내부 윤곽 left 06", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F5", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.540000000023051, + 102.95356300000195 + ], + [ + -8.540000000023051, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.540000000023051, + 102.3762090000019 + ], + [ + -8.540000000023051, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-left-07", + "name": "블록 내부 윤곽 left 07", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F6", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.540000000023051, + 102.94906300006062 + ], + [ + -8.450000000023051, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.540000000023051, + 102.37170900006056 + ], + [ + -8.450000000023051, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-left-08", + "name": "블록 내부 윤곽 left 08", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F7", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.450000000023051, + 102.94906300006062 + ], + [ + -8.450000000023051, + 102.95356300000195 + ] + ], + "b": [ + [ + -8.450000000023051, + 102.37170900006056 + ], + [ + -8.450000000023051, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-left-09", + "name": "블록 내부 윤곽 left 09", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F8", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "ARC", + "a": [ + [ + -8.52500000002305, + 104.01906300006063 + ], + [ + -8.52442355843517, + 104.01321029040014 + ], + [ + -8.522716385998297, + 104.00758249708967 + ], + [ + -8.519944088392192, + 104.00239589307003 + ], + [ + -8.51621320345858, + 103.99784979662503 + ], + [ + -8.511667107013754, + 103.99411891169156 + ], + [ + -8.506480502994032, + 103.99134661408529 + ], + [ + -8.50085270968359, + 103.98963944164854 + ], + [ + -8.495000000023051, + 103.98906300006063 + ], + [ + -8.48914729036251, + 103.98963944164854 + ], + [ + -8.483519497052068, + 103.99134661408529 + ], + [ + -8.478332893032348, + 103.99411891169156 + ], + [ + -8.47378679658752, + 103.99784979662503 + ], + [ + -8.470055911653908, + 104.00239589307003 + ], + [ + -8.467283614047803, + 104.00758249708967 + ], + [ + -8.465576441610931, + 104.01321029040014 + ], + [ + -8.46500000002305, + 104.01906300006063 + ] + ], + "b": [ + [ + -8.52500000002305, + 103.44170900006057 + ], + [ + -8.52442355843517, + 103.43585629040008 + ], + [ + -8.522716385998297, + 103.43022849708962 + ], + [ + -8.519944088392192, + 103.42504189306999 + ], + [ + -8.51621320345858, + 103.42049579662498 + ], + [ + -8.511667107013754, + 103.4167649116915 + ], + [ + -8.506480502994032, + 103.41399261408523 + ], + [ + -8.50085270968359, + 103.41228544164848 + ], + [ + -8.495000000023051, + 103.41170900006057 + ], + [ + -8.48914729036251, + 103.41228544164848 + ], + [ + -8.483519497052068, + 103.41399261408523 + ], + [ + -8.478332893032348, + 103.4167649116915 + ], + [ + -8.47378679658752, + 103.42049579662498 + ], + [ + -8.470055911653908, + 103.42504189306999 + ], + [ + -8.467283614047803, + 103.43022849708962 + ], + [ + -8.465576441610931, + 103.43585629040008 + ], + [ + -8.46500000002305, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-left-10", + "name": "블록 내부 윤곽 left 10", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F9", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.25000000002305, + 101.94906300000008 + ], + [ + -8.25000000002305, + 102.07406300000008 + ] + ], + "b": [ + [ + -8.25000000002305, + 101.37170900000004 + ], + [ + -8.25000000002305, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-2-insert-left-11", + "name": "블록 내부 윤곽 left 11", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FA", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.25000000002305, + 102.07406300000008 + ], + [ + -8.370000000023051, + 102.24906300000009 + ] + ], + "b": [ + [ + -8.25000000002305, + 101.49670900000004 + ], + [ + -8.370000000023051, + 101.67170900000004 + ] + ] + }, + { + "id": "alignment-2-insert-left-12", + "name": "블록 내부 윤곽 left 12", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FB", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.370000000023051, + 102.24906300000009 + ], + [ + -8.42000000002305, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.370000000023051, + 101.67170900000004 + ], + [ + -8.42000000002305, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-left-13", + "name": "블록 내부 윤곽 left 13", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FC", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.42000000002305, + 102.94906300006062 + ], + [ + -9.25000000002305, + 102.94906300006062 + ] + ], + "b": [ + [ + -8.42000000002305, + 102.37170900006056 + ], + [ + -9.25000000002305, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-left-14", + "name": "블록 내부 윤곽 left 14", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FD", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.88806300000148 + ], + [ + -9.200000000023051, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.31070900000142 + ], + [ + -9.200000000023051, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-2-insert-left-15", + "name": "블록 내부 윤곽 left 15", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FE", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.200000000023051, + 102.88806300000148 + ], + [ + -9.200000000023051, + 102.94806300000381 + ] + ], + "b": [ + [ + -9.200000000023051, + 102.31070900000142 + ], + [ + -9.200000000023051, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-2-insert-left-16", + "name": "블록 내부 윤곽 left 16", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FF", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.94806300000381 + ], + [ + -9.25000000002305, + 102.94806300000381 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.37070900000376 + ], + [ + -9.25000000002305, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-2-insert-left-17", + "name": "블록 내부 윤곽 left 17", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155700", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.150000000260537, + 102.88806300000148 + ], + [ + -9.150000000260537, + 102.58806300000148 + ] + ], + "b": [ + [ + -9.150000000260537, + 102.31070900000142 + ], + [ + -9.150000000260537, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-2-insert-left-18", + "name": "블록 내부 윤곽 left 18", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155701", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -9.150000000260537, + 102.58806300000148 + ], + [ + -8.85000000002305, + 102.58806300000148 + ] + ], + "b": [ + [ + -9.150000000260537, + 102.01070900000143 + ], + [ + -8.85000000002305, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-2-insert-left-19", + "name": "블록 내부 윤곽 left 19", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155702", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.85000000002305, + 102.58806300000148 + ], + [ + -8.85000000002305, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.85000000002305, + 102.01070900000143 + ], + [ + -8.85000000002305, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-2-insert-left-20", + "name": "블록 내부 윤곽 left 20", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155703", + "sourceInsertHandles": [ + "15DF7D", + "15DF7F" + ], + "entityType": "LINE", + "a": [ + [ + -8.80000000002305, + 102.94806300000381 + ], + [ + -8.80000000002305, + 102.88806300000148 + ] + ], + "b": [ + [ + -8.80000000002305, + 102.37070900000376 + ], + [ + -8.80000000002305, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-2-insert-right-01", + "name": "블록 내부 윤곽 right 01", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F0", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.525000000259606, + 104.01906300006063 + ], + [ + 8.525000000259606, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.525000000259606, + 103.44170900006057 + ], + [ + 8.525000000259606, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-right-02", + "name": "블록 내부 윤곽 right 02", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F1", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.525000000259606, + 102.95356300000195 + ], + [ + 8.465000000022119, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.525000000259606, + 102.3762090000019 + ], + [ + 8.465000000022119, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-right-03", + "name": "블록 내부 윤곽 right 03", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F2", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.465000000022119, + 102.95356300000195 + ], + [ + 8.465000000022119, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.465000000022119, + 102.3762090000019 + ], + [ + 8.465000000022119, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-right-04", + "name": "블록 내부 윤곽 right 04", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F3", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "ARC", + "a": [ + [ + 8.465000000021654, + 104.01906300006063 + ], + [ + 8.465576441611862, + 104.02491570974436 + ], + [ + 8.467283614055486, + 104.0305435030772 + ], + [ + 8.470055911672768, + 104.03573010711743 + ], + [ + 8.473786796621047, + 104.0402762035805 + ], + [ + 8.478332893084037, + 104.04400708852882 + ], + [ + 8.483519497124245, + 104.0467793861461 + ], + [ + 8.48914729045704, + 104.04848655858963 + ], + [ + 8.495000000140863, + 104.04906300017983 + ], + [ + 8.500852709824684, + 104.04848655858963 + ], + [ + 8.50648050315748, + 104.0467793861461 + ], + [ + 8.511667107197688, + 104.04400708852882 + ], + [ + 8.516213203660678, + 104.0402762035805 + ], + [ + 8.519944088608957, + 104.03573010711743 + ], + [ + 8.52271638622624, + 104.0305435030772 + ], + [ + 8.524423558669863, + 104.02491570974436 + ], + [ + 8.525000000260071, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.465000000021654, + 103.44170900006057 + ], + [ + 8.465576441611862, + 103.4475617097443 + ], + [ + 8.467283614055486, + 103.45318950307714 + ], + [ + 8.470055911672768, + 103.45837610711737 + ], + [ + 8.473786796621047, + 103.46292220358046 + ], + [ + 8.478332893084037, + 103.46665308852876 + ], + [ + 8.483519497124245, + 103.46942538614604 + ], + [ + 8.48914729045704, + 103.47113255858959 + ], + [ + 8.495000000140863, + 103.47170900017977 + ], + [ + 8.500852709824684, + 103.47113255858959 + ], + [ + 8.50648050315748, + 103.46942538614604 + ], + [ + 8.511667107197688, + 103.46665308852876 + ], + [ + 8.516213203660678, + 103.46292220358046 + ], + [ + 8.519944088608957, + 103.45837610711737 + ], + [ + 8.52271638622624, + 103.45318950307714 + ], + [ + 8.524423558669863, + 103.4475617097443 + ], + [ + 8.525000000260071, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-right-05", + "name": "블록 내부 윤곽 right 05", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F4", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.450000000022118, + 102.95356300000195 + ], + [ + 8.540000000022118, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.450000000022118, + 102.3762090000019 + ], + [ + 8.540000000022118, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-right-06", + "name": "블록 내부 윤곽 right 06", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F5", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.540000000022118, + 102.95356300000195 + ], + [ + 8.540000000022118, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.540000000022118, + 102.3762090000019 + ], + [ + 8.540000000022118, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-right-07", + "name": "블록 내부 윤곽 right 07", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F6", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.540000000022118, + 102.94906300006062 + ], + [ + 8.450000000022118, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.540000000022118, + 102.37170900006056 + ], + [ + 8.450000000022118, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-right-08", + "name": "블록 내부 윤곽 right 08", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F7", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.450000000022118, + 102.94906300006062 + ], + [ + 8.450000000022118, + 102.95356300000195 + ] + ], + "b": [ + [ + 8.450000000022118, + 102.37170900006056 + ], + [ + 8.450000000022118, + 102.3762090000019 + ] + ] + }, + { + "id": "alignment-2-insert-right-09", + "name": "블록 내부 윤곽 right 09", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F8", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "ARC", + "a": [ + [ + 8.52500000002212, + 104.01906300006063 + ], + [ + 8.524423558434238, + 104.01321029040014 + ], + [ + 8.522716385997366, + 104.00758249708967 + ], + [ + 8.519944088391261, + 104.00239589307003 + ], + [ + 8.51621320345765, + 103.99784979662503 + ], + [ + 8.511667107012821, + 103.99411891169156 + ], + [ + 8.506480502993101, + 103.99134661408529 + ], + [ + 8.500852709682658, + 103.98963944164854 + ], + [ + 8.495000000022118, + 103.98906300006063 + ], + [ + 8.48914729036158, + 103.98963944164854 + ], + [ + 8.483519497051137, + 103.99134661408529 + ], + [ + 8.478332893031416, + 103.99411891169156 + ], + [ + 8.473786796586587, + 103.99784979662503 + ], + [ + 8.470055911652977, + 104.00239589307003 + ], + [ + 8.467283614046872, + 104.00758249708967 + ], + [ + 8.465576441609999, + 104.01321029040014 + ], + [ + 8.465000000022119, + 104.01906300006063 + ] + ], + "b": [ + [ + 8.52500000002212, + 103.44170900006057 + ], + [ + 8.524423558434238, + 103.43585629040008 + ], + [ + 8.522716385997366, + 103.43022849708962 + ], + [ + 8.519944088391261, + 103.42504189306999 + ], + [ + 8.51621320345765, + 103.42049579662498 + ], + [ + 8.511667107012821, + 103.4167649116915 + ], + [ + 8.506480502993101, + 103.41399261408523 + ], + [ + 8.500852709682658, + 103.41228544164848 + ], + [ + 8.495000000022118, + 103.41170900006057 + ], + [ + 8.48914729036158, + 103.41228544164848 + ], + [ + 8.483519497051137, + 103.41399261408523 + ], + [ + 8.478332893031416, + 103.4167649116915 + ], + [ + 8.473786796586587, + 103.42049579662498 + ], + [ + 8.470055911652977, + 103.42504189306999 + ], + [ + 8.467283614046872, + 103.43022849708962 + ], + [ + 8.465576441609999, + 103.43585629040008 + ], + [ + 8.465000000022119, + 103.44170900006057 + ] + ] + }, + { + "id": "alignment-2-insert-right-10", + "name": "블록 내부 윤곽 right 10", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556F9", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.25000000002212, + 101.94906300000008 + ], + [ + 8.25000000002212, + 102.07406300000008 + ] + ], + "b": [ + [ + 8.25000000002212, + 101.37170900000004 + ], + [ + 8.25000000002212, + 101.49670900000004 + ] + ] + }, + { + "id": "alignment-2-insert-right-11", + "name": "블록 내부 윤곽 right 11", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FA", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.25000000002212, + 102.07406300000008 + ], + [ + 8.370000000022118, + 102.24906300000009 + ] + ], + "b": [ + [ + 8.25000000002212, + 101.49670900000004 + ], + [ + 8.370000000022118, + 101.67170900000004 + ] + ] + }, + { + "id": "alignment-2-insert-right-12", + "name": "블록 내부 윤곽 right 12", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FB", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.370000000022118, + 102.24906300000009 + ], + [ + 8.42000000002212, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.370000000022118, + 101.67170900000004 + ], + [ + 8.42000000002212, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-right-13", + "name": "블록 내부 윤곽 right 13", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FC", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.42000000002212, + 102.94906300006062 + ], + [ + 9.25000000002212, + 102.94906300006062 + ] + ], + "b": [ + [ + 8.42000000002212, + 102.37170900006056 + ], + [ + 9.25000000002212, + 102.37170900006056 + ] + ] + }, + { + "id": "alignment-2-insert-right-14", + "name": "블록 내부 윤곽 right 14", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FD", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.88806300000148 + ], + [ + 9.200000000022118, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.31070900000142 + ], + [ + 9.200000000022118, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-2-insert-right-15", + "name": "블록 내부 윤곽 right 15", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FE", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.200000000022118, + 102.88806300000148 + ], + [ + 9.200000000022118, + 102.94806300000381 + ] + ], + "b": [ + [ + 9.200000000022118, + 102.31070900000142 + ], + [ + 9.200000000022118, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-2-insert-right-16", + "name": "블록 내부 윤곽 right 16", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "1556FF", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.94806300000381 + ], + [ + 9.25000000002212, + 102.94806300000381 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.37070900000376 + ], + [ + 9.25000000002212, + 102.37070900000376 + ] + ] + }, + { + "id": "alignment-2-insert-right-17", + "name": "블록 내부 윤곽 right 17", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155700", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.150000000259606, + 102.88806300000148 + ], + [ + 9.150000000259606, + 102.58806300000148 + ] + ], + "b": [ + [ + 9.150000000259606, + 102.31070900000142 + ], + [ + 9.150000000259606, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-2-insert-right-18", + "name": "블록 내부 윤곽 right 18", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155701", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 9.150000000259606, + 102.58806300000148 + ], + [ + 8.850000000022119, + 102.58806300000148 + ] + ], + "b": [ + [ + 9.150000000259606, + 102.01070900000143 + ], + [ + 8.850000000022119, + 102.01070900000143 + ] + ] + }, + { + "id": "alignment-2-insert-right-19", + "name": "블록 내부 윤곽 right 19", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155702", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.850000000022119, + 102.58806300000148 + ], + [ + 8.850000000022119, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.850000000022119, + 102.01070900000143 + ], + [ + 8.850000000022119, + 102.31070900000142 + ] + ] + }, + { + "id": "alignment-2-insert-right-20", + "name": "블록 내부 윤곽 right 20", + "layer": "CS-CONC-MAJR", + "group": "insert", + "sourceHandle": "155703", + "sourceInsertHandles": [ + "15DF7E", + "15DF80" + ], + "entityType": "LINE", + "a": [ + [ + 8.800000000022118, + 102.94806300000381 + ], + [ + 8.800000000022118, + 102.88806300000148 + ] + ], + "b": [ + [ + 8.800000000022118, + 102.37070900000376 + ], + [ + 8.800000000022118, + 102.31070900000142 + ] + ] + } + ] + } + ] +}