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:
commit
964a841de1
3978 files changed
+58013356
No files matched your search
@@ -0,0 +1,90 @@
|
||||
"""철근 구부림 반지름과 갈고리 길이 계산 모듈.
|
||||
|
||||
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)
|
||||
Reference in new issue
Block a user