Files
Pier_v1/Code/pier-program/scripts/rebar_calc.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 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>
2026-10-28 11:20:18 +09:00

91 lines
2.9 KiB
Python

"""철근 구부림 반지름과 갈고리 길이 계산 모듈.
Rhino 없이 실행됩니다. 단위는 모두 mm입니다.
기준값 출처: docs/design_rules.md
"""
# KS D 3504 공칭 철근 직경 (mm)
NOMINAL_DIAMETER = {
10: 9.5,
13: 12.7,
16: 15.9,
19: 19.1,
22: 22.2,
25: 25.4,
29: 28.6,
32: 31.8,
35: 34.9,
38: 38.1,
}
# 갈고리 뒤 연장 길이 (공칭 직경의 배수). 프로젝트 적용값
HOOK_EXTENSION_FACTOR = {90: 12.0, 135: 6.0, 180: 4.0}
HOOK_180_MIN_EXTENSION = 60.0 # 180도 갈고리는 4db 또는 60mm 중 큰 값
# KDS 24 14 21: 90도~150도 표준갈고리 연장 길이 최소값 (db의 배수)
KDS_HOOK_MIN_FACTOR = 5.0
def bar_number(name):
"""'H25', 'D25', 'h25' 같은 이름에서 호칭 번호(25)를 꺼냅니다."""
text = str(name).strip().upper()
if len(text) < 2 or text[0] not in ("H", "D") or not text[1:].isdigit():
raise ValueError("알 수 없는 철근 이름입니다: %r" % (name,))
return int(text[1:])
def nominal_diameter(name):
"""철근 이름(예: 'H25')의 공칭 직경을 mm로 돌려줍니다."""
number = bar_number(name)
if number not in NOMINAL_DIAMETER:
raise ValueError("지원하지 않는 철근 규격입니다: %r" % (name,))
return NOMINAL_DIAMETER[number]
def bend_radius(name, is_stirrup=False):
"""프로젝트 적용 구부림 최소 내면 반지름(mm).
D10~D25: 3db, D29~D35: 4db, D38 이상: 5db.
스터럽/띠철근이고 D16 이하이면 2db.
"""
number = bar_number(name)
db = nominal_diameter(name)
if is_stirrup and number <= 16:
return 2.0 * db
if number <= 25:
return 3.0 * db
if number <= 35:
return 4.0 * db
return 5.0 * db
def kds_min_inner_diameter(name):
"""KDS 24 14 21 표 4.5-1 최소 내면 지름(mm). D16 이하 2db, D19 이상 3.5db."""
number = bar_number(name)
db = nominal_diameter(name)
if number <= 16:
return 2.0 * db
return 3.5 * db
def satisfies_kds_bend(name, radius):
"""내면 반지름(mm)이 KDS 최소 내면 지름을 만족하는지 확인합니다."""
return 2.0 * radius >= kds_min_inner_diameter(name)
def hook_extension(name, angle):
"""프로젝트 적용 갈고리 뒤 연장 길이(mm). angle은 90, 135, 180 중 하나."""
if angle not in HOOK_EXTENSION_FACTOR:
raise ValueError("지원하지 않는 갈고리 각도입니다: %r" % (angle,))
length = HOOK_EXTENSION_FACTOR[angle] * nominal_diameter(name)
if angle == 180:
length = max(length, HOOK_180_MIN_EXTENSION)
return length
def kds_min_hook_extension(name, angle):
"""KDS 24 14 21 갈고리 연장 길이 최소값(mm). 90~150도는 5db."""
if not 90 <= angle <= 150:
raise ValueError("KDS 5db 규정은 90~150도에만 적용됩니다: %r" % (angle,))
return KDS_HOOK_MIN_FACTOR * nominal_diameter(name)