chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합

- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ahnyongjooandClaude Sonnet 5.5 committed 2026-10-28 11:20:18 +09:00
commit 964a841de1
3978 files changed
+58013356

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
"""Add the column rebar (G2: P1~P5) to the app pier '옥성교P1' (Ulsan ring builder with the Okseong options).
params = 판독/g2_values.json (front / section reading) + decisions Q1-Q4 (2026-10-14);
expected = schedule L / N / r (구조도(4)) and the front dimension chains, typed in by hand.
Backs up params.json / expected.json to data/옥성교P1/backup/2026-10-14_g2/ first. Refuses if G2 is in scope.
"""
import json
import shutil
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
D = HERE.parents[1] / "Code" / "교각모델링앱" / "data" / "옥성교P1"
V = json.loads((HERE / "판독" / "g2_values.json").read_text(encoding="utf-8"))
P = json.loads((D / "params.json").read_text(encoding="utf-8"))
X = json.loads((D / "expected.json").read_text(encoding="utf-8"))
if "G2" in P["scope"]:
sys.exit("G2 already in scope")
bk = D / "backup" / "2026-10-14_g2"
bk.mkdir(parents=True, exist_ok=True)
for f in ("params.json", "expected.json"):
shutil.copy2(D / f, bk / f)
h = V["hoops_chain"]
P["scope"] = ["G1", "G2", "G5"]
P["builders"]["G2"] = "column_rebar_ring.py"
P["rebar_marks"] = {"P1": {"dia": "H25", "shape": "VI"}, "P2": {"dia": "H25", "shape": "VI"},
"P3": {"dia": "H25", "shape": "coupler_half"}, "P4": {"dia": "H19", "shape": "coupler_half"},
"P5": {"dia": "H16", "shape": "tie-90/135"}}
P["rebar_marks_src"] = "구조도(4) 철근 재료표·상세 (기둥 P1~P5)"
P["column_rebar"] = {
"form": "ring",
"main": {"mark": "P1", "count": 60, "start_deg": 0.0, "radius": 1125.0, "hook_leg_z": 12325.0, "bend_r": 270.0,
"hook_leg": 500.0, "straight_from": 12595.0, "straight_len": 8313.0, "inner": {"mark": "P2", "radius": 1080.0},
"src": "단면 r 1,125 / 1,080 × 60 (0°, 6°); 상세 a 8,313 r 270 c 500; 다리 EL 12.325 = 사슬 '150' (Q2, 작도 12.375)"},
"hoops": {"radius": 1150.0, "zones": [
{"mark": "P3", "type": "coupler_half", "levels": h[0:3], "a": 3533.0, "gap": 80.0, "radius": 1150.0},
{"mark": "P4", "type": "coupler_half", "levels": h[3:19], "a": 3538.0, "gap": 65.0, "radius": 1147.0},
{"mark": "P3", "type": "coupler_half", "levels": h[19:], "a": 3533.0, "gap": 80.0, "radius": 1150.0}],
"src": "사슬 '띠철근외측' = 작도 29선; 상세 r 1,150 / 1,147, a, b(커플러); 커플러 90°/270° (Q4 [추론])"},
"ties": {"mark": "P5", "shape": "90-135", "levels": V["ties_chain"], "straight": 2341.0, "leg": 160.0, "tail": 150.0,
"y_lift": 16.0, "design_length": 2722.0,
"src": "사슬 '크로스타이' 20단; 상세 a 160, b 2,341, c 141, d 80; Y +16 (Q3), 교번 (Q4 [추론]); 꼬리 작도 150 [추론]"},
}
X["checkers"]["G2"] = "g2_ring.py"
X["negative"]["G2"] = [{"mark": "P1", "d": [5, 0, 0]}, {"mark": "P3", "d": [0, 0, 5]}]
X["G2"] = {"schedule_L": {"P1": 9237, "P2": 9237, "P3": 7226, "P4": 7206, "P5": 2722},
"schedule_n": {"P1": 60, "P2": 60, "P3": 13, "P4": 16, "P5": 40},
"dia": {"P1": 25, "P2": 25, "P3": 25, "P4": 19, "P5": 16},
"main": {"mark": "P1", "radius": 1125, "divisions": 60, "start_deg": 0.0, "bottom_above_footing": 150,
"top_parts": [150, 270, 8313], "inner": {"mark": "P2", "radius": 1080}},
"hoop_chain": {"start": [150, 1450], "groups": [[2, 300], [16, 150], [8, 300], [2, 600]]},
"hoop_zones": [["P3", 3], ["P4", 16], ["P3", 10]], "r_hoop": 1150, "r_hoop_by_mark": {"P3": 1150, "P4": 1147},
"tie": {"mark": "P5", "chain": {"start": [150, 1500], "groups": [[1, 450], [8, 300], [8, 300], [2, 600]]},
"per_level": 2, "offset": 0, "y_lift": 16},
"no_fillet_marks": ["P1", "P2", "P3", "P4"],
"src": "재료표 L·N·r; 단면 r 1,125 / 1,080 DIVISION 60; 사슬 '띠철근외측'·'크로스타이' (기초 바닥 EL 12.175 기준); Q1~Q4 (2026-10-14)"}
(D / "params.json").write_text(json.dumps(P, ensure_ascii=False, indent=1), encoding="utf-8")
(D / "expected.json").write_text(json.dumps(X, ensure_ascii=False, indent=1), encoding="utf-8")
print("G2 added; backup", bk)
+56
View File
@@ -0,0 +1,56 @@
"""Add the footing rebar (G3: B1~B12, centreline polylines) to the app pier '옥성교P1'.
params = 판독/g3_bars.json (extract_g3_bars.py, decisions F1-F5 2026-10-14); builder rebar_polylines.py (GATE G3)
expected = schedule L / N, dimension chains, schedule legs b, drawn levels and the B9 rule, typed in by hand.
Backs up params.json / expected.json to data/옥성교P1/backup/2026-10-14_g3/ first. Refuses if G3 is in scope.
"""
import json
import shutil
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
D = HERE.parents[1] / "Code" / "교각모델링앱" / "data" / "옥성교P1"
B = json.loads((HERE / "판독" / "g3_bars.json").read_text(encoding="utf-8"))
P = json.loads((D / "params.json").read_text(encoding="utf-8"))
X = json.loads((D / "expected.json").read_text(encoding="utf-8"))
if "G3" in P["scope"]:
sys.exit("G3 already in scope")
bk = D / "backup" / "2026-10-14_g3"
bk.mkdir(parents=True, exist_ok=True)
for f in ("params.json", "expected.json"):
shutil.copy2(D / f, bk / f)
SCHED = {"B1": (12730, 39, "H29"), "B2": (14070, 39, "H29"), "B3": (12730, 38, "H29"), "B4": (14070, 38, "H29"),
"B5": (12880, 38, "H29"), "B6": (14370, 38, "H29"), "B7": (12880, 37, "H29"), "B8": (14370, 37, "H29"),
"B9": (4763, 171, "H19"), "B10": (41152, 5, "H19"), "B11": (10160, 19, "H19"), "B12": (10160, 19, "H19")}
SHAPE = {m: "U" for m in SCHED} | {"B9": "tie-C", "B10": "loop"}
P["scope"] = ["G1", "G2", "G3", "G5"]
P["builders"]["G3"] = "rebar_polylines.py"
P["rebar_marks"].update({m: {"dia": d, "shape": SHAPE[m]} for m, (_, _, d) in SCHED.items()})
P["footing_rebar"] = {"form": "polylines", "host": "FT", "group": "기초", "bars": B["bars"],
"not_modelled": "UM 조립용 A자형 받침 H22 L 4,504 x 92 (F5: 기록만), 겹이음 j (F3)",
"src": "Code/옥성P1판독/extract_g3_bars.py -> 판독/g3_bars.json; 판독서 v0.1.04 §10, 결정 F1~F5"}
X["checkers"]["G3"] = "g3_poly.py"
X["negative"]["G3"] = [{"mark": "B1", "d": [5, 0, 0]}, {"mark": "B10", "d": [0, 0, 5]}]
cy = lambda: {"start": [-4700], "groups": [[2, 100], [72, 125], [2, 100]]} # '100 | 2@100 | 72@125 | 2@100 | 100'
cx = lambda: {"start": [-4700], "groups": [[2, 162.5], [70, 125], [2, 162.5]]} # '100 | 2@163 | 70@125 | 2@163 | 100'
X["G3"] = {
"schedule": {m: [L, n] for m, (L, n, _) in SCHED.items()},
"dia": {m: int(d[1:]) for m, (_, _, d) in SCHED.items()},
"half_a": 4700,
"mats": {"y_bottom": {"marks": ["B2", "B4"], "axis": "Y", "z": 12325, "leg": 1800, "chain": cy()},
"x_bottom": {"marks": ["B6", "B8"], "axis": "X", "z": 12347.5, "leg": 1950, "chain": cx()},
"y_top": {"marks": ["B1", "B3"], "axis": "Y", "z": 14275, "leg": -900, "chain": cy()},
"x_top": {"marks": ["B5", "B7"], "axis": "X", "z": 14252.5, "leg": -975, "chain": cx()}},
"mid": {"B12": {"axis": "Y", "chain": {"start": [-4500], "groups": [[18, 500]]}, "z_hi": 13844, "z_lo": 12844},
"B11": {"axis": "X", "chain": {"start": [-4537.5], "groups": [[1, 537.5], [16, 500], [1, 537.5]]},
"z_hi": 13825, "z_lo": 12825}},
"b10": {"levels": [12575, 12825, 13325, 13825, 14075], "size": 9445},
"b9": {"n_cols": 19, "pitch_x": 500, "height": 1998},
"src": "재료표 L·N·b; 정면 '100, 2@100, 72@125=9.000'·'18@500'; 측면 '100, 2@163, 70@125=8.750'·'538, 16@500, 538'; "
"층 EL·B10 단 [작도]; B9 격자 규칙 + F1(171); F3 교번; F4 B11 X / B12 Y(+19); B9 높이 = 상·하면 Y철근 바깥 (14.299 - 12.301)",
}
(D / "params.json").write_text(json.dumps(P, ensure_ascii=False, indent=1), encoding="utf-8")
(D / "expected.json").write_text(json.dumps(X, ensure_ascii=False, indent=1), encoding="utf-8")
print("G3 added:", len(B["bars"]), "bars; backup", bk)
+86
View File
@@ -0,0 +1,86 @@
"""Add the coping + bearing-seat rebar (G4: C1~C20, S1~S8, centreline polylines) to the app pier '옥성교P1'.
params = 판독/g4_bars.json (extract_g4.py; decisions H1-H6, 2026-10-14); builder rebar_polylines.py (GATE G4)
expected = schedule L / N, drawn levels / positions / dimension chains, typed in by hand from the reading (판독서 v0.1.06 §11).
Backs up params.json / expected.json to data/옥성교P1/backup/2026-10-14_g4/ first. Refuses if G4 is in scope.
"""
import json
import shutil
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
D = HERE.parents[1] / "Code" / "교각모델링앱" / "data" / "옥성교P1"
B = json.loads((HERE / "판독" / "g4_bars.json").read_text(encoding="utf-8"))
SH = json.loads((HERE / "판독" / "g4_shapes.json").read_text(encoding="utf-8"))["table"]
P = json.loads((D / "params.json").read_text(encoding="utf-8"))
X = json.loads((D / "expected.json").read_text(encoding="utf-8"))
if "G4" in P["scope"]:
sys.exit("G4 already in scope")
bk = D / "backup" / "2026-10-14_g4"
bk.mkdir(parents=True, exist_ok=True)
for f in ("params.json", "expected.json"):
shutil.copy2(D / f, bk / f)
SCHED = {m: (round(float(v[2]) * 1000), int(v[3]), v[1]) for m, v in SH.items() if m[0] in "CS"}
SHAPE = {"C1": "top-legs", "C2": "top-legs", "C3": "top-legs", "C4": "top-legs", "C5": "top-legs", "C6": "top-legs",
"C7": "soffit", "C8": "stirrup", "C9": "stirrup-pent", "C10": "stirrup", "C11": "stirrup-pent", "C12": "stirrup",
"C13": "stirrup-pent", "C14": "loop", "C15": "tie", "C16": "loop", "C17": "tie", "C18": "U", "C19": "U", "C20": "L",
"S1": "U", "S2": "U", "S3": "I", "S4": "I", "S5": "U", "S6": "U", "S7": "I", "S8": "I"}
P["scope"] = ["G1", "G2", "G3", "G4", "G5"]
P["builders"]["G4"] = "rebar_polylines.py"
P["rebar_marks"].update({m: {"dia": d, "shape": SHAPE[m]} for m, (_, _, d) in SCHED.items()})
P["coping_rebar"] = {"form": "polylines", "host": "CP", "group": "코핑", "bars": B["bars"],
"not_modelled": "135도 갈고리 C15·C17(H4), 겹이음 j(C1~C7·C14·C16·C17), 스터럽 이음 c 630",
"src": "Code/옥성P1판독/extract_g4.py -> 판독/g4_bars.json; 판독서 v0.1.06 §11, 결정 H1~H6 (2026-10-14)"}
X["checkers"]["G4"] = "g4_okseong.py"
X["negative"]["G4"] = [{"mark": "C1", "d": [0, 5, 0]}, {"mark": "C7", "d": [0, 0, 5]}]
Y25 = [-1525.0] + [-1375.0 + 125 * k for k in range(23)] + [1525.0]
X["G4"] = {
"schedule": {m: [L, n] for m, (L, n, _) in SCHED.items()},
"dia": {m: int(d[1:]) for m, (_, _, d) in SCHED.items()},
"skew_deg": 18.0,
# polyline length = L - lap j (C1~C6) or exact L; the other marks vary with x / level and are only recorded
"fixed_length": {"C1": 14244, "C4": 14244, "C2": 11950, "C5": 11950, "C3": 11950, "C6": 11950, "C19": 2966,
"S1": 4029, "S2": 2662, "S3": 2500, "S4": 1250, "S5": 4029, "S6": 2662, "S7": 2500, "S8": 1250},
"y25": Y25,
"top": {"C1": {"z": 21007.8, "leg": 1247, "parity": 0}, "C4": {"z": 21007.8, "leg": 1247, "parity": 1},
"C2": {"z": 20927.8, "leg": 100, "parity": 0}, "C5": {"z": 20927.8, "leg": 100, "parity": 1},
"C3": {"z": 20827.8, "leg": 100, "parity": 0}, "C6": {"z": 20827.8, "leg": 100, "parity": 1}, "x_end": 5875},
"c19": {"z": 21122.2, "x": [-1171.4, 1054.8], "leg": 370},
"c20": [{"z": 21055.0, "x": [-5875.0, -3402.6], "leg_at": "left"}, {"z": 21088.6, "x": [-3647.6, -926.4], "leg_at": "left"},
{"z": 21068.4, "x": [809.8, 3531.0], "leg_at": "right"}],
"c20_leg": 370,
"c7": {"flat_z": [18295.0] * 9 + [18660.2] * 2 + [19691.4] * 2, "top_end_z": 20367.2, "x_end": 5875,
"capped": {"y": 1525, "x_end": 5432}},
"stirrups": {
"x": {"left": [-5725 + 150 * k for k in range(11)] + [-4125 + 100 * k for k in range(28)],
"centre": [-1325 + 100 * k for k in range(27)],
"right": [1375 + 100 * k for k in range(29)] + [4275 + 150 * k for k in range(11)]},
"marks": {"left": ["C8", "C9"], "centre": ["C10", "C11"], "right": ["C12", "C13"]},
"top": [[-9999, -3675, 21077.5], [-3675, -1175, 21111.1], [-1175, 1025, 21144.7], [1025, 3525, 21090.9], [3525, 9999, 21030.3]],
"bottom": {"flat_half": 1331.1, "flat_z": 18272.5, "slope": 0.32255},
"rect_y": 1000, "pent_y": [500, 1525], "pent_dx": 20},
"loops": {"upper": {"marks": ["C16", "C17"], "z": [20922.1, 20796.4, 20546.4, 20296.4, 20046.4, 19796.4],
"x": [5875.0] * 6, "y": [1502.5] * 6},
"lower": {"marks": ["C14", "C15"], "z": [19546.4, 19296.4, 19046.4, 18796.4, 18546.4, 18420.7],
"x": [5210.4, 4435.4, 3660.4, 2885.4, 2110.4, 1720.8], "y": [1463.9, 1397.2, 1330.5, 1263.9, 1197.2, 1163.7]},
"tie_y": [-977.5, -522.5, 522.5, 977.5]},
"c18": {"levels": {"21068.4": 1, "21047.8": 11, "20905.3": 29, "20805.3": 29, "20796.4": 15, "20546.4": 14, "19546.4": 13,
"18546.4": 5},
"width_note": "상면 단은 면 폭 3,050, 낮은 두 단은 다리가 위로 면을 따라 올라가므로 다리 끝 폭(19546.4: 다리 위 EL 19.9164 ±1,525, 18546.4: 다리 위 EL 18.9164 ±1,318.4)", "width": {"21068.4": 3050, "21047.8": 3050, "20905.3": 3050, "20805.3": 3050, "20796.4": 3050, "20546.4": 3050,
"19546.4": 3050, "18546.4": 2636.8}},
"seats": {"heavy": 3, "marks_heavy": ["S1", "S2", "S3", "S4"], "marks_light": ["S5", "S6", "S7", "S8"],
"h1": {"front": 173, "rear": 194}, "y": {"front": -530.2, "rear": 610.9},
"long_t": [-600.0] + [-500.0 + 125 * k for k in range(9)] + [600.0], "long_len": 2629,
"short_o": [-1250.0] + [-1125.0 + 125 * k for k in range(19)] + [1250.0], "short_len": 1262,
"top_below": 50, "leg": 700, "lower_below": [373, 473],
"low_long_t": [-625.0 + 125 * k for k in range(11)], "low_long_len": 2500,
"low_short_o": [-1250.0 + 125 * k for k in range(21)], "low_short_len": 1250},
"src": "재료표 L·N, 철근 상세 a·b·c; 구조도(1) 정면·측면 철근 선·점(상면 3단·C19·C20·C7·스터럽 106곳·측면 고리 12단·C18 117점); "
"구조도(2) 코핑 단면 사슬(25줄 @125, 바닥 10@250)·교좌면 C-D 단면 사슬(50 | 123 | 200 | 100 | 277); 결정 H1~H6 (2026-10-14)",
}
(D / "params.json").write_text(json.dumps(P, ensure_ascii=False, indent=1), encoding="utf-8")
(D / "expected.json").write_text(json.dumps(X, ensure_ascii=False, indent=1), encoding="utf-8")
print("G4 added:", len(B["bars"]), "bars; backup", bk)
+20
View File
@@ -0,0 +1,20 @@
"""Okseong P1: convert a copy of RAG/옥성교P1.dwg to DXF (Code/옥성P1판독/dxf) and index texts.
Uses the app reader (sources are copied before conversion and never touched). Labels D1..D4 by file order."""
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / "Code" / "교각모델링앱"))
from engine import reader # noqa: E402
OUT = Path(__file__).resolve().parent / "dxf"
dwgs = sorted((ROOT / "RAG").glob("옥성교P1.dwg"))
audit = reader.convert(dwgs, OUT)
labels = [f"D{i}" for i in range(1, len(audit) + 1)]
for a, lab in zip(audit, labels):
a["label"] = lab
(OUT / "audit.json").write_text(json.dumps(audit, ensure_ascii=False, indent=1), encoding="utf-8")
texts = reader.build_index([OUT / a["dxf"] for a in audit], labels, OUT / "texts.json")
print(json.dumps(audit, ensure_ascii=False, indent=1))
print("texts", len(texts))
+10
View File
@@ -0,0 +1,10 @@
[
{
"source": "옥성교P1.dwg",
"source_sha256": "8cfa9ac10f9412ae04184d25a6f1a04e5bed2c5e2f3c8a4992eecd7bac444720",
"dxf": "옥성교P1.dxf",
"dxf_sha256": "a157aa075b6b1c3089af0e9ace3e53969e528b2adf684bf88ef57fe275af90ec",
"engine": "ODA File Converter 27.1.0",
"label": "D1"
}
]
+1
View File
@@ -0,0 +1 @@
[{"dwg": "D1", "layer": "CS-DIMT", "x": 437103.3, "y": 366627.1, "h": 320.0, "text": "설 계 법", "handle": "FAB7"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 437105.5, "y": 364445.9, "h": 320.0, "text": "철 근 항 복 강 도", "handle": "FAB8"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 437103.3, "y": 366073.9, "h": 320.0, "text": "콘크리트 설계기준 강도", "handle": "FAB9"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442672.1, "y": 366064.7, "h": 320.0, "text": "ck=35 Mpa (두부보)", "handle": "FABA"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442664.7, "y": 364488.6, "h": 320.0, "text": "y=400 Mpa", "handle": "FABB"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442464.5, "y": 366627.1, "h": 320.0, "text": "한계상태설계법", "handle": "FABC"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442458.4, "y": 364509.4, "h": 320.0, "text": "f", "handle": "FABD"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442490.1, "y": 366085.5, "h": 320.0, "text": "f", "handle": "FABE"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442068.4, "y": 364536.5, "h": 320.0, "text": ":", "handle": "FABF"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442068.4, "y": 366144.8, "h": 320.0, "text": ":", "handle": "FAC0"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 437124.2, "y": 363907.3, "h": 320.0, "text": "설 계 하 중", "handle": "FAC1"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442437.1, "y": 363907.3, "h": 320.0, "text": "KL-510", "handle": "FAC2"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442068.4, "y": 363987.3, "h": 320.0, "text": ":", "handle": "FAC3"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442672.1, "y": 365520.4, "h": 320.0, "text": "ck=35 Mpa (기둥부)", "handle": "FAC4"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442490.1, "y": 365541.2, "h": 320.0, "text": "f", "handle": "FAC5"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 442068.4, "y": 365600.5, "h": 320.0, "text": ":", "handle": "FAC6"}, {"dwg": "D1", "layer": "CZ-TEX2", "x": 391321.9, "y": 357892.1, "h": 500.0, "text": "S=1:100", "handle": "10F73"}, {"dwg": "D1", "layer": "CZ-TEX2", "x": 392285.8, "y": 340724.6, "h": 500.0, "text": "S=1:100", "handle": "10F74"}, {"dwg": "D1", "layer": "CZ-TEX2", "x": 418035.9, "y": 339199.6, "h": 500.0, "text": "S=1:100", "handle": "10F75"}, {"dwg": "D1", "layer": "CZ-TEX2", "x": 421077.5, "y": 358298.5, "h": 500.0, "text": "S=1:100", "handle": "10F76"}, {"dwg": "D1", "layer": "CZ-TEX2", "x": 440167.7, "y": 342613.4, "h": 500.0, "text": "S=1:100", "handle": "10F77"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 424532.0, "y": 344798.5, "h": 250.0, "text": "Y : 207593.68452", "handle": "10F91"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 410866.0, "y": 350927.4, "h": 250.0, "text": "9.600", "handle": "10F92"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 423911.7, "y": 344548.5, "h": 250.0, "text": "100", "handle": "10F93"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 422911.7, "y": 344548.5, "h": 250.0, "text": "800", "handle": "10F94"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 417496.9, "y": 344548.5, "h": 250.0, "text": "5@1.600=8.000", "handle": "10F95"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 414111.7, "y": 344548.5, "h": 250.0, "text": "800", "handle": "10F96"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 413236.7, "y": 344548.5, "h": 250.0, "text": "100", "handle": "10F97"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 418345.0, "y": 343548.5, "h": 250.0, "text": "9.600", "handle": "10F98"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 411866.0, "y": 356494.1, "h": 250.0, "text": "100", "handle": "10F99"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 411866.0, "y": 355494.1, "h": 250.0, "text": "800", "handle": "10F9A"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 411866.0, "y": 350079.4, "h": 250.0, "text": "5@1.600=8.000", "handle": "10F9B"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 411866.0, "y": 346694.1, "h": 250.0, "text": "800", "handle": "10F9C"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 411866.0, "y": 345819.1, "h": 250.0, "text": "100", "handle": "10F9D"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 424531.8, "y": 345148.5, "h": 250.0, "text": "X : 429979.20561", "handle": "10F9E"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 424531.8, "y": 357748.5, "h": 250.0, "text": "X : 429970.17390", "handle": "10F9F"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 410177.2, "y": 357748.5, "h": 250.0, "text": "X : 429973.42786", "handle": "10FA0"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 410177.2, "y": 345148.5, "h": 250.0, "text": "X : 429982.45957", "handle": "10FA1"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 410177.5, "y": 344798.5, "h": 250.0, "text": "Y : 207602.71623", "handle": "10FA2"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 410177.5, "y": 357398.5, "h": 250.0, "text": "Y : 207605.97018", "handle": "10FA3"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 424532.0, "y": 357398.5, "h": 250.0, "text": "Y : 207596.93847", "handle": "10FA4"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 380729.3, "y": 334328.8, "h": 250.0, "text": "1.500", "handle": "10FA5"}, {"dwg": "D1", "layer": "CS-DIMT", "x": 380729.3, "y": 332828.8, "h": 250.Line truncated
File diff suppressed because it is too large. Load diff
+100
View File
@@ -0,0 +1,100 @@
"""Reading aids for the Okseong P1 drawing (read only): render a region, dump entities of a region.
usage:
python dxftools.py render <D1..D4> x0 y0 x1 y1 <name> [px] -> 판독/<name>.png
python dxftools.py dump <D1..D4> x0 y0 x1 y1 [layer-regex] -> prints LINE/LWPOLYLINE/ARC/CIRCLE/TEXT
DXF source: Code/옥성P1판독/dxf (converted from a copy of RAG/옥성교P1.dwg).
"""
import re
import sys
from pathlib import Path
import ezdxf
from ezdxf import bbox
HERE = Path(__file__).resolve().parent
DXF = HERE / "dxf"
_CACHE = {}
def doc(label):
if label not in _CACHE:
path = sorted(DXF.glob("*.dxf"))[int(label[1]) - 1]
_CACHE[label] = ezdxf.readfile(path)
return _CACHE[label]
def in_region(e, x0, y0, x1, y1):
try:
b = bbox.extents([e], fast=True)
except Exception:
return False
return b.has_data and b.extmax.x >= x0 and b.extmin.x <= x1 and b.extmax.y >= y0 and b.extmin.y <= y1
def entities(label, x0, y0, x1, y1, layer=None):
rx = re.compile(layer) if layer else None
for e in doc(label).modelspace():
if rx and not rx.search(e.dxf.layer):
continue
if in_region(e, x0, y0, x1, y1):
yield e
def describe(e):
t, L, h = e.dxftype(), e.dxf.layer, e.dxf.handle
r = lambda v: round(v, 1)
if t == "LINE":
s, f = e.dxf.start, e.dxf.end
return f"{h} {L} LINE ({r(s.x)},{r(s.y)})-({r(f.x)},{r(f.y)}) len {r(s.distance(f))}"
if t == "LWPOLYLINE":
pts = [(r(p[0]), r(p[1])) for p in e.get_points()]
return f"{h} {L} PLINE closed={e.closed} {pts}"
if t == "ARC":
c = e.dxf.center
return f"{h} {L} ARC c({r(c.x)},{r(c.y)}) r {r(e.dxf.radius)} {r(e.dxf.start_angle)}..{r(e.dxf.end_angle)}"
if t == "CIRCLE":
c = e.dxf.center
return f"{h} {L} CIRCLE c({r(c.x)},{r(c.y)}) r {r(e.dxf.radius)}"
if t in ("TEXT", "MTEXT"):
p = e.dxf.insert
s = e.plain_text() if t == "MTEXT" else e.dxf.text
return f"{h} {L} {t} ({r(p.x)},{r(p.y)}) '{s.strip()}'"
if t == "INSERT":
p = e.dxf.insert
return f"{h} {L} INSERT {e.dxf.name} ({r(p.x)},{r(p.y)})"
return f"{h} {L} {t}"
def render(label, x0, y0, x1, y1, name, px=2400):
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from ezdxf.addons.drawing import Frontend, RenderContext
from ezdxf.addons.drawing.config import BackgroundPolicy, ColorPolicy, Configuration
from ezdxf.addons.drawing.matplotlib import MatplotlibBackend
d = doc(label)
keep = list(entities(label, x0, y0, x1, y1))
fig = plt.figure(figsize=(px / 100, px * (y1 - y0) / (x1 - x0) / 100), dpi=100)
ax = fig.add_axes([0, 0, 1, 1])
cfg = Configuration(background_policy=BackgroundPolicy.WHITE, color_policy=ColorPolicy.BLACK)
Frontend(RenderContext(d), MatplotlibBackend(ax), config=cfg).draw_entities(keep)
ax.set_xlim(x0, x1)
ax.set_ylim(y0, y1)
ax.set_aspect("equal")
ax.axis("off")
out = HERE / "판독" / f"{name}.png"
out.parent.mkdir(exist_ok=True)
fig.savefig(out, facecolor="white")
plt.close(fig)
return out
if __name__ == "__main__":
cmd, label = sys.argv[1], sys.argv[2]
x0, y0, x1, y1 = map(float, sys.argv[3:7])
if cmd == "render":
print(render(label, x0, y0, x1, y1, sys.argv[7], int(sys.argv[8]) if len(sys.argv) > 8 else 2400))
else:
for e in entities(label, x0, y0, x1, y1, sys.argv[7] if len(sys.argv) > 7 else None):
print(describe(e))
+86
View File
@@ -0,0 +1,86 @@
"""Okseong P1 shape reading (G1 + G5 positions) from the general drawing -> 판독/g1_values.json.
Datums: front view CL x 390779.3, side view CL x 418514.4, z(mm) = drawing y - 314374.9 (footing bottom y 326549.9
= EL 12.175, coping top left y 335549.9 = EL 21.175). Plan view: column centre (391315.4, 352134.6) = model origin;
plan y up = model +Y. The coping is skewed in plan: end faces and top-step lines at 108 deg.
"""
import json
import math
from pathlib import Path
from dxftools import doc, entities
D = doc("D1")
FX, SX, ZO = 390779.3, 418514.4, -314374.9
PCX, PCY = 391315.4, 352134.6
out = {}
def line(h):
e = D.entitydb[h]
return (e.dxf.start.x, e.dxf.start.y), (e.dxf.end.x, e.dxf.end.y)
z = lambda y: round(y + ZO, 1)
# front view coping outline (y = 0 section): 1044B..10458
a, b = line("1044C")
out["coping_front"] = {
"bottom_flat_half": round(line("1044D")[1][0] - FX, 1), "z_bottom": z(line("1044D")[0][1]),
"tip_x": round(abs(a[0] - FX), 1), "z_tip": z(a[1]),
"end_left": {"x": round(line("1044B")[0][0] - FX, 1), "z0": z(line("1044B")[1][1]), "z1": z(line("1044B")[0][1])},
"end_right": {"x": round(line("1044F")[0][0] - FX, 1), "z0": z(line("1044F")[0][1]), "z1": z(line("1044F")[1][1])},
"top_steps": [{"x0": round(line(h)[0][0] - FX, 1), "x1": round(line(h)[1][0] - FX, 1), "z": z(line(h)[0][1])}
for h in ("10450", "10452", "10454", "10456", "10458")],
"src": "D1 정면 1044B~10458"}
# side view: coping width / taper, column, footing, lean
out["coping_side"] = {"half_width_top": 1650.0, "z_taper_top": 19675.0, "half_width_bottom": 1250.0, "z_bottom": 18175.0,
"src": "D1 단면도 (416864.4 / 420164.4 수직 EL 19.675~, 417264.4 / 419764.4 EL 18.175, 경사 1,552.4)"}
out["column"] = {"d": 2500.0, "z0": 14375.0, "z1": 18175.0, "src": "D1 정면 10347/10349, 단면도"}
out["footing"] = {"size_x": 9600.0, "size_y": 9600.0, "z0": 12175.0, "z1": 14375.0, "src": "D1 정면 1035C~1035F, 단면도"}
out["lean"] = {"size_x": 9800.0, "size_y": 9800.0, "z0": 12075.0, "z1": 12175.0, "src": "D1 정면 10355~1035B (9,800 x 100)"}
# piles: foundation plan symbols CSPILEH (5 x 5 @2,000), front view: D609, head 100 above the footing bottom
pins = [e for e in entities("D1", 409000, 343500, 428500, 358500) if e.dxftype() == "INSERT" and e.dxf.name == "CSPILEH"]
px = sorted({round(e.dxf.insert.x, 1) for e in pins})
py = sorted({round(e.dxf.insert.y, 1) for e in pins})
out["piles"] = {"count": len(pins), "nx": len(px), "ny": len(py), "pitch_x": px[1] - px[0], "pitch_y": py[1] - py[0],
"d": 609.0, "t": 12.0, "length": 22000.0, "z_top": 12275.0,
"src": "기초 평면도 CSPILEH 25개 (5 x 5 @2,000), 정면 말뚝 x 0, +-2,000, +-4,000, 머리 EL 12.275; 'Ø609.0x12T, L=22.0M'"}
# plan: skew of the coping (end line 104A3), coping outline 104A4 / 104A6
(e0, e1) = line("104A3")
out["skew_deg"] = round(math.degrees(math.atan2(e1[1] - e0[1], e1[0] - e0[0])) - 90, 3)
out["coping_plan"] = {"top_edge_y": round(line("104A4")[0][1] - PCY, 1), "bottom_edge_y": round(line("104A6")[0][1] - PCY, 1),
"top_edge_x": [round(line("104A4")[0][0] - PCX, 1), round(line("104A4")[1][0] - PCX, 1)],
"bottom_edge_x": [round(line("104A6")[1][0] - PCX, 1), round(line("104A6")[0][0] - PCX, 1)],
"step_lines_top_x": [round(line(h)[1][0] - PCX, 1) for h in ("104A7", "104A8", "104A9", "104AA")],
"src": "D1 평면 104A3~104AA"}
def rect(h):
pts = [p[:2] for p in D.entitydb[h].get_points("xy")]
cx, cy = sum(p[0] for p in pts) / 4 - PCX, sum(p[1] for p in pts) / 4 - PCY
e = [(pts[(i + 1) % 4][0] - pts[i][0], pts[(i + 1) % 4][1] - pts[i][1]) for i in range(4)]
L = [math.hypot(*v) for v in e]
ia = max(range(4), key=lambda i: abs(e[i][1]))
vx, vy = e[ia] if e[ia][1] > 0 else (-e[ia][0], -e[ia][1])
return {"centre": [round(cx, 1), round(cy, 1)], "along": round(L[ia], 1), "across": round(L[(ia + 1) % 4], 1),
"rotation_deg": round(math.degrees(math.atan2(vx, vy)), 3), "src": f"D1 평면 {h}"}
# pads: three nested rectangles per bearing (900 x 850 / 800 x 750 / 700 x 650); front row NO.1-5 = lower y
pads = {}
outer = ["10DB1", "10DAE", "10DAB", "10DA8", "10DA5", "10DA2", "10D9F", "10D9C", "10D99", "10D96"]
for no, h in enumerate(outer, 1):
pads[no] = rect(h)
out["pads_outer"] = pads
# pedestals: parallelograms (x width 1,366.9 along X, 2,600 in Y)
peds = []
for hs in (("104A2", "1049F", "104A0", "104A1"), ("1049A", "10497", "10498", "10499"), ("10492", "1048F", "10490", "10491"),
("1048A", "10487", "10488", "10489"), ("10482", "1047F", "10480", "10481")):
pts = [line(h)[0] for h in hs]
peds.append({"corners": [[round(x - PCX, 1), round(y - PCY, 1)] for x, y in pts], "src": "D1 평면 " + "/".join(hs)})
out["pedestals"] = peds
p = Path(__file__).resolve().parent / "판독" / "g1_values.json"
p.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
print(json.dumps({k: v for k, v in out.items() if k not in ("pads_outer", "pedestals")}, ensure_ascii=False))
print({k: (v["centre"], v["along"], v["across"], v["rotation_deg"]) for k, v in pads.items()})
print([p_["corners"] for p_ in peds][:2])
+43
View File
@@ -0,0 +1,43 @@
"""Okseong P1 column rebar reading (G2: P1~P5) -> 판독/g2_values.json.
Sheet 구조도(1) front view: column CL x 573551.6, z = drawing y - 309179.8 (footing top EL 14.375 at y 323554.8).
Sheet 구조도(2) sections: quarter arcs r 1,250 (column) / 1,148 (hoop), bar symbols on r 1,125 and 1,080.
Chains (front, left): '띠철근외측' 150 | 1.450 | 2@300 | 16@150 | 8@300 | 2@600 | 680 | 120 (= 9.000),
'크로스타이' 150 | 1.500 | 450 | 8@300 | 8@300 | 2@600 | 780 | 120 (= 9.000), from the footing bottom EL 12.175.
"""
import json
import math
from collections import Counter
from pathlib import Path
from dxftools import entities
CX, ZO = 573551.6, -309179.8
out = {}
hz = sorted({round(e.dxf.start.y + ZO, 1) for e in entities("D1", CX - 1300, 314000, CX + 1300, 334500, "CS-RBAR")
if e.dxftype() == "LINE" and abs(e.dxf.start.y - e.dxf.end.y) < 0.5 and abs(abs(e.dxf.start.x - e.dxf.end.x) - 2250) < 1})
out["hoops_drawn"] = {"count": len(hz), "levels": hz}
cx, cy = 624043.7, 335398.4
ins = [e for e in entities("D1", cx - 1300, cy - 1300, cx + 1300, cy + 1300, "CS-RBAR") if e.dxftype() == "INSERT"]
rr = Counter(round(math.hypot(e.dxf.insert.x - cx, e.dxf.insert.y - cy), 1) for e in ins)
out["section"] = {"rings": {str(r): n for r, n in rr.most_common(2)},
"first_deg": round(min(math.degrees(math.atan2(e.dxf.insert.y - cy, e.dxf.insert.x - cx)) % 360 for e in ins), 3),
"pitch_deg": 6.0, "tie_lines": 2295.0}
arcs = [(round(e.dxf.center.x - CX, 1), round(e.dxf.center.y + ZO, 1), e.dxf.radius) for e in
entities("D1", CX - 2200, 12100 - ZO, CX + 2200, 12750 - ZO, "CS-RBAR") if e.dxftype() == "ARC"]
out["main_hooks_drawn"] = {"arc_centres": sorted(set(arcs)), "leg_z": 12375.0, "outer": "outwards (centre r 1,395)",
"inner": "inwards (centre r 810)", "top_z": 20907.8, "straight_from_drawn": 12645.0}
B = 12175.0
hoops = [B + 150 + 1450 + 300 * k for k in range(3)]
hoops += [hoops[-1] + 150 * k for k in range(1, 17)]
hoops += [hoops[-1] + 300 * k for k in range(1, 9)]
hoops += [hoops[-1] + 600 * k for k in range(1, 3)]
ties = [B + 150 + 1500, B + 150 + 1500 + 450]
ties += [ties[-1] + 300 * k for k in range(1, 17)]
ties += [ties[-1] + 600 * k for k in range(1, 3)]
out["hoops_chain"] = hoops
out["ties_chain"] = ties
out["check"] = {"hoops_chain_equals_drawn": hoops == hz, "n_hoops": len(hoops), "n_tie_levels": len(ties)}
p = Path(__file__).resolve().parent / "판독" / "g2_values.json"
p.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
print(json.dumps({k: out[k] for k in ("section", "check")}, ensure_ascii=False), out["ties_chain"][:3], out["ties_chain"][-2:])
+39
View File
@@ -0,0 +1,39 @@
"""Okseong P1 footing rebar reading (G3: B1~B12, UM) -> 판독/g3_values.json.
Sheet 구조도(1): front CL x 573551.6, side CL x 592540.9, z = drawing y - 309179.8 (footing EL 12.175~14.375).
Sheet 구조도(3) footing plan: centre (654657.6, 333805.6); B9 symbols = EREC vertical lines 400 / 438 long
(lower half only drawn). Chains: front '100 | 2@100 | 72@125=9.000 | 2@100 | 100' (Y bars, 77),
side '100 | 2@163 | 70@125=8.750 | 2@163 | 100' (X bars, 75), mid '18@500' (front) / '538 | 16@500 | 538' (side).
"""
import json
from collections import Counter
from pathlib import Path
from dxftools import entities
ZO = -309179.8
def dots(cx, z):
return sorted(round(e.dxf.insert.x - cx, 1) for e in entities("D1", cx - 5000, z - ZO - 5, cx + 5000, z - ZO + 5, "CS-RBAR")
if e.dxftype() == "INSERT")
F, S = 573551.6, 592540.9
out = {"y_bars_bottom": {"z": 12325.0, "x": dots(F, 12325.0)}, "y_bars_top": {"z": 14275.0, "x": dots(F, 14275.0)},
"x_bars_bottom": {"z": 12347.5, "y": dots(S, 12347.5)}, "x_bars_top": {"z": 14252.5, "y": dots(S, 14252.5)},
"mid_y_bars": {"13825": [x for x in dots(F, 13825.0) if abs(x) < 4700], "12825": [x for x in dots(F, 12825.0) if abs(x) < 4700]},
"mid_x_bars": {"13825": [y for y in dots(S, 13825.0) if abs(y) < 4700 and y % 1000 == 0],
"12825": [y for y in dots(S, 12825.0) if abs(y) < 4700]},
"b10_levels": [z for z in (12575.0, 12825.0, 13325.0, 13825.0, 14075.0) if -4722.5 in dots(F, z)], "b10_corner": 4722.5}
cx, cy = 654657.6, 333805.6
v = [e for e in entities("D1", 646500, 327500, 660500, 340500, "CS-RBAR-EREC") if e.dxftype() == "LINE"
and abs(e.dxf.start.x - e.dxf.end.x) < 0.5 and 390 < e.dxf.start.distance(e.dxf.end) < 450]
half = sorted((round(e.dxf.start.x - cx, 1), round((e.dxf.start.y + e.dxf.end.y) / 2 - cy, 2)) for e in v)
out["b9_lower_half_drawn"] = {"count": len(half), "points": half,
"x_columns": sorted(Counter(p[0] for p in half)), "rows": sorted(Counter(p[1] for p in half))}
out["counts"] = {k: len(v_["x"] if "x" in v_ else v_["y"]) for k, v_ in out.items() if k.endswith(("bottom", "top"))}
p = Path(__file__).resolve().parent / "판독" / "g3_values.json"
p.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
print(out["counts"], {k: {z: len(v_) for z, v_ in out[k].items()} for k in ("mid_y_bars", "mid_x_bars")}, out["b10_levels"],
out["b9_lower_half_drawn"]["count"], out["b9_lower_half_drawn"]["rows"])
+79
View File
@@ -0,0 +1,79 @@
"""Okseong P1 footing rebar (G3: B1~B12) -> centreline polylines for the generic builder rebar_polylines.py (GATE G3).
Inputs: 판독/g3_values.json (front / side / plan reading) and decisions F1-F5 (2026-10-14). UM (assembly chairs) not
modelled (F5). Output: 판독/g3_bars.json. Model axes: X along the coping, Y across, Z = EL x 1000, footing centre = origin.
"""
import json
from pathlib import Path
HERE = Path(__file__).resolve().parent
V = json.loads((HERE / "판독" / "g3_values.json").read_text(encoding="utf-8"))
bars = []
H = 4700.0 # a 9,400 / 2
def rb(d):
return ((2 * d if d <= 16 else 3.5 * d) + d) / 2
def add(mark, occ, pts, dia, L, src, r=None):
bars.append({"mark": mark, "occ": occ, "pts": [[round(v, 2) for v in p] for p in pts], "r": rb(dia) if r is None else r,
"design_length": L, "src": src})
def u_y(x, z, leg): # bar along Y at x, legs (+up / -down) at both ends
return [(x, -H, z + leg), (x, -H, z), (x, H, z), (x, H, z + leg)]
def u_x(y, z, leg):
return [(-H, y, z + leg), (-H, y, z), (H, y, z), (H, y, z + leg)]
# bottom / top mats: two marks of the same shape alternate from the edge (F3); laps j not modelled
for key, marks, axis, leg, L, src in (
("y_bars_bottom", ("B2", "B4"), "Y", 1800, 14070, "정면 하면 점 EL 12.325, 측면 다리 1,800"),
("x_bars_bottom", ("B6", "B8"), "X", 1950, 14370, "측면 하면 점 EL 12.3475, 정면 다리 1,950"),
("y_bars_top", ("B1", "B3"), "Y", -900, 12730, "정면 상면 점 EL 14.275, 측면 다리 900"),
("x_bars_top", ("B5", "B7"), "X", -975, 12880, "측면 상면 점 EL 14.2525, 정면 다리 975")):
z = V[key]["z"]
pos = V[key]["x"] if axis == "Y" else V["x_bars_bottom"]["y"] # top X: chain positions (= bottom, 75)
for i, v in enumerate(pos):
add(marks[i % 2], f"{axis.lower()}{v:+.1f}", u_y(v, z, leg) if axis == "Y" else u_x(v, z, leg), 29, L,
src + f"; {marks[0]}/{marks[1]} 교번, 겹이음 j 미모델 (F3 [추론])")
# mid layers: B12 = Y bars (lifted 19, F4), B11 = X bars; legs 100 down
for zs, xs in V["mid_y_bars"].items():
for x in xs:
add("B12", f"z{zs}x{x:+.0f}", u_y(x, float(zs) + 19, -100), 19, 10160, f"정면 중간 점 EL {float(zs) / 1000:.3f} (+19, F4 [추론])")
for zs, ys in V["mid_x_bars"].items():
for y in ys:
add("B11", f"z{zs}y{y:+.0f}", u_x(y, float(zs), -100), 19, 10160, f"측면 중간 점 EL {float(zs) / 1000:.3f} (F4 [추론])")
# B10 closed loops (start at the -X mid side)
c = V["b10_corner"]
for zs in V["b10_levels"]:
add("B10", f"z{zs:.0f}", [(-c, 0, zs), (-c, -c, zs), (c, -c, zs), (c, c, zs), (-c, c, zs), (-c, 0, zs)], 19, 41152,
"정면·측면 모서리 점, 재료표 9,448 x 9,448, 겹이음 560 x 6 미모델")
# B9: plan grid (lower half drawn) mirrored; the mirrored point nearest the centre is dropped (F1); 'ㄷ' in the YZ
# plane: top a 567 (F2) at 14.299, legs b 1,998 to 12.301, inward feet c 100 (L = a + 2b + 2c = 4,763)
# full grid from the drawn rule: columns x0 + 500 k (k 0..18); even columns on the 5 'even' rows, odd columns on the
# 4 'odd' rows (lower half), mirrored. Some lower-right symbols are hidden under a dashed detail circle (78 drawn).
drawn = V["b9_lower_half_drawn"]["points"]
x0 = min(x for x, _ in drawn)
rows_even = sorted({round(y, 1) for x, y in drawn if round((x - x0) / 500) % 2 == 0})
rows_odd = sorted({round(y, 1) for x, y in drawn if round((x - x0) / 500) % 2 == 1})
lower = [(x0 + 500 * k, y) for k in range(19) for y in (rows_even if k % 2 == 0 else rows_odd)]
mirror = [(x, -y) for x, y in lower]
drop = min(mirror, key=lambda p: (p[0] ** 2 + p[1] ** 2, p[0]))
grid = lower + [p for p in mirror if p != drop]
missing_drawn = [p for p in lower if not any(abs(p[0] - x) < 1 and abs(p[1] - y) < 1 for x, y in drawn)]
zt, zb, a, cc = 14275 + 24, 12325 - 24, 567.0, 100.0
for x, y in grid:
add("B9", f"x{x:+.0f}y{y:+.0f}", [(x, y - a / 2 + cc, zb), (x, y - a / 2, zb), (x, y - a / 2, zt), (x, y + a / 2, zt),
(x, y + a / 2, zb), (x, y + a / 2 - cc, zb)], 19, a + 2 * (zt - zb) + 2 * cc,
"기초 평면 EREC 기호(아래 절반 작도, 위 절반 대칭); a 567 평균 (F2 [추론])")
count = {}
for b in bars:
count[b["mark"]] = count.get(b["mark"], 0) + 1
out = {"bars": bars, "summary": {"bars": len(bars), "per_mark": count, "b9_dropped": drop, "b9_rows": [rows_even, rows_odd],
"b9_not_drawn_lower": missing_drawn}}
(HERE / "판독" / "g3_bars.json").write_text(json.dumps(out, ensure_ascii=False), encoding="utf-8")
print(json.dumps(out["summary"], ensure_ascii=False))
+195
View File
@@ -0,0 +1,195 @@
"""Okseong P1 coping + bearing-seat rebar (G4: C1~C20, S1~S8) -> centreline polylines for the generic builder rebar_polylines.py.
Inputs: the drawing (DXF front 구조도(1): stirrup lines, side-loop lines, C18 points; side view: loop / tie y), the schedule and
the shape sheet (판독/g4_shapes.json), params.json (pedestals), decisions H1-H6 (2026-10-14, all recommended).
Output: 판독/g4_bars.json {"bars": [...], "summary": {...}} used by add_g4.py.
Model axes: X along the coping, Y across, Z = EL x 1000, pier centre at the origin. Coping rebar is built in the y = 0 section frame
(x, y, z) and sheared like the coping (plan skew 18 deg): x_model = x - tan(18) * y. Seat bars are built directly in the model frame.
"""
import json
import math
from collections import defaultdict
from pathlib import Path
from dxftools import entities
HERE = Path(__file__).resolve().parent
APP = HERE.parents[1] / "Code" / "교각모델링앱"
P = json.loads((APP / "data" / "옥성교P1" / "params.json").read_text(encoding="utf-8"))
SCHED = json.loads((HERE / "판독" / "g4_shapes.json").read_text(encoding="utf-8"))["table"]
T = math.tan(math.radians(P["coping"]["skew_deg"]))
ZO, F, S = -309179.8, 573551.6, 592540.9
bars = []
def rb(dia): # min bend radius of the centreline (as the other builders)
return ((2 * dia if dia <= 16 else 3.5 * dia) + dia) / 2
def dia_of(mark):
return int(SCHED[mark][1][1:])
def add(mark, occ, pts, src, r=None, shear=True):
if shear:
pts = [(x - T * y, y, z) for x, y, z in pts]
length = sum(math.dist(a, b) for a, b in zip(pts, pts[1:]))
bars.append({"mark": mark, "occ": occ, "pts": [[round(v, 2) for v in p] for p in pts],
"r": rb(dia_of(mark)) if r is None else r, "design_length": round(length, 1), "src": src})
def front(layer="CS-RBAR-MAJR"):
return entities("D1", F - 7000, 327300, F + 7000, 330500, layer)
def side(layer="CS-RBAR-MAJR"):
return entities("D1", S - 2500, 327300, S + 2500, 330500, layer)
# ---- drawn data ---------------------------------------------------------------------------------------------------------
# front vertical lines of the stirrups: (x, bottom z, top z); column bars (bottom < 18290) and the end hooks are left out
V = defaultdict(list)
for e in front():
if e.dxftype() == "LINE" and abs(e.dxf.start.x - e.dxf.end.x) < 0.5:
x = round(e.dxf.start.x - F, 1)
lo, hi = sorted((round(e.dxf.start.y + ZO, 1), round(e.dxf.end.y + ZO, 1)))
if lo >= 18290 and hi >= 21000 and abs(x) <= 5800 and x % 25 == 0:
V[x].append((lo, hi))
STIR = {x: v[0] for x, v in sorted(V.items())}
assert len(STIR) == 106, len(STIR)
DOTS = defaultdict(list) # front points (bars along Y): z -> [x]
for e in front():
if e.dxftype() == "INSERT":
DOTS[round(e.dxf.insert.y + ZO, 1)].append(round(e.dxf.insert.x - F, 1))
SIDE_DOTS = defaultdict(list) # side points (bars along X): z -> [y]
for e in side():
if e.dxftype() == "INSERT":
SIDE_DOTS[round(e.dxf.insert.y + ZO, 1)].append(round(e.dxf.insert.x - S, 1))
FRONT_H = {} # front horizontal lines: z -> max |x|
for e in front():
if e.dxftype() == "LINE" and abs(e.dxf.start.y - e.dxf.end.y) < 0.5:
z = round(e.dxf.start.y + ZO, 1)
FRONT_H[z] = max(FRONT_H.get(z, 0), round(max(abs(e.dxf.start.x - F), abs(e.dxf.end.x - F)), 1))
Y25 = [-1525.0] + [-1375.0 + 125 * k for k in range(23)] + [1525.0] # '125 | 150 | 22@125=2.750 | 150 | 125'
FACE_Z0, FACE_Y0, FACE_Z1, FACE_Y1 = 18272.5, 1146.7, 19691.4, 1525.0 # side face: vertical above EL 19.6914, taper below
K_FACE = (FACE_Y1 - FACE_Y0) / (FACE_Z1 - FACE_Z0)
def face_y(z):
return FACE_Y1 if z >= FACE_Z1 else FACE_Y0 + K_FACE * (z - FACE_Z0)
# ---- C1~C6 top bars: 3 layers, marks alternate from the edge, straight x +-5,875, legs down at both ends ---------------------
for z, legs, (ma, mb) in ((21007.8, 1247.0, ("C1", "C4")), (20927.8, 100.0, ("C2", "C5")), (20827.8, 100.0, ("C3", "C6"))):
for i, y in enumerate(Y25):
add((ma, mb)[i % 2], f"y{y:+.0f}", [(-5875, y, z - legs), (-5875, y, z), (5875, y, z), (5875, y, z - legs)],
f"정면 선 EL {z / 1000:.4f}, x ±5,875, 다리 {legs:.0f}; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델")
# ---- C19: centre U on top ------------------------------------------------------------------------------------------------
for y in Y25:
add("C19", f"y{y:+.0f}", [(-1171.4, y, 21122.2 - 370), (-1171.4, y, 21122.2), (1054.8, y, 21122.2), (1054.8, y, 21122.2 - 370)],
"정면 선 EL 21.1222, x -1,171.4 ~ 1,054.8, 다리 370")
# ---- C20: three L pieces x 25 rows (H3 [추론]: y rows = the top mats) --------------------------------------------------------
for z, xa, xb, leg_at in ((21055.0, -5875.0, -3402.6, "a"), (21088.6, -3647.6, -926.4, "a"), (21068.4, 809.8, 3531.0, "b")):
for y in Y25:
p = [(xa, y, z - 370), (xa, y, z), (xb, y, z)] if leg_at == "a" else [(xa, y, z), (xb, y, z), (xb, y, z - 370)]
add("C20", f"x{xa:+.0f}y{y:+.0f}", p, f"정면 선 EL {z / 1000:.4f}, x {xa} ~ {xb}, 다리 370 (H3 [추론] 상면 y 25줄)")
# ---- C7: soffit bar ('a' 606 up, slope b, flat c). y rows @250 (11) + 2 on the side face (H3 [추론]) ----------------------------
SLOPE = (19760.8 - 18295.0) / (5875.0 - 1331.1)
for y in [-1250.0 + 250 * k for k in range(11)] + [-1525.0, 1525.0]:
if abs(y) <= 1250.0:
dz = 0.0 if abs(y) <= 1000 else 18660.2 - 18295.0
else:
dz = 19691.4 - 18295.0
top = 20367.2 + dz
cap = 21127.7 - 97.5 - 16 # right (lowest) coping top - stirrup cover - bar radius
zr = 19760.8 + dz
if zr + 606.4 > cap: # the bar would leave the coping: end where the slope meets the cap
xe = 1331.1 + (cap - (18295.0 + dz)) / SLOPE
pts = [(-xe, y, cap), (-1331.1, y, 18295.0 + dz), (1331.1, y, 18295.0 + dz), (xe, y, cap)]
else:
pts = [(-5875, y, top), (-5875, y, zr), (-1331.1, y, 18295.0 + dz), (1331.1, y, 18295.0 + dz), (5875, y, zr), (5875, y, top)]
add("C7", f"y{y:+.0f}", pts, "정면 하면 경사선(±1,331.1 평평, ±5,875 EL 19.7608, 위 끝 연직 606), 측면 점 EL 18.295 / 18.6602 / 19.6914")
# ---- stirrups C8~C13: per x, top = V top + 22.5, bottom = V bottom - 22.5; X offset +20 for the pentagons (coincident planes) ----
for x, (lo, hi) in STIR.items():
zt, zb = hi + 22.5, lo - 22.5
rect, pent = (("C8", "C9") if x < -1325 else (("C10", "C11") if x <= 1275 else ("C12", "C13")))
add(rect, f"x{x:+.0f}", [(x, 0, zt), (x, 1000, zt), (x, 1000, zb), (x, -1000, zb), (x, -1000, zt), (x, 0, zt)],
f"정면 연직선 x {x} (EL {lo:.1f} ~ {hi:.1f}), 측면 선 y ±1,000, 위·아래 22.5 안쪽")
for s in (1, -1):
near = zb > FACE_Z1 - 20 # a chamfer shorter than 20 mm would break the pipe: keep the side straight
yb = FACE_Y1 if near else face_y(zb)
p = [(x + 20, s * 750, zt), (x + 20, s * 1525, zt)]
if not near:
p += [(x + 20, s * 1525, FACE_Z1)]
p += [(x + 20, s * yb, zb), (x + 20, s * 500, zb), (x + 20, s * 500, zt), (x + 20, s * 750, zt)]
add(pent, f"x{x:+.0f}{'R' if s > 0 else 'L'}", p, "측면 선 5각형: 안쪽 y ±500, 바깥 ±1,525 → EL 19.6914부터 측면 테이퍼, 위 d 1,025, x +20 (겹침 피함) [추론]")
# ---- side loops C16 (upper 6) / C14 (lower 6) and ties C17 / C15 (4 rows) -------------------------------------------------
UP = [20922.1, 20796.4, 20546.4, 20296.4, 20046.4, 19796.4]
LOW = [19546.4, 19296.4, 19046.4, 18796.4, 18546.4, 18420.7]
for levels, loop, tie in ((UP, "C16", "C17"), (LOW, "C14", "C15")):
for z in levels:
xe = FRONT_H[z]
ys = sorted(set(abs(v) for v in SIDE_DOTS[z] if abs(v) < 1600))
yo = max(ys)
add(loop, f"z{z:.0f}", [(0, yo, z), (xe, yo, z), (xe, -yo, z), (-xe, -yo, z), (-xe, yo, z), (0, yo, z)],
f"정면 선 EL {z / 1000:.4f} x ±{xe}, 측면 점 y ±{yo} (H6: 도면 점 위치)")
for y in (-977.5, -522.5, 522.5, 977.5):
assert any(abs(abs(y) - v) < 1 for v in ys), (z, y)
add(tie, f"z{z:.0f}y{y:+.1f}", [(-xe, y, z), (xe, y, z)], f"정면 선 EL {z / 1000:.4f}, 측면 점 y {y} (135° 갈고리 미모델, H4)")
# ---- C18: Y-direction U at every drawn front point (8 levels, 117) ------------------------------------------------------------
C18_Z = [21068.4, 21047.8, 20905.3, 20805.3, 20796.4, 20546.4, 19546.4, 18546.4]
for z in C18_Z:
h = face_y(z)
hl = min(FACE_Y1, h)
for x in sorted(DOTS[z]):
zl = z + 370 if z < FACE_Z1 else z - 370 # lower rows: legs UP along the face (down would leave the soffit) [추론]
yl = face_y(zl)
add("C18", f"x{x:+.0f}z{z:.0f}", [(x, -yl, zl), (x, -hl, z), (x, hl, z), (x, yl, zl)] if z < FACE_Z1 else
[(x, -hl, z - 370), (x, -hl, z), (x, hl, z), (x, hl, z - 370)],
f"정면 점 EL {z / 1000:.4f}, 측면 선 폭 ±{hl:.1f}, 다리 370 (낮은 단은 측면 테이퍼 따라 위로, H3 [추론])")
# ---- seat bars (H1, H2, H5 [추론]): pedestal k, local axes e_s (along the coping end face), e_x ---------------------------------
PED = P["bearing_seats"]["pedestals"]
for k, ped in enumerate(PED):
c = ped["corners"]
cx, cy = sum(p[0] for p in c) / 4, sum(p[1] for p in c) / 4
zp = (ped["top"]["z0"] + ped["top"]["z1"]) / 2
heavy = k == 2 # H1: pedestal 3 -> S1~S4
m_l, m_s, m_ll, m_ss = ("S1", "S2", "S3", "S4") if heavy else ("S5", "S6", "S7", "S8")
d_up = dia_of(m_l)
cs = math.cos(math.radians(18.0))
xc = lambda y, u=0.0: cx + u - T * (y - cy) # centre line of the pedestal along e_s, shifted by u in X
# upper mesh: long bars (11) along e_s, short bars (21) along X; U legs 700 down
for j, t in enumerate([-600.0] + [-500.0 + 125 * i for i in range(9)] + [600.0]):
z, u, hy = zp - 50, t / cs, 2629 * cs / 2
add(m_l, f"P{k + 1}-{j:02d}", [(xc(cy - hy, u), cy - hy, z - 700), (xc(cy - hy, u), cy - hy, z), (xc(cy + hy, u), cy + hy, z),
(xc(cy + hy, u), cy + hy, z - 700)], f"교좌면 상세 C-D, 대좌 {k + 1}, 긴 철근 e_s 방향 [추론 H2]", shear=False)
for j, o in enumerate([-1250.0] + [-1125.0 + 125 * i for i in range(19)] + [1250.0]):
z, y = zp - 50 - d_up, cy + o
add(m_s, f"P{k + 1}-{j:02d}", [(xc(y) - 631, y, z - 700), (xc(y) - 631, y, z), (xc(y) + 631, y, z), (xc(y) + 631, y, z - 700)],
f"교좌면 상세 C-D, 대좌 {k + 1}, 짧은 철근 X 방향 [추론 H2, H5]", shear=False)
# lower mesh: 2 layers (-373, -473); long bars 11 per layer along e_s, short bars 21 per layer along X
for layer, dz in enumerate((373.0, 473.0)):
z7 = zp - dz
for j, t in enumerate([-625.0 + 125 * i for i in range(11)]):
u, hy = t / cs, 2500 * cs / 2
add(m_ll, f"P{k + 1}-{layer}{j:02d}", [(xc(cy - hy, u), cy - hy, z7), (xc(cy + hy, u), cy + hy, z7)],
f"교좌면 상세 C-D, 대좌 {k + 1}, {layer + 1}층, e_s 방향 [추론 H2]", r=0, shear=False)
z8 = z7 + (dia_of(m_ll) + dia_of(m_ss)) / 2
for j, o in enumerate([-1250.0 + 125 * i for i in range(21)]):
y = cy + o
add(m_ss, f"P{k + 1}-{layer}{j:02d}", [(xc(y) - 625, y, z8), (xc(y) + 625, y, z8)],
f"교좌면 상세 C-D, 대좌 {k + 1}, {layer + 1}층, X 방향 [추론 H2, H5]", r=0, shear=False)
count = {}
for b in bars:
count[b["mark"]] = count.get(b["mark"], 0) + 1
want = {m: int(v[3]) for m, v in SCHED.items() if m[0] in "CS"}
out = {"bars": bars, "summary": {"bars": len(bars), "per_mark": count, "diff_vs_schedule": {m: count.get(m, 0) - n for m, n in want.items() if count.get(m, 0) != n}}}
(HERE / "판독" / "g4_bars.json").write_text(json.dumps(out, ensure_ascii=False), encoding="utf-8")
print(json.dumps(out["summary"], ensure_ascii=False))
+45
View File
@@ -0,0 +1,45 @@
"""Okseong P1 G4 helper: match the shape sheet (구조도(4) 철근 상세) to the material table by (L, N) -> 판독/g4_shapes.json."""
import json
import re
from pathlib import Path
HERE = Path(__file__).resolve().parent
T = json.loads((HERE / "dxf" / "texts.json").read_text(encoding="utf-8"))
tab = {}
for x in T:
if 714800 <= x["x"] <= 725000 and 324500 <= x["y"] <= 339900 and x["layer"].startswith("CS-TABL"):
tab.setdefault(round(x["y"]), []).append((x["x"], x["text"].strip()))
table = {}
for y, cells in tab.items():
cells = [s for _, s in sorted(cells)]
if re.fullmatch(r"[CSP]\d+|UM|B\d+", cells[0]):
table[cells[0]] = cells
# the table repeats the diameter as '"': resolve it
dia = None
for m in sorted(table, key=lambda m: -[y for y, c in tab.items() if c and sorted(c)[0][1].strip() == m][0]):
c = table[m]
if c[1].startswith("H"):
dia = c[1]
else:
c[1] = dia
sh = [x for x in T if 689900 <= x["x"] <= 712000 and 324000 <= x["y"] <= 343000 and x["layer"] == "CS-TEXT"]
blocks = [(689900, 694500), (695000, 700000), (700500, 706500), (707000, 712000)]
rows = []
for x in sh:
m = re.fullmatch(r"L=([\d.]+)", x["text"].strip())
if m:
L = float(m.group(1))
b = [i for i, (a, c) in enumerate(blocks) if a <= x["x"] < c][0]
n = [y for y in sh if re.fullmatch(r"N=\d+", y["text"].strip()) and abs(y["y"] - x["y"]) < 5 and blocks[b][0] <= y["x"] < blocks[b][1]]
N = int(n[0]["text"].strip()[2:]) if n else None
params = sorted(((y["x"], y["y"], y["text"].strip()) for y in sh if blocks[b][0] <= y["x"] < blocks[b][1]
and x["y"] - 500 <= y["y"] < x["y"] - 100 and not re.match(r"[LN]=", y["text"].strip())),
key=lambda p: (-round(p[1] / 50), p[0]))
rows.append({"L": L, "N": N, "block": b, "y": x["y"], "params": [p[2] for p in params]})
out = {}
for r in rows:
cand = [m for m, c in table.items() if abs(float(c[2]) - r["L"]) < 1e-6 and int(c[3]) == r["N"]]
out.setdefault("/".join(cand) or f"?{r['L']}/{r['N']}", []).append(r)
(HERE / "판독" / "g4_shapes.json").write_text(json.dumps({"table": table, "shapes": out}, ensure_ascii=False, indent=1), encoding="utf-8")
for k, v in out.items():
print(k, table.get(k.split("/")[0], ["", ""])[1], v[0]["L"], v[0]["N"], v[0]["params"])
+117
View File
@@ -0,0 +1,117 @@
"""Create the app pier '옥성교P1' (tapered T on piles, plan skew 18 deg; scope G1 + G5) through the web client:
new pier (Ulsan template as a starting copy), upload a copy of RAG/옥성교P1.dwg, then write params / expected from
the reading (판독/g1_values.json; DOC/02_분석/분석_옥성교P1교각도면판독_2026-10-14_v0.1.00.md) and decisions O1-O5.
usage: python make_pier.py (refuses if the pier already exists)
"""
import json
import sys
from io import BytesIO
from pathlib import Path
HERE = Path(__file__).resolve().parent
ROOT = HERE.parents[1]
APP = ROOT / "Code" / "교각모델링앱"
sys.path.insert(0, str(APP / "web"))
import app as webapp # noqa: E402
import store # noqa: E402
NAME = "옥성교P1"
V = json.loads((HERE / "판독" / "g1_values.json").read_text(encoding="utf-8"))
cf = V["coping_front"]
steps = cf["top_steps"]
prof = [(cf["bottom_flat_half"] * -1, cf["z_bottom"]), (cf["bottom_flat_half"], cf["z_bottom"]), (cf["tip_x"], cf["z_tip"])]
for s in reversed(steps):
prof += [(s["x1"], s["z"]), (s["x0"], s["z"])]
prof += [(-cf["tip_x"], cf["z_tip"])]
TABLE = {1: (21398, 173), 2: (21432, 173), 3: (21465, 173), 4: (21411, 173), 5: (21351, 173),
6: (21419, 194), 7: (21453, 194), 8: (21486, 194), 9: (21433, 194), 10: (21372, 194)}
pads = {int(k): v for k, v in V["pads_outer"].items()}
step_of = lambda no: steps[(no - 1) % 5]["z"] # NO.1-5 / 6-10 lie on step 1..5 (skewed bearing lines)
YF, YR = pads[1]["centre"][1], pads[6]["centre"][1]
pedestals = []
for i, pd in enumerate(V["pedestals"]):
zs = step_of(i + 1)
pedestals.append({"no": i + 1, "corners": pd["corners"], "z_bottom": zs,
"top": {"y0": YF, "z0": zs + 173, "y1": YR, "z1": zs + 194}, "src": pd["src"] + "; 상면 앞 +173 → 뒤 +194 (O2 [추론])"})
bearings = [{"no": no, "type": "3000 kN", "row": "front" if no <= 5 else "rear", "centre": pads[no]["centre"],
"rotation_deg": pads[no]["rotation_deg"], "seat_z": step_of(no), "el_x": TABLE[no][0], "h1": TABLE[no][1],
"h2": 50, "A": 700, "B": 650, "pedestal": (no - 1) % 5} for no in range(1, 11)]
params = {
"_schema": "pier-T/1", "pier_id": "P1",
"_meta": {"structure": "옥성교 P1 교각 (T형, 말뚝기초, 직선 경사 코핑, 평면 사각 18°)",
"status": "형상(G1)·받침(G5) 판독 2026-10-14, 결정 O1~O5 사용자 확정. 철근 G2~G4 미판독(범위 밖)",
"units": "mm; Z = EL x 1000", "frame": "X 코핑 길이 방향, Y 평면 위쪽, 원점 = 기둥 중심",
"sources": {"D1": "RAG/옥성교P1.dwg (교각 일반도(1) + 배근도)"},
"reading": "DOC/02_분석/분석_옥성교P1교각도면판독_2026-10-14_v0.1.00.md, Code/옥성P1판독/판독/g1_values.json"},
"scope": ["G1", "G5"], "builders": {"G1": "concrete_tapered.py"},
"lean_concrete": {"size_x": 9800.0, "size_y": 9800.0, "z_bottom": 12075.0, "z_top": 12175.0, "src": V["lean"]["src"]},
"footing": {"size_x": 9600.0, "size_y": 9600.0, "z_bottom": 12175.0, "thickness": 2200.0, "src": V["footing"]["src"]},
"piles": {"count_x": 5, "count_y": 5, "pitch_x": 2000.0, "pitch_y": 2000.0, "diameter": 609.0, "length": 22000.0,
"head_embedment": 100.0, "kind": "내부굴착강관말뚝 Ø609.0x12T (속찬 원기둥, O5)",
"src": V["piles"]["src"] + "; 기초 평면 '5@1.600'은 오기 (O1)"},
"column": {"shape": "circular", "diameter": 2500.0, "height": 3800.0, "src": V["column"]["src"]},
"coping": {"form": "tapered", "profile_xz": [list(p) for p in prof], "width_y": 3300.0, "plan_length": 12000.0,
"top_length": 12000.0, "z_tip": cf["z_tip"], "z_top_left": steps[0]["z"], "z_top_right": steps[-1]["z"],
"plan_corner_radius": 0,
"side_taper": {"half_width_top": 1650.0, "z_taper_top": 19675.0, "half_width_bottom": 1250.0},
"skew_deg": V["skew_deg"],
"src": {"profile": cf["src"] + " (Y = 0 단면, 상면 5단)", "side": V["coping_side"]["src"],
"skew": V["coping_plan"]["src"] + " (O3)"}},
"materials": {"fck": {"lean": "16MPa", "footing": "27MPa", "column": "35MPa", "coping": "35MPa", "seat": "35MPa"},
"src": "일반도 주기 '버림 CON'C fck = 16 MPa', '구체 fck = 27 MPa'(기초), '구체 fck = 35 MPa'; 대좌 35 [추론]"},
"bearing_seats": {"_note": "shared pedestals (one per bearing line, both rows), sloped top (O2); pads rotated with the skew",
"pad_margin_bottom": 200, "pad_margin_top": 100, "pedestals": pedestals, "bearings": bearings,
"src": "일반도 평면 대좌 1047F~104A2, 패드 10D96~10DB3; ELEVATION TABLE h1·h2·A·B"},
"sole_plates": {"table": [{"no": no, "S": 1.765, "L": 800, "W": 750, "T": 29, "T1": 22, "T2": 36} for no in range(1, 11)],
"h3": 148, "bearing_size": "AB", "bearing_shrink": 100,
"colours": {"bearing": [0, 0, 0], "sole_plate": [150, 150, 150]},
"sole_plate_src": "솔플레이트 상세 TABLE; S > 0 -> 두꺼운 쪽 +Y (T2 36, O4 [추론])",
"src": "교량받침 A x B (700 x 650), h3 148 (ELEVATION TABLE); T = h4 29"},
"rebar_marks": {}, "rebar_marks_src": "철근 G2~G4 다음 Task",
}
expected = {
"_schema": "pier-T-expected/1", "pier_id": "P1", "tol_mm": 1.0,
"_note": "독립 기대값: 일반도 치수 문자·EL 문자·받침 표. [작도] = 치수 문자 없음(사각 18°, 대좌 외곽, 받침 평면 위치)",
"checkers": {"G1": "g1_skew.py"},
"negative": {"G1": [{"id": "BP02", "d": [3, 0, 0]}, {"id": "BS03", "d": [0, 0, 2]}],
"G5": [{"id": "BB04", "d": [5, 0, 0]}, {"id": "SP03", "d": [0, 0, 5]}]},
"planned_fail": [],
"G1": {"footing": {"dx": 9600, "dy": 9600, "z0": 12175, "thickness": 2200, "src": "'9.600', '2.200', 'EL. 12.175'"},
"lean": {"dx": 9800, "dy": 9800, "thickness": 100, "src": "버림 '100', 9,800"},
"column": {"d": 2500, "height": 3800, "src": "'2.500', '3.800'"},
"piles": {"nx": 5, "ny": 5, "pitch": 2000, "edge": 800, "d": 609, "length": 22000, "head_embedment": 100,
"src": "'4@2.000=8.000' (정면·단면), '800', 'Ø609.0x12T, L=22.0M', 머리 '100' (O1)"},
"coping": {"bottom_flat_half": 1350, "tip_half": 6000, "soffit_rise": 1500, "width_y": 3300, "side_bottom_width": 2500,
"skew_deg": 18.0, "step_bounds": [-3773, -1297, 1179, 3655],
"step_z": [21175, 21209, 21242, 21188, 21128],
"src": "'12.000', '2.700'(1,350 x 2), '1.500' x 2, '3.300'(1,120+1,141+1,039), 기둥 폭 2,500; 상면 단 경계 '2.227, 3@2.476, 2.344'; "
"단 높이 = EL.'X' - h1 - h2 (NO.1~5); 사각 18° [작도]"},
"seats": {"n_pedestals": 5,
"table": {str(no): [TABLE[no][0], TABLE[no][1], 50, 700, 650] for no in range(1, 11)},
"pos": {str(no): pads[no]["centre"] for no in range(1, 11)},
"src": "ELEVATION TABLE; 받침 평면 위치 [작도] (단면 '1.120, 1.141, 1.039' = y -530 / 611 ✓)"}},
"G5": {"el_x": {str(no): TABLE[no][0] for no in range(1, 11)}, "S": {str(no): 1.765 for no in range(1, 11)},
"W": {str(no): 750 for no in range(1, 11)}, "L": 800, "T": 29, "h3": 148,
"bearing_size": {str(no): [700, 650] for no in range(1, 11)}, "bearing_shrink": 100, "thick_end": "+Y",
"colours": {"bearing": [0, 0, 0], "sole_plate": [150, 150, 150]},
"src": "ELEVATION TABLE (EL.'X', h3, A, B); 솔플레이트 상세 TABLE (S, L, W, T1 22 / T2 36 -> +Y, O4)"},
}
if __name__ == "__main__":
if (store.DATA / NAME).exists():
sys.exit(f"pier exists: {NAME}")
c = webapp.app.test_client()
assert c.post("/pier/new", data={"name": NAME, "type": "T형", "template": "tpl:산외교울산P1형"}).status_code == 302
dwg = ROOT / "RAG" / "옥성교P1.dwg"
r = c.post(f"/pier/{NAME}/upload", data={"dwg": [(BytesIO(dwg.read_bytes()), dwg.name)]}, content_type="multipart/form-data")
assert r.status_code == 302, r.status_code
p = store.Pier(NAME)
params["display"] = p.load("params")["display"]
expected["rebar_palette"] = p.load("expected")["rebar_palette"]
p.save("params", params)
p.save("expected", expected)
meta = store.rjson(p.dir / "pier.json")
meta["template"] = "신규 판독 (옥성교 P1 판독서 v0.1.00)"
store.wjson(p.dir / "pier.json", meta)
print("created", p.dir, "texts", len(p.texts()), "profile", prof)
+17
View File
@@ -0,0 +1,17 @@
"""Run gates (default G1 then G5) of the app pier '옥성교P1' with the engine (no confirmation / approval: those are the
user's review records in the app). Results: data/옥성교P1/runs/current/G*_gate.json, G*.3dm.
usage: python run_gates.py [G1|G5 ...]"""
import json
import sys
from pathlib import Path
APP = Path(__file__).resolve().parents[2] / "Code" / "교각모델링앱"
sys.path.insert(0, str(APP))
from engine.gates import run_gate # noqa: E402
D = APP / "data" / "옥성교P1"
for g in sys.argv[1:] or ["G1", "G5"]:
rep = run_gate(g, D / "params.json", D / "expected.json", D / "runs" / "current")
print(json.dumps({k: rep[k] for k in ("gate", "verdict", "summary", "unplanned_fails", "reload", "secs")}, ensure_ascii=False))
if rep["verdict"] != "PASS":
break
+314
View File
@@ -0,0 +1,314 @@
{
"coping_front": {
"bottom_flat_half": 1350.0,
"z_bottom": 18175.0,
"tip_x": 6000.0,
"z_tip": 19675.0,
"end_left": {
"x": -6000.0,
"z0": 19675.0,
"z1": 21175.0
},
"end_right": {
"x": 6000.0,
"z0": 19675.0,
"z1": 21127.7
},
"top_steps": [
{
"x0": -6000.0,
"x1": -3772.6,
"z": 21175.0
},
{
"x0": -3772.6,
"x1": -1296.4,
"z": 21208.6
},
{
"x0": -1296.4,
"x1": 1179.8,
"z": 21242.2
},
{
"x0": 1179.8,
"x1": 3656.0,
"z": 21188.3
},
{
"x0": 3656.0,
"x1": 6000.0,
"z": 21127.7
}
],
"src": "D1 정면 1044B~10458"
},
"coping_side": {
"half_width_top": 1650.0,
"z_taper_top": 19675.0,
"half_width_bottom": 1250.0,
"z_bottom": 18175.0,
"src": "D1 단면도 (416864.4 / 420164.4 수직 EL 19.675~, 417264.4 / 419764.4 EL 18.175, 경사 1,552.4)"
},
"column": {
"d": 2500.0,
"z0": 14375.0,
"z1": 18175.0,
"src": "D1 정면 10347/10349, 단면도"
},
"footing": {
"size_x": 9600.0,
"size_y": 9600.0,
"z0": 12175.0,
"z1": 14375.0,
"src": "D1 정면 1035C~1035F, 단면도"
},
"lean": {
"size_x": 9800.0,
"size_y": 9800.0,
"z0": 12075.0,
"z1": 12175.0,
"src": "D1 정면 10355~1035B (9,800 x 100)"
},
"piles": {
"count": 25,
"nx": 5,
"ny": 5,
"pitch_x": 2000.0,
"pitch_y": 2000.0,
"d": 609.0,
"t": 12.0,
"length": 22000.0,
"z_top": 12275.0,
"src": "기초 평면도 CSPILEH 25개 (5 x 5 @2,000), 정면 말뚝 x 0, +-2,000, +-4,000, 머리 EL 12.275; 'Ø609.0x12T, L=22.0M'"
},
"skew_deg": 18.0,
"coping_plan": {
"top_edge_y": 1650.0,
"bottom_edge_y": -1650.0,
"top_edge_x": [
-6536.1,
5463.9
],
"bottom_edge_x": [
-5463.9,
6536.1
],
"step_lines_top_x": [
-4308.7,
-1832.5,
643.7,
3119.9
],
"src": "D1 평면 104A3~104AA"
},
"pads_outer": {
"1": {
"centre": [
-4767.0,
-530.2
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DB1"
},
"2": {
"centre": [
-2290.8,
-530.2
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DAE"
},
"3": {
"centre": [
185.4,
-530.2
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DAB"
},
"4": {
"centre": [
2661.6,
-530.2
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DA8"
},
"5": {
"centre": [
5137.8,
-530.2
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DA5"
},
"6": {
"centre": [
-5137.8,
610.9
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10DA2"
},
"7": {
"centre": [
-2661.6,
610.9
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10D9F"
},
"8": {
"centre": [
-185.4,
610.9
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10D9C"
},
"9": {
"centre": [
2290.8,
610.9
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10D99"
},
"10": {
"centre": [
4767.0,
610.9
],
"along": 900.0,
"across": 850.0,
"rotation_deg": -18.0,
"src": "D1 평면 10D96"
}
},
"pedestals": [
{
"corners": [
[
-3856.1,
-1230.2
],
[
-5223.0,
-1230.2
],
[
-6067.8,
1369.7
],
[
-4700.9,
1369.7
]
],
"src": "D1 평면 104A2/1049F/104A0/104A1"
},
{
"corners": [
[
-1379.9,
-1230.2
],
[
-2746.8,
-1230.2
],
[
-3591.6,
1369.7
],
[
-2224.7,
1369.7
]
],
"src": "D1 평면 1049A/10497/10498/10499"
},
{
"corners": [
[
1096.3,
-1230.2
],
[
-270.6,
-1230.2
],
[
-1115.4,
1369.7
],
[
251.5,
1369.7
]
],
"src": "D1 평면 10492/1048F/10490/10491"
},
{
"corners": [
[
3572.5,
-1230.2
],
[
2205.6,
-1230.2
],
[
1360.8,
1369.7
],
[
2727.7,
1369.7
]
],
"src": "D1 평면 1048A/10487/10488/10489"
},
{
"corners": [
[
6048.7,
-1230.2
],
[
4681.7,
-1230.2
],
[
3837.0,
1369.7
],
[
5203.9,
1369.7
]
],
"src": "D1 평면 10482/1047F/10480/10481"
}
]
}
+132
View File
@@ -0,0 +1,132 @@
{
"hoops_drawn": {
"count": 29,
"levels": [
13775.0,
14075.0,
14375.0,
14525.0,
14675.0,
14825.0,
14975.0,
15125.0,
15275.0,
15425.0,
15575.0,
15725.0,
15875.0,
16025.0,
16175.0,
16325.0,
16475.0,
16625.0,
16775.0,
17075.0,
17375.0,
17675.0,
17975.0,
18275.0,
18575.0,
18875.0,
19175.0,
19775.0,
20375.0
]
},
"section": {
"rings": {
"1125.0": 60,
"1080.0": 60
},
"first_deg": 0.001,
"pitch_deg": 6.0,
"tie_lines": 2295.0
},
"main_hooks_drawn": {
"arc_centres": [
[
-1395.0,
12645.0,
270.0
],
[
-810.0,
12645.0,
270.0
],
[
810.0,
12645.0,
270.0
],
[
1395.0,
12645.0,
270.0
]
],
"leg_z": 12375.0,
"outer": "outwards (centre r 1,395)",
"inner": "inwards (centre r 810)",
"top_z": 20907.8,
"straight_from_drawn": 12645.0
},
"hoops_chain": [
13775.0,
14075.0,
14375.0,
14525.0,
14675.0,
14825.0,
14975.0,
15125.0,
15275.0,
15425.0,
15575.0,
15725.0,
15875.0,
16025.0,
16175.0,
16325.0,
16475.0,
16625.0,
16775.0,
17075.0,
17375.0,
17675.0,
17975.0,
18275.0,
18575.0,
18875.0,
19175.0,
19775.0,
20375.0
],
"ties_chain": [
13825.0,
14275.0,
14575.0,
14875.0,
15175.0,
15475.0,
15775.0,
16075.0,
16375.0,
16675.0,
16975.0,
17275.0,
17575.0,
17875.0,
18175.0,
18475.0,
18775.0,
19075.0,
19675.0,
20275.0
],
"check": {
"hoops_chain_equals_drawn": true,
"n_hoops": 29,
"n_tie_levels": 20
}
}
+1
View File
@@ -0,0 +1 @@
{"bars": [{"mark": "B2", "occ": "y-4700.0", "pts": [[-4700.0, -4700.0, 14125.0], [-4700.0, -4700.0, 12325.0], [-4700.0, 4700.0, 12325.0], [-4700.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-4600.0", "pts": [[-4600.0, -4700.0, 14125.0], [-4600.0, -4700.0, 12325.0], [-4600.0, 4700.0, 12325.0], [-4600.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-4500.0", "pts": [[-4500.0, -4700.0, 14125.0], [-4500.0, -4700.0, 12325.0], [-4500.0, 4700.0, 12325.0], [-4500.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-4375.0", "pts": [[-4375.0, -4700.0, 14125.0], [-4375.0, -4700.0, 12325.0], [-4375.0, 4700.0, 12325.0], [-4375.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-4250.0", "pts": [[-4250.0, -4700.0, 14125.0], [-4250.0, -4700.0, 12325.0], [-4250.0, 4700.0, 12325.0], [-4250.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-4125.0", "pts": [[-4125.0, -4700.0, 14125.0], [-4125.0, -4700.0, 12325.0], [-4125.0, 4700.0, 12325.0], [-4125.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-4000.0", "pts": [[-4000.0, -4700.0, 14125.0], [-4000.0, -4700.0, 12325.0], [-4000.0, 4700.0, 12325.0], [-4000.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-3875.0", "pts": [[-3875.0, -4700.0, 14125.0], [-3875.0, -4700.0, 12325.0], [-3875.0, 4700.0, 12325.0], [-3875.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-3750.0", "pts": [[-3750.0, -4700.0, 14125.0], [-3750.0, -4700.0, 12325.0], [-3750.0, 4700.0, 12325.0], [-3750.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-3625.0", "pts": [[-3625.0, -4700.0, 14125.0], [-3625.0, -4700.0, 12325.0], [-3625.0, 4700.0, 12325.0], [-3625.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-3500.0", "pts": [[-3500.0, -4700.0, 14125.0], [-3500.0, -4700.0, 12325.0], [-3500.0, 4700.0, 12325.0], [-3500.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-3375.0", "pts": [[-3375.0, -4700.0, 14125.0], [-3375.0, -4700.0, 12325.0], [-3375.0, 4700.0, 12325.0], [-3375.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-3250.0", "pts": [[-3250.0, -4700.0, 14125.0], [-3250.0, -4700.0, 12325.0], [-3250.0, 4700.0, 12325.0], [-3250.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-3125.0", "pts": [[-3125.0, -4700.0, 14125.0], [-3125.0, -4700.0, 12325.0], [-3125.0, 4700.0, 12325.0], [-3125.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-3000.0", "pts": [[-3000.0, -4700.0, 14125.0], [-3000.0, -4700.0, 12325.0], [-3000.0, 4700.0, 12325.0], [-3000.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B4", "occ": "y-2875.0", "pts": [[-2875.0, -4700.0, 14125.0], [-2875.0, -4700.0, 12325.0], [-2875.0, 4700.0, 12325.0], [-2875.0, 4700.0, 14125.0]], "r": 65.25, "design_length": 14070, "src": "정면 하면 점 EL 12.325, 측면 다리 1,800; B2/B4 교번, 겹이음 j 미모델 (F3 [추론])"}, {"mark": "B2", "occ": "y-2750.0", "pts": [[-2750.0, -4700.0, 14125.0], [-2750.0, -4700.0, 12325.0], [-2750.0, 4700.0, 12325.0Line truncated
+740
View File
@@ -0,0 +1,740 @@
{
"y_bars_bottom": {
"z": 12325.0,
"x": [
-4700.0,
-4600.0,
-4500.0,
-4375.0,
-4250.0,
-4125.0,
-4000.0,
-3875.0,
-3750.0,
-3625.0,
-3500.0,
-3375.0,
-3250.0,
-3125.0,
-3000.0,
-2875.0,
-2750.0,
-2625.0,
-2500.0,
-2375.0,
-2250.0,
-2125.0,
-2000.0,
-1875.0,
-1750.0,
-1625.0,
-1500.0,
-1375.0,
-1250.0,
-1125.0,
-1000.0,
-875.0,
-750.0,
-625.0,
-500.0,
-375.0,
-250.0,
-125.0,
-0.0,
125.0,
250.0,
375.0,
500.0,
625.0,
750.0,
875.0,
1000.0,
1125.0,
1250.0,
1375.0,
1500.0,
1625.0,
1750.0,
1875.0,
2000.0,
2125.0,
2250.0,
2375.0,
2500.0,
2625.0,
2750.0,
2875.0,
3000.0,
3125.0,
3250.0,
3375.0,
3500.0,
3625.0,
3750.0,
3875.0,
4000.0,
4125.0,
4250.0,
4375.0,
4500.0,
4600.0,
4700.0
]
},
"y_bars_top": {
"z": 14275.0,
"x": [
-4700.0,
-4600.0,
-4500.0,
-4375.0,
-4250.0,
-4125.0,
-4000.0,
-3875.0,
-3750.0,
-3625.0,
-3500.0,
-3375.0,
-3250.0,
-3125.0,
-3000.0,
-2875.0,
-2750.0,
-2625.0,
-2500.0,
-2375.0,
-2250.0,
-2125.0,
-2000.0,
-1875.0,
-1750.0,
-1625.0,
-1500.0,
-1375.0,
-1250.0,
-1125.0,
-1000.0,
-875.0,
-750.0,
-625.0,
-500.0,
-375.0,
-250.0,
-125.0,
-0.0,
125.0,
250.0,
375.0,
500.0,
625.0,
750.0,
875.0,
1000.0,
1125.0,
1250.0,
1375.0,
1500.0,
1625.0,
1750.0,
1875.0,
2000.0,
2125.0,
2250.0,
2375.0,
2500.0,
2625.0,
2750.0,
2875.0,
3000.0,
3125.0,
3250.0,
3375.0,
3500.0,
3625.0,
3750.0,
3875.0,
4000.0,
4125.0,
4250.0,
4375.0,
4500.0,
4600.0,
4700.0
]
},
"x_bars_bottom": {
"z": 12347.5,
"y": [
-4700.0,
-4537.5,
-4375.0,
-4250.0,
-4125.0,
-4000.0,
-3875.0,
-3750.0,
-3625.0,
-3500.0,
-3375.0,
-3250.0,
-3125.0,
-3000.0,
-2875.0,
-2750.0,
-2625.0,
-2500.0,
-2375.0,
-2250.0,
-2125.0,
-2000.0,
-1875.0,
-1750.0,
-1625.0,
-1500.0,
-1375.0,
-1250.0,
-1125.0,
-1000.0,
-875.0,
-750.0,
-625.0,
-500.0,
-375.0,
-250.0,
-125.0,
-0.0,
125.0,
250.0,
375.0,
500.0,
625.0,
750.0,
875.0,
1000.0,
1125.0,
1250.0,
1375.0,
1500.0,
1625.0,
1750.0,
1875.0,
2000.0,
2125.0,
2250.0,
2375.0,
2500.0,
2625.0,
2750.0,
2875.0,
3000.0,
3125.0,
3250.0,
3375.0,
3500.0,
3625.0,
3750.0,
3875.0,
4000.0,
4125.0,
4250.0,
4375.0,
4537.5,
4700.0
]
},
"x_bars_top": {
"z": 14252.5,
"y": [
-4700.0,
-4537.5,
-4375.0,
-4250.0,
-4125.0,
-4000.0,
-3875.0,
-3750.0,
-3625.0,
-3500.0,
-3375.0,
-3250.0,
-3125.0,
-3000.0,
-2875.0,
-2750.0,
-2625.0,
-2500.0,
-2375.0,
-2250.0,
-2250.0,
-2125.0,
-2000.0,
-1875.0,
-1750.0,
-1625.0,
-1500.0,
-1375.0,
-1250.0,
-1125.0,
-1000.0,
-875.0,
-750.0,
-625.0,
-500.0,
-375.0,
-250.0,
-125.0,
-0.0,
125.0,
250.0,
375.0,
500.0,
625.0,
750.0,
875.0,
1000.0,
1125.0,
1250.0,
1375.0,
1500.0,
1625.0,
1750.0,
1875.0,
2000.0,
2125.0,
2250.0,
2375.0,
2500.0,
2625.0,
2750.0,
2875.0,
3000.0,
3125.0,
3250.0,
3375.0,
3500.0,
3625.0,
3750.0,
3875.0,
4000.0,
4125.0,
4250.0,
4375.0,
4537.5,
4700.0
]
},
"mid_y_bars": {
"13825": [
-4000.0,
-3000.0,
-2000.0,
-1000.0,
-0.0,
1000.0,
2000.0,
3000.0,
4000.0
],
"12825": [
-4500.0,
-3500.0,
-2500.0,
-1500.0,
-500.0,
500.0,
1500.0,
2500.0,
3500.0,
4500.0
]
},
"mid_x_bars": {
"13825": [
-4000.0,
-3000.0,
-2000.0,
-1000.0,
-0.0,
1000.0,
2000.0,
3000.0,
4000.0
],
"12825": [
-4537.5,
-3500.0,
-2500.0,
-1500.0,
-500.0,
500.0,
1500.0,
2500.0,
3500.0,
4537.5
]
},
"b10_levels": [
12575.0,
12825.0,
13325.0,
13825.0,
14075.0
],
"b10_corner": 4722.5,
"b9_lower_half_drawn": {
"count": 78,
"points": [
[
-4530.0,
-4268.77
],
[
-4530.0,
-3250.02
],
[
-4530.0,
-2250.02
],
[
-4530.0,
-1250.02
],
[
-4530.0,
-250.02
],
[
-4030.0,
-3750.02
],
[
-4030.0,
-2750.02
],
[
-4030.0,
-1750.02
],
[
-4030.0,
-750.02
],
[
-3530.0,
-4268.77
],
[
-3530.0,
-3250.02
],
[
-3530.0,
-2250.02
],
[
-3530.0,
-1250.02
],
[
-3530.0,
-250.02
],
[
-3030.0,
-3750.02
],
[
-3030.0,
-2750.02
],
[
-3030.0,
-1750.02
],
[
-3030.0,
-750.02
],
[
-2530.0,
-4268.77
],
[
-2530.0,
-3250.02
],
[
-2530.0,
-2250.02
],
[
-2530.0,
-1250.02
],
[
-2530.0,
-250.02
],
[
-2030.0,
-3750.02
],
[
-2030.0,
-2750.02
],
[
-2030.0,
-1750.02
],
[
-2030.0,
-750.02
],
[
-1530.0,
-4268.77
],
[
-1530.0,
-3250.02
],
[
-1530.0,
-2250.02
],
[
-1530.0,
-1250.02
],
[
-1530.0,
-250.02
],
[
-1030.0,
-3750.02
],
[
-1030.0,
-2750.02
],
[
-1030.0,
-1750.02
],
[
-1030.0,
-750.02
],
[
-530.0,
-4268.77
],
[
-530.0,
-3250.02
],
[
-530.0,
-2250.02
],
[
-530.0,
-1250.02
],
[
-530.0,
-250.02
],
[
-30.0,
-3750.02
],
[
-30.0,
-2750.02
],
[
-30.0,
-1750.02
],
[
-30.0,
-750.02
],
[
470.0,
-4268.77
],
[
470.0,
-3250.02
],
[
470.0,
-2250.02
],
[
470.0,
-1250.02
],
[
470.0,
-250.02
],
[
970.0,
-3750.02
],
[
970.0,
-2750.02
],
[
970.0,
-1750.02
],
[
970.0,
-750.02
],
[
1470.0,
-4268.77
],
[
1470.0,
-3250.02
],
[
1470.0,
-2250.02
],
[
1470.0,
-1250.02
],
[
1470.0,
-250.02
],
[
1970.0,
-3750.02
],
[
1970.0,
-2750.02
],
[
1970.0,
-1750.02
],
[
1970.0,
-750.02
],
[
2470.0,
-4268.77
],
[
2470.0,
-3250.02
],
[
2470.0,
-2250.02
],
[
2470.0,
-1250.02
],
[
2470.0,
-250.02
],
[
2970.0,
-3750.02
],
[
2970.0,
-2750.02
],
[
2970.0,
-1750.02
],
[
3470.0,
-4268.77
],
[
3470.0,
-3250.02
],
[
3470.0,
-2250.02
],
[
3970.0,
-3750.02
],
[
3970.0,
-2750.02
],
[
4470.0,
-4268.77
],
[
4470.0,
-3250.02
]
],
"x_columns": [
-4530.0,
-4030.0,
-3530.0,
-3030.0,
-2530.0,
-2030.0,
-1530.0,
-1030.0,
-530.0,
-30.0,
470.0,
970.0,
1470.0,
1970.0,
2470.0,
2970.0,
3470.0,
3970.0,
4470.0
],
"rows": [
-4268.77,
-3750.02,
-3250.02,
-2750.02,
-2250.02,
-1750.02,
-1250.02,
-750.02,
-250.02
]
},
"counts": {
"y_bars_bottom": 77,
"y_bars_top": 77,
"x_bars_bottom": 75,
"x_bars_top": 76
}
}
+1
View File
@@ -0,0 +1 @@
{"bars": [{"mark": "C1", "occ": "y-1525", "pts": [[-5379.5, -1525.0, 19760.8], [-5379.5, -1525.0, 21007.8], [6370.5, -1525.0, 21007.8], [6370.5, -1525.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-1375", "pts": [[-5428.24, -1375.0, 19760.8], [-5428.24, -1375.0, 21007.8], [6321.76, -1375.0, 21007.8], [6321.76, -1375.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y-1250", "pts": [[-5468.85, -1250.0, 19760.8], [-5468.85, -1250.0, 21007.8], [6281.15, -1250.0, 21007.8], [6281.15, -1250.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-1125", "pts": [[-5509.47, -1125.0, 19760.8], [-5509.47, -1125.0, 21007.8], [6240.53, -1125.0, 21007.8], [6240.53, -1125.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y-1000", "pts": [[-5550.08, -1000.0, 19760.8], [-5550.08, -1000.0, 21007.8], [6199.92, -1000.0, 21007.8], [6199.92, -1000.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-875", "pts": [[-5590.7, -875.0, 19760.8], [-5590.7, -875.0, 21007.8], [6159.3, -875.0, 21007.8], [6159.3, -875.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y-750", "pts": [[-5631.31, -750.0, 19760.8], [-5631.31, -750.0, 21007.8], [6118.69, -750.0, 21007.8], [6118.69, -750.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-625", "pts": [[-5671.93, -625.0, 19760.8], [-5671.93, -625.0, 21007.8], [6078.07, -625.0, 21007.8], [6078.07, -625.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y-500", "pts": [[-5712.54, -500.0, 19760.8], [-5712.54, -500.0, 21007.8], [6037.46, -500.0, 21007.8], [6037.46, -500.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-375", "pts": [[-5753.16, -375.0, 19760.8], [-5753.16, -375.0, 21007.8], [5996.84, -375.0, 21007.8], [5996.84, -375.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y-250", "pts": [[-5793.77, -250.0, 19760.8], [-5793.77, -250.0, 21007.8], [5956.23, -250.0, 21007.8], [5956.23, -250.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y-125", "pts": [[-5834.39, -125.0, 19760.8], [-5834.39, -125.0, 21007.8], [5915.61, -125.0, 21007.8], [5915.61, -125.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y+0", "pts": [[-5875.0, 0.0, 19760.8], [-5875.0, 0.0, 21007.8], [5875.0, 0.0, 21007.8], [5875.0, 0.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y+125", "pts": [[-5915.61, 125.0, 19760.8], [-5915.61, 125.0, 21007.8], [5834.39, 125.0, 21007.8], [5834.39, 125.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C1", "occ": "y+250", "pts": [[-5956.23, 250.0, 19760.8], [-5956.23, 250.0, 21007.8], [5793.77, 250.0, 21007.8], [5793.77, 250.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [추론 F3형], 겹이음 j 미모델"}, {"mark": "C4", "occ": "y+375", "pts": [[-5996.84, 375.0, 19760.8], [-5996.84, 375.0, 21007.8], [5753.16, 375.0, 21007.8], [5753.16, 375.0, 19760.8]], "r": 72.0, "design_length": 14244.0, "src": "정면 선 EL 21.0078, x ±5,875, 다리 1247; 단면 사슬 25줄, 교번 [Line truncated
Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

+792
View File
@@ -0,0 +1,792 @@
{
"table": {
"S6": [
"S6",
"H16",
"2.662",
"84",
"223.608"
],
"S5": [
"S5",
"H16",
"4.029",
"44",
"177.276"
],
"P5": [
"P5",
"H16",
"2.722",
"40",
"108.880"
],
"S8": [
"S8",
"H19",
"1.250",
"168",
"210.000"
],
"S7": [
"S7",
"H19",
"2.500",
"88",
"220.000"
],
"S2": [
"S2",
"H19",
"2.662",
"21",
"55.902"
],
"S1": [
"S1",
"H19",
"4.029",
"11",
"44.319"
],
"P4": [
"P4",
"H19",
"7.206",
"16",
"115.296"
],
"C20": [
"C20",
"H19",
"2.967",
"75",
"222.525"
],
"C19": [
"C19",
"H19",
"2.966",
"25",
"74.150"
],
"C18": [
"C18",
"H19",
"3.790",
"117",
"443.430"
],
"B12": [
"B12",
"H19",
"10.160",
"19",
"193.040"
],
"B11": [
"B11",
"H19",
"10.160",
"19",
"193.040"
],
"B10": [
"B10",
"H19",
"41.152",
"5",
"205.760"
],
"B9": [
"B9",
"H19",
"4.763",
"171",
"814.473"
],
"S4": [
"S4",
"H22",
"1.250",
"42",
"52.500"
],
"S3": [
"S3",
"H22",
"2.500",
"22",
"55.000"
],
"C17": [
"C17",
"H22",
"13.001",
"24",
"312.024"
],
"C16": [
"C16",
"H22",
"32.222",
"6",
"193.332"
],
"C15": [
"C15",
"H22",
"7.632",
"24",
"183.168"
],
"C14": [
"C14",
"H22",
"22.584",
"6",
"135.504"
],
"P3": [
"P3",
"H25",
"7.226",
"13",
"93.938"
],
"P2": [
"P2",
"H25",
"9.237",
"60",
"554.220"
],
"P1": [
"P1",
"H25",
"9.237",
"60",
"554.220"
],
"C13": [
"C13",
"H25",
"6.662",
"80",
"532.960"
],
"C12": [
"C12",
"H25",
"9.502",
"40",
"380.080"
],
"C11": [
"C11",
"H25",
"7.992",
"54",
"431.568"
],
"C10": [
"C10",
"H25",
"11.065",
"27",
"298.755"
],
"C9": [
"C9",
"H25",
"7.401",
"78",
"577.278"
],
"C8": [
"C8",
"H25",
"9.570",
"39",
"373.230"
],
"B8": [
"B8",
"H29",
"14.370",
"37",
"531.690"
],
"B7": [
"B7",
"H29",
"12.880",
"37",
"476.560"
],
"B6": [
"B6",
"H29",
"14.370",
"38",
"546.060"
],
"B5": [
"B5",
"H29",
"12.880",
"38",
"489.440"
],
"B4": [
"B4",
"H29",
"14.070",
"38",
"534.660"
],
"B3": [
"B3",
"H29",
"12.730",
"38",
"483.740"
],
"B2": [
"B2",
"H29",
"14.070",
"39",
"548.730"
],
"B1": [
"B1",
"H29",
"12.730",
"39",
"496.470"
],
"C7": [
"C7",
"H32",
"14.474",
"13",
"188.162"
],
"C6": [
"C6",
"H32",
"13.460",
"12",
"161.520"
],
"C5": [
"C5",
"H32",
"13.460",
"12",
"161.520"
],
"C4": [
"C4",
"H32",
"15.754",
"12",
"189.048"
],
"C3": [
"C3",
"H32",
"13.460",
"13",
"174.980"
],
"C2": [
"C2",
"H32",
"13.460",
"13",
"174.980"
],
"C1": [
"C1",
"H32",
"15.754",
"13",
"204.802"
],
"UM": [
"UM",
"H22",
"4.504",
"92",
"414.368"
]
},
"shapes": {
"S6": [
{
"L": 2.662,
"N": 84,
"block": 0,
"y": 326130.6,
"params": [
"a=1.262",
"b=700"
]
}
],
"S5": [
{
"L": 4.029,
"N": 44,
"block": 0,
"y": 327130.6,
"params": [
"a=2.629",
"b=700"
]
}
],
"S2": [
{
"L": 2.662,
"N": 21,
"block": 0,
"y": 328130.6,
"params": [
"a=1.262",
"b=700"
]
}
],
"S1": [
{
"L": 4.029,
"N": 11,
"block": 0,
"y": 329130.6,
"params": [
"a=2.629",
"b=700"
]
}
],
"C19": [
{
"L": 2.966,
"N": 25,
"block": 0,
"y": 330130.6,
"params": [
"a=2.226",
"b=370"
]
}
],
"C18": [
{
"L": 3.79,
"N": 117,
"block": 0,
"y": 331130.6,
"params": [
"a=3.050",
"b=370"
]
}
],
"C20": [
{
"L": 2.967,
"N": 75,
"block": 0,
"y": 334130.6,
"params": [
"b=370"
]
}
],
"S8": [
{
"L": 1.25,
"N": 168,
"block": 0,
"y": 337130.6,
"params": []
}
],
"S7": [
{
"L": 2.5,
"N": 88,
"block": 0,
"y": 338130.6,
"params": []
}
],
"S4": [
{
"L": 1.25,
"N": 42,
"block": 0,
"y": 339130.6,
"params": []
}
],
"S3": [
{
"L": 2.5,
"N": 22,
"block": 0,
"y": 340130.6,
"params": []
}
],
"C8": [
{
"L": 9.57,
"N": 39,
"block": 1,
"y": 324130.6,
"params": []
}
],
"B9": [
{
"L": 4.763,
"N": 171,
"block": 1,
"y": 327130.6,
"params": [
"a=586~548",
"b=1.998",
"c=100"
]
}
],
"C6/C5": [
{
"L": 13.46,
"N": 12,
"block": 1,
"y": 330130.6,
"params": [
"a=11.750",
"b=100",
"c=100",
"j=1.510X1"
]
},
{
"L": 13.46,
"N": 12,
"block": 1,
"y": 331130.6,
"params": [
"a=11.750",
"b=100",
"c=100",
"j=1.510X1"
]
}
],
"C4": [
{
"L": 15.754,
"N": 12,
"block": 1,
"y": 332130.6,
"params": [
"a=11.750",
"b=1.247",
"c=1.247",
"j=1.510X1"
]
}
],
"C3/C2": [
{
"L": 13.46,
"N": 13,
"block": 1,
"y": 333130.6,
"params": [
"a=11.750",
"b=100",
"c=100",
"j=1.510X1"
]
},
{
"L": 13.46,
"N": 13,
"block": 1,
"y": 334130.6,
"params": [
"a=11.750",
"b=100",
"c=100",
"j=1.510X1"
]
}
],
"C1": [
{
"L": 15.754,
"N": 13,
"block": 1,
"y": 335130.6,
"params": [
"a=11.750",
"b=1.247",
"c=1.247",
"j=1.510X1"
]
}
],
"B12/B11": [
{
"L": 10.16,
"N": 19,
"block": 1,
"y": 338130.6,
"params": [
"a=9.400",
"b=100",
"j=560X1"
]
},
{
"L": 10.16,
"N": 19,
"block": 1,
"y": 339130.6,
"params": [
"a=9.400",
"b=100",
"j=560X1"
]
}
],
"B8": [
{
"L": 14.37,
"N": 37,
"block": 1,
"y": 340130.6,
"params": [
"a=9.400",
"b=1.950",
"j=1.070X1"
]
}
],
"B7": [
{
"L": 12.88,
"N": 37,
"block": 1,
"y": 341130.6,
"params": [
"a=9.400",
"b=975",
"j=1.530X1"
]
}
],
"B6": [
{
"L": 14.37,
"N": 38,
"block": 1,
"y": 342130.6,
"params": [
"a=9.400",
"b=1.950",
"j=1.070X1"
]
}
],
"C15": [
{
"L": 7.632,
"N": 24,
"block": 2,
"y": 324130.6,
"params": []
}
],
"P2/P1": [
{
"L": 9.237,
"N": 60,
"block": 2,
"y": 327130.6,
"params": [
"r=270",
"a=8.313",
"b=424",
"c=500"
]
},
{
"L": 9.237,
"N": 60,
"block": 2,
"y": 328130.6,
"params": [
"r=270",
"a=8.313",
"b=424",
"c=500"
]
}
],
"P5": [
{
"L": 2.722,
"N": 40,
"block": 2,
"y": 335130.6,
"params": [
"r=60",
"a=160",
"b=2.341",
"c=141",
"d=80"
]
}
],
"C7": [
{
"L": 14.474,
"N": 13,
"block": 2,
"y": 338130.6,
"params": [
"a=606",
"b=4.774",
"c=2.662",
"j=1.050X1",
"d=4.774",
"e=606",
"x1=162%%d",
"x2=162%%d"
]
}
],
"C16": [
{
"L": 32.222,
"N": 6,
"block": 2,
"y": 341130.6,
"params": [
"a=11.804",
"b=3.207",
"j=550X4"
]
}
],
"C14": [
{
"L": 22.584,
"N": 6,
"block": 2,
"y": 342130.6,
"params": [
"a=10.475~3.496",
"b=3.207",
"j=550X4"
]
}
],
"C13": [
{
"L": 6.662,
"N": 80,
"block": 3,
"y": 337342.0,
"params": [
"a=1.082",
"b=1.399",
"c=630",
"d=1.025",
"~1.339",
"~650"
]
}
],
"C11": [
{
"L": 7.992,
"N": 54,
"block": 3,
"y": 338342.0,
"params": [
"a=1.082",
"b=2.818",
"c=630",
"d=647",
"~1.399"
]
}
],
"C9": [
{
"L": 7.401,
"N": 78,
"block": 3,
"y": 339342.0,
"params": [
"a=1.082",
"b=2.808",
"c=630",
"d=1.025",
"~1.386",
"~655"
]
}
],
"UM": [
{
"L": 4.504,
"N": 92,
"block": 3,
"y": 332930.3,
"params": [
"a=200",
"b=1.952",
"c=200"
]
}
],
"P4": [
{
"L": 7.206,
"N": 16,
"block": 2,
"y": 331130.6,
"params": [
"r=1.147",
"a=3.538",
"b=65"
]
}
],
"P3": [
{
"L": 7.226,
"N": 13,
"block": 2,
"y": 332130.6,
"params": [
"r=1.150",
"a=3.533",
"b=80"
]
}
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

@@ -0,0 +1,312 @@
[(('LINE', 'CS-CONC-MAJR'), 289), (('LINE', 'CS-DIML'), 79), (('LINE', 'CS-PATT'), 75), (('INSERT', 'CS-SYMB'), 54), (('LINE', 'CS-SYMB'), 42), (('TEXT', 'CS-DIMT'), 27), (('LINE', 'CS-CNTL'), 22), (('ARC', 'CS-SYMB'), 21), (('ARC', 'CS-CUTL'), 20), (('SOLID', 'CS-SYMB'), 6), (('SOLID', 'CS-DIML'), 4), (('TEXT', 'CS-SYMB'), 3), (('MTEXT', 'CS-SYMB'), 3), (('TEXT', 'CZ-TEX2'), 1), (('INSERT', '0'), 1)]
10346 CS-CONC-MAJR LINE (390779.3,328749.9)-(392029.3,328749.9) len 1250.0
10347 CS-CONC-MAJR LINE (392029.3,328749.9)-(392029.3,332549.9) len 3800.0
10348 CS-CONC-MAJR LINE (390779.3,328749.9)-(389529.3,328749.9) len 1250.0
10349 CS-CONC-MAJR LINE (389529.3,328749.9)-(389529.3,332549.9) len 3800.0
1034A CS-CONC-MAJR LINE (392004.0,328749.9)-(392004.0,332549.9) len 3800.0
1034B CS-CONC-MAJR LINE (389554.5,328749.9)-(389554.5,332549.9) len 3800.0
1034C CS-CONC-MAJR LINE (391924.9,328749.9)-(391924.9,332549.9) len 3800.0
1034D CS-CONC-MAJR LINE (389633.6,328749.9)-(389633.6,332549.9) len 3800.0
1034E CS-CONC-MAJR LINE (391779.3,328749.9)-(391779.3,332549.9) len 3800.0
1034F CS-CONC-MAJR LINE (389779.3,328749.9)-(389779.3,332549.9) len 3800.0
10350 CS-CONC-MAJR LINE (391529.3,328749.9)-(391529.3,332549.9) len 3800.0
10351 CS-CONC-MAJR LINE (390029.3,328749.9)-(390029.3,332549.9) len 3800.0
10352 CS-CONC-MAJR LINE (390779.3,328749.9)-(390779.3,332549.9) len 3800.0
10353 CS-CONC-MAJR LINE (390779.3,328749.9)-(390779.3,332549.9) len 3800.0
10354 CS-CONC-MAJR LINE (390779.3,328749.9)-(390779.3,332549.9) len 3800.0
10355 CS-CONC-MAJR LINE (390779.3,326549.9)-(395579.3,326549.9) len 4800.0
10356 CS-CONC-MAJR LINE (395579.3,326549.9)-(395679.3,326549.9) len 100.0
10357 CS-CONC-MAJR LINE (395679.3,326549.9)-(395679.3,326449.9) len 100.0
10358 CS-CONC-MAJR LINE (395679.3,326449.9)-(385879.3,326449.9) len 9800.0
10359 CS-CONC-MAJR LINE (385879.3,326449.9)-(385879.3,326549.9) len 100.0
1035A CS-CONC-MAJR LINE (385879.3,326549.9)-(385979.3,326549.9) len 100.0
1035B CS-CONC-MAJR LINE (385979.3,326549.9)-(390779.3,326549.9) len 4800.0
1035C CS-CONC-MAJR LINE (385979.3,328749.9)-(395579.3,328749.9) len 9600.0
1035D CS-CONC-MAJR LINE (395579.3,328749.9)-(395579.3,326549.9) len 2200.0
1035E CS-CONC-MAJR LINE (395579.3,326549.9)-(385979.3,326549.9) len 9600.0
1035F CS-CONC-MAJR LINE (385979.3,326549.9)-(385979.3,328749.9) len 2200.0
10360 CS-CONC-MAJR LINE (395121.3,335696.8)-(395171.3,335746.8) len 70.7
10361 CS-CONC-MAJR LINE (395171.3,335746.8)-(395921.3,335746.8) len 750.0
10362 CS-CONC-MAJR LINE (395921.3,335746.8)-(395971.3,335696.8) len 70.7
10363 CS-CONC-MAJR LINE (395971.3,335696.8)-(395121.3,335696.8) len 850.0
10364 CS-CONC-MAJR LINE (395221.3,335746.8)-(395221.3,335894.8) len 148.0
10365 CS-CONC-MAJR LINE (395221.3,335894.8)-(395871.3,335894.8) len 650.0
10366 CS-CONC-MAJR LINE (395871.3,335894.8)-(395871.3,335746.8) len 148.0
10367 CS-CONC-MAJR LINE (395871.3,335746.8)-(395221.3,335746.8) len 650.0
10368 CS-CONC-MAJR LINE (395864.7,335746.8)-(395864.7,335894.8) len 148.0
10369 CS-CONC-MAJR LINE (395227.8,335746.8)-(395227.8,335894.8) len 148.0
1036A CS-CONC-MAJR LINE (395844.1,335746.8)-(395844.1,335894.8) len 148.0
1036B CS-CONC-MAJR LINE (395248.4,335746.8)-(395248.4,335894.8) len 148.0
1036C CS-CONC-MAJR LINE (395806.3,335746.8)-(395806.3,335894.8) len 148.0
1036D CS-CONC-MAJR LINE (395286.3,335746.8)-(395286.3,335894.8) len 148.0
1036E CS-CONC-MAJR LINE (395741.3,335746.8)-(395741.3,335894.8) len 148.0
1036F CS-CONC-MAJR LINE (395351.3,335746.8)-(395351.3,335894.8) len 148.0
10370 CS-CONC-MAJR LINE (395546.3,335746.8)-(395546.3,335894.8) len 148.0
10371 CS-CONC-MAJR LINE (395546.3,335746.8)-(395546.3,335894.8) len 148.0
10372 CS-CONC-MAJR LINE (395171.3,335894.8)-(395171.3,335923.8) len 29.0
10373 CS-CONC-MAJR LINE (395171.3,335923.8)-(395921.3,335923.8) len 750.0
10374 CS-CONC-MAJR LINE (395921.3,335923.8)-(395921.3,335894.8) len 29.0
10375 CS-CONC-MAJR LINE (395921.3,335894.8)-(395171.3,335894.8) len 750.0
10376 CS-CONC-MAJR LINE (392645.1,335757.4)-(392695.1,335807.4) len 70.7
10377 CS-CONC-MAJR LINE (392695.1,335807.4)-(393445.1,335807.4) len 750.0
10378 CS-CONC-MAJR LINE (393445.1,335807.4)-(393495.1,335757.4) len 70.7
10379 CS-CONC-MAJR LINE (393495.1,335757.4)-(392645.1,335757.4) len 850.0
1037A CS-CONC-MAJR LINE (392745.1,335807.4)-(392745.1,335955.4) len 148.0
1037B CS-CONC-MAJR LINE (392745.1,335955.4)-(393395.1,335955.4) len 650.0
1037C CS-CONC-MAJR LINE (393395.1,335955.4)-(393395.1,335807.4) len 148.0
1037D CS-CONC-MAJR LINE (393395.1,335807.4)-(392745.1,335807.4) len 650.0
1037E CS-CONC-MAJR LINE (393388.5,335807.4)-(393388.5,335955.4) len 148.0
1037F CS-CONC-MAJR LINE (392751.6,335807.4)-(392751.6,335955.4) len 148.0
10380 CS-CONC-MAJR LINE (393367.9,335807.4)-(393367.9,335955.4) len 148.0
10381 CS-CONC-MAJR LINE (392772.2,335807.4)-(392772.2,335955.4) len 148.0
10382 CS-CONC-MAJR LINE (393330.1,335807.4)-(393330.1,335955.4) len 148.0
10383 CS-CONC-MAJR LINE (392810.1,335807.4)-(392810.1,335955.4) len 148.0
10384 CS-CONC-MAJR LINE (393265.1,335807.4)-(393265.1,335955.4) len 148.0
10385 CS-CONC-MAJR LINE (392875.1,335807.4)-(392875.1,335955.4) len 148.0
10386 CS-CONC-MAJR LINE (393070.1,335807.4)-(393070.1,335955.4) len 148.0
10387 CS-CONC-MAJR LINE (393070.1,335807.4)-(393070.1,335955.4) len 148.0
10388 CS-CONC-MAJR LINE (392695.1,335955.4)-(392695.1,335984.4) len 29.0
10389 CS-CONC-MAJR LINE (392695.1,335984.4)-(393445.1,335984.4) len 750.0
1038A CS-CONC-MAJR LINE (393445.1,335984.4)-(393445.1,335955.4) len 29.0
1038B CS-CONC-MAJR LINE (393445.1,335955.4)-(392695.1,335955.4) len 750.0
1038C CS-CONC-MAJR LINE (390168.9,335811.2)-(390218.9,335861.2) len 70.7
1038D CS-CONC-MAJR LINE (390218.9,335861.2)-(390968.9,335861.2) len 750.0
1038E CS-CONC-MAJR LINE (390968.9,335861.2)-(391018.9,335811.2) len 70.7
1038F CS-CONC-MAJR LINE (391018.9,335811.2)-(390168.9,335811.2) len 850.0
10390 CS-CONC-MAJR LINE (390268.9,335861.2)-(390268.9,336009.2) len 148.0
10391 CS-CONC-MAJR LINE (390268.9,336009.2)-(390918.9,336009.2) len 650.0
10392 CS-CONC-MAJR LINE (390918.9,336009.2)-(390918.9,335861.2) len 148.0
10393 CS-CONC-MAJR LINE (390918.9,335861.2)-(390268.9,335861.2) len 650.0
10394 CS-CONC-MAJR LINE (390912.3,335861.2)-(390912.3,336009.2) len 148.0
10395 CS-CONC-MAJR LINE (390275.4,335861.2)-(390275.4,336009.2) len 148.0
10396 CS-CONC-MAJR LINE (390891.7,335861.2)-(390891.7,336009.2) len 148.0
10397 CS-CONC-MAJR LINE (390296.0,335861.2)-(390296.0,336009.2) len 148.0
10398 CS-CONC-MAJR LINE (390853.9,335861.2)-(390853.9,336009.2) len 148.0
10399 CS-CONC-MAJR LINE (390333.9,335861.2)-(390333.9,336009.2) len 148.0
1039A CS-CONC-MAJR LINE (390788.9,335861.2)-(390788.9,336009.2) len 148.0
1039B CS-CONC-MAJR LINE (390398.9,335861.2)-(390398.9,336009.2) len 148.0
1039C CS-CONC-MAJR LINE (390593.9,335861.2)-(390593.9,336009.2) len 148.0
1039D CS-CONC-MAJR LINE (390593.9,335861.2)-(390593.9,336009.2) len 148.0
1039E CS-CONC-MAJR LINE (390218.9,336009.2)-(390218.9,336038.2) len 29.0
1039F CS-CONC-MAJR LINE (390218.9,336038.2)-(390968.9,336038.2) len 750.0
103A0 CS-CONC-MAJR LINE (390968.9,336038.2)-(390968.9,336009.2) len 29.0
103A1 CS-CONC-MAJR LINE (390968.9,336009.2)-(390218.9,336009.2) len 750.0
103A2 CS-CONC-MAJR LINE (387692.7,335777.6)-(387742.7,335827.6) len 70.7
103A3 CS-CONC-MAJR LINE (387742.7,335827.6)-(388492.7,335827.6) len 750.0
103A4 CS-CONC-MAJR LINE (388492.7,335827.6)-(388542.7,335777.6) len 70.7
103A5 CS-CONC-MAJR LINE (388542.7,335777.6)-(387692.7,335777.6) len 850.0
103A6 CS-CONC-MAJR LINE (387792.7,335827.6)-(387792.7,335975.6) len 148.0
103A7 CS-CONC-MAJR LINE (387792.7,335975.6)-(388442.7,335975.6) len 650.0
103A8 CS-CONC-MAJR LINE (388442.7,335975.6)-(388442.7,335827.6) len 148.0
103A9 CS-CONC-MAJR LINE (388442.7,335827.6)-(387792.7,335827.6) len 650.0
103AA CS-CONC-MAJR LINE (388436.1,335827.6)-(388436.1,335975.6) len 148.0
103AB CS-CONC-MAJR LINE (387799.2,335827.6)-(387799.2,335975.6) len 148.0
103AC CS-CONC-MAJR LINE (388415.5,335827.6)-(388415.5,335975.6) len 148.0
103AD CS-CONC-MAJR LINE (387819.8,335827.6)-(387819.8,335975.6) len 148.0
103AE CS-CONC-MAJR LINE (388377.7,335827.6)-(388377.7,335975.6) len 148.0
103AF CS-CONC-MAJR LINE (387857.7,335827.6)-(387857.7,335975.6) len 148.0
103B0 CS-CONC-MAJR LINE (388312.7,335827.6)-(388312.7,335975.6) len 148.0
103B1 CS-CONC-MAJR LINE (387922.7,335827.6)-(387922.7,335975.6) len 148.0
103B2 CS-CONC-MAJR LINE (388117.7,335827.6)-(388117.7,335975.6) len 148.0
103B3 CS-CONC-MAJR LINE (388117.7,335827.6)-(388117.7,335975.6) len 148.0
103B4 CS-CONC-MAJR LINE (387742.7,335975.6)-(387742.7,336004.6) len 29.0
103B5 CS-CONC-MAJR LINE (387742.7,336004.6)-(388492.7,336004.6) len 750.0
103B6 CS-CONC-MAJR LINE (388492.7,336004.6)-(388492.7,335975.6) len 29.0
103B7 CS-CONC-MAJR LINE (388492.7,335975.6)-(387742.7,335975.6) len 750.0
103B8 CS-CONC-MAJR LINE (385216.5,335744.1)-(385266.5,335794.1) len 70.7
103B9 CS-CONC-MAJR LINE (385266.5,335794.1)-(386016.5,335794.1) len 750.0
103BA CS-CONC-MAJR LINE (386016.5,335794.1)-(386066.5,335744.1) len 70.7
103BB CS-CONC-MAJR LINE (386066.5,335744.1)-(385216.5,335744.1) len 850.0
103BC CS-CONC-MAJR LINE (385316.5,335794.1)-(385316.5,335942.1) len 148.0
103BD CS-CONC-MAJR LINE (385316.5,335942.1)-(385966.5,335942.1) len 650.0
103BE CS-CONC-MAJR LINE (385966.5,335942.1)-(385966.5,335794.1) len 148.0
103BF CS-CONC-MAJR LINE (385966.5,335794.1)-(385316.5,335794.1) len 650.0
103C0 CS-CONC-MAJR LINE (385959.9,335794.1)-(385959.9,335942.1) len 148.0
103C1 CS-CONC-MAJR LINE (385323.1,335794.1)-(385323.1,335942.1) len 148.0
103C2 CS-CONC-MAJR LINE (385939.4,335794.1)-(385939.4,335942.1) len 148.0
103C3 CS-CONC-MAJR LINE (385343.6,335794.1)-(385343.6,335942.1) len 148.0
103C4 CS-CONC-MAJR LINE (385901.5,335794.1)-(385901.5,335942.1) len 148.0
103C5 CS-CONC-MAJR LINE (385381.5,335794.1)-(385381.5,335942.1) len 148.0
103C6 CS-CONC-MAJR LINE (385836.5,335794.1)-(385836.5,335942.1) len 148.0
103C7 CS-CONC-MAJR LINE (385446.5,335794.1)-(385446.5,335942.1) len 148.0
103C8 CS-CONC-MAJR LINE (385641.5,335794.1)-(385641.5,335942.1) len 148.0
103C9 CS-CONC-MAJR LINE (385641.5,335794.1)-(385641.5,335942.1) len 148.0
103CA CS-CONC-MAJR LINE (385266.5,335942.1)-(385266.5,335971.1) len 29.0
103CB CS-CONC-MAJR LINE (385266.5,335971.1)-(386016.5,335971.1) len 750.0
103CC CS-CONC-MAJR LINE (386016.5,335971.1)-(386016.5,335942.1) len 29.0
103CD CS-CONC-MAJR LINE (386016.5,335942.1)-(385266.5,335942.1) len 750.0
103CE CS-CONC-MAJR LINE (395267.0,335502.6)-(395267.0,335675.6) len 173.0
103CF CS-CONC-MAJR LINE (395267.0,335675.6)-(396567.0,335675.6) len 1300.0
103D0 CS-CONC-MAJR LINE (396567.0,335675.6)-(396567.0,335502.6) len 173.0
103D1 CS-CONC-MAJR LINE (395492.0,335675.6)-(395542.0,335725.6) len 70.7
103D2 CS-CONC-MAJR LINE (395542.0,335725.6)-(396292.0,335725.6) len 750.0
103D3 CS-CONC-MAJR LINE (396292.0,335725.6)-(396342.0,335675.6) len 70.7
103D4 CS-CONC-MAJR LINE (396342.0,335675.6)-(395492.0,335675.6) len 850.0
103D5 CS-CONC-MAJR LINE (395592.0,335725.6)-(395592.0,335873.6) len 148.0
103D6 CS-CONC-MAJR LINE (395592.0,335873.6)-(396242.0,335873.6) len 650.0
103D7 CS-CONC-MAJR LINE (396242.0,335873.6)-(396242.0,335725.6) len 148.0
103D8 CS-CONC-MAJR LINE (396242.0,335725.6)-(395592.0,335725.6) len 650.0
103D9 CS-CONC-MAJR LINE (396235.5,335725.6)-(396235.5,335873.6) len 148.0
103DA CS-CONC-MAJR LINE (395598.6,335725.6)-(395598.6,335873.6) len 148.0
103DB CS-CONC-MAJR LINE (396214.9,335725.6)-(396214.9,335873.6) len 148.0
103DC CS-CONC-MAJR LINE (395619.2,335725.6)-(395619.2,335873.6) len 148.0
103DD CS-CONC-MAJR LINE (396177.0,335725.6)-(396177.0,335873.6) len 148.0
103DE CS-CONC-MAJR LINE (395657.0,335725.6)-(395657.0,335873.6) len 148.0
103DF CS-CONC-MAJR LINE (396112.0,335725.6)-(396112.0,335873.6) len 148.0
103E0 CS-CONC-MAJR LINE (395722.0,335725.6)-(395722.0,335873.6) len 148.0
103E1 CS-CONC-MAJR LINE (395917.0,335725.6)-(395917.0,335873.6) len 148.0
103E2 CS-CONC-MAJR LINE (395917.0,335725.6)-(395917.0,335873.6) len 148.0
103E3 CS-CONC-MAJR LINE (395542.0,335873.6)-(395542.0,335902.6) len 29.0
103E4 CS-CONC-MAJR LINE (395542.0,335902.6)-(396292.0,335902.6) len 750.0
103E5 CS-CONC-MAJR LINE (396292.0,335902.6)-(396292.0,335873.6) len 29.0
103E6 CS-CONC-MAJR LINE (396292.0,335873.6)-(395542.0,335873.6) len 750.0
103E7 CS-CONC-MAJR LINE (392790.8,335563.2)-(392790.8,335736.2) len 173.0
103E8 CS-CONC-MAJR LINE (392790.8,335736.2)-(394090.8,335736.2) len 1300.0
103E9 CS-CONC-MAJR LINE (394090.8,335736.2)-(394090.8,335563.2) len 173.0
103EA CS-CONC-MAJR LINE (393015.8,335736.2)-(393065.8,335786.2) len 70.7
103EB CS-CONC-MAJR LINE (393065.8,335786.2)-(393815.8,335786.2) len 750.0
103EC CS-CONC-MAJR LINE (393815.8,335786.2)-(393865.8,335736.2) len 70.7
103ED CS-CONC-MAJR LINE (393865.8,335736.2)-(393015.8,335736.2) len 850.0
103EE CS-CONC-MAJR LINE (393115.8,335786.2)-(393115.8,335934.2) len 148.0
103EF CS-CONC-MAJR LINE (393115.8,335934.2)-(393765.8,335934.2) len 650.0
103F0 CS-CONC-MAJR LINE (393765.8,335934.2)-(393765.8,335786.2) len 148.0
103F1 CS-CONC-MAJR LINE (393765.8,335786.2)-(393115.8,335786.2) len 650.0
103F2 CS-CONC-MAJR LINE (393759.3,335786.2)-(393759.3,335934.2) len 148.0
103F3 CS-CONC-MAJR LINE (393122.4,335786.2)-(393122.4,335934.2) len 148.0
103F4 CS-CONC-MAJR LINE (393738.7,335786.2)-(393738.7,335934.2) len 148.0
103F5 CS-CONC-MAJR LINE (393143.0,335786.2)-(393143.0,335934.2) len 148.0
103F6 CS-CONC-MAJR LINE (393700.8,335786.2)-(393700.8,335934.2) len 148.0
103F7 CS-CONC-MAJR LINE (393180.8,335786.2)-(393180.8,335934.2) len 148.0
103F8 CS-CONC-MAJR LINE (393635.8,335786.2)-(393635.8,335934.2) len 148.0
103F9 CS-CONC-MAJR LINE (393245.8,335786.2)-(393245.8,335934.2) len 148.0
103FA CS-CONC-MAJR LINE (393440.8,335786.2)-(393440.8,335934.2) len 148.0
103FB CS-CONC-MAJR LINE (393440.8,335786.2)-(393440.8,335934.2) len 148.0
103FC CS-CONC-MAJR LINE (393065.8,335934.2)-(393065.8,335963.2) len 29.0
103FD CS-CONC-MAJR LINE (393065.8,335963.2)-(393815.8,335963.2) len 750.0
103FE CS-CONC-MAJR LINE (393815.8,335963.2)-(393815.8,335934.2) len 29.0
103FF CS-CONC-MAJR LINE (393815.8,335934.2)-(393065.8,335934.2) len 750.0
10400 CS-CONC-MAJR LINE (390314.7,335617.1)-(390314.7,335790.1) len 173.0
10401 CS-CONC-MAJR LINE (390314.7,335790.1)-(391614.7,335790.1) len 1300.0
10402 CS-CONC-MAJR LINE (391614.7,335790.1)-(391614.7,335617.1) len 173.0
10403 CS-CONC-MAJR LINE (390539.7,335790.1)-(390589.7,335840.1) len 70.7
10404 CS-CONC-MAJR LINE (390589.7,335840.1)-(391339.7,335840.1) len 750.0
10405 CS-CONC-MAJR LINE (391339.7,335840.1)-(391389.7,335790.1) len 70.7
10406 CS-CONC-MAJR LINE (391389.7,335790.1)-(390539.7,335790.1) len 850.0
10407 CS-CONC-MAJR LINE (390639.7,335840.1)-(390639.7,335988.1) len 148.0
10408 CS-CONC-MAJR LINE (390639.7,335988.1)-(391289.7,335988.1) len 650.0
10409 CS-CONC-MAJR LINE (391289.7,335988.1)-(391289.7,335840.1) len 148.0
1040A CS-CONC-MAJR LINE (391289.7,335840.1)-(390639.7,335840.1) len 650.0
1040B CS-CONC-MAJR LINE (391283.1,335840.1)-(391283.1,335988.1) len 148.0
1040C CS-CONC-MAJR LINE (390646.2,335840.1)-(390646.2,335988.1) len 148.0
1040D CS-CONC-MAJR LINE (391262.5,335840.1)-(391262.5,335988.1) len 148.0
1040E CS-CONC-MAJR LINE (390666.8,335840.1)-(390666.8,335988.1) len 148.0
1040F CS-CONC-MAJR LINE (391224.7,335840.1)-(391224.7,335988.1) len 148.0
10410 CS-CONC-MAJR LINE (390704.7,335840.1)-(390704.7,335988.1) len 148.0
10411 CS-CONC-MAJR LINE (391159.7,335840.1)-(391159.7,335988.1) len 148.0
10412 CS-CONC-MAJR LINE (390769.7,335840.1)-(390769.7,335988.1) len 148.0
10413 CS-CONC-MAJR LINE (390964.7,335840.1)-(390964.7,335988.1) len 148.0
10414 CS-CONC-MAJR LINE (390964.7,335840.1)-(390964.7,335988.1) len 148.0
10415 CS-CONC-MAJR LINE (390589.7,335988.1)-(390589.7,336017.1) len 29.0
10416 CS-CONC-MAJR LINE (390589.7,336017.1)-(391339.7,336017.1) len 750.0
10417 CS-CONC-MAJR LINE (391339.7,336017.1)-(391339.7,335988.1) len 29.0
10418 CS-CONC-MAJR LINE (391339.7,335988.1)-(390589.7,335988.1) len 750.0
10419 CS-CONC-MAJR LINE (387838.5,335583.5)-(387838.5,335756.5) len 173.0
1041A CS-CONC-MAJR LINE (387838.5,335756.5)-(389138.5,335756.5) len 1300.0
1041B CS-CONC-MAJR LINE (389138.5,335756.5)-(389138.5,335583.5) len 173.0
1041C CS-CONC-MAJR LINE (388063.5,335756.5)-(388113.5,335806.5) len 70.7
1041D CS-CONC-MAJR LINE (388113.5,335806.5)-(388863.5,335806.5) len 750.0
1041E CS-CONC-MAJR LINE (388863.5,335806.5)-(388913.5,335756.5) len 70.7
1041F CS-CONC-MAJR LINE (388913.5,335756.5)-(388063.5,335756.5) len 850.0
10420 CS-CONC-MAJR LINE (388163.5,335806.5)-(388163.5,335954.5) len 148.0
10421 CS-CONC-MAJR LINE (388163.5,335954.5)-(388813.5,335954.5) len 650.0
10422 CS-CONC-MAJR LINE (388813.5,335954.5)-(388813.5,335806.5) len 148.0
10423 CS-CONC-MAJR LINE (388813.5,335806.5)-(388163.5,335806.5) len 650.0
10424 CS-CONC-MAJR LINE (388806.9,335806.5)-(388806.9,335954.5) len 148.0
10425 CS-CONC-MAJR LINE (388170.0,335806.5)-(388170.0,335954.5) len 148.0
10426 CS-CONC-MAJR LINE (388786.3,335806.5)-(388786.3,335954.5) len 148.0
10427 CS-CONC-MAJR LINE (388190.6,335806.5)-(388190.6,335954.5) len 148.0
10428 CS-CONC-MAJR LINE (388748.5,335806.5)-(388748.5,335954.5) len 148.0
10429 CS-CONC-MAJR LINE (388228.5,335806.5)-(388228.5,335954.5) len 148.0
1042A CS-CONC-MAJR LINE (388683.5,335806.5)-(388683.5,335954.5) len 148.0
1042B CS-CONC-MAJR LINE (388293.5,335806.5)-(388293.5,335954.5) len 148.0
1042C CS-CONC-MAJR LINE (388488.5,335806.5)-(388488.5,335954.5) len 148.0
1042D CS-CONC-MAJR LINE (388488.5,335806.5)-(388488.5,335954.5) len 148.0
1042E CS-CONC-MAJR LINE (388113.5,335954.5)-(388113.5,335983.5) len 29.0
1042F CS-CONC-MAJR LINE (388113.5,335983.5)-(388863.5,335983.5) len 750.0
10430 CS-CONC-MAJR LINE (388863.5,335983.5)-(388863.5,335954.5) len 29.0
10431 CS-CONC-MAJR LINE (388863.5,335954.5)-(388113.5,335954.5) len 750.0
10432 CS-CONC-MAJR LINE (385362.3,335549.9)-(385362.3,335722.9) len 173.0
10433 CS-CONC-MAJR LINE (385362.3,335722.9)-(386662.3,335722.9) len 1300.0
10434 CS-CONC-MAJR LINE (386662.3,335722.9)-(386662.3,335549.9) len 173.0
10435 CS-CONC-MAJR LINE (385587.3,335722.9)-(385637.3,335772.9) len 70.7
10436 CS-CONC-MAJR LINE (385637.3,335772.9)-(386387.3,335772.9) len 750.0
10437 CS-CONC-MAJR LINE (386387.3,335772.9)-(386437.3,335722.9) len 70.7
10438 CS-CONC-MAJR LINE (386437.3,335722.9)-(385587.3,335722.9) len 850.0
10439 CS-CONC-MAJR LINE (385687.3,335772.9)-(385687.3,335920.9) len 148.0
1043A CS-CONC-MAJR LINE (385687.3,335920.9)-(386337.3,335920.9) len 650.0
1043B CS-CONC-MAJR LINE (386337.3,335920.9)-(386337.3,335772.9) len 148.0
1043C CS-CONC-MAJR LINE (386337.3,335772.9)-(385687.3,335772.9) len 650.0
1043D CS-CONC-MAJR LINE (386330.7,335772.9)-(386330.7,335920.9) len 148.0
1043E CS-CONC-MAJR LINE (385693.8,335772.9)-(385693.8,335920.9) len 148.0
1043F CS-CONC-MAJR LINE (386310.1,335772.9)-(386310.1,335920.9) len 148.0
10440 CS-CONC-MAJR LINE (385714.4,335772.9)-(385714.4,335920.9) len 148.0
10441 CS-CONC-MAJR LINE (386272.3,335772.9)-(386272.3,335920.9) len 148.0
10442 CS-CONC-MAJR LINE (385752.3,335772.9)-(385752.3,335920.9) len 148.0
10443 CS-CONC-MAJR LINE (386207.3,335772.9)-(386207.3,335920.9) len 148.0
10444 CS-CONC-MAJR LINE (385817.3,335772.9)-(385817.3,335920.9) len 148.0
10445 CS-CONC-MAJR LINE (386012.3,335772.9)-(386012.3,335920.9) len 148.0
10446 CS-CONC-MAJR LINE (386012.3,335772.9)-(386012.3,335920.9) len 148.0
10447 CS-CONC-MAJR LINE (385637.3,335920.9)-(385637.3,335949.9) len 29.0
10448 CS-CONC-MAJR LINE (385637.3,335949.9)-(386387.3,335949.9) len 750.0
10449 CS-CONC-MAJR LINE (386387.3,335949.9)-(386387.3,335920.9) len 29.0
1044A CS-CONC-MAJR LINE (386387.3,335920.9)-(385637.3,335920.9) len 750.0
1044B CS-CONC-MAJR LINE (384779.3,335549.9)-(384779.3,334049.9) len 1500.0
1044C CS-CONC-MAJR LINE (384779.3,334049.9)-(389429.3,332549.9) len 4885.9
1044D CS-CONC-MAJR LINE (389429.3,332549.9)-(392129.3,332549.9) len 2700.0
1044E CS-CONC-MAJR LINE (392129.3,332549.9)-(396779.3,334049.9) len 4885.9
1044F CS-CONC-MAJR LINE (396779.3,334049.9)-(396779.3,335502.6) len 1452.8
10450 CS-CONC-MAJR LINE (384779.3,335549.9)-(387006.7,335549.9) len 2227.4
10451 CS-CONC-MAJR LINE (387006.7,335549.9)-(387006.7,335583.5) len 33.6
10452 CS-CONC-MAJR LINE (387006.7,335583.5)-(389482.9,335583.5) len 2476.2
10453 CS-CONC-MAJR LINE (389482.9,335583.5)-(389482.9,335617.1) len 33.6
10454 CS-CONC-MAJR LINE (389482.9,335617.1)-(391959.1,335617.1) len 2476.2
10455 CS-CONC-MAJR LINE (391959.1,335617.1)-(391959.1,335563.2) len 53.8
10456 CS-CONC-MAJR LINE (391959.1,335563.2)-(394435.3,335563.2) len 2476.2
10457 CS-CONC-MAJR LINE (394435.3,335563.2)-(394435.3,335502.6) len 60.6
10458 CS-CONC-MAJR LINE (394435.3,335502.6)-(396779.3,335502.6) len 2344.0
10459 CS-CONC-MAJR LINE (384779.3,335549.9)-(384779.3,334049.9) len 1500.0
1045A CS-CONC-MAJR LINE (384779.3,334049.9)-(389429.3,332549.9) len 4885.9
1045B CS-CONC-MAJR LINE (389429.3,332549.9)-(392129.3,332549.9) len 2700.0
1045C CS-CONC-MAJR LINE (392129.3,332549.9)-(396779.3,334049.9) len 4885.9
1045D CS-CONC-MAJR LINE (396779.3,334049.9)-(396779.3,335502.6) len 1452.8
1045E CS-CONC-MAJR LINE (384779.3,335549.9)-(387006.7,335549.9) len 2227.4
1045F CS-CONC-MAJR LINE (387006.7,335549.9)-(387006.7,335583.5) len 33.6
10460 CS-CONC-MAJR LINE (387006.7,335583.5)-(389482.9,335583.5) len 2476.2
10461 CS-CONC-MAJR LINE (389482.9,335583.5)-(389482.9,335617.1) len 33.6
10462 CS-CONC-MAJR LINE (389482.9,335617.1)-(391959.1,335617.1) len 2476.2
10463 CS-CONC-MAJR LINE (391959.1,335617.1)-(391959.1,335563.2) len 53.8
10464 CS-CONC-MAJR LINE (391959.1,335563.2)-(394435.3,335563.2) len 2476.2
10465 CS-CONC-MAJR LINE (394435.3,335563.2)-(394435.3,335502.6) len 60.6
10466 CS-CONC-MAJR LINE (394435.3,335502.6)-(396779.3,335502.6) len 2344.0
10664 CS-CNTL LINE (390779.3,337049.9)-(390779.3,325949.9) len 11100.0
10665 CS-CNTL LINE (390971.1,337049.9)-(390971.1,325949.9) len 11100.0
1318C CS-CNTL LINE (386779.3,325374.9)-(386779.3,324149.9) len 1225.0
1318D CS-CNTL LINE (386779.3,326649.9)-(386779.3,325424.9) len 1225.0
1318E CS-CNTL LINE (386779.3,325424.9)-(386779.3,325424.9) len 0.0
1318F CS-CNTL LINE (386779.3,325374.9)-(386779.3,325374.9) len 0.0
13190 CS-CNTL LINE (388779.3,325374.9)-(388779.3,324149.9) len 1225.0
13191 CS-CNTL LINE (388779.3,326649.9)-(388779.3,325424.9) len 1225.0
13192 CS-CNTL LINE (388779.3,325424.9)-(388779.3,325424.9) len 0.0
13193 CS-CNTL LINE (388779.3,325374.9)-(388779.3,325374.9) len 0.0
13194 CS-CNTL LINE (390779.3,325374.9)-(390779.3,324149.9) len 1225.0
13195 CS-CNTL LINE (390779.3,326649.9)-(390779.3,325424.9) len 1225.0
13196 CS-CNTL LINE (390779.3,325424.9)-(390779.3,325424.9) len 0.0
13197 CS-CNTL LINE (390779.3,325374.9)-(390779.3,325374.9) len 0.0
13198 CS-CNTL LINE (392779.3,325374.9)-(392779.3,324149.9) len 1225.0
13199 CS-CNTL LINE (392779.3,326649.9)-(392779.3,325424.9) len 1225.0
1319A CS-CNTL LINE (392779.3,325424.9)-(392779.3,325424.9) len 0.0
1319B CS-CNTL LINE (392779.3,325374.9)-(392779.3,325374.9) len 0.0
1319C CS-CNTL LINE (394779.3,325374.9)-(394779.3,324149.9) len 1225.0
1319D CS-CNTL LINE (394779.3,326649.9)-(394779.3,325424.9) len 1225.0
1319E CS-CNTL LINE (394779.3,325424.9)-(394779.3,325424.9) len 0.0
1319F CS-CNTL LINE (394779.3,325374.9)-(394779.3,325374.9) len 0.0
Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB